asm.h revision 1.20 1 /* $NetBSD: asm.h,v 1.20 2025/01/06 10:46:43 martin Exp $ */
2
3 /* $OpenBSD: asm.h,v 1.12 2001/03/29 02:15:57 mickey Exp $ */
4
5 /*
6 * Copyright (c) 1990,1991,1994 The University of Utah and
7 * the Computer Systems Laboratory (CSL). All rights reserved.
8 *
9 * Permission to use, copy, modify and distribute this software is hereby
10 * granted provided that (1) source code retains these copyright, permission,
11 * and disclaimer notices, and (2) redistributions including binaries
12 * reproduce the notices in supporting documentation, and (3) all advertising
13 * materials mentioning features or use of this software display the following
14 * acknowledgement: ``This product includes software developed by the
15 * Computer Systems Laboratory at the University of Utah.''
16 *
17 * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
18 * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
19 * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
20 *
21 * CSL requests users of this software to return to csl-dist (at) cs.utah.edu any
22 * improvements that they make and grant CSL redistribution rights.
23 *
24 * Utah $Hdr: asm.h 1.8 94/12/14$
25 */
26
27 #ifndef _HPPA_ASM_H_
28 #define _HPPA_ASM_H_
29
30 #include <machine/frame.h>
31 /*
32 * hppa assembler definitions
33 */
34
35 #ifdef __STDC__
36 #define __CONCAT(a,b) a ## b
37 #else
38 #define __CONCAT(a,b) a/**/b
39 #endif
40
41 #define _C_LABEL(x) x
42
43 #define _ASM_LS_CHAR !
44
45 #define _ENTRY(x) \
46 ! .text ! .align 4 !\
47 .export x, entry ! .label x ! .proc
48
49 #define LEAF_ENTRY_NOPROFILE(x) !\
50 _ENTRY(x) !\
51 .callinfo frame=0, no_calls, save_rp !\
52 .entry
53
54 #define ENTRY_NOPROFILE(x,n) !\
55 _ENTRY(x) !\
56 .callinfo frame=n, calls, save_rp, save_sp !\
57 .entry
58
59 #ifdef GPROF
60
61 #define _PROF_PROLOGUE !\
62 1: !\
63 stw %rp, HPPA_FRAME_CRP(%sp) !\
64 stw %arg0, HPPA_FRAME_ARG(0)(%sp) !\
65 stw %arg1, HPPA_FRAME_ARG(1)(%sp) !\
66 stw %arg2, HPPA_FRAME_ARG(2)(%sp) !\
67 stw %arg3, HPPA_FRAME_ARG(3)(%sp) !\
68 ldo HPPA_FRAME_SIZE(%sp), %sp !\
69 copy %rp, %arg0 !\
70 bl 2f, %arg1 !\
71 depi 0, 31, 2, %arg1 !\
72 2: !\
73 bl _mcount, %rp !\
74 ldo 1b - 2b(%arg1), %arg1 !\
75 ldo -HPPA_FRAME_SIZE(%sp), %sp !\
76 ldw HPPA_FRAME_ARG(3)(%sp), %arg3 !\
77 ldw HPPA_FRAME_ARG(2)(%sp), %arg2 !\
78 ldw HPPA_FRAME_ARG(1)(%sp), %arg1 !\
79 ldw HPPA_FRAME_ARG(0)(%sp), %arg0 !\
80 ldw HPPA_FRAME_CRP(%sp), %rp !\
81
82 #define LEAF_ENTRY(x) !\
83 ENTRY_NOPROFILE(x,HPPA_FRAME_SIZE) !\
84 _PROF_PROLOGUE
85
86 #else /* GPROF */
87
88 #define _PROF_PROLOGUE
89
90 #define LEAF_ENTRY(x) !\
91 LEAF_ENTRY_NOPROFILE(x)
92
93 #endif /* GPROF */
94
95 #define ENTRY(x,n) !\
96 ENTRY_NOPROFILE(x,n) !\
97 _PROF_PROLOGUE
98
99 #define ALTENTRY(x) ! .export x, entry ! .label x
100 #define EXIT(x) ! .exit ! .procend ! .size x, .-x
101
102 #ifdef _NETBSD_REVISIONID
103 #define RCSID(x) .pushsection ".ident","MS",@progbits,1; \
104 .asciz x; \
105 .ascii "$"; .ascii "NetBSD: "; .ascii __FILE__; \
106 .ascii " "; .ascii _NETBSD_REVISIONID; \
107 .asciz " $"; \
108 .popsection
109 #else
110 #define RCSID(x) .pushsection ".ident","MS",@progbits,1; \
111 .asciz x; \
112 .popsection
113 #endif
114
115 #define WEAK_ALIAS(alias,sym) \
116 .weak alias ! \
117 alias = sym
118
119 /*
120 * STRONG_ALIAS: create a strong alias.
121 */
122 #define STRONG_ALIAS(alias,sym) \
123 .globl alias ! \
124 alias = sym
125
126 #define CALL(func,tmp) !\
127 ldil L%func, tmp !\
128 ldo R%func(tmp), tmp !\
129 .call !\
130 blr %r0, %rp !\
131 bv,n %r0(tmp) !\
132 nop
133
134 #ifdef __PIC__
135 #define PIC_CALL(func) !\
136 addil LT%func, %r19 !\
137 ldw RT%func(%r1), %r1 !\
138 .call !\
139 blr %r0, %rp !\
140 bv,n %r0(%r1) !\
141 nop
142 #else
143 #define PIC_CALL(func) !\
144 CALL(func,%r1)
145 #endif
146
147 #ifdef __STDC__
148 #define WARN_REFERENCES(sym,msg) \
149 .pushsection .gnu.warning. ## sym; \
150 .ascii msg; \
151 .popsection
152 #else
153 #define WARN_REFERENCES(sym,msg) \
154 .pushsection .gnu.warning./**/sym; \
155 .ascii msg; \
156 .popsection
157 #endif /* __STDC__ */
158
159 #define BSS(n,s) .comm n, s
160 #define SZREG 4
161
162 #endif /* _HPPA_ASM_H_ */
163