profile.h revision 129444
1221337Sdim/* $FreeBSD: head/sys/ia64/include/profile.h 129444 2004-05-19 15:41:26Z bde $ */ 2221337Sdim/* From: NetBSD: profile.h,v 1.9 1997/04/06 08:47:37 cgd Exp */ 3221337Sdim 4221337Sdim/* 5221337Sdim * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University. 6221337Sdim * All rights reserved. 7221337Sdim * 8221337Sdim * Author: Chris G. Demetriou 9221337Sdim * 10221337Sdim * Permission to use, copy, modify and distribute this software and 11221337Sdim * its documentation is hereby granted, provided that both the copyright 12221337Sdim * notice and this permission notice appear in all copies of the 13221337Sdim * software, derivative works or modified versions, and any portions 14249423Sdim * thereof, and that both notices appear in supporting documentation. 15249423Sdim * 16221337Sdim * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 17221337Sdim * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 18243830Sdim * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 19263508Sdim * 20221337Sdim * Carnegie Mellon requests users of this software to return to 21221337Sdim * 22221337Sdim * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 23221337Sdim * School of Computer Science 24221337Sdim * Carnegie Mellon University 25243830Sdim * Pittsburgh PA 15213-3890 26221337Sdim * 27221337Sdim * any improvements or extensions that they make and grant Carnegie the 28243830Sdim * rights to redistribute these changes. 29243830Sdim */ 30221337Sdim 31221337Sdim#define _MCOUNT_DECL void mcount 32221337Sdim 33221337Sdim#define FUNCTION_ALIGNMENT 32 34224145Sdim 35234353Sdimtypedef u_long fptrdiff_t; 36234353Sdim 37234353Sdim#define MCOUNT __asm (" \n\ 38234353Sdim .globl _mcount \n\ 39221337Sdim .proc _mcount \n\ 40243830Sdim_mcount: \n\ 41221337Sdim alloc loc0=ar.pfs,8,7,2,0 // space to save r8-r11,rp,b7 \n\ 42221337Sdim add sp=-8*16,sp // space to save f8-f15 \n\ 43249423Sdim mov loc1=rp // caller's return address \n\ 44249423Sdim mov loc2=b7 // our return back to caller \n\ 45249423Sdim ;; \n\ 46249423Sdim add r17=16,sp // leave 16 bytes for mcount \n\ 47243830Sdim add r18=32,sp \n\ 48239462Sdim ;; \n\ 49239462Sdim mov loc3=r8 // structure return address \n\ 50239462Sdim mov loc4=r9 // language specific \n\ 51239462Sdim mov loc5=r10 // language specific \n\ 52221337Sdim mov loc6=r11 // language specific \n\ 53239462Sdim ;; \n\ 54243830Sdim stf.spill [r17]=f8,32 // save float arguments \n\ 55243830Sdim stf.spill [r18]=f9,32 \n\ 56243830Sdim mov out0=rp // frompc \n\ 57243830Sdim ;; \n\ 58239462Sdim stf.spill [r17]=f10,32 \n\ 59221337Sdim stf.spill [r18]=f11,32 \n\ 60234353Sdim mov out1=b7 // selfpc \n\ 61249423Sdim ;; \n\ 62234353Sdim stf.spill [r17]=f12,32 \n\ 63234353Sdim stf.spill [r18]=f13,32 \n\ 64234353Sdim ;; \n\ 65243830Sdim stf.spill [r17]=f14,32 \n\ 66234353Sdim stf.spill [r18]=f15,32 \n\ 67263508Sdim ;; \n\ 68263508Sdim br.call.sptk.many rp=mcount \n\ 69263508Sdim ;; \n\ 70263508Sdim add r17=16,sp \n\ 71263508Sdim add r18=32,sp \n\ 72263508Sdim ;; \n\ 73263508Sdim ldf.fill f8=[r17],32 \n\ 74263508Sdim ldf.fill f9=[r18],32 \n\ 75263508Sdim mov r8=loc3 // restore structure pointer \n\ 76221337Sdim ;; \n\ 77221337Sdim ldf.fill f10=[r17],32 // restore float arguments \n\ 78221337Sdim ldf.fill f11=[r18],32 \n\ 79221337Sdim mov r9=loc4 \n\ 80221337Sdim ;; \n\ 81221337Sdim ldf.fill f12=[r17],32 // etc. \n\ 82 ldf.fill f13=[r18],32 \n\ 83 mov r10=loc5 \n\ 84 ;; \n\ 85 ldf.fill f14=[r17],32 \n\ 86 ldf.fill f15=[r18],32 \n\ 87 mov r11=loc6 \n\ 88 ;; \n\ 89 mov b7=loc2 // clean up \n\ 90 mov rp=loc1 \n\ 91 mov ar.pfs=loc0 \n\ 92 ;; \n\ 93 alloc r14=ar.pfs,0,0,8,0 // drop our register frame \n\ 94 br.sptk.many b7 // back to caller \n\ 95 \n\ 96 .end _mcount"); 97 98#ifdef _KERNEL 99/* 100 * The following two macros do splhigh and splx respectively. 101 */ 102#define MCOUNT_ENTER(s) \n\ 103 _c = intr_disable() 104#define MCOUNT_EXIT(s) \n\ 105 intr_restore(_c) 106#define MCOUNT_DECL(s) register_t c; 107#else /* !_KERNEL */ 108typedef u_long uintfptr_t; 109#endif 110