summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/hppa/include/asm.h320
1 files changed, 320 insertions, 0 deletions
diff --git a/sys/arch/hppa/include/asm.h b/sys/arch/hppa/include/asm.h
new file mode 100644
index 00000000000..3ef3978adb6
--- /dev/null
+++ b/sys/arch/hppa/include/asm.h
@@ -0,0 +1,320 @@
+/*
+ * Copyright (c) 1990,1991,1994 The University of Utah and
+ * the Computer Systems Laboratory (CSL). All rights reserved.
+ *
+ * Permission to use, copy, modify and distribute this software is hereby
+ * granted provided that (1) source code retains these copyright, permission,
+ * and disclaimer notices, and (2) redistributions including binaries
+ * reproduce the notices in supporting documentation, and (3) all advertising
+ * materials mentioning features or use of this software display the following
+ * acknowledgement: ``This product includes software developed by the
+ * Computer Systems Laboratory at the University of Utah.''
+ *
+ * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
+ * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
+ * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+ *
+ * CSL requests users of this software to return to csl-dist@cs.utah.edu any
+ * improvements that they make and grant CSL redistribution rights.
+ *
+ * Utah $Hdr: asm.h 1.8 94/12/14$
+ */
+
+/*
+ * hp800 assembler definitions
+ */
+
+/*
+ * Roundup() - rounds up x to next multiple of y
+ */
+
+#define roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y))
+
+/*
+ * Hardware General Registers
+ */
+r0 .reg %r0
+r1 .reg %r1
+r2 .reg %r2
+r3 .reg %r3
+r4 .reg %r4
+r5 .reg %r5
+r6 .reg %r6
+r7 .reg %r7
+r8 .reg %r8
+r9 .reg %r9
+r10 .reg %r10
+r11 .reg %r11
+r12 .reg %r12
+r13 .reg %r13
+r14 .reg %r14
+r15 .reg %r15
+r16 .reg %r16
+r17 .reg %r17
+r18 .reg %r18
+r19 .reg %r19
+r20 .reg %r20
+r21 .reg %r21
+r22 .reg %r22
+r23 .reg %r23
+r24 .reg %r24
+r25 .reg %r25
+r26 .reg %r26
+r27 .reg %r27
+r28 .reg %r28
+r29 .reg %r29
+r30 .reg %r30
+r31 .reg %r31
+
+/*
+ * Hardware Space Registers
+ */
+sr0 .reg %sr0
+sr1 .reg %sr1
+sr2 .reg %sr2
+sr3 .reg %sr3
+sr4 .reg %sr4
+sr5 .reg %sr5
+sr6 .reg %sr6
+sr7 .reg %sr7
+
+/*
+ * Hardware Floating Point Registers
+ */
+fr0 .reg %fr0
+fr1 .reg %fr1
+fr2 .reg %fr2
+fr3 .reg %fr3
+fr4 .reg %fr4
+fr5 .reg %fr5
+fr6 .reg %fr6
+fr7 .reg %fr7
+fr8 .reg %fr8
+fr9 .reg %fr9
+fr10 .reg %fr10
+fr11 .reg %fr11
+fr12 .reg %fr12
+fr13 .reg %fr13
+fr14 .reg %fr14
+fr15 .reg %fr15
+fr16 .reg %fr16
+fr17 .reg %fr17
+fr18 .reg %fr18
+fr19 .reg %fr19
+fr20 .reg %fr20
+fr21 .reg %fr21
+fr22 .reg %fr22
+fr23 .reg %fr23
+fr24 .reg %fr24
+fr25 .reg %fr25
+fr26 .reg %fr26
+fr27 .reg %fr27
+fr28 .reg %fr28
+fr29 .reg %fr29
+fr30 .reg %fr30
+fr31 .reg %fr31
+
+/*
+ * Hardware Control Registers
+ */
+cr0 .reg %cr0
+cr8 .reg %cr8
+cr9 .reg %cr9
+cr10 .reg %cr10
+cr11 .reg %cr11
+cr12 .reg %cr12
+cr13 .reg %cr13
+cr14 .reg %cr14
+cr15 .reg %cr15
+cr16 .reg %cr16
+cr17 .reg %cr17
+cr18 .reg %cr18
+cr19 .reg %cr19
+cr20 .reg %cr20
+cr21 .reg %cr21
+cr22 .reg %cr22
+cr23 .reg %cr23
+cr24 .reg %cr24
+cr25 .reg %cr25
+cr26 .reg %cr26
+cr27 .reg %cr27
+cr28 .reg %cr28
+cr29 .reg %cr29
+cr30 .reg %cr30
+cr31 .reg %cr31
+
+rctr .reg %cr0
+pidr1 .reg %cr8
+pidr2 .reg %cr9
+ccr .reg %cr10
+sar .reg %cr11
+pidr3 .reg %cr12
+pidr4 .reg %cr13
+iva .reg %cr14
+eiem .reg %cr15
+itmr .reg %cr16
+pcsq .reg %cr17
+pcoq .reg %cr18
+iir .reg %cr19
+isr .reg %cr20
+ior .reg %cr21
+ipsw .reg %cr22
+eirr .reg %cr23
+ptov .reg %cr24
+tr0 .reg %cr24
+vtop .reg %cr25
+tr1 .reg %cr25
+tr2 .reg %cr26
+tr3 .reg %cr27
+tr4 .reg %cr28
+tr5 .reg %cr29
+tr6 .reg %cr30
+tr7 .reg %cr31
+
+/*
+ * Calling Convention
+ */
+rp .reg %r2
+arg3 .reg %r23
+arg2 .reg %r24
+arg1 .reg %r25
+arg0 .reg %r26
+dp .reg %r27
+ret0 .reg %r28
+ret1 .reg %r29
+sl .reg %r29
+sp .reg %r30
+
+/*
+ * Temporary registers
+ */
+t1 .reg %r22
+t2 .reg %r21
+t3 .reg %r20
+t4 .reg %r19
+
+/*
+ * Temporary space registers
+ */
+ts1 .reg %sr2
+
+/*
+ * Space Registers - SW Conventions
+ */
+sret .reg %sr1 ; return value
+sarg .reg %sr1 ; argument
+
+/*
+ * Floating Point Registers - SW Conventions
+ */
+farg0 .reg %fr5
+farg1 .reg %fr6
+farg2 .reg %fr7
+farg3 .reg %fr8
+fret .reg %fr4
+
+/*
+ * Temporary floating point registers
+ */
+tf1 .reg %fr11
+tf2 .reg %fr10
+tf3 .reg %fr9
+tf4 .reg %fr8
+
+/*
+ * Frame offsets to procedure status save and return areas
+ * (should use genassym to get these offsets)
+ */
+#define FM_PSP -4
+#define FM_EP -8
+#define FM_CLUP -12
+#define FM_SL -16
+#define FM_CRP -20
+#define FM_ERP -24
+#define FM_ESR4 -28
+#define FM_EDP -32
+#define FM_SIZE 32
+
+/*
+ * frame must be rounded to double word
+ */
+#define FR_ROUND 8
+
+#define NARGS 12
+#define ARG_SIZE (NARGS*4)
+
+/*
+ * Offsets from sp/previous_sp for access to procedure arguments
+ * A maximum of four args may be passed in registers.
+ */
+#define VA_ARG0 -FM_SIZE-4
+#define VA_ARG1 -FM_SIZE-8
+#define VA_ARG2 -FM_SIZE-12
+#define VA_ARG3 -FM_SIZE-16
+
+#define VA_ARG4 -FM_SIZE-20
+#define VA_ARG5 -FM_SIZE-24
+#define VA_ARG6 -FM_SIZE-28
+#define VA_ARG7 -FM_SIZE-32
+#define VA_ARG8 -FM_SIZE-36
+#define VA_ARG9 -FM_SIZE-40
+#define VA_ARG10 -FM_SIZE-44
+#define VA_ARG11 -FM_SIZE-48
+#define VA_ARG12 -FM_SIZE-52
+#define VA_ARG13 -FM_SIZE-56
+
+/*
+ * Standard space and subspace definitions.
+ */
+ .SPACE $TEXT$,0
+#ifndef BFD_SUBSPA_BUG
+ .subspa $FIRST$, QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=4
+ .subspa $MILLICODE$, QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=8
+ .subspa $LIT$, QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=16
+ .subspa $CODE$, QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=24
+ .subspa $UNWIND$MILLICODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=64
+ .subspa $UNWIND$, QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=72
+ .subspa $RECOVER$, QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=80
+#endif
+
+/*
+ * additional code subspaces should have ALIGN=8 for an interspace BV
+ */
+ .SPACE $PRIVATE$,1
+#ifndef BFD_SUBSPA_BUG
+ .subspa $GLOBAL$, QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=8
+ .subspa $SHORTDATA$, QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=16
+ .subspa $DATA$, QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=24
+#endif
+ .import $global$
+#ifndef BFD_SUBSPA_BUG
+ .subspa $PFA_COUNTER$, QUAD=1,ALIGN=4,ACCESS=0x1f,SORT=72
+ .subspa $BSS$, QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=80,ZERO
+#endif
+
+
+#ifdef PROF
+
+/* XXX need profiling versions */
+
+#else
+#define ENTRY(x) \
+/**/ .space $TEXT$ !\
+ .subspa $CODE$ !\
+ .export x,entry !\
+ .label x !\
+ .proc !\
+ .callinfo no_calls !\
+ .entry
+
+#define ALTENTRY(x) \
+/**/ .export x,entry !\
+ .label x
+
+#define EXIT(x) \
+/**/ bv,n r0(rp) !\
+ .exit !\
+ .procend
+
+#endif
+