1*3a630e3fSniklas /* $OpenBSD: profile.h,v 1.5 1997/01/24 19:57:17 niklas Exp $ */ 2*3a630e3fSniklas /* $NetBSD: profile.h,v 1.7 1996/11/13 22:21:01 cgd Exp $ */ 3df930be7Sderaadt 4df930be7Sderaadt /* 5*3a630e3fSniklas * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. 6df930be7Sderaadt * All rights reserved. 7df930be7Sderaadt * 8df930be7Sderaadt * Author: Chris G. Demetriou 9df930be7Sderaadt * 10df930be7Sderaadt * Permission to use, copy, modify and distribute this software and 11df930be7Sderaadt * its documentation is hereby granted, provided that both the copyright 12df930be7Sderaadt * notice and this permission notice appear in all copies of the 13df930be7Sderaadt * software, derivative works or modified versions, and any portions 14df930be7Sderaadt * thereof, and that both notices appear in supporting documentation. 15df930be7Sderaadt * 16df930be7Sderaadt * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 17df930be7Sderaadt * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 18df930be7Sderaadt * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 19df930be7Sderaadt * 20df930be7Sderaadt * Carnegie Mellon requests users of this software to return to 21df930be7Sderaadt * 22df930be7Sderaadt * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 23df930be7Sderaadt * School of Computer Science 24df930be7Sderaadt * Carnegie Mellon University 25df930be7Sderaadt * Pittsburgh PA 15213-3890 26df930be7Sderaadt * 27df930be7Sderaadt * any improvements or extensions that they make and grant Carnegie the 28df930be7Sderaadt * rights to redistribute these changes. 29df930be7Sderaadt */ 30df930be7Sderaadt 3134fbf6deSderaadt #define _MCOUNT_DECL void mcount 32df930be7Sderaadt 3334fbf6deSderaadt #if 0 3434fbf6deSderaadt /* 3534fbf6deSderaadt * XXX The definition of MCOUNT below is really the following code, run 3634fbf6deSderaadt * XXX through cpp, since the inline assembly isn't preprocessed. 3734fbf6deSderaadt */ 3834fbf6deSderaadt #define OFFSET_AT 0 3934fbf6deSderaadt #define OFFSET_V0 8 4034fbf6deSderaadt #define OFFSET_T0 16 4134fbf6deSderaadt #define OFFSET_T1 24 4234fbf6deSderaadt #define OFFSET_T2 32 4334fbf6deSderaadt #define OFFSET_T3 40 4434fbf6deSderaadt #define OFFSET_T4 48 4534fbf6deSderaadt #define OFFSET_T5 56 4634fbf6deSderaadt #define OFFSET_T6 64 4734fbf6deSderaadt #define OFFSET_T7 72 4834fbf6deSderaadt #define OFFSET_S6 80 4934fbf6deSderaadt #define OFFSET_A0 88 5034fbf6deSderaadt #define OFFSET_A1 96 5134fbf6deSderaadt #define OFFSET_A2 104 5234fbf6deSderaadt #define OFFSET_A3 112 5334fbf6deSderaadt #define OFFSET_A4 120 5434fbf6deSderaadt #define OFFSET_A5 128 5534fbf6deSderaadt #define OFFSET_T8 136 5634fbf6deSderaadt #define OFFSET_T9 144 5734fbf6deSderaadt #define OFFSET_T10 152 5834fbf6deSderaadt #define OFFSET_T11 160 5934fbf6deSderaadt #define OFFSET_RA 168 6034fbf6deSderaadt #define OFFSET_T12 176 6134fbf6deSderaadt #define OFFSET_GP 184 6234fbf6deSderaadt #define FRAME_SIZE 192 6334fbf6deSderaadt 6434fbf6deSderaadt LEAF(_mcount,0) /* XXX */ 6534fbf6deSderaadt .set noat 6634fbf6deSderaadt .set noreorder 6734fbf6deSderaadt 6834fbf6deSderaadt lda sp, -FRAME_SIZE(sp) 6934fbf6deSderaadt 7034fbf6deSderaadt stq at_reg, OFFSET_AT(sp) 7134fbf6deSderaadt stq v0, OFFSET_V0(sp) 7234fbf6deSderaadt stq t0, OFFSET_T0(sp) 7334fbf6deSderaadt stq t1, OFFSET_T1(sp) 7434fbf6deSderaadt stq t2, OFFSET_T2(sp) 7534fbf6deSderaadt stq t3, OFFSET_T3(sp) 7634fbf6deSderaadt stq t4, OFFSET_T4(sp) 7734fbf6deSderaadt stq t5, OFFSET_T5(sp) 7834fbf6deSderaadt stq t6, OFFSET_T6(sp) 7934fbf6deSderaadt stq t7, OFFSET_T7(sp) 8034fbf6deSderaadt stq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */ 8134fbf6deSderaadt stq a0, OFFSET_A0(sp) 8234fbf6deSderaadt stq a1, OFFSET_A1(sp) 8334fbf6deSderaadt stq a2, OFFSET_A2(sp) 8434fbf6deSderaadt stq a3, OFFSET_A3(sp) 8534fbf6deSderaadt stq a4, OFFSET_A4(sp) 8634fbf6deSderaadt stq a5, OFFSET_A5(sp) 8734fbf6deSderaadt stq t8, OFFSET_T8(sp) 8834fbf6deSderaadt stq t9, OFFSET_T9(sp) 8934fbf6deSderaadt stq t10, OFFSET_T10(sp) 9034fbf6deSderaadt stq t11, OFFSET_T11(sp) 9134fbf6deSderaadt stq ra, OFFSET_RA(sp) 9234fbf6deSderaadt stq t12, OFFSET_T12(sp) 9334fbf6deSderaadt stq gp, OFFSET_GP(sp) 9434fbf6deSderaadt 9550ce9ee0Sniklas br pv, LX99 9650ce9ee0Sniklas LX99: SETGP(pv) 9734fbf6deSderaadt mov ra, a0 9834fbf6deSderaadt mov at_reg, a1 9934fbf6deSderaadt CALL(mcount) 10034fbf6deSderaadt 10134fbf6deSderaadt ldq v0, OFFSET_V0(sp) 10234fbf6deSderaadt ldq t0, OFFSET_T0(sp) 10334fbf6deSderaadt ldq t1, OFFSET_T1(sp) 10434fbf6deSderaadt ldq t2, OFFSET_T2(sp) 10534fbf6deSderaadt ldq t3, OFFSET_T3(sp) 10634fbf6deSderaadt ldq t4, OFFSET_T4(sp) 10734fbf6deSderaadt ldq t5, OFFSET_T5(sp) 10834fbf6deSderaadt ldq t6, OFFSET_T6(sp) 10934fbf6deSderaadt ldq t7, OFFSET_T7(sp) 11034fbf6deSderaadt ldq s6, OFFSET_S6(sp) /* XXX because run _after_ prologue. */ 11134fbf6deSderaadt ldq a0, OFFSET_A0(sp) 11234fbf6deSderaadt ldq a1, OFFSET_A1(sp) 11334fbf6deSderaadt ldq a2, OFFSET_A2(sp) 11434fbf6deSderaadt ldq a3, OFFSET_A3(sp) 11534fbf6deSderaadt ldq a4, OFFSET_A4(sp) 11634fbf6deSderaadt ldq a5, OFFSET_A5(sp) 11734fbf6deSderaadt ldq t8, OFFSET_T8(sp) 11834fbf6deSderaadt ldq t9, OFFSET_T9(sp) 11934fbf6deSderaadt ldq t10, OFFSET_T10(sp) 12034fbf6deSderaadt ldq t11, OFFSET_T11(sp) 12134fbf6deSderaadt ldq ra, OFFSET_RA(sp) 12250ce9ee0Sniklas stq t12, OFFSET_T12(sp) 12350ce9ee0Sniklas ldq gp, OFFSET_GP(sp) 12434fbf6deSderaadt 12534fbf6deSderaadt ldq at_reg, OFFSET_AT(sp) 12634fbf6deSderaadt 12734fbf6deSderaadt lda sp, FRAME_SIZE(sp) 12834fbf6deSderaadt ret zero, (at_reg), 1 12934fbf6deSderaadt 13034fbf6deSderaadt END(_mcount) 13134fbf6deSderaadt #endif /* 0 */ 13234fbf6deSderaadt 13334fbf6deSderaadt #define MCOUNT asm(" \ 13434fbf6deSderaadt .globl _mcount; \ 13534fbf6deSderaadt .ent _mcount 0; \ 13634fbf6deSderaadt _mcount:; \ 13734fbf6deSderaadt .frame $30,0,$26; \ 13834fbf6deSderaadt .set noat; \ 13934fbf6deSderaadt .set noreorder; \ 14034fbf6deSderaadt \ 14134fbf6deSderaadt lda $30, -192($30); \ 14234fbf6deSderaadt \ 14334fbf6deSderaadt stq $28, 0($30); \ 14434fbf6deSderaadt stq $0, 8($30); \ 14534fbf6deSderaadt stq $1, 16($30); \ 14634fbf6deSderaadt stq $2, 24($30); \ 14734fbf6deSderaadt stq $3, 32($30); \ 14834fbf6deSderaadt stq $4, 40($30); \ 14934fbf6deSderaadt stq $5, 48($30); \ 15034fbf6deSderaadt stq $6, 56($30); \ 15134fbf6deSderaadt stq $7, 64($30); \ 15234fbf6deSderaadt stq $8, 72($30); \ 15334fbf6deSderaadt stq $15, 80($30); \ 15434fbf6deSderaadt stq $16, 88($30); \ 15534fbf6deSderaadt stq $17, 96($30); \ 15634fbf6deSderaadt stq $18, 104($30); \ 15734fbf6deSderaadt stq $19, 112($30); \ 15834fbf6deSderaadt stq $20, 120($30); \ 15934fbf6deSderaadt stq $21, 128($30); \ 16034fbf6deSderaadt stq $22, 136($30); \ 16134fbf6deSderaadt stq $23, 144($30); \ 16234fbf6deSderaadt stq $24, 152($30); \ 16334fbf6deSderaadt stq $25, 160($30); \ 16434fbf6deSderaadt stq $26, 168($30); \ 16534fbf6deSderaadt stq $27, 176($30); \ 16634fbf6deSderaadt stq $29, 184($30); \ 16734fbf6deSderaadt \ 16850ce9ee0Sniklas br $27, LX98; \ 16950ce9ee0Sniklas LX98: ldgp $29,0($27); \ 17034fbf6deSderaadt mov $26, $16; \ 17134fbf6deSderaadt mov $28, $17; \ 17234fbf6deSderaadt jsr $26,mcount; \ 17334fbf6deSderaadt ldgp $29,0($26); \ 17434fbf6deSderaadt \ 17534fbf6deSderaadt ldq $0, 8($30); \ 17634fbf6deSderaadt ldq $1, 16($30); \ 17734fbf6deSderaadt ldq $2, 24($30); \ 17834fbf6deSderaadt ldq $3, 32($30); \ 17934fbf6deSderaadt ldq $4, 40($30); \ 18034fbf6deSderaadt ldq $5, 48($30); \ 18134fbf6deSderaadt ldq $6, 56($30); \ 18234fbf6deSderaadt ldq $7, 64($30); \ 18334fbf6deSderaadt ldq $8, 72($30); \ 18434fbf6deSderaadt ldq $15, 80($30); \ 18534fbf6deSderaadt ldq $16, 88($30); \ 18634fbf6deSderaadt ldq $17, 96($30); \ 18734fbf6deSderaadt ldq $18, 104($30); \ 18834fbf6deSderaadt ldq $19, 112($30); \ 18934fbf6deSderaadt ldq $20, 120($30); \ 19034fbf6deSderaadt ldq $21, 128($30); \ 19134fbf6deSderaadt ldq $22, 136($30); \ 19234fbf6deSderaadt ldq $23, 144($30); \ 19334fbf6deSderaadt ldq $24, 152($30); \ 19434fbf6deSderaadt ldq $25, 160($30); \ 19550ce9ee0Sniklas ldq $25, 160($30); \ 19634fbf6deSderaadt ldq $26, 168($30); \ 19750ce9ee0Sniklas ldq $27, 176($30); \ 19850ce9ee0Sniklas ldq $29, 184($30); \ 19934fbf6deSderaadt \ 20034fbf6deSderaadt lda $30, 192($30); \ 20134fbf6deSderaadt ret $31, ($28), 1; \ 20234fbf6deSderaadt \ 20334fbf6deSderaadt .end _mcount"); 204df930be7Sderaadt 205df930be7Sderaadt #ifdef _KERNEL 20634fbf6deSderaadt /* 20734fbf6deSderaadt * The following two macros do splhigh and splx respectively. 20850ce9ee0Sniklas * _alpha_pal_swpipl is a special version of alpha_pal_swpipl which 20934fbf6deSderaadt * doesn't include profiling support. 21034fbf6deSderaadt * 21134fbf6deSderaadt * XXX These macros should probably use inline assembly. 21234fbf6deSderaadt */ 21334fbf6deSderaadt #define MCOUNT_ENTER \ 21450ce9ee0Sniklas s = _alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH) 21534fbf6deSderaadt #define MCOUNT_EXIT \ 21650ce9ee0Sniklas (void)_alpha_pal_swpipl(s); 217df930be7Sderaadt #endif 218