profile.h revision 1.7
11.7Scgd/* $NetBSD: profile.h,v 1.7 1996/11/13 22:21:01 cgd Exp $ */ 21.1Scgd 31.1Scgd/* 41.7Scgd * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. 51.1Scgd * All rights reserved. 61.1Scgd * 71.1Scgd * Author: Chris G. Demetriou 81.1Scgd * 91.1Scgd * Permission to use, copy, modify and distribute this software and 101.1Scgd * its documentation is hereby granted, provided that both the copyright 111.1Scgd * notice and this permission notice appear in all copies of the 121.1Scgd * software, derivative works or modified versions, and any portions 131.1Scgd * thereof, and that both notices appear in supporting documentation. 141.1Scgd * 151.1Scgd * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 161.1Scgd * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 171.1Scgd * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 181.1Scgd * 191.1Scgd * Carnegie Mellon requests users of this software to return to 201.1Scgd * 211.1Scgd * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 221.1Scgd * School of Computer Science 231.1Scgd * Carnegie Mellon University 241.1Scgd * Pittsburgh PA 15213-3890 251.1Scgd * 261.1Scgd * any improvements or extensions that they make and grant Carnegie the 271.1Scgd * rights to redistribute these changes. 281.1Scgd */ 291.1Scgd 301.3Scgd#define _MCOUNT_DECL void mcount 311.1Scgd 321.3Scgd#if 0 331.3Scgd/* 341.3Scgd * XXX The definition of MCOUNT below is really the following code, run 351.3Scgd * XXX through cpp, since the inline assembly isn't preprocessed. 361.3Scgd */ 371.3Scgd#define OFFSET_AT 0 381.3Scgd#define OFFSET_V0 8 391.3Scgd#define OFFSET_T0 16 401.3Scgd#define OFFSET_T1 24 411.3Scgd#define OFFSET_T2 32 421.3Scgd#define OFFSET_T3 40 431.3Scgd#define OFFSET_T4 48 441.3Scgd#define OFFSET_T5 56 451.3Scgd#define OFFSET_T6 64 461.3Scgd#define OFFSET_T7 72 471.3Scgd#define OFFSET_S6 80 481.3Scgd#define OFFSET_A0 88 491.3Scgd#define OFFSET_A1 96 501.3Scgd#define OFFSET_A2 104 511.3Scgd#define OFFSET_A3 112 521.3Scgd#define OFFSET_A4 120 531.3Scgd#define OFFSET_A5 128 541.3Scgd#define OFFSET_T8 136 551.3Scgd#define OFFSET_T9 144 561.3Scgd#define OFFSET_T10 152 571.3Scgd#define OFFSET_T11 160 581.3Scgd#define OFFSET_RA 168 591.3Scgd#define OFFSET_T12 176 601.3Scgd#define OFFSET_GP 184 611.3Scgd#define FRAME_SIZE 192 621.3Scgd 631.3ScgdLEAF(_mcount,0) /* XXX */ 641.3Scgd .set noat 651.3Scgd .set noreorder 661.3Scgd 671.3Scgd lda sp, -FRAME_SIZE(sp) 681.3Scgd 691.3Scgd stq at_reg, OFFSET_AT(sp) 701.3Scgd stq v0, OFFSET_V0(sp) 711.3Scgd stq t0, OFFSET_T0(sp) 721.3Scgd stq t1, OFFSET_T1(sp) 731.3Scgd stq t2, OFFSET_T2(sp) 741.3Scgd stq t3, OFFSET_T3(sp) 751.3Scgd stq t4, OFFSET_T4(sp) 761.3Scgd stq t5, OFFSET_T5(sp) 771.3Scgd stq t6, OFFSET_T6(sp) 781.3Scgd stq t7, OFFSET_T7(sp) 791.3Scgd stq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */ 801.3Scgd stq a0, OFFSET_A0(sp) 811.3Scgd stq a1, OFFSET_A1(sp) 821.3Scgd stq a2, OFFSET_A2(sp) 831.3Scgd stq a3, OFFSET_A3(sp) 841.3Scgd stq a4, OFFSET_A4(sp) 851.3Scgd stq a5, OFFSET_A5(sp) 861.3Scgd stq t8, OFFSET_T8(sp) 871.3Scgd stq t9, OFFSET_T9(sp) 881.3Scgd stq t10, OFFSET_T10(sp) 891.3Scgd stq t11, OFFSET_T11(sp) 901.3Scgd stq ra, OFFSET_RA(sp) 911.3Scgd stq t12, OFFSET_T12(sp) 921.3Scgd stq gp, OFFSET_GP(sp) 931.3Scgd 941.6Scgd br pv, LX99 951.6ScgdLX99: SETGP(pv) 961.3Scgd mov ra, a0 971.3Scgd mov at_reg, a1 981.3Scgd CALL(mcount) 991.3Scgd 1001.3Scgd ldq v0, OFFSET_V0(sp) 1011.3Scgd ldq t0, OFFSET_T0(sp) 1021.3Scgd ldq t1, OFFSET_T1(sp) 1031.3Scgd ldq t2, OFFSET_T2(sp) 1041.3Scgd ldq t3, OFFSET_T3(sp) 1051.3Scgd ldq t4, OFFSET_T4(sp) 1061.3Scgd ldq t5, OFFSET_T5(sp) 1071.3Scgd ldq t6, OFFSET_T6(sp) 1081.3Scgd ldq t7, OFFSET_T7(sp) 1091.3Scgd ldq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */ 1101.3Scgd ldq a0, OFFSET_A0(sp) 1111.3Scgd ldq a1, OFFSET_A1(sp) 1121.3Scgd ldq a2, OFFSET_A2(sp) 1131.3Scgd ldq a3, OFFSET_A3(sp) 1141.3Scgd ldq a4, OFFSET_A4(sp) 1151.3Scgd ldq a5, OFFSET_A5(sp) 1161.3Scgd ldq t8, OFFSET_T8(sp) 1171.3Scgd ldq t9, OFFSET_T9(sp) 1181.3Scgd ldq t10, OFFSET_T10(sp) 1191.3Scgd ldq t11, OFFSET_T11(sp) 1201.6Scgd ldq ra, OFFSET_RA(sp) 1211.6Scgd stq t12, OFFSET_T12(sp) 1221.3Scgd ldq gp, OFFSET_GP(sp) 1231.3Scgd 1241.3Scgd ldq at_reg, OFFSET_AT(sp) 1251.3Scgd 1261.3Scgd lda sp, FRAME_SIZE(sp) 1271.3Scgd ret zero, (at_reg), 1 1281.3Scgd 1291.3Scgd END(_mcount) 1301.3Scgd#endif /* 0 */ 1311.3Scgd 1321.3Scgd#define MCOUNT asm(" \ 1331.3Scgd .globl _mcount; \ 1341.3Scgd .ent _mcount 0; \ 1351.3Scgd_mcount:; \ 1361.3Scgd .frame $30,0,$26; \ 1371.3Scgd .set noat; \ 1381.3Scgd .set noreorder; \ 1391.3Scgd \ 1401.3Scgd lda $30, -192($30); \ 1411.3Scgd \ 1421.3Scgd stq $28, 0($30); \ 1431.3Scgd stq $0, 8($30); \ 1441.3Scgd stq $1, 16($30); \ 1451.3Scgd stq $2, 24($30); \ 1461.3Scgd stq $3, 32($30); \ 1471.3Scgd stq $4, 40($30); \ 1481.3Scgd stq $5, 48($30); \ 1491.3Scgd stq $6, 56($30); \ 1501.3Scgd stq $7, 64($30); \ 1511.3Scgd stq $8, 72($30); \ 1521.3Scgd stq $15, 80($30); \ 1531.3Scgd stq $16, 88($30); \ 1541.3Scgd stq $17, 96($30); \ 1551.3Scgd stq $18, 104($30); \ 1561.3Scgd stq $19, 112($30); \ 1571.3Scgd stq $20, 120($30); \ 1581.3Scgd stq $21, 128($30); \ 1591.3Scgd stq $22, 136($30); \ 1601.3Scgd stq $23, 144($30); \ 1611.3Scgd stq $24, 152($30); \ 1621.3Scgd stq $25, 160($30); \ 1631.3Scgd stq $26, 168($30); \ 1641.3Scgd stq $27, 176($30); \ 1651.3Scgd stq $29, 184($30); \ 1661.3Scgd \ 1671.6Scgd br $27, LX98; \ 1681.6ScgdLX98: ldgp $29,0($27); \ 1691.3Scgd mov $26, $16; \ 1701.3Scgd mov $28, $17; \ 1711.3Scgd jsr $26,mcount; \ 1721.3Scgd ldgp $29,0($26); \ 1731.3Scgd \ 1741.3Scgd ldq $0, 8($30); \ 1751.3Scgd ldq $1, 16($30); \ 1761.3Scgd ldq $2, 24($30); \ 1771.3Scgd ldq $3, 32($30); \ 1781.3Scgd ldq $4, 40($30); \ 1791.3Scgd ldq $5, 48($30); \ 1801.3Scgd ldq $6, 56($30); \ 1811.3Scgd ldq $7, 64($30); \ 1821.3Scgd ldq $8, 72($30); \ 1831.3Scgd ldq $15, 80($30); \ 1841.3Scgd ldq $16, 88($30); \ 1851.3Scgd ldq $17, 96($30); \ 1861.3Scgd ldq $18, 104($30); \ 1871.3Scgd ldq $19, 112($30); \ 1881.3Scgd ldq $20, 120($30); \ 1891.3Scgd ldq $21, 128($30); \ 1901.3Scgd ldq $22, 136($30); \ 1911.3Scgd ldq $23, 144($30); \ 1921.3Scgd ldq $24, 152($30); \ 1931.3Scgd ldq $25, 160($30); \ 1941.6Scgd ldq $25, 160($30); \ 1951.6Scgd ldq $26, 168($30); \ 1961.6Scgd ldq $27, 176($30); \ 1971.3Scgd ldq $29, 184($30); \ 1981.3Scgd \ 1991.3Scgd lda $30, 192($30); \ 2001.3Scgd ret $31, ($28), 1; \ 2011.3Scgd \ 2021.3Scgd .end _mcount"); 2031.1Scgd 2041.2Sjtc#ifdef _KERNEL 2051.3Scgd/* 2061.3Scgd * The following two macros do splhigh and splx respectively. 2071.4Scgd * _alpha_pal_swpipl is a special version of alpha_pal_swpipl which 2081.3Scgd * doesn't include profiling support. 2091.3Scgd * 2101.3Scgd * XXX These macros should probably use inline assembly. 2111.3Scgd */ 2121.3Scgd#define MCOUNT_ENTER \ 2131.5Scgd s = _alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH) 2141.3Scgd#define MCOUNT_EXIT \ 2151.4Scgd (void)_alpha_pal_swpipl(s); 2161.1Scgd#endif 217