xref: /openbsd-src/sys/arch/hppa/include/asm.h (revision f5d1667bf0e24058e36dad81d4697d95de6d4192)
1*f5d1667bSmpi /*	$OpenBSD: asm.h,v 1.19 2017/06/23 09:55:10 mpi Exp $	*/
2e55ab885Smickey 
3523f2185Smickey /*
4523f2185Smickey  * Copyright (c) 1990,1991,1994 The University of Utah and
5523f2185Smickey  * the Computer Systems Laboratory (CSL).  All rights reserved.
6523f2185Smickey  *
7523f2185Smickey  * Permission to use, copy, modify and distribute this software is hereby
8523f2185Smickey  * granted provided that (1) source code retains these copyright, permission,
9523f2185Smickey  * and disclaimer notices, and (2) redistributions including binaries
10523f2185Smickey  * reproduce the notices in supporting documentation, and (3) all advertising
11523f2185Smickey  * materials mentioning features or use of this software display the following
12523f2185Smickey  * acknowledgement: ``This product includes software developed by the
13523f2185Smickey  * Computer Systems Laboratory at the University of Utah.''
14523f2185Smickey  *
15523f2185Smickey  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
16523f2185Smickey  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
17523f2185Smickey  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
18523f2185Smickey  *
19523f2185Smickey  * CSL requests users of this software to return to csl-dist@cs.utah.edu any
20523f2185Smickey  * improvements that they make and grant CSL redistribution rights.
21523f2185Smickey  *
22523f2185Smickey  *	Utah $Hdr: asm.h 1.8 94/12/14$
23523f2185Smickey  */
24523f2185Smickey 
25cddff70fSmickey #ifndef _MACHINE_ASM_H_
26cddff70fSmickey #define _MACHINE_ASM_H_
272a1b6665Smickey 
28523f2185Smickey /*
292a1b6665Smickey  *	hppa assembler definitions
30523f2185Smickey  */
31523f2185Smickey 
32523f2185Smickey /*
33523f2185Smickey  * Hardware General Registers
34523f2185Smickey  */
35523f2185Smickey r0	.reg	%r0
36523f2185Smickey r1	.reg	%r1
37523f2185Smickey r2	.reg	%r2
38523f2185Smickey r3	.reg	%r3
39523f2185Smickey r4	.reg	%r4
40523f2185Smickey r5	.reg	%r5
41523f2185Smickey r6	.reg	%r6
42523f2185Smickey r7	.reg	%r7
43523f2185Smickey r8	.reg	%r8
44523f2185Smickey r9	.reg	%r9
45523f2185Smickey r10	.reg	%r10
46523f2185Smickey r11	.reg	%r11
47523f2185Smickey r12	.reg	%r12
48523f2185Smickey r13	.reg	%r13
49523f2185Smickey r14	.reg	%r14
50523f2185Smickey r15	.reg	%r15
51523f2185Smickey r16	.reg	%r16
52523f2185Smickey r17	.reg	%r17
53523f2185Smickey r18	.reg	%r18
54523f2185Smickey r19	.reg	%r19
55523f2185Smickey r20	.reg	%r20
56523f2185Smickey r21	.reg	%r21
57523f2185Smickey r22	.reg	%r22
58523f2185Smickey r23	.reg	%r23
59523f2185Smickey r24	.reg	%r24
60523f2185Smickey r25	.reg	%r25
61523f2185Smickey r26	.reg	%r26
62523f2185Smickey r27	.reg	%r27
63523f2185Smickey r28	.reg	%r28
64523f2185Smickey r29	.reg	%r29
65523f2185Smickey r30	.reg	%r30
66523f2185Smickey r31	.reg	%r31
67523f2185Smickey 
68523f2185Smickey /*
69523f2185Smickey  * Hardware Space Registers
70523f2185Smickey  */
71523f2185Smickey sr0	.reg	%sr0
72523f2185Smickey sr1	.reg	%sr1
73523f2185Smickey sr2	.reg	%sr2
74523f2185Smickey sr3	.reg	%sr3
75523f2185Smickey sr4	.reg	%sr4
76523f2185Smickey sr5	.reg	%sr5
77523f2185Smickey sr6	.reg	%sr6
78523f2185Smickey sr7	.reg	%sr7
79523f2185Smickey 
80523f2185Smickey /*
81523f2185Smickey  * Hardware Floating Point Registers
82523f2185Smickey  */
83523f2185Smickey fr0	.reg	%fr0
84523f2185Smickey fr1	.reg	%fr1
85523f2185Smickey fr2	.reg	%fr2
86523f2185Smickey fr3	.reg	%fr3
87523f2185Smickey fr4	.reg	%fr4
88523f2185Smickey fr5	.reg	%fr5
89523f2185Smickey fr6	.reg	%fr6
90523f2185Smickey fr7	.reg	%fr7
91523f2185Smickey fr8	.reg	%fr8
92523f2185Smickey fr9	.reg	%fr9
93523f2185Smickey fr10	.reg	%fr10
94523f2185Smickey fr11	.reg	%fr11
95523f2185Smickey fr12	.reg	%fr12
96523f2185Smickey fr13	.reg	%fr13
97523f2185Smickey fr14	.reg	%fr14
98523f2185Smickey fr15	.reg	%fr15
99523f2185Smickey fr16	.reg	%fr16
100523f2185Smickey fr17	.reg	%fr17
101523f2185Smickey fr18	.reg	%fr18
102523f2185Smickey fr19	.reg	%fr19
103523f2185Smickey fr20	.reg	%fr20
104523f2185Smickey fr21	.reg	%fr21
105523f2185Smickey fr22	.reg	%fr22
106523f2185Smickey fr23	.reg	%fr23
107523f2185Smickey fr24	.reg	%fr24
108523f2185Smickey fr25	.reg	%fr25
109523f2185Smickey fr26	.reg	%fr26
110523f2185Smickey fr27	.reg	%fr27
111523f2185Smickey fr28	.reg	%fr28
112523f2185Smickey fr29	.reg	%fr29
113523f2185Smickey fr30	.reg	%fr30
114523f2185Smickey fr31	.reg	%fr31
115523f2185Smickey 
116523f2185Smickey /*
117523f2185Smickey  * Hardware Control Registers
118523f2185Smickey  */
119523f2185Smickey cr0	.reg	%cr0
120523f2185Smickey cr8	.reg	%cr8
121523f2185Smickey cr9	.reg	%cr9
122523f2185Smickey cr10	.reg	%cr10
123523f2185Smickey cr11	.reg	%cr11
124523f2185Smickey cr12	.reg	%cr12
125523f2185Smickey cr13	.reg	%cr13
126523f2185Smickey cr14	.reg	%cr14
127523f2185Smickey cr15	.reg	%cr15
128523f2185Smickey cr16	.reg	%cr16
129523f2185Smickey cr17	.reg	%cr17
130523f2185Smickey cr18	.reg	%cr18
131523f2185Smickey cr19	.reg	%cr19
132523f2185Smickey cr20	.reg	%cr20
133523f2185Smickey cr21	.reg	%cr21
134523f2185Smickey cr22	.reg	%cr22
135523f2185Smickey cr23	.reg	%cr23
136523f2185Smickey cr24	.reg	%cr24
137523f2185Smickey cr25	.reg	%cr25
138523f2185Smickey cr26	.reg	%cr26
139523f2185Smickey cr27	.reg	%cr27
140523f2185Smickey cr28	.reg	%cr28
141523f2185Smickey cr29	.reg	%cr29
142523f2185Smickey cr30	.reg	%cr30
143523f2185Smickey cr31	.reg	%cr31
144523f2185Smickey 
145523f2185Smickey rctr	.reg	%cr0
146523f2185Smickey pidr1	.reg	%cr8
147523f2185Smickey pidr2	.reg	%cr9
148523f2185Smickey ccr	.reg	%cr10
149523f2185Smickey sar	.reg	%cr11
150523f2185Smickey pidr3	.reg	%cr12
151523f2185Smickey pidr4	.reg	%cr13
152523f2185Smickey iva	.reg	%cr14
153523f2185Smickey eiem	.reg	%cr15
154523f2185Smickey itmr	.reg	%cr16
155523f2185Smickey pcsq	.reg	%cr17
156523f2185Smickey pcoq	.reg	%cr18
157523f2185Smickey iir	.reg	%cr19
158523f2185Smickey isr	.reg	%cr20
159523f2185Smickey ior	.reg	%cr21
160523f2185Smickey ipsw	.reg	%cr22
161523f2185Smickey eirr	.reg	%cr23
162523f2185Smickey tr0	.reg	%cr24
163523f2185Smickey vtop	.reg	%cr25
164523f2185Smickey tr1	.reg	%cr25
165523f2185Smickey tr2	.reg	%cr26
166523f2185Smickey tr3	.reg	%cr27
167523f2185Smickey tr4	.reg	%cr28
168523f2185Smickey tr5	.reg	%cr29
169523f2185Smickey tr6	.reg	%cr30
170523f2185Smickey tr7	.reg	%cr31
171523f2185Smickey 
172523f2185Smickey /*
173523f2185Smickey  * Calling Convention
174523f2185Smickey  */
175523f2185Smickey rp	.reg	%r2
176523f2185Smickey arg3	.reg	%r23
177523f2185Smickey arg2	.reg	%r24
178523f2185Smickey arg1	.reg	%r25
179523f2185Smickey arg0	.reg	%r26
180523f2185Smickey dp	.reg	%r27
181523f2185Smickey ret0	.reg	%r28
182523f2185Smickey ret1	.reg	%r29
183523f2185Smickey sl	.reg	%r29
184523f2185Smickey sp	.reg	%r30
185523f2185Smickey 
186523f2185Smickey /*
187523f2185Smickey  * Temporary registers
188523f2185Smickey  */
189523f2185Smickey t1	.reg	%r22
190523f2185Smickey t2	.reg	%r21
191523f2185Smickey t3	.reg	%r20
192523f2185Smickey t4	.reg	%r19
193523f2185Smickey 
194523f2185Smickey /*
195523f2185Smickey  * Temporary space registers
196523f2185Smickey  */
197523f2185Smickey ts1	.reg	%sr2
198523f2185Smickey 
199523f2185Smickey /*
200523f2185Smickey  * Space Registers - SW Conventions
201523f2185Smickey  */
202523f2185Smickey sret	.reg	%sr1	; return value
203523f2185Smickey sarg	.reg	%sr1	; argument
204523f2185Smickey 
205523f2185Smickey /*
206523f2185Smickey  * Floating Point Registers - SW Conventions
207523f2185Smickey  */
208523f2185Smickey farg0	.reg	%fr5
209523f2185Smickey farg1	.reg	%fr6
210523f2185Smickey farg2	.reg	%fr7
211523f2185Smickey farg3	.reg	%fr8
212523f2185Smickey fret	.reg	%fr4
213523f2185Smickey 
214523f2185Smickey /*
215523f2185Smickey  * Temporary floating point registers
216523f2185Smickey  */
217523f2185Smickey tf1	.reg	%fr11
218523f2185Smickey tf2	.reg	%fr10
219523f2185Smickey tf3	.reg	%fr9
220523f2185Smickey tf4	.reg	%fr8
221523f2185Smickey 
2222a1b6665Smickey #ifdef __STDC__
2232a1b6665Smickey #define	__CONCAT(a,b)	a ## b
2242a1b6665Smickey #else
2252a1b6665Smickey #define	__CONCAT(a,b)	a/**/b
2262a1b6665Smickey #endif
2272a1b6665Smickey 
228*f5d1667bSmpi #if defined(PROF) || defined(GPROF)
2292a1b6665Smickey #define	_PROF_PROLOGUE !\
23052863597Skettenis 1:						!\
2310e6eee61Smickey 	stw	rp, HPPA_FRAME_CRP(sr0,sp)	!\
23252863597Skettenis 	stw	arg0, HPPA_FRAME_ARG(0)(sr0,sp)	!\
23352863597Skettenis 	stw	arg1, HPPA_FRAME_ARG(1)(sr0,sp)	!\
23452863597Skettenis 	stw	arg2, HPPA_FRAME_ARG(2)(sr0,sp)	!\
23552863597Skettenis 	stw	arg3, HPPA_FRAME_ARG(3)(sr0,sp)	!\
2360e6eee61Smickey 	ldo	HPPA_FRAME_SIZE(sp), sp		!\
23752863597Skettenis 	copy	rp, arg0			!\
23852863597Skettenis 	bl	2f, arg1			!\
23952863597Skettenis 	depi	0, 31, 2, arg1			!\
24052863597Skettenis 2:						!\
24152863597Skettenis 	bl	_mcount, rp			!\
24252863597Skettenis 	 ldo	1b - 2b(arg1), arg1		!\
24352863597Skettenis 	ldo	-HPPA_FRAME_SIZE(sp), sp	!\
24452863597Skettenis 	ldw	HPPA_FRAME_ARG(3)(sr0,sp), arg3	!\
24552863597Skettenis 	ldw	HPPA_FRAME_ARG(2)(sr0,sp), arg2	!\
24652863597Skettenis 	ldw	HPPA_FRAME_ARG(1)(sr0,sp), arg1	!\
24752863597Skettenis 	ldw	HPPA_FRAME_ARG(0)(sr0,sp), arg0	!\
2480e6eee61Smickey 	ldw	HPPA_FRAME_CRP(sr0,sp) ,rp
249523f2185Smickey #else
2502a1b6665Smickey #define	_PROF_PROLOGUE
2512a1b6665Smickey #endif
2522a1b6665Smickey 
2530150d9dbSmickey #define	LEAF_ENTRY(x) ! .text ! .align	4	!\
2540150d9dbSmickey 	.export	x, entry ! .label x ! .proc	!\
2550150d9dbSmickey 	.callinfo frame=0,no_calls,save_rp	!\
2560150d9dbSmickey 	.entry ! _PROF_PROLOGUE
257523f2185Smickey 
2580150d9dbSmickey #define	ENTRY(x,n) ! .text ! .align 4			!\
2590150d9dbSmickey 	.export	x, entry ! .label x ! .proc		!\
2600150d9dbSmickey 	.callinfo frame=n,calls, save_rp, save_sp	!\
2610150d9dbSmickey 	.entry ! _PROF_PROLOGUE
262523f2185Smickey 
2630150d9dbSmickey #define ALTENTRY(x) ! .export x, entry ! .label  x
26481ea1217Smickey #define EXIT(x) ! .exit ! .procend ! .size   x, .-x
265523f2185Smickey 
266940d0b17Smickey #define	BSS(n,s)	! .data ! .label n ! .comm s
267940d0b17Smickey 
2685a25e2caSmartynas #define STRONG_ALIAS(alias,sym) ! .global alias ! .set alias, sym
269eca0a8dbSguenther #define WEAK_ALIAS(alias,sym) ! .weak alias ! .set alias, sym
270eca0a8dbSguenther 
271cddff70fSmickey #endif /* _MACHINE_ASM_H_ */
272