Annotation of sys/arch/alpha/include/profile.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: profile.h,v 1.5 1997/01/24 19:57:17 niklas Exp $ */
! 2: /* $NetBSD: profile.h,v 1.7 1996/11/13 22:21:01 cgd Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
! 6: * All rights reserved.
! 7: *
! 8: * Author: Chris G. Demetriou
! 9: *
! 10: * Permission to use, copy, modify and distribute this software and
! 11: * its documentation is hereby granted, provided that both the copyright
! 12: * notice and this permission notice appear in all copies of the
! 13: * software, derivative works or modified versions, and any portions
! 14: * thereof, and that both notices appear in supporting documentation.
! 15: *
! 16: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
! 17: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
! 18: * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
! 19: *
! 20: * Carnegie Mellon requests users of this software to return to
! 21: *
! 22: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
! 23: * School of Computer Science
! 24: * Carnegie Mellon University
! 25: * Pittsburgh PA 15213-3890
! 26: *
! 27: * any improvements or extensions that they make and grant Carnegie the
! 28: * rights to redistribute these changes.
! 29: */
! 30:
! 31: #define _MCOUNT_DECL void mcount
! 32:
! 33: #if 0
! 34: /*
! 35: * XXX The definition of MCOUNT below is really the following code, run
! 36: * XXX through cpp, since the inline assembly isn't preprocessed.
! 37: */
! 38: #define OFFSET_AT 0
! 39: #define OFFSET_V0 8
! 40: #define OFFSET_T0 16
! 41: #define OFFSET_T1 24
! 42: #define OFFSET_T2 32
! 43: #define OFFSET_T3 40
! 44: #define OFFSET_T4 48
! 45: #define OFFSET_T5 56
! 46: #define OFFSET_T6 64
! 47: #define OFFSET_T7 72
! 48: #define OFFSET_S6 80
! 49: #define OFFSET_A0 88
! 50: #define OFFSET_A1 96
! 51: #define OFFSET_A2 104
! 52: #define OFFSET_A3 112
! 53: #define OFFSET_A4 120
! 54: #define OFFSET_A5 128
! 55: #define OFFSET_T8 136
! 56: #define OFFSET_T9 144
! 57: #define OFFSET_T10 152
! 58: #define OFFSET_T11 160
! 59: #define OFFSET_RA 168
! 60: #define OFFSET_T12 176
! 61: #define OFFSET_GP 184
! 62: #define FRAME_SIZE 192
! 63:
! 64: LEAF(_mcount,0) /* XXX */
! 65: .set noat
! 66: .set noreorder
! 67:
! 68: lda sp, -FRAME_SIZE(sp)
! 69:
! 70: stq at_reg, OFFSET_AT(sp)
! 71: stq v0, OFFSET_V0(sp)
! 72: stq t0, OFFSET_T0(sp)
! 73: stq t1, OFFSET_T1(sp)
! 74: stq t2, OFFSET_T2(sp)
! 75: stq t3, OFFSET_T3(sp)
! 76: stq t4, OFFSET_T4(sp)
! 77: stq t5, OFFSET_T5(sp)
! 78: stq t6, OFFSET_T6(sp)
! 79: stq t7, OFFSET_T7(sp)
! 80: stq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */
! 81: stq a0, OFFSET_A0(sp)
! 82: stq a1, OFFSET_A1(sp)
! 83: stq a2, OFFSET_A2(sp)
! 84: stq a3, OFFSET_A3(sp)
! 85: stq a4, OFFSET_A4(sp)
! 86: stq a5, OFFSET_A5(sp)
! 87: stq t8, OFFSET_T8(sp)
! 88: stq t9, OFFSET_T9(sp)
! 89: stq t10, OFFSET_T10(sp)
! 90: stq t11, OFFSET_T11(sp)
! 91: stq ra, OFFSET_RA(sp)
! 92: stq t12, OFFSET_T12(sp)
! 93: stq gp, OFFSET_GP(sp)
! 94:
! 95: br pv, LX99
! 96: LX99: SETGP(pv)
! 97: mov ra, a0
! 98: mov at_reg, a1
! 99: CALL(mcount)
! 100:
! 101: ldq v0, OFFSET_V0(sp)
! 102: ldq t0, OFFSET_T0(sp)
! 103: ldq t1, OFFSET_T1(sp)
! 104: ldq t2, OFFSET_T2(sp)
! 105: ldq t3, OFFSET_T3(sp)
! 106: ldq t4, OFFSET_T4(sp)
! 107: ldq t5, OFFSET_T5(sp)
! 108: ldq t6, OFFSET_T6(sp)
! 109: ldq t7, OFFSET_T7(sp)
! 110: ldq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */
! 111: ldq a0, OFFSET_A0(sp)
! 112: ldq a1, OFFSET_A1(sp)
! 113: ldq a2, OFFSET_A2(sp)
! 114: ldq a3, OFFSET_A3(sp)
! 115: ldq a4, OFFSET_A4(sp)
! 116: ldq a5, OFFSET_A5(sp)
! 117: ldq t8, OFFSET_T8(sp)
! 118: ldq t9, OFFSET_T9(sp)
! 119: ldq t10, OFFSET_T10(sp)
! 120: ldq t11, OFFSET_T11(sp)
! 121: ldq ra, OFFSET_RA(sp)
! 122: stq t12, OFFSET_T12(sp)
! 123: ldq gp, OFFSET_GP(sp)
! 124:
! 125: ldq at_reg, OFFSET_AT(sp)
! 126:
! 127: lda sp, FRAME_SIZE(sp)
! 128: ret zero, (at_reg), 1
! 129:
! 130: END(_mcount)
! 131: #endif /* 0 */
! 132:
! 133: #define MCOUNT asm(" \
! 134: .globl _mcount; \
! 135: .ent _mcount 0; \
! 136: _mcount:; \
! 137: .frame $30,0,$26; \
! 138: .set noat; \
! 139: .set noreorder; \
! 140: \
! 141: lda $30, -192($30); \
! 142: \
! 143: stq $28, 0($30); \
! 144: stq $0, 8($30); \
! 145: stq $1, 16($30); \
! 146: stq $2, 24($30); \
! 147: stq $3, 32($30); \
! 148: stq $4, 40($30); \
! 149: stq $5, 48($30); \
! 150: stq $6, 56($30); \
! 151: stq $7, 64($30); \
! 152: stq $8, 72($30); \
! 153: stq $15, 80($30); \
! 154: stq $16, 88($30); \
! 155: stq $17, 96($30); \
! 156: stq $18, 104($30); \
! 157: stq $19, 112($30); \
! 158: stq $20, 120($30); \
! 159: stq $21, 128($30); \
! 160: stq $22, 136($30); \
! 161: stq $23, 144($30); \
! 162: stq $24, 152($30); \
! 163: stq $25, 160($30); \
! 164: stq $26, 168($30); \
! 165: stq $27, 176($30); \
! 166: stq $29, 184($30); \
! 167: \
! 168: br $27, LX98; \
! 169: LX98: ldgp $29,0($27); \
! 170: mov $26, $16; \
! 171: mov $28, $17; \
! 172: jsr $26,mcount; \
! 173: ldgp $29,0($26); \
! 174: \
! 175: ldq $0, 8($30); \
! 176: ldq $1, 16($30); \
! 177: ldq $2, 24($30); \
! 178: ldq $3, 32($30); \
! 179: ldq $4, 40($30); \
! 180: ldq $5, 48($30); \
! 181: ldq $6, 56($30); \
! 182: ldq $7, 64($30); \
! 183: ldq $8, 72($30); \
! 184: ldq $15, 80($30); \
! 185: ldq $16, 88($30); \
! 186: ldq $17, 96($30); \
! 187: ldq $18, 104($30); \
! 188: ldq $19, 112($30); \
! 189: ldq $20, 120($30); \
! 190: ldq $21, 128($30); \
! 191: ldq $22, 136($30); \
! 192: ldq $23, 144($30); \
! 193: ldq $24, 152($30); \
! 194: ldq $25, 160($30); \
! 195: ldq $25, 160($30); \
! 196: ldq $26, 168($30); \
! 197: ldq $27, 176($30); \
! 198: ldq $29, 184($30); \
! 199: \
! 200: lda $30, 192($30); \
! 201: ret $31, ($28), 1; \
! 202: \
! 203: .end _mcount");
! 204:
! 205: #ifdef _KERNEL
! 206: /*
! 207: * The following two macros do splhigh and splx respectively.
! 208: * _alpha_pal_swpipl is a special version of alpha_pal_swpipl which
! 209: * doesn't include profiling support.
! 210: *
! 211: * XXX These macros should probably use inline assembly.
! 212: */
! 213: #define MCOUNT_ENTER \
! 214: s = _alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH)
! 215: #define MCOUNT_EXIT \
! 216: (void)_alpha_pal_swpipl(s);
! 217: #endif
CVSweb