xref: /netbsd-src/sys/arch/hppa/include/asm.h (revision 27527e67bbdf8d9ec84fd58803048ed6d181ece2)
1 /*	$NetBSD: asm.h,v 1.6 2006/01/20 22:02:40 christos 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@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 /*
31  *	hppa assembler definitions
32  */
33 
34 #ifdef __STDC__
35 #define	__CONCAT(a,b)	a ## b
36 #else
37 #define	__CONCAT(a,b)	a/**/b
38 #endif
39 
40 #ifdef PROF
41 #define	_PROF_PROLOGUE !\
42 	stw %rp, HPPA_FRAME_CRP(%sr0,%sp)	!\
43 	ldil L%_mcount,%r1		!\
44 	ble R%_mcount(%sr0,%r1)		!\
45 	ldo HPPA_FRAME_SIZE(%sp),%sp	!\
46 	ldw HPPA_FRAME_CRP(%sr0,%sp),%rp
47 #else
48 #define	_PROF_PROLOGUE
49 #endif
50 
51 #define	LEAF_ENTRY(x) ! .text ! .align	4	!\
52 	.export	x, entry ! .label x ! .proc	!\
53 	.callinfo frame=0,no_calls,save_rp	!\
54 	.entry ! _PROF_PROLOGUE
55 
56 #define	ENTRY(x,n) ! .text ! .align 4			!\
57 	.export	x, entry ! .label x ! .proc		!\
58 	.callinfo frame=n,calls, save_rp, save_sp	!\
59 	.entry ! _PROF_PROLOGUE
60 
61 #define	ENTRY_NOPROFILE(x,n) ! .text ! .align 4		!\
62 	.export x, entry ! .label x ! .proc		!\
63 	.callinfo frame=n,calls, save_rp, save_sp	!\
64 	.entry
65 
66 #define ALTENTRY(x) ! .export x, entry ! .label  x
67 #define EXIT(x) ! .exit ! .procend
68 
69 #define RCSID(x)	.text				!\
70 			.asciz x			!\
71 			.align	4
72 
73 #define WEAK_ALIAS(alias,sym)				\
74 	.weak alias !					\
75 	alias = sym
76 
77 /*
78  * STRONG_ALIAS: create a strong alias.
79  */
80 #define STRONG_ALIAS(alias,sym)				\
81 	.globl alias !					\
82 	alias = sym
83 
84 #define CALL(func,tmp)					!\
85 	ldil	L%func, tmp				!\
86 	ldo	R%func(tmp), tmp			!\
87 	.call						!\
88 	blr	%r0, %rp				!\
89 	bv,n	%r0(tmp)				!\
90 	nop
91 
92 #ifdef PIC
93 #define PIC_CALL(func)					!\
94 	addil	LT%func, %r19				!\
95 	ldw	RT%func(%r1), %r1			!\
96 	.call						!\
97 	blr	%r0, %rp				!\
98 	bv,n	%r0(%r1)				!\
99 	nop
100 #else
101 #define PIC_CALL(func)					!\
102 	CALL(func,%r1)
103 #endif
104 
105 /* XXX unimplemented */
106 #define WARN_REFERENCES(sym, msg)
107 
108 #define	SZREG	4
109 
110 #endif /* _HPPA_ASM_H_ */
111