asm.h revision 103436
1/* $FreeBSD: head/sys/ia64/include/asm.h 103436 2002-09-17 01:49:00Z peter $ */ 2/* From: NetBSD: asm.h,v 1.18 1997/11/03 04:22:06 ross Exp */ 3 4/* 5 * Copyright (c) 1991,1990,1989,1994,1995,1996 Carnegie Mellon University 6 * All Rights Reserved. 7 * 8 * Permission to use, copy, modify and distribute this software and its 9 * documentation is hereby granted, provided that both the copyright 10 * notice and this permission notice appear in all copies of the 11 * software, derivative works or modified versions, and any portions 12 * thereof, and that both notices appear in supporting documentation. 13 * 14 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 15 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 16 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 17 * 18 * Carnegie Mellon requests users of this software to return to 19 * 20 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 21 * School of Computer Science 22 * Carnegie Mellon University 23 * Pittsburgh PA 15213-3890 24 * 25 * any improvements or extensions that they make and grant Carnegie Mellon 26 * the rights to redistribute these changes. 27 */ 28 29/* 30 * Assembly coding style 31 * 32 * This file contains macros and register defines to 33 * aid in writing more readable assembly code. 34 * Some rules to make assembly code understandable by 35 * a debugger are also noted. 36 */ 37 38/* 39 * Macro to make a local label name. 40 */ 41#define LLABEL(name,num) L ## name ## num 42 43/* 44 * MCOUNT 45 */ 46 47#if !defined(GPROF) && !defined(PROF) 48#define MCOUNT /* nothing */ 49#else 50#define MCOUNT \ 51 br.call.sptk.many b7=_mcount 52#endif 53 54/* 55 * ENTRY 56 * Declare a global leaf function. 57 * A leaf function does not call other functions. 58 */ 59#define ENTRY(_name_, _n_args_) \ 60 .global _name_; \ 61 .align 16; \ 62 .proc _name_; \ 63_name_:; \ 64 .regstk _n_args_, 0, 0, 0 \ 65 MCOUNT 66 67#define ENTRY_NOPROFILE(_name_, _n_args_) \ 68 .global _name_; \ 69 .align 16; \ 70 .proc _name_; \ 71_name_:; \ 72 .regstk _n_args_, 0, 0, 0 73 74/* 75 * STATIC_ENTRY 76 * Declare a local leaf function. 77 */ 78#define STATIC_ENTRY(_name_, _n_args_) \ 79 .align 16; \ 80 .proc _name_; \ 81_name_:; \ 82 .regstk _n_args_, 0, 0, 0 \ 83 MCOUNT 84/* 85 * XENTRY 86 * Global alias for a leaf function, or alternate entry point 87 */ 88#define XENTRY(_name_) \ 89 .globl _name_; \ 90_name_: 91 92/* 93 * STATIC_XENTRY 94 * Local alias for a leaf function, or alternate entry point 95 */ 96#define STATIC_XENTRY(_name_) \ 97_name_: 98 99 100/* 101 * END 102 * Function delimiter 103 */ 104#define END(_name_) \ 105 .endp _name_ 106 107 108/* 109 * EXPORT 110 * Export a symbol 111 */ 112#define EXPORT(_name_) \ 113 .global _name_; \ 114_name_: 115 116 117/* 118 * IMPORT 119 * Make an external name visible, typecheck the size 120 */ 121#define IMPORT(_name_, _size_) \ 122 /* .extern _name_,_size_ */ 123 124 125/* 126 * ABS 127 * Define an absolute symbol 128 */ 129#define ABS(_name_, _value_) \ 130 .globl _name_; \ 131_name_ = _value_ 132 133 134/* 135 * BSS 136 * Allocate un-initialized space for a global symbol 137 */ 138#define BSS(_name_,_numbytes_) \ 139 .comm _name_,_numbytes_ 140 141 142/* 143 * MSG 144 * Allocate space for a message (a read-only ascii string) 145 */ 146#define ASCIZ .asciz 147#define MSG(msg,reg,label) \ 148 addl reg,@ltoff(label),gp;; \ 149 ld8 reg=[reg];; \ 150 .data; \ 151label: ASCIZ msg; \ 152 .text; 153 154/* 155 * System call glue. 156 */ 157#define SYSCALLNUM(name) \ 158 SYS_ ## name 159 160#define CALLSYS_NOERROR(name) \ 161 mov r15=SYSCALLNUM(name); \ 162 break 0x100000 ;; 163 164/* 165 * WEAK_ALIAS: create a weak alias (ELF only). 166 */ 167#define WEAK_ALIAS(alias,sym) \ 168 .weak alias; \ 169 alias = sym 170 171/* 172 * ID tag macros 173 */ 174#if !defined(lint) && !defined(STRIP_FBSDID) 175#define __FBSDID(s) .ident s 176#else 177#define __FBSDID(s) /* nothing */ 178#endif /* not lint and not STRIP_FBSDID */ 179