summaryrefslogtreecommitdiffstats
path: root/sys/mips/include/regdef.h
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2013-05-01 06:22:50 +0000
committerimp <imp@FreeBSD.org>2013-05-01 06:22:50 +0000
commit8648dd7eeadfc53cf79f56537c17665f99c8f44d (patch)
tree49fc27b68f6541b8d828cf6cdce3722a663fdb1f /sys/mips/include/regdef.h
parente614c625206a0bf9adbdb7edd3ca4b22731072af (diff)
downloadFreeBSD-src-8648dd7eeadfc53cf79f56537c17665f99c8f44d.zip
FreeBSD-src-8648dd7eeadfc53cf79f56537c17665f99c8f44d.tar.gz
Import NetBSD's version, which is perfectly fine.
Submitted by: jmallet@
Diffstat (limited to 'sys/mips/include/regdef.h')
-rw-r--r--sys/mips/include/regdef.h114
1 files changed, 76 insertions, 38 deletions
diff --git a/sys/mips/include/regdef.h b/sys/mips/include/regdef.h
index 4fe8022..4f1c383 100644
--- a/sys/mips/include/regdef.h
+++ b/sys/mips/include/regdef.h
@@ -1,6 +1,8 @@
+/* $NetBSD: regdef.h,v 1.12 2005/12/11 12:18:09 christos Exp $ */
+
/*
* Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
+ * The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Ralph Campbell. This file is derived from the MIPS RISC
@@ -14,7 +16,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
@@ -29,44 +31,80 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- * @(#)regdef.h 8.1 (Berkeley) 06/10/93
+ *
+ * @(#)regdef.h 8.1 (Berkeley) 6/10/93
* $FreeBSD$
*/
-#ifndef _MIPS_INCLUDE_REGDEF_H_
-#define _MIPS_INCLUDE_REGDEF_H_
+#ifndef _MIPS_REGDEF_H
+#define _MIPS_REGDEF_H
+
+#include <machine/cdefs.h> /* for API selection */
+
+#if defined(__ASSEMBLER__)
+#define zero $0 /* always zero */
+#define AT $at /* assembler temporary */
+#define v0 $2 /* return value */
+#define v1 $3
+#define a0 $4 /* argument registers */
+#define a1 $5
+#define a2 $6
+#define a3 $7
+#if defined(__mips_n32) || defined(__mips_n64)
+#define a4 $8
+#define a5 $9
+#define a6 $10
+#define a7 $11
+#define t0 $12 /* temp registers (not saved across subroutine calls) */
+#define t1 $13
+#define t2 $14
+#define t3 $15
+#else
+#define t0 $8 /* temp registers (not saved across subroutine calls) */
+#define t1 $9
+#define t2 $10
+#define t3 $11
+#define t4 $12
+#define t5 $13
+#define t6 $14
+#define t7 $15
+#endif /* __mips_n32 || __mips_n64 */
+#define s0 $16 /* saved across subroutine calls (callee saved) */
+#define s1 $17
+#define s2 $18
+#define s3 $19
+#define s4 $20
+#define s5 $21
+#define s6 $22
+#define s7 $23
+#define t8 $24 /* two more temporary registers */
+#define t9 $25
+#define k0 $26 /* kernel temporary */
+#define k1 $27
+#define gp $28 /* global pointer */
+#define sp $29 /* stack pointer */
+#define s8 $30 /* one more callee saved */
+#define ra $31 /* return address */
-#define zero $0 /* always zero */
-#define AT $at /* assembler temp */
-#define v0 $2 /* return value */
-#define v1 $3
-#define a0 $4 /* argument registers */
-#define a1 $5
-#define a2 $6
-#define a3 $7
-#define t0 $8 /* temp registers (not saved across subroutine calls) */
-#define t1 $9
-#define t2 $10
-#define t3 $11
-#define t4 $12
-#define t5 $13
-#define t6 $14
-#define t7 $15
-#define s0 $16 /* saved across subroutine calls (callee saved) */
-#define s1 $17
-#define s2 $18
-#define s3 $19
-#define s4 $20
-#define s5 $21
-#define s6 $22
-#define s7 $23
-#define t8 $24 /* two more temp registers */
-#define t9 $25
-#define k0 $26 /* kernel temporary */
-#define k1 $27
-#define gp $28 /* global pointer */
-#define sp $29 /* stack pointer */
-#define s8 $30 /* one more callee saved */
-#define ra $31 /* return address */
+/*
+ * These are temp registers whose names can be used in either the old
+ * or new ABI, although they map to different physical registers. In
+ * the old ABI, they map to t4-t7, and in the new ABI, they map to a4-a7.
+ *
+ * Because they overlap with the last 4 arg regs in the new ABI, ta0-ta3
+ * should be used only when we need more than t0-t3.
+ */
+#if defined(__mips_n32) || defined(__mips_n64)
+#define ta0 $8
+#define ta1 $9
+#define ta2 $10
+#define ta3 $11
+#else
+#define ta0 $12
+#define ta1 $13
+#define ta2 $14
+#define ta3 $15
+#endif /* __mips_n32 || __mips_n64 */
-#endif /* _MIPS_INCLUDE_REGDEF_H_ */
+#endif /* __ASSEMBLER__ */
+#endif /* _MIPS_REGDEF_H */
OpenPOWER on IntegriCloud