1 /* 32 and 64-bit millicode, original author Hewlett-Packard
2 adapted for gcc by Paul Bame <bame@debian.org>
3 and Alan Modra <alan@linuxcare.com.au>.
5 Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
7 This file is part of GCC and is released under the terms of
8 of the GNU General Public License as published by the Free Software
9 Foundation; either version 2, or (at your option) any later version.
10 See the file COPYING in the top-level GCC source directory for a copy
28 /* Hardware General Registers. */
62 /* Hardware Space Registers. */
72 /* Hardware Floating Point Registers. */
90 /* Hardware Control Registers. */
92 sar
: .reg
%cr11
/* Shift Amount Register */
94 /* Software Architecture General Registers. */
95 rp
: .reg r2
/* return pointer */
97 mrp
: .reg r2
/* millicode return pointer */
99 mrp
: .reg r31
/* millicode return pointer */
101 ret0
: .reg r28
/* return value */
102 ret1
: .reg r29
/* return value (high part of double) */
103 sp
: .reg r30
/* stack pointer */
104 dp
: .reg r27
/* data pointer */
105 arg0
: .reg r26
/* argument */
106 arg1
: .reg r25
/* argument or high part of double argument */
107 arg2
: .reg r24
/* argument */
108 arg3
: .reg r23
/* argument or high part of double argument */
110 /* Software Architecture Space Registers. */
111 /* sr0 ; return link from BLE */
112 sret
: .reg sr1
/* return value */
113 sarg
: .reg sr1
/* argument */
114 /* sr4 ; PC SPACE tracker */
115 /* sr5 ; process private data */
117 /* Frame Offsets (millicode convention!) Used when calling other
118 millicode routines. Stack unwinding is dependent upon these
120 r31_slot
: .equ
-20 /* "current RP" slot */
121 sr0_slot
: .equ
-16 /* "static link" slot */
122 #if defined(CONFIG_64BIT)
123 mrp_slot
: .equ
-16 /* "current RP" slot */
124 psp_slot
: .equ
-8 /* "previous SP" slot */
126 mrp_slot
: .equ
-20 /* "current RP" slot (replacing "r31_slot") */
130 #define DEFINE(name,value)name: .EQU value
131 #define RDEFINE(name,value)name: .REG value
133 #define MILLI_BE(lbl) BE lbl(sr7,r0)
134 #define MILLI_BEN(lbl) BE,n lbl(sr7,r0)
135 #define MILLI_BLE(lbl) BLE lbl(sr7,r0)
136 #define MILLI_BLEN(lbl) BLE,n lbl(sr7,r0)
137 #define MILLIRETN BE,n 0(sr0,mrp)
138 #define MILLIRET BE 0(sr0,mrp)
139 #define MILLI_RETN BE,n 0(sr0,mrp)
140 #define MILLI_RET BE 0(sr0,mrp)
142 #define MILLI_BE(lbl) B lbl
143 #define MILLI_BEN(lbl) B,n lbl
144 #define MILLI_BLE(lbl) BL lbl,mrp
145 #define MILLI_BLEN(lbl) BL,n lbl,mrp
146 #define MILLIRETN BV,n 0(mrp)
147 #define MILLIRET BV 0(mrp)
148 #define MILLI_RETN BV,n 0(mrp)
149 #define MILLI_RET BV 0(mrp)
152 #define CAT(a,b) a##b
154 #define SUBSPA_MILLI .section .text
155 #define SUBSPA_MILLI_DIV .section .text.div,"ax",@progbits! .align 16
156 #define SUBSPA_MILLI_MUL .section .text.mul,"ax",@progbits! .align 16
158 #define SUBSPA_DATA .section .data
160 #define GLOBAL $global$
161 #define GSYM(sym) !sym:
162 #define LSYM(sym) !CAT(.L,sym:)
163 #define LREF(sym) CAT(.L,sym)
165 #endif /*_PA_MILLI_H_*/