Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/a29khif/sys')
-rw-r--r--newlib/libc/sys/a29khif/sys/cpudef.h270
-rw-r--r--newlib/libc/sys/a29khif/sys/fpsymbol.h2970
-rw-r--r--newlib/libc/sys/a29khif/sys/intrinsi.h457
-rw-r--r--newlib/libc/sys/a29khif/sys/macros.h37
-rw-r--r--newlib/libc/sys/a29khif/sys/proreg.h60
-rw-r--r--newlib/libc/sys/a29khif/sys/romdcl.h392
-rw-r--r--newlib/libc/sys/a29khif/sys/smartmac.h1491
-rw-r--r--newlib/libc/sys/a29khif/sys/sysmac.h165
8 files changed, 0 insertions, 5842 deletions
diff --git a/newlib/libc/sys/a29khif/sys/cpudef.h b/newlib/libc/sys/a29khif/sys/cpudef.h
deleted file mode 100644
index 4ec6ed39c..000000000
--- a/newlib/libc/sys/a29khif/sys/cpudef.h
+++ /dev/null
@@ -1,270 +0,0 @@
-; @(#)cpudef.h 2.3 90/10/14 20:55:56, Copyright 1989, 1990 AMD
-;-----------------------------------------------------------------------
-; Useful equates
-;-----------------------------------------------------------------------
-;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- ; Processor status registers OPS (sr1) and CPS (sr2)
- .equ CA,0x8000 ; Coprocessor active
- .equ IP,0x4000 ; Interrupt pending
- .equ TE,0x2000 ; Trace enable
- .equ TP,0x1000 ; Trace pending
- .equ TU,0x0800 ; Trap unaligned access
- .equ FZ,0x0400 ; Freeze
- .equ LK,0x0200 ; Lock
- .equ RE,0x0100 ; ROM enable
- .equ WM,0x0080 ; Wait mode
- .equ PD,0x0040 ; No translation for Data
- .equ PI,0x0020 ; No translation for Instr
- .equ SM,0x0010 ; Supervisor mode
- .equ IM,0x000C ; Interrupt mask
- .equ IM1,0x0100 ; enable INTR0-1
- .equ IM2,0x1000 ; enable INTR0-2
- .equ IM3,0x1100 ; enable INTR0-3
- .equ DI,0x0002 ; Disable ints
- .equ DA,0x0001 ; Disable ints and traps
-
- ; Configuration register CFG (sr3)
- .equ PRL,0xFF000000 ; Processor release level
- .equ VF,0x10 ; Vector fetch
- .equ RV,0x08 ; ROM Vector area
- .equ BO,0x04 ; Byte order
- .equ CP,0x02 ; Coprocessor present
- .equ CD,0x01 ; BTC disable
-
- ; Channel control register CHC (sr6)
- .equ LS,0x8000 ; Load store
- .equ ML,0x4000 ; Multiple operation
- .equ ST,0x2000 ; Set
- .equ LA,0x1000 ; Lock active
- .equ TF,0x0400 ; Transaction faulted
- .equ TR,0x03FC ; Target register
- .equ NN,0x0002 ; Not needed
- .equ CV,0x0001 ; Contents valid
-
- ; Timer reload register TMR (sr9)
- .equ IE,0x01000000 ; timer int enable
- .equ IN,0x02000000 ; timer int pending
- .equ OV,0x04000000 ; timer Overflow
-
- ; MMU configuration register MMU (sr13)
- .equ PS,0x300 ; Page size
- .equ PID,0xFF ; Process identifier
-
- ; ALU status register ALU (sr132)
- .equ DF,0x800 ; Divide flag
- .equ V,0x400 ; Overflow
- .equ N,0x200 ; Negative
- .equ Z,0x100 ; Zero
- .equ C,0x080 ; Carry
-
- ; TLB entry
- .equ VTAG,0xFFFF8000 ; Virtual tag
- .equ VE,0x4000 ; Valid entry
- .equ SR,0x2000 ; Supervisor read
- .equ SW,0x1000 ; Supervisor write
- .equ SE,0x0800 ; Supervisor execute
- .equ UR,0x0400 ; User read
- .equ UW,0x0200 ; User write
- .equ UE,0x0100 ; User execute
- .equ TID,0x00FF ; Task identifier
- .equ RPN,0xFFFFFC00 ; Real page number
- .equ PGM,0x00C0 ; User programmable
- .equ U,0x0002 ; Usage
- .equ F,0x0001 ; Flag
-
-;-----------------------------------------------------------------------
-;Global registers
-;-----------------------------------------------------------------------
-
- .reg rsp, gr1 ; local register stack pointer
-
- ; System-wide statics
- .reg s0, gr64
- .reg spillreg, s0 ; pointer to user spill handler
- .reg s1, gr65
- .reg fillreg, s1 ; pointer to user fill handler
- .reg s2, gr66
- .reg heapptr, s2 ; pointer to heap area
- .reg s3, gr67
- .reg s4, gr68
- .reg s5, gr69
- .reg s6, gr70
- .reg s7, gr71
- .reg s8, gr72
- .reg s9, gr73
- .reg s10, gr74
- .reg s11, gr75
- .reg s12, gr76
- .reg s13, gr77
- .reg s14, gr78
- .reg s15, gr79
-
- ; Interrupt handler temporaries
- .reg i0, gr80
- .reg i1, gr81
- .reg i2, gr82
- .reg i3, gr83
- .reg i4, gr84
- .reg i5, gr85
- .reg i6, gr86
- .reg i7, gr87
- .reg i8, gr88
- .reg i9, gr89
- .reg i10, gr90
- .reg i11, gr91
- .reg i12, gr92
- .reg i13, gr93
- .reg i14, gr94
- .reg i15, gr95
-
- ; Subroutine/function temporaries
- ; also used for function return values
- .reg t0, gr96
- .reg rtn, t0
- .reg t1, gr97
- .reg t2, gr98
- .reg t3, gr99
- .reg t4, gr100
- .reg t5, gr101
- .reg t6, gr102
- .reg t7, gr103
- .reg t8, gr104
- .reg t9, gr105
- .reg t10, gr106
- .reg t11, gr107
- .reg t12, gr108
- .reg t13, gr109
- .reg t14, gr110
- .reg t15, gr111
-
- ; User process statics
- .reg u0, gr112
- .reg u1, gr113
- .reg u2, gr114
- .reg u3, gr115
-
- ; More subroutine/function temporaries
- .reg t16, gr116
- .reg t17, gr117
- .reg t18, gr118
- .reg t19, gr119
- .reg t20, gr120
-
- ; Older names for the same registers
- .reg tmp0, gr116
- .reg tmp1, gr117
- .reg tmp2, gr118
- .reg tmp3, gr119
- .reg tmp4, gr120
-
- ; Trap handler temporaries
- .reg tav, gr121 ; arg/temp
- .reg tpc, gr122 ; rtn/temp
-
- ; Linkage pointers
- .reg lrp, gr123 ; large rtn ptr
- .reg slp, gr124 ; static link ptr
- .reg msp, gr125 ; memory stack ptr
- .reg rab, gr126 ; register allocate bound
- .reg rfb, gr127 ; register free bound
-
-;-----------------------------------------------------------------------
-;Local compiler registers
-; (only valid if frame has been established)
-;-----------------------------------------------------------------------
-
- .reg p15, lr17 ; outgoing arg 16
- .reg p14, lr16 ; outgoing arg 15
- .reg p13, lr15 ; outgoing arg 14
- .reg p12, lr14 ; outgoing arg 13
- .reg p11, lr13 ; outgoing arg 12
- .reg p10, lr12 ; outgoing arg 11
- .reg p9, lr11 ; outgoing arg 10
- .reg p8, lr10 ; outgoing arg 9
- .reg p7, lr9 ; outgoing arg 8
- .reg p6, lr8 ; outgoing arg 7
- .reg p5, lr7 ; outgoing arg 6
- .reg p4, lr6 ; outgoing arg 5
- .reg p3, lr5 ; outgoing arg 4
- .reg p2, lr4 ; outgoing arg 3
- .reg p1, lr3 ; outgoing arg 2
- .reg p0, lr2 ; outgoing arg 1
- .reg fp, lr1 ; frame pointer
- .reg raddr, lr0 ; return address
-
-;-----------------------------------------------------------------------
-; Vectors
-;-----------------------------------------------------------------------
-
- .equ V_ILLEG, 0 ; Illegal opcode
- .equ V_ALIGN, 1 ; Unaligned access
- .equ V_RANGE, 2 ; Out of range
- .equ V_COPRE, 3 ; Coprocessor not present
- .equ V_COEXC, 4 ; Coprocessor exception
- .equ V_PROT, 5 ; Protection violation
- .equ V_INSTR, 6 ; Instruction access exception
- .equ V_DATA, 7 ; Data access exception
- .equ V_UITLB, 8 ; User-mode instruction TLB miss
- .equ V_UDTLB, 9 ; User-mode data TLB miss
- .equ V_SITLB, 10 ; Supervisor-mode instr TLB miss
- .equ V_SDTLB, 11 ; Supervisor-mode data TLB miss
- .equ V_ITLB, 12 ; Instruction TLB violation
- .equ V_DTLB, 13 ; Data TLB violation
- .equ V_TIMER, 14 ; Timer
- .equ V_TRACE, 15 ; Trace
- .equ V_INTR0, 16 ; Interrupt 0
- .equ V_INTR1, 17 ; Interrupt 1
- .equ V_INTR2, 18 ; Interrupt 2
- .equ V_INTR3, 19 ; Interrupt 3
- .equ V_TRAP0, 20 ; Trap 0
- .equ V_TRAP1, 21 ; Trap 1
-
-;-----------------------------------------------------------------------
-;constants for LOAD and STORE operations
-;-----------------------------------------------------------------------
-
-; CE operand values
- .equ CE, 0b1 ;coprocessor enable
- .equ ME, 0b0 ; memory enable
-
-; CNTL operand values
- .equ IO, 0b1000000 ;set for I/O
- .equ PA, 0b0100000 ;force physical addr
- .equ SB, 0b0010000 ;set for set BP
- .equ UA, 0b0001000 ;force user mode access
- .equ ROM, 0b0000100 ;ROM access
- .equ HWORD, 0b0000010 ;Half word access
- .equ BYTE, 0b0000001 ;Byte access
- .equ WORD, 0b0000000 ;Word access
-
-;-----------------------------------------------------------------------
-; stack alignment value
-;-----------------------------------------------------------------------
- .equ STKALIGN, 8 ; double word align
-
diff --git a/newlib/libc/sys/a29khif/sys/fpsymbol.h b/newlib/libc/sys/a29khif/sys/fpsymbol.h
deleted file mode 100644
index 3fc6ac88b..000000000
--- a/newlib/libc/sys/a29khif/sys/fpsymbol.h
+++ /dev/null
@@ -1,2970 +0,0 @@
-; @(#)fpsymbol.h 1.4 90/10/14 20:55:59, Copyright 1989, 1990 AMD
-; start of fpsymbol.h file
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; ______________________________________________________________________
-;|______________________________________________________________________|
-;| |
-;| SYMBOLS FOR DEFINING THE INSTRUCTION WORD |
-;| |
-;|______________________________________________________________________|
-;|______________________________________________________________________|
-;
-;
-; Revision Information:
-;------------------------------------------------------------------------
-; Date: March 31, 1989
-; Author: Roy Carlson per Bob Perlman and Richard Relph
-;
-; The symbols section describing transactions was modified to contain
-; several new symbol values. The reason for the change was to force the
-; CA bit to be set--and remain set--once code accesses the coprocessor.
-;
-; Future operating systems will use the Coprocessor Active (CA) bit in
-; the Old Processor Status Register to determine whether or not to save
-; coprocessor state, etc.. This means that the instruction control field
-; Set Coprocessor Active (SA) bit should be used as follows:
-;
-; (1) any coprocessor STORE must have its SA bit set to 1,
-; so as to set CA,
-;
-; and (2) any coprocessor LOAD must have its SA bit set to 0,
-; so as to prevent clearing CA.
-;------------------------------------------------------------------------
-; Date: 89/01/30 12:32:13; author: jim; lines added/del: 5/4
-; Corrected CP_IEEE_GRADUAL_UFLOW_MODE and CP_RMS_MASK.
-; Added CP_EXCPS_POSITION, the ls bit of the CP_XXX_EXCP ensemble.
-; fixed a few typos in comments.
-;------------------------------------------------------------------------
-; Date: 89/01/23 18:00:26; author: jim; lines added/del: 488/468
-; Richard O. Parker
-; January 5, 1989
-;
-; 1) The _cp_prec_field in the "cp_build_inst", "cp_build_inst_h"
-; and "cp_build_inst_l" macros was not being defined in the case
-; of Am29K-supported floating-point instructions (e.g., FADD, FSUB,
-; DADD, etc.).
-;
-; 2) The multiplexor select codes in the opcode table entries
-; associated with the "cp_build_inst", "cp_build_inst_h" and
-; "cp_build_inst_l" macros, pertaining to the CONVERT_F_TO_D
-; and CONVERT_D_TO_F instructions were incorrect.
-;------------------------------------------------------------------------
-; Date: 88/12/20 14:28:26; author: jim; lines added/del: 1/1
-; Larry Westerman corrected definition of CP_MOVE_P.
-; Version required for Release 1.1 of the Intrinsics shipped 12/12/88.
-;------------------------------------------------------------------------
-; Date: 88/11/18 15:44:45; author: law;
-; Initial revision
-;
-;
-;========================================================================
-;
-; The following mnemonics are used to specify the 14 LSBs of the
-; instruction word (fields SIP, SIQ, SIT, SIF, IF, and CO).
-;
-;========================================================================
-;
-; floating point operation codes.
-;
- .equ CP_PASS_P, 0x00000000 ; pass P
- .equ CP_MINUSP, 0x00000040 ; -P
- .equ CP_ABSP, 0x00000080 ; |P|
- .equ CP_SIGNT_TIMES_ABSP, 0x00000C00 ; SIGN(T) * |P|
-;
- .equ CP_P_PLUS_T, 0x00000001 ; P + T
- .equ CP_P_MINUS_T, 0x00000101 ; P - T
- .equ CP_MINUSP_PLUS_T, 0x00001001 ; -P + T
- .equ CP_MINUSP_MINUS_T, 0x00001101 ; -P - T
- .equ CP_ABS_P_PLUS_T, 0x00000081 ; |P + T|
- .equ CP_ABS_P_MINUS_T, 0x00000181 ; |P - T|
- .equ CP_ABSP_PLUS_ABST, 0x00002201 ; |P| + |T|
- .equ CP_ABSP_MINUS_ABST, 0x00002301 ; |P| - |T|
- .equ CP_ABS_ABSP_MINUS_ABST, 0x00002381 ; ||P| - |T||
-;
- .equ CP_P_TIMES_Q, 0x00000002 ; P * Q
- .equ CP_MINUSP_TIMES_Q, 0x00001002 ; -P * Q
- .equ CP_ABS_P_TIMES_Q, 0x00000082 ; |P * Q|
-;
- .equ CP_COMPARE_P_AND_T, 0x00000103 ; compare P and T
-;
- .equ CP_MAX_P_AND_T, 0x00000104 ; max P,T
- .equ CP_MAX_ABSP_AND_ABST, 0x00002304 ; max |P|, |T|
-;
- .equ CP_MIN_P_AND_T, 0x00001005 ; min P,T
- .equ CP_MIN_ABSP_AND_ABST, 0x00003205 ; min |P|,|T|
- .equ CP_LIMIT_P_TO_MAGT, 0x00003A05 ; limit P to magnitude of T
-;
- .equ CP_CONVERT_T_TO_INT, 0x00000006 ; convert T to integer
-;
- .equ CP_SCALE_T_TO_INT_BY_Q, 0x00000007 ; scale T to integer by Q
-;
- .equ CP_PQ_PLUS_T, 0x00000008 ; (P * Q) + T
- .equ CP_MINUSPQ_PLUS_T, 0x00001008 ; (-P * Q) + T
- .equ CP_PQ_MINUS_T, 0x00000108 ; (P * Q) - T
- .equ CP_MINUSPQ_MINUS_T, 0x00001108 ; (-P * Q) - T
- .equ CP_ABSPQ_PLUS_ABST, 0x00002A08 ; |(P * Q)| + T
- .equ CP_MINUSABSPQ_PLUS_ABST, 0x00003A08 ;-|(P * Q)| + T
- .equ CP_ABSPQ_MINUS_ABST, 0x00002B08 ; |(P * Q)| - |T|
-;
- .equ CP_ROUND_T_TO_INT, 0x00000009 ; round T to integral value
-;
- .equ CP_RECIPROCAL_OF_P, 0x0000000A ; reciprocal of P
-;
- .equ CP_CONVERT_T_TO_ALT, 0x0000000B ; convert T to alt. f.p. format
- .equ CP_CONVERT_T_FROM_ALT, 0x0000000C ; convert T to alt. f.p. format
-;
-;
-; integer operation codes.
-;
- .equ CP_I_PASS_P, 0x00000020 ; integer pass P
- .equ CP_I_MINUSP, 0x00000060 ; integer -P
- .equ CP_I_ABSP, 0x000000A0 ; integer |P|
- .equ CP_I_SIGNT_TIMES_ABSP, 0x00000C20 ; integer SIGN(T) * |P|
-;
- .equ CP_I_P_PLUS_T, 0x00000021 ; integer P + T
- .equ CP_I_P_MINUS_T, 0x00000121 ; integer P - T
- .equ CP_I_MINUSP_PLUS_T, 0x00001021 ; integer -P + T
- .equ CP_I_ABS_P_PLUS_T, 0x000000A1 ; integer |P + T|
- .equ CP_I_ABS_P_MINUS_T, 0x000001A1 ; integer |P - T|
-;
- .equ CP_I_P_TIMES_Q, 0x00000022 ; integer P * Q
-;
- .equ CP_I_COMPARE_P_AND_T, 0x00000123 ; integer compare P and T
-;
- .equ CP_I_MAX_P_AND_T, 0x00000124 ; integer max P,T
-;
- .equ CP_I_MIN_P_AND_T, 0x00001025 ; integer min P,T
-;
- .equ CP_I_CONVERT_T_TO_FLOAT, 0x00000026 ; integer convert T to f.p.
-;
- .equ CP_I_SCALE_T_TO_FLOAT_BY_Q, 0x00000027 ; integer scale T to f.p. by Q
-;
- .equ CP_I_P_OR_T, 0x00000030 ; integer P OR T
-;
- .equ CP_I_P_AND_T, 0x00000031 ; integer P AND T
-;
- .equ CP_I_P_XOR_T, 0x00000032 ; integer P XOR T
-;
- .equ CP_I_NOT_T, 0x00000032 ; integer NOT T
-;
- .equ CP_I_LSHIFT_P_BY_Q, 0x00000033 ; integer logical shift P by Q
-; places
-;
- .equ CP_I_ASHIFT_P_BY_Q, 0x00000034 ; integer arith. shift P by Q
-; places
-;
- .equ CP_I_FSHIFT_PT_BY_Q, 0x00000035 ; integer funnel shift PT by Q
-; places
-;
-;
-; move instruction (f.p. or integer)
-;
- .equ CP_MOVE_P, 0x00000018 ; move operand P
-;
-;
-;========================================================================
-;
-; precision codes for the the operands in registers R and S, and for
-; the result (instruction word fields IPR, RPR).
-;
-;========================================================================
-;
-;
- .equ CP_D_S, 0x00008000 ;Double result, single input(s)
- .equ CP_S_D, 0x00004000 ;Single result, double input(s)
- .equ CP_D_D, 0x00000000 ;Double result, double input(s)
- .equ CP_S_S, 0x0000C000 ;Single result, single input(s)
-;
-;========================================================================
-;
-; The following mnemonics are used to specify the 16 LSBs of an Am29027
-; instruction word for floating-point instructions supported by the
-; Am29000 instruction set.
-;
-;========================================================================
-;
- .equ CP_FADD, 0x0000C001
- .equ CP_DADD, 0x00000001
- .equ CP_FSUB, 0x0000C101
- .equ CP_DSUB, 0x00000101
- .equ CP_FMUL, 0x0000C002
- .equ CP_DMUL, 0x00000002
- .equ CP_FEQ, 0x0000C103
- .equ CP_DEQ, 0x00000103
- .equ CP_FGE, 0x0000C103
- .equ CP_DGE, 0x00000103
- .equ CP_FGT, 0x0000C103
- .equ CP_DGT, 0x00000103
- .equ CP_CONVERT_I_TO_F, 0x0000C026 ; CONVERT (int -> s.p.)
- .equ CP_CONVERT_I_TO_D, 0x00008026 ; CONVERT (int -> d.p.)
- .equ CP_CONVERT_F_TO_I, 0x0000C006 ; CONVERT (s.p.-> int)
- .equ CP_CONVERT_D_TO_I, 0x00004006 ; CONVERT (d.p.-> int)
- .equ CP_CONVERT_F_TO_D, 0x00008000 ; CONVERT (s.p.-> d.p.)
- .equ CP_CONVERT_D_TO_F, 0x00004000 ; CONVERT (d.p.-> s.p.)
-;
-;
-;========================================================================
-;
-; operand select codes (instruction word fields PMS, QMS, TMS).
-;
-;========================================================================
-;
-;
- .equ CP_P_EQ_R, 0x00000000
- .equ CP_P_EQ_S, 0x01000000
- .equ CP_P_EQ_0, 0x02000000
- .equ CP_P_EQ_ONE_HALF, 0x03000000
- .equ CP_P_EQ_IMINUS1, 0x03000000
- .equ CP_P_EQ_1, 0x04000000
- .equ CP_P_EQ_2, 0x05000000
- .equ CP_P_EQ_3, 0x06000000
- .equ CP_P_EQ_PI, 0x07000000
- .equ CP_P_EQ_IMINUSMAX, 0x07000000
- .equ CP_P_EQ_RF0, 0x08000000
- .equ CP_P_EQ_RF1, 0x09000000
- .equ CP_P_EQ_RF2, 0x0A000000
- .equ CP_P_EQ_RF3, 0x0B000000
- .equ CP_P_EQ_RF4, 0x0C000000
- .equ CP_P_EQ_RF5, 0x0D000000
- .equ CP_P_EQ_RF6, 0x0E000000
- .equ CP_P_EQ_RF7, 0x0F000000
-;
- .equ CP_Q_EQ_R, 0x00000000
- .equ CP_Q_EQ_S, 0x00100000
- .equ CP_Q_EQ_0, 0x00200000
- .equ CP_Q_EQ_ONE_HALF, 0x00300000
- .equ CP_Q_EQ_IMINUS1, 0x00300000
- .equ CP_Q_EQ_1, 0x00400000
- .equ CP_Q_EQ_2, 0x00500000
- .equ CP_Q_EQ_3, 0x00600000
- .equ CP_Q_EQ_PI, 0x00700000
- .equ CP_Q_EQ_IMINUSMAX, 0x00700000
- .equ CP_Q_EQ_RF0, 0x00800000
- .equ CP_Q_EQ_RF1, 0x00900000
- .equ CP_Q_EQ_RF2, 0x00A00000
- .equ CP_Q_EQ_RF3, 0x00B00000
- .equ CP_Q_EQ_RF4, 0x00C00000
- .equ CP_Q_EQ_RF5, 0x00D00000
- .equ CP_Q_EQ_RF6, 0x00E00000
- .equ CP_Q_EQ_RF7, 0x00F00000
-;
- .equ CP_T_EQ_R, 0x00000000
- .equ CP_T_EQ_S, 0x00010000
- .equ CP_T_EQ_0, 0x00020000
- .equ CP_T_EQ_ONE_HALF, 0x00030000
- .equ CP_T_EQ_IMINUS1, 0x00030000
- .equ CP_T_EQ_1, 0x00040000
- .equ CP_T_EQ_2, 0x00050000
- .equ CP_T_EQ_3, 0x00060000
- .equ CP_T_EQ_PI, 0x00070000
- .equ CP_T_EQ_IMINUSMAX, 0x00070000
- .equ CP_T_EQ_RF0, 0x00080000
- .equ CP_T_EQ_RF1, 0x00090000
- .equ CP_T_EQ_RF2, 0x000A0000
- .equ CP_T_EQ_RF3, 0x000B0000
- .equ CP_T_EQ_RF4, 0x000C0000
- .equ CP_T_EQ_RF5, 0x000D0000
- .equ CP_T_EQ_RF6, 0x000E0000
- .equ CP_T_EQ_RF7, 0x000F0000
-;
-;
-;========================================================================
-;
-; destination select codes (instruction word fields RF, RFS)
-;
-;========================================================================
-;
-;
- .equ CP_DEST_EQ_GP, 0x00000000
- .equ CP_DEST_EQ_RF0, 0x80000000
- .equ CP_DEST_EQ_RF1, 0x90000000
- .equ CP_DEST_EQ_RF2, 0xA0000000
- .equ CP_DEST_EQ_RF3, 0xB0000000
- .equ CP_DEST_EQ_RF4, 0xC0000000
- .equ CP_DEST_EQ_RF5, 0xD0000000
- .equ CP_DEST_EQ_RF6, 0xE0000000
- .equ CP_DEST_EQ_RF7, 0xF0000000
-;
-;
-; ______________________________________________________________________
-;|______________________________________________________________________|
-;| |
-;| SYMBOLS FOR DEFINING THE MODE REGISTER DOUBLE WORD |
-;| |
-;|______________________________________________________________________|
-;|______________________________________________________________________|
-;
-;
-;
- .equ CP_PFF_MASK, 0x00000003 ; primary f.p. format mask
- .equ CP_PFF_EQ_IEEE, 0x00000000 ; primary f.p. format = IEEE
- .equ CP_PFF_EQ_DECD, 0x00000001 ; primary f.p. format = DEC D
- .equ CP_PFF_EQ_DECG, 0x00000002 ; primary f.p. format = DEC G
- .equ CP_PFF_EQ_IBM, 0x00000003 ; primary f.p. format = IBM
- .equ CP_PFF_POSITION, 0
-;
- .equ CP_AFF_MASK, 0x0000000C ; alternate f.p. format mask
- .equ CP_AFF_EQ_IEEE, 0x00000000 ; alternate f.p. format = IEEE
- .equ CP_AFF_EQ_DECD, 0x00000004 ; alternate f.p. format = DEC D
- .equ CP_AFF_EQ_DECG, 0x00000008 ; alternate f.p. format = DEC G
- .equ CP_AFF_EQ_IBM, 0x0000000C ; alternate f.p. format = IBM
- .equ CP_AFF_POSITION, 2
-;
- .equ CP_SAT_MASK, 0x00000010 ; saturate mode (SAT) mask
- .equ CP_SATURATE_MODE, 0x00000010 ; enable saturate mode (SAT=1)
- .equ CP_SAT_POSITION, 4
-;
- .equ CP_AP_MASK, 0x00000020 ; affine/proj. mode (AP) mask
- .equ CP_AFFINE_MODE, 0x00000020 ; enable affine mode (AP=1)
- .equ CP_PROJECTIVE_MODE, 0x00000000 ; enable projective mode (AP=0)
- .equ CP_AP_POSITION, 5
-;
- .equ CP_TRP_MASK, 0x00000040 ; IEEE trap mode (TRP) mask
- .equ CP_IEEE_TRAPS_ENABLED, 0x00000040 ; IEEE trap mode enabled (TRP=1)
- .equ CP_IEEE_TRAPS_DISABLED, 0x00000000 ; IEEE trap mode disabled (TRP=0)
- .equ CP_TRP_POSITION, 6
-;
- .equ CP_SU_MASK, 0x00000080 ; IEEE sud. uflow (SU) mask
- .equ CP_IEEE_SUDDEN_UFLOW_MODE, 0x00000080 ; IEEE sud. uflow mode (SU=1)
- .equ CP_IEEE_GRADUAL_UFLOW_MODE,0x00000000 ; IEEE grad uflow mode (SU=0)
- .equ CP_SU_POSITION, 7
-;
- .equ CP_BS_MASK, 0x00000100 ; IBM sig. mask (BS)
- .equ CP_BS_POSITION, 8
-;
- .equ CP_BU_MASK, 0x00000200 ; IBM underflow mask (BU)
- .equ CP_BU_POSITION, 9
-;
- .equ CP_MS_MASK, 0x00000800 ; signed int. mpy (MS) mask
- .equ CP_SIGNED_INT_MPY_MODE, 0x00000800 ; signed int. mpy mode (MS=1)
- .equ CP_UNSIGNED_INT_MPY_MODE, 0x00000000 ; unsigned int. mpy mode (MS=0)
- .equ CP_MS_POSITION, 11
-;
- .equ CP_MF_MASK, 0x00003000 ; int. mult. fmt. mode (MF) mask
- .equ CP_MF_EQ_LSBS, 0x00000000 ; int. mult. fmt. = LSBs
- .equ CP_MF_EQ_LSBSFA, 0x00001000 ; int. mult. fmt. = LSBs,fmt. adj.
- .equ CP_MF_EQ_MSBS, 0x00002000 ; int. mult. fmt. = MSBs
- .equ CP_MF_EQ_MSBSFA, 0x00003000 ; int. mult. fmt. = MSBs,fmt. adj.
- .equ CP_MF_POSITION, 12
-;
- .equ CP_RMS_MASK, 0x0001C000 ; round mode (RMS) mask
- .equ CP_RMS_EQ_NEAREST, 0x00000000 ; round mode = to nearest
- .equ CP_RMS_EQ_MINUS_INF, 0x00004000 ; round mode = toward -oo
- .equ CP_RMS_EQ_PLUS_INF, 0x00008000 ; round mode = toward +oo
- .equ CP_RMS_EQ_ZERO, 0x0000C000 ; round mode = toward zero
- .equ CP_RMS_POSITION, 14
-;
- .equ CP_PL_MASK, 0x00100000 ; pipeline mode (PL) mask
- .equ CP_FLOWTHROUGH_MODE, 0x00000000 ; select flow-through mode
- .equ CP_PIPELINE_MODE, 0x00100000 ; select pipeline mode
- .equ CP_PL_POSITION, 20
-;
- .equ CP_INVALID_OP_EXCP_MASK, 0x00400000 ; invalid operation excp. mask(IM)
- .equ CP_RESERVED_OP_EXCP_MASK,0x00800000 ; reserved operand excp. mask(RM)
- .equ CP_OVERFLOW_EXCP_MASK, 0x01000000 ; overflow exception mask (VM)
- .equ CP_UNDERFLOW_EXCP_MASK, 0x02000000 ; underflow exception mask(UM)
- .equ CP_INEXACT_EXCP_MASK, 0x04000000 ; inexact result excp. mask(XM)
- .equ CP_ZERO_EXCP_MASK, 0x08000000 ; zero result exception mask (ZM)
- .equ CP_EXCPS_POSITION, 22
-;
- .equ CP_PLTC_MASK, 0x0000000F ; pipeline timer count (PLTC) mask
- .equ CP_PLTC_EQ_2, 0x00000002 ; pipeline timer count = 2
- .equ CP_PLTC_EQ_3, 0x00000003 ; pipeline timer count = 3
- .equ CP_PLTC_EQ_4, 0x00000004 ; pipeline timer count = 4
- .equ CP_PLTC_EQ_5, 0x00000005 ; pipeline timer count = 5
- .equ CP_PLTC_EQ_6, 0x00000006 ; pipeline timer count = 6
- .equ CP_PLTC_EQ_7, 0x00000007 ; pipeline timer count = 7
- .equ CP_PLTC_EQ_8, 0x00000008 ; pipeline timer count = 8
- .equ CP_PLTC_EQ_9, 0x00000009 ; pipeline timer count = 9
- .equ CP_PLTC_EQ_10, 0x0000000A ; pipeline timer count = 10
- .equ CP_PLTC_EQ_11, 0x0000000B ; pipeline timer count = 11
- .equ CP_PLTC_EQ_12, 0x0000000C ; pipeline timer count = 12
- .equ CP_PLTC_EQ_13, 0x0000000D ; pipeline timer count = 13
- .equ CP_PLTC_EQ_14, 0x0000000E ; pipeline timer count = 14
- .equ CP_PLTC_EQ_15, 0x0000000F ; pipeline timer count = 15
- .equ CP_PLTC_POSITION, 0
-;
- .equ CP_MATC_MASK, 0x000000F0 ; mpy-acc timer count (MATC) mask
- .equ CP_MATC_EQ_2, 0x00000020 ; mpy-acc timer count = 2
- .equ CP_MATC_EQ_3, 0x00000030 ; mpy-acc timer count = 3
- .equ CP_MATC_EQ_4, 0x00000040 ; mpy-acc timer count = 4
- .equ CP_MATC_EQ_5, 0x00000050 ; mpy-acc timer count = 5
- .equ CP_MATC_EQ_6, 0x00000060 ; mpy-acc timer count = 6
- .equ CP_MATC_EQ_7, 0x00000070 ; mpy-acc timer count = 7
- .equ CP_MATC_EQ_8, 0x00000080 ; mpy-acc timer count = 8
- .equ CP_MATC_EQ_9, 0x00000090 ; mpy-acc timer count = 9
- .equ CP_MATC_EQ_10, 0x000000A0 ; mpy-acc timer count = 10
- .equ CP_MATC_EQ_11, 0x000000B0 ; mpy-acc timer count = 11
- .equ CP_MATC_EQ_12, 0x000000C0 ; mpy-acc timer count = 12
- .equ CP_MATC_EQ_13, 0x000000D0 ; mpy-acc timer count = 13
- .equ CP_MATC_EQ_14, 0x000000E0 ; mpy-acc timer count = 14
- .equ CP_MATC_EQ_15, 0x000000F0 ; mpy-acc timer count = 15
- .equ CP_MATC_POSITION, 4
-;
- .equ CP_MVTC_MASK, 0x00000F00 ; MOVE P timer count (MVTC) mask
- .equ CP_MVTC_EQ_2, 0x00000200 ; MOVE P timer count = 2
- .equ CP_MVTC_EQ_3, 0x00000300 ; MOVE P timer count = 3
- .equ CP_MVTC_EQ_4, 0x00000400 ; MOVE P timer count = 4
- .equ CP_MVTC_EQ_5, 0x00000500 ; MOVE P timer count = 5
- .equ CP_MVTC_EQ_6, 0x00000600 ; MOVE P timer count = 6
- .equ CP_MVTC_EQ_7, 0x00000700 ; MOVE P timer count = 7
- .equ CP_MVTC_EQ_8, 0x00000800 ; MOVE P timer count = 8
- .equ CP_MVTC_EQ_9, 0x00000900 ; MOVE P timer count = 9
- .equ CP_MVTC_EQ_10, 0x00000A00 ; MOVE P timer count = 10
- .equ CP_MVTC_EQ_11, 0x00000B00 ; MOVE P timer count = 11
- .equ CP_MVTC_EQ_12, 0x00000C00 ; MOVE P timer count = 12
- .equ CP_MVTC_EQ_13, 0x00000D00 ; MOVE P timer count = 13
- .equ CP_MVTC_EQ_14, 0x00000E00 ; MOVE P timer count = 14
- .equ CP_MVTC_EQ_15, 0x00000F00 ; MOVE P timer count = 15
- .equ CP_MVTC_POSITION, 8
-;
- .equ CP_AD_MASK, 0x00001000 ;
- .equ CP_ADVANCE_DRDY_MODE, 0x00001000 ;
- .equ CP_NORMAL_DRDY_MODE, 0x00000000 ;
- .equ CP_AD_POSITION, 12
-;
- .equ CP_HE_MASK, 0x00002000 ; Halt-on-error mask (HE)
- .equ CP_HALT_ON_ERROR_ENABLED, 0x00002000 ; Halt-on-error enabled (HE=1)
- .equ CP_HALT_ON_ERROR_DISABLED,0x00000000 ; Halt-on-error disabled (HE=0)
- .equ CP_HE_POSITION, 13
-;
- .equ CP_EX_MASK, 0x00004000 ; EXCP enable mask (EX)
- .equ CP_EXCP_ENABLED, 0x00004000 ; EXCP enabled (EX=1)
- .equ CP_EXCP_DISABLED, 0x00000000 ; EXCP disabled (EX=0)
- .equ CP_EX_POSITION, 14
-;
-;
-;
-; ______________________________________________________________________
-;|______________________________________________________________________|
-;| |
-;| SYMBOLS FOR DEFINING THE STATUS REGISTER WORD |
-;| |
-;|______________________________________________________________________|
-;|______________________________________________________________________|
-;
-;
- .equ CP_INVALID_OP_EXCP, 0x00000001
- .equ CP_INVALID_OP_EXCP_POSITION, 0
-;
- .equ CP_RESERVED_OP_EXCP, 0x00000002
- .equ CP_RESERVED_OP_EXCP_POSITION, 1
-;
- .equ CP_OVERFLOW_EXCP, 0x00000004
- .equ CP_OVERFLOW_EXCP_POSITION, 2
-;
- .equ CP_UNDERFLOW_EXCP, 0x00000008
- .equ CP_UNDERFLOW_EXCP_POSITION, 3
-;
- .equ CP_INEXACT_EXCP, 0x00000010
- .equ CP_INEXACT_EXCP_POSITION, 4
-;
- .equ CP_ZERO_EXCP, 0x00000020
- .equ CP_ZERO_EXCP_POSITION, 5
-;
- .equ CP_EXCP_STATUS_MASK, 0x00000040
- .equ CP_EXCP_STATUS_FLAG_POSITION, 6
-;
- .equ CP_R_TEMP_VALID_MASK, 0x00000080
- .equ R_TEMP_VALID_POSITION, 7
-;
- .equ CP_S_TEMP_VALID_MASK, 0x00000100
- .equ CP_S_TEMP_VALID_POSITION, 8
-;
- .equ CP_I_TEMP_VALID_FLAG, 0x00000200
- .equ CP_I_TEMP_VALID_POSITION, 9
-;
- .equ CP_OPERATION_PENDING_MASK, 0x00000400
- .equ CP_OPERATION_PENDING_POSITION,10
-;
-;
-; ______________________________________________________________________
-;|______________________________________________________________________|
-;| |
-;| SYMBOLS FOR DEFINING THE FLAG REGISTER WORD |
-;| |
-;|______________________________________________________________________|
-;|______________________________________________________________________|
-;
-;
- .equ CP_INVALID_OP_FLAG, 0x00000001
- .equ CP_INVALID_OP_FLAG_POSITION, 0
-;
- .equ CP_CARRY_FLAG, 0x00000001
- .equ CP_CARRY_FLAG_POSITION, 0
-;
- .equ CP_RESERVED_OP_FLAG, 0x00000002
- .equ CP_RESERVED_OP_FLAG_POSITION, 1
-;
- .equ CP_OVERFLOW_FLAG, 0x00000004
- .equ CP_OVERFLOW_FLAG_POSITION, 2
-;
- .equ CP_UNORDERED_FLAG, 0x00000004
- .equ CP_UNORDERED_FLAG_POSITION, 2
-;
- .equ CP_UNDERFLOW_FLAG, 0x00000008
- .equ CP_UNDERFLOW_FLAG_POSITION, 3
-;
- .equ CP_LESS_THAN_FLAG, 0x00000008
- .equ CP_LESS_THAN_POSITION, 3
-;
- .equ CP_WINNER_FLAG, 0x00000008
- .equ CP_WINNER_FLAG_POSITION, 3
-;
- .equ CP_INEXACT_FLAG, 0x00000010
- .equ CP_INEXACT_FLAG_POSITION, 4
-;
- .equ CP_GREATER_THAN_FLAG, 0x00000010
- .equ CP_GREATER_THAN_FLAG_POSITION,4
-;
- .equ CP_ZERO_FLAG, 0x00000020
- .equ CP_ZERO_FLAG_POSITION, 5
-;
- .equ CP_EQUAL_FLAG, 0x00000020
- .equ CP_EQUAL_FLAG_POSITION, 5
-;
- .equ CP_SIGN_FLAG, 0x00000040
- .equ CP_SIGN_FLAG_POSITION, 6
-;
-;
-; ______________________________________________________________________
-;|______________________________________________________________________|
-;| |
-;| SYMBOLS FOR TRANSACTION REQUEST TYPES |
-;| |
-;|______________________________________________________________________|
-;|______________________________________________________________________|
-;
-;
-; write requests
-;
-; Note: Each WRITE_* transaction request, plus ADV_TEMPS sets the CA
-; (Coprocessor Active) bit in the 29000 Current Processor Status Register.
-;
- .equ CP_WRITE_R, 0x20 ;write sing or doub to R register
- .equ CP_WRITE_S, 0x21 ;write sing or doub to S register
- .equ CP_WRITE_RS, 0x22 ;write sing operands to R and S
- .equ CP_WRITE_MODE, 0x23 ;write mode double word to 29027
- .equ CP_WRITE_STATUS, 0x24 ;write status word to 29027
- .equ CP_WRITE_PREC, 0x25 ;write reg. file precision word
- ; to 29027
- .equ CP_WRITE_INST, 0x26 ;write instruction to 29027
- .equ CP_ADV_TEMPS, 0x27 ;move R-Temp, S-Temp into R,S
-;
-; read requests
-;
- .equ CP_READ_MSBS, 0x00 ;read sing result or MSB of doub
- .equ CP_READ_LSBS, 0x01 ;read LSB of doub result
- .equ CP_READ_FLAGS, 0x02 ;read 29027 flag register
- .equ CP_READ_STATUS, 0x03 ;read 29027 status register
- .equ CP_SAVE_STATE, 0x04 ;read one word of 29027 state
-;
-; "start operation" symbol; this is "OR"ed with a WRITE_R, WRITE_S,
-; WRITE_RS, or WRITE_INST symbol.
-;
-
- .equ CP_START, 0b1000000 ;bit to start 29027 operation
-;
-; "suppress exceptions reporting" symbol; this is "OR"ed with a ed
-;
-;
-
- .equ CP_NO_ERR, 0b1000000 ;suppress exception reporting
-; ; during load.
-; cp_write_r - transfers 32- or 64-bit operand to Am29027
-; register R
-; cp_write_s - transfers 32- or 64-bit operand to Am29027
-; register S
-; cp_write_rs - transfers two 32-bit floating-point operands to
-; Am29027 registers R and S
-; cp_write_prec - transfers a word to the Am29027 precision register
-; cp_write_status - transfers a word to the Am29027 status register
-; cp_write_inst - transfers an instruction to the Am29027
-; instruction register
-; cp_advance_temps - transfers the contents of the Am29027 temporary
-; registers to the corresponding working registers
-; cp_write_mode - transfers a mode specification the the Am29027
-; mode register
-; cp_read_dp - read a double-precision floating-point result
-; from the Am29027
-; cp_read_sp - read a single-precision floating-point result
-; from the Am29027
-; cp_read_int - read an integer result from the Am29027
-; cp_read_flags - read the contents of the Am29027 flag register
-; cp_read_status - read the contents of the Am29027 status register
-; cp_read_state_wd - read a single Am29027 state word
-; cp_save_state - save Am29027 state
-; cp_restore_state - restore Am29027 state
-; cp_build_inst - build an Am29027 instruction
-; cp_build_inst_h - build 16 MSBs of an Am29027 instruction
-; cp_build_inst_l - build 16 LSBs of an Am29027 instruction
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_r
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers a 32- or 64-bit operand to Am29027 input register R
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the 32-bit operand to be
-; transferred, or the 32 MSBs of the 64-bit operand to be
-; transferred.
-;
-; LSB_reg - the Am29000 g.p. register containing the 32 LSBs of the
-; 64-bit operand to be transferred
-;
-; INT - indicates that the operand to be transferred is a 32-bit
-; integer
-;
-; START - indicates that a new Am29027 operation is to be started
-; once the operand has been transferred
-;
-;
-; USAGE:
-;
-; cp_write_r reg [,LSB_reg] [,START] for floating-point operands
-; or cp_write_r reg, INT [,START] for integer operands
-;
-; Transferring double-precision floating-point operands - Either of
-; two forms is acceptable:
-;
-; cp_write_r reg
-; or cp_write_r reg, LSB_reg
-;
-; If LSB_reg is omitted, the LSBs are taken from the next g.p.
-; register.
-;
-; Ex: cp_write_r lr2 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register R, and the contents of lr3
-; to the least-significant half.
-;
-; cp_write_r lr2,lr5 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register R, and the contents of lr5
-; to the least-significant half.
-;
-;
-; Transferring single-precision floating-point operands - Use the
-; form:
-;
-; cp_write_r reg
-;
-;
-; Ex: cp_write_r lr2 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register R, (the contents of lr3
-; will be transferred to the least-
-; significant half of register R, but
-; these bits are don't cares).
-;
-;
-; Transferring integer operands - Use the form:
-;
-; cp_write_r reg,INT
-;
-;
-; Ex: cp_write_r lr2,INT Transfers the contents of lr2 to
-; the least-significant half of Am29027
-; register R, (the contents of lr2
-; will also be transferred to the most-
-; significant half of register R, but
-; these bits are don't cares).
-;
-;
-; Starting an Am29027 operation - Any of the forms above may be
-; appended with parameter START, e.g.:
-;
-; cp_write_r lr2,START
-;
-; cp_write_r lr2,lr5,START
-;
-; cp_write_r lr2,INT,START
-;
-;
-;============================================================================
-;
- .macro cp_write_r,p1,p2,p3
-;
- .if $narg==0
- .err
- .print "cp_WRITE_R: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- store 1,CP_WRITE_R,p1,%%((&p1)+1)
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","INT"
- store 1,CP_WRITE_R,p1,p1
- .exitm
- .endif
-;
- .ifeqs "@p2@","START"
- store 1,CP_WRITE_R|CP_START,p1,%%((&p1)+1)
- .exitm
- .endif
-;
- store 1,CP_WRITE_R,p1,p2
- .exitm
-;
- .endif
-;
-;
- .if $narg==3
-;
- .ifeqs "@p2@","START"
- .ifeqs "@p3@","INT"
- store 1,CP_WRITE_R|CP_START,p1,p1
- .else
- .err
- .print "cp_write_r: bad parameter list"
- .endif
- .exitm
- .endif
-;
- .ifeqs "@p2@","INT"
- .ifeqs "@p3@","START"
- store 1,CP_WRITE_R|CP_START,p1,p1
- .else
- .err
- .print "cp_write_r: bad parameter list"
- .endif
- .exitm
- .endif
-;
- .ifeqs "@p3@","START"
- store 1,CP_WRITE_R|CP_START,p1,p2
- .else
- .err
- .print "cp_write_r: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=4
- .err
- .print "cp_write_r: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_s
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers a 32- or 64-bit operand to Am29027 input register S
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the 32-bit operand to be
-; transferred, or the 32 MSBs of the 64-bit operand to be
-; transferred.
-;
-; LSB_reg - the Am29000 g.p. register containing the 32 LSBs of the
-; 64-bit operand to be transferred
-;
-; INT - indicates that the operand to be transferred is a 32-bit
-; integer
-;
-; START - indicates that a new Am29027 operation is to be started
-; once the operand has been transferred
-;
-;
-; USAGE:
-;
-; cp_write_s reg [,LSB_reg] [,START] for floating-point operands
-; or cp_write_s reg, INT [,START] for integer operands
-;
-; Transferring double-precision floating-point operands - Either of
-; two forms is acceptable:
-;
-; cp_write_s reg
-; or cp_write_s reg, LSB_reg
-;
-; If LSB_reg is omitted, the LSBs are taken from the next g.p.
-; register.
-;
-; Ex: cp_write_s lr2 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register S, and the contents of lr3
-; to the least-significant half.
-;
-; cp_write_s lr2,lr5 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register S, and the contents of lr5
-; to the least-significant half.
-;
-;
-; Transferring single-precision floating-point operands - Use the
-; form:
-;
-; cp_write_s reg
-;
-;
-; Ex: cp_write_s lr2 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register S, (the contents of lr3
-; will be transferred to the least-
-; significant half of register S, but
-; these bits are don't cares).
-;
-;
-; Transferring integer operands - Use the form:
-;
-; cp_write_s reg,INT
-;
-;
-; Ex: cp_write_s lr2,INT Transfers the contents of lr2 to
-; the least-significant half of Am29027
-; register S, (the contents of lr2
-; will also be transferred to the most-
-; significant half of register S, but
-; these bits are don't cares).
-;
-;
-; Starting an Am29027 operation - Any of the forms above may be
-; appended with parameter START, e.g.:
-;
-; cp_write_s lr2,START
-;
-; cp_write_s lr2,lr5,START
-;
-; cp_write_s lr2,INT,START
-;
-;
-;============================================================================
-;
- .macro cp_write_s,p1,p2,p3
-;
- .if $narg==0
- .err
- .print "cp_write_s: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- store 1,CP_WRITE_S,p1,%%((&p1)+1)
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","INT"
- store 1,CP_WRITE_S,p1,p1
- .exitm
- .endif
-;
- .ifeqs "@p2@","START"
- store 1,CP_WRITE_S|CP_START,p1,%%((&p1)+1)
- .exitm
- .endif
-;
- store 1,CP_WRITE_S,p1,p2
- .exitm
-;
- .endif
-;
-;
- .if $narg==3
-;
- .ifeqs "@p2@","START"
- .ifeqs "@p3@","INT"
- store 1,CP_WRITE_S|CP_START,p1,p1
- .else
- .err
- .print "cp_write_s: bad parameter list"
- .endif
- .exitm
- .endif
-;
- .ifeqs "@p2@","INT"
- .ifeqs "@p3@","START"
- store 1,CP_WRITE_S|CP_START,p1,p1
- .else
- .err
- .print "cp_write_s: bad parameter list"
- .endif
- .exitm
- .endif
-;
- .ifeqs "@p3@","START"
- store 1,CP_WRITE_S|CP_START,p1,p2
- .else
- .err
- .print "cp_write_s: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=4
- .err
- .print "cp_write_s: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_rs
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers two 32-bit floating-point operands to Am29027
-; input registers R and S
-;
-; PARAMETERS:
-; reg1 - the Am29000 g.p. register containing the 32-bit operand to be
-; transferred to register R
-;
-; reg2 - the Am29000 g.p. register containing the 32-bit operand to be
-; transferred to register S
-;
-; START - indicates that a new Am29027 operation is to be started
-; once the operands have been transferred
-;
-;
-; USAGE:
-;
-; cp_write_rs reg1, reg2 [,START]
-;
-; Ex: cp_write_rs lr2,lr5 Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register R, and the contents of lr5
-; to the most-significant half of Am29027
-; register S.
-;
-; cp_write_rs lr2,lr5,START Transfers the contents of lr2 to
-; the most-significant half of Am29027
-; register R, and the contents of lr5
-; to the most-significant half of Am29027
-; register S; a new operation is started
-; once the transfer is complete.
-;
-;
-;
-;============================================================================
-;
- .macro cp_write_rs,p1,p2,p3
-;
-;
- .if $narg<=1
- .err
- .print "cp_write_rs: missing parameter(s)"
- .exitm
- .endif
-;
-;
- .if $narg==2
- .ifeqs "@p2@","START"
- .err
- .print "cp_write_rs: bad parameter list"
- .else
- store 1,CP_WRITE_RS,p1,p2
- .endif
- .exitm
- .endif
-;
-;
- .if $narg==3
- .ifeqs "@p3@","START"
- store 1,CP_WRITE_RS|CP_START,p1,p2
- .else
- .err
- .print "cp_write_rs: bad parameter list"
- .endif
- .exitm
- .endif
-;
-;
- .if $narg>=4
- .err
- .print "cp_write_rs: too many parameters"
- .exitm
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_prec
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers a word to the Am29027 precision register
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the word to be
-; transferred to the Am29027 precision register
-;
-; USAGE:
-;
-; cp_write_prec reg
-;
-; Ex: cp_write_prec lr2 Transfers the contents of lr2 to
-; the Am29027 precision register.
-;
-;
-;============================================================================
-;
- .macro cp_write_prec,p1
-;
-;
- .if $narg!=1
- .err
- .print "cp_write_prec: bad parameter list"
- .else
- store 1,CP_WRITE_PREC,p1,0
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_status
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers a word to the Am29027 precision register
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the word to be
-; transferred to the Am29027 status register
-;
-; RESTORE - indicates that this is the last step of a state restoration
-; sequence (flow-through mode only)
-;
-; INVALIDATE - indicates that the current contents of the ALU pipeline
-; register are to be invalidated (pipeline mode only)
-;
-; USAGE:
-;
-; cp_write_status reg [,RESTORE|INVALIDATE]
-;
-; Ex: cp_write_status lr2 Transfers the contents of lr2 to
-; the Am29027 status register.
-;
-;
-; cp_write_status lr2,RESTORE Transfers the contents of lr2 to
-; the Am29027 status register, and
-; completes the state restore
-; sequence
-;
-; cp_write_status lr2,INVALIDATE Transfers the contents of lr2 to
-; the Am29027 status register, and
-; invalidates the contents of the
-; ALU pipeline.
-;
-;
-;============================================================================
-;
- .macro cp_write_status,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_write_status: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- store 1,CP_WRITE_STATUS,p1,0
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","RESTORE"
- store 1,CP_WRITE_STATUS|CP_START,p1,0
- .exitm
- .endif
-;
- .ifeqs "@p2@","INVALIDATE"
- store 1,CP_WRITE_STATUS|CP_START,p1,0
- .exitm
- .endif
-;
- .err
- .print "cp_write_status: bad parameter list"
- .exitm
-;
- .endif
-;
-;
- .if $narg >=3
- .err
- .print "cp_write_status: too many parameters"
- .exitm
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_inst
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 16, 1988
-;
-; FUNCTION: Transfers an instruction word to the Am29027 instruction
-; register
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the word to be
-; transferred to the Am29027 instruction register
-;
-; START - indicates that a new Am29027 operation is to be started
-; once the instruction word has been transferred
-;
-; USAGE:
-;
-; cp_write_inst reg [,START]
-;
-; Ex: cp_write_inst lr2 Transfers the contents of lr2 to
-; the Am29027 instruction register.
-;
-;
-; cp_write_inst lr2,START Transfers the contents of lr2 to
-; the Am29027 status register; a
-; new operation is started once the
-; transfer is complete.
-;
-;
-;============================================================================
-;
- .macro cp_write_inst,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_write_inst: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- store 1,CP_WRITE_INST,p1,p1
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","START"
- store 1,CP_WRITE_INST|CP_START,p1,p1
- .else
- .err
- .print "cp_write_inst: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg >=3
- .err
- .print "cp_write_inst: too many parameters"
- .exitm
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_advance_temps
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers the contents of Am29027 registers R-Temp, S-Temp,
-; and I-Temp to register R, register S, and the instruction
-; register, respectively.
-;
-; PARAMETERS: none
-;
-; USAGE:
-;
-; cp_advance_temps
-;
-;
-;
-;============================================================================
-;
- .macro cp_advance_temps
-;
-;
- .if $narg!=0
- .err
- .print "cp_advance_temp: takes no parameters"
- .else
- store 1,CP_ADV_TEMPS,gr1,0 ; use gr1 because it's never protected
- .endif
-;
- .endm
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_write_mode
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers a 64-bit mode specification to the Am29027 mode
-; register
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register containing the 32 MSBs of the
-; 64-bit mode specification to be transferred.
-;
-; LSB_reg - the Am29000 g.p. register containing the 32 LSBs of the
-; 64-bit mode specification to be transferred.
-;
-; USAGE:
-;
-; cp_write_mode reg [,LSB_reg]
-;
-; Either of two forms is acceptable:
-;
-; cp_write_mode reg
-; or cp_write_mode reg, LSB_reg
-;
-; If LSB_reg is omitted, the LSBs are taken from the next g.p.
-; register.
-;
-; Ex: cp_write_mode lr2 Transfers the contents of lr2 to
-; the most-significant half of the Am29027
-; mode register, and the contents of lr3
-; to the least-significant half.
-;
-; cp_write_mode lr2,lr5 Transfers the contents of lr2 to
-; the most-significant half of the Am29027
-; mode register, and the contents of lr5
-; to the least-significant half.
-;
-;
-;
-;============================================================================
-;
- .macro cp_write_mode,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_write_mode: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- store 1,CP_WRITE_MODE,%%((&p1)+1),p1
- .exitm
- .endif
-;
-;
- .if $narg==2
- store 1,CP_WRITE_MODE,p2,p1
- .exitm
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_write_mode: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_dp
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers the current Am29027 double-precison floating-point
-; result to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the 32 MSBs of the
-; current Am29027 result are to be written.
-;
-; LSB_reg - the Am29000 g.p. register into which the 32 LSBs of the
-; current Am29027 result are to be written.
-;
-; NO_ERR - indicates that exception reporting is to be suppressed for this
-; transfer.
-;
-; USAGE:
-;
-; cp_read_dp reg [,LSB_reg] [,START]
-;
-; Either of two forms is acceptable:
-;
-; cp_read_dp reg
-; or cp_read_dp reg, LSB_reg
-;
-; If LSB_reg is omitted, the LSBs are written to the next g.p. register.
-;
-; Ex: cp_read_dp lr2 Transfers the 32 MSBs of the current
-; Am29027 result to lr2, and the 32 LSBs
-; to lr3.
-;
-; cp_read_dp lr2,lr5 Transfers the 32 MSBs of the current
-; Am29027 result to lr2, and the 32 LSBs
-; to lr5.
-;
-; Exception reporting can be suppressed by appending NO_ERR to either
-; of the above, e.g.:
-;
-; cp_read_dp lr2,NO_ERR
-; cp_read_dp lr2,lr5,NO_ERR
-;
-;
-;============================================================================
-;
- .macro cp_read_dp,p1,p2,p3
-;
- .if $narg==0
- .err
- .print "cp_read_dp: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_READ_LSBS,%%((&p1)+1),0
- load 1,CP_READ_MSBS,p1,0
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","NO_ERR"
- load 1,CP_READ_LSBS|CP_NO_ERR,%%((&p1)+1),0
- load 1,CP_READ_MSBS|CP_NO_ERR,p1,0
- .exitm
- .endif
-;
- load 1,CP_READ_LSBS,p2,0
- load 1,CP_READ_MSBS,p1,0
- .exitm
-;
- .endif
-;
-;
- .if $narg==3
-;
- .ifeqs "@p3@","NO_ERR"
- load 1,CP_READ_LSBS|CP_NO_ERR,p2,0
- load 1,CP_READ_MSBS|CP_NO_ERR,p1,0
- .else
- .err
- .print "cp_read_dp: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=4
- .err
- .print "cp_read_dp: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_sp
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers the current Am29027 single-precison floating-point
-; result to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the current Am29027
-; result is to be written.
-;
-; NO_ERR - indicates that exception reporting is to be suppressed for this
-; transfer.
-;
-; USAGE:
-;
-; cp_read_sp reg [,START]
-;
-; Ex: cp_read_sp lr2 Transfers the current Am29027 result
-; to lr2.
-;
-; cp_read_sp lr2,NO_ERR Transfers the current Am29027 result
-; to lr2, and suppresses exception
-; reporting for this transfer.
-;
-;
-;============================================================================
-;
- .macro cp_read_sp,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_read_sp: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_READ_MSBS,p1,0
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","NO_ERR"
- load 1,CP_READ_MSBS|CP_NO_ERR,p1,0
- .else
- .err
- .print "cp_read_sp: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_read_sp: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_int
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers the current Am29027 integer result to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the current Am29027
-; result is to be written.
-;
-; NO_ERR - indicates that exception reporting is to be suppressed for this
-; transfer.
-;
-; USAGE:
-;
-; cp_read_int reg [,START]
-;
-; Ex: cp_read_int lr2 Transfers the current Am29027 result
-; to lr2.
-;
-; cp_read_int lr2,NO_ERR Transfers the current Am29027 result
-; to lr2, and suppresses exception
-; reporting for this transfer.
-;
-;
-;============================================================================
-;
- .macro cp_read_int,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_read_int: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_READ_LSBS,p1,0
- nop ; leave a cycle for the MSBs to come out
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","NO_ERR"
- load 1,CP_READ_LSBS|CP_NO_ERR,p1,0
- nop ; leave a cycle for the MSBs to come out
- .else
- .err
- .print "cp_read_int: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_read_int: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_flags
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 17, 1988
-;
-; FUNCTION: Transfers the contents of the Am29027 flag register
-; to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the current Am29027
-; flag register contents are to be written.
-;
-; NO_ERR - indicates that exception reporting is to be suppressed for this
-; transfer.
-;
-; USAGE:
-;
-; cp_read_flags reg [,START]
-;
-; Ex: cp_read_flags lr2 Transfers the Am29027 flag register
-; contents to lr2.
-;
-; cp_read_flags lr2,NO_ERR Transfers the Am29027 flag register
-; contents to lr2, and suppresses
-; exception reporting for this
-; transfer.
-;
-;
-;============================================================================
-;
- .macro cp_read_flags,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_read_flags: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_READ_FLAGS,p1,0
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","NO_ERR"
- load 1,CP_READ_FLAGS|CP_NO_ERR,p1,0
- .else
- .err
- .print "cp_read_flags: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_read_flags: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_status
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 18, 1988
-;
-; FUNCTION: Transfers the contents of the Am29027 status register
-; to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the current Am29027
-; status register contents are to be written.
-;
-; NO_ERR - indicates that exception reporting is to be suppressed for this
-; transfer.
-;
-; USAGE:
-;
-; cp_read_status reg [,START]
-;
-; Ex: cp_read_status lr2 Transfers the Am29027 status register
-; contents to lr2.
-;
-; cp_read_status lr2,NO_ERR Transfers the Am29027 status register
-; contents to lr2, and suppresses
-; exception reporting for this
-; transfer.
-;
-;
-;============================================================================
-;
- .macro cp_read_status,p1,p2
-;
- .if $narg==0
- .err
- .print "cp_read_status: missing parameter(s)"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_READ_STATUS,p1,0
- .exitm
- .endif
-;
-;
- .if $narg==2
-;
- .ifeqs "@p2@","NO_ERR"
- load 1,CP_READ_STATUS|CP_NO_ERR,p1,0
- .else
- .err
- .print "cp_read_status: bad parameter list"
- .endif
- .exitm
-;
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_read_status: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_read_state_wd
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 18, 1988
-;
-; FUNCTION: Transfers the next Am29027 state word to the Am29000
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the next Am29027
-; state word contents are to be written.
-;
-; USAGE:
-;
-; cp_read_state_wd reg
-;
-; Ex: cp_read_state_wd lr2 Transfers the next Am29027 state word
-; to lr2.
-;
-;============================================================================
-;
- .macro cp_read_state_wd,p1
-;
- .if $narg==0
- .err
- .print "cp_read_state_wd: missing parameter"
- .endif
-;
-;
- .if $narg==1
- load 1,CP_SAVE_STATE,p1,0
- .exitm
- .endif
-;
-;
- .if $narg>=2
- .err
- .print "cp_read_state_wd: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_save_state
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 18, 1988
-;
-; FUNCTION: Transfers the current Am29027 state to the Am29000
-;
-; PARAMETERS:
-; reg - the first of 30 Am29000 g.p. registers in which Am29027 state
-; is saved.
-;
-; USAGE:
-;
-; cp_save_state reg
-;
-; This macro transfers the current Am29027 state to a block of 30 Am29000
-; registers. State is stored in the following order:
-;
-; reg instruction register
-; reg+1 I-Temp
-; reg+2 R MSBs
-; reg+3 R LSBs
-; reg+4 S MSBs
-; reg+5 S LSBs
-; reg+6 R-Temp MSBs
-; reg+7 R-Temp LSBs
-; reg+8 S-Temp MSBs
-; reg+9 S-Temp LSBs
-; reg+10 status
-; reg+11 precision
-; reg+12 RF0 MSBs
-; reg+13 RF0 LSBs
-; . .
-; . .
-; . .
-; reg+26 RF7 MSBs
-; reg+27 RF7 LSBs
-; reg+28 mode MSBs
-; reg+29 mode LSBs
-;
-;
-; Ex: cp_save_state lr2 Transfers the current Am29027 state to
-; the Am29000, starting at lr2.
-;
-; NOTES:
-; 1) This macro stores all 64-bit quantities in "big-endian" order,
-; i.e. MSBs first. For example, the 32 MSBs of register R are
-; stored in reg+2, and the 32 LSBs are stored in reg+3. The Am29027
-; transfers these quantites in "little-endian" order; the macro
-; is responsible for swapping MS and LS words.
-;
-;============================================================================
-;
- .macro cp_save_state,p1
-;
- .if $narg==0
- .err
- .print "cp_save_state: missing parameter"
- .endif
-;
-;
- .if $narg==1
- cp_read_sp p1,NO_ERR
- ;guarantee that we're at beginning of
- ; save state sequence
- cp_read_state_wd %%((&p1)+ 0) ; instruction
- cp_read_state_wd %%((&p1)+ 1) ; I-Temp
- cp_read_state_wd %%((&p1)+ 3) ; R MSBs
- cp_read_state_wd %%((&p1)+ 2) ; R LSBs
- cp_read_state_wd %%((&p1)+ 5) ; S MSBs
- cp_read_state_wd %%((&p1)+ 4) ; S LSBs
- cp_read_state_wd %%((&p1)+ 7) ; R-Temp MSBs
- cp_read_state_wd %%((&p1)+ 6) ; R-Temp LSBs
- cp_read_state_wd %%((&p1)+ 9) ; S-Temp MSBs
- cp_read_state_wd %%((&p1)+ 8) ; S-Temp LSBs
- cp_read_state_wd %%((&p1)+10) ; status
- cp_read_state_wd %%((&p1)+11) ; precision
- cp_read_state_wd %%((&p1)+13) ; RF0 MSBs
- cp_read_state_wd %%((&p1)+12) ; RF0 LSBs
- cp_read_state_wd %%((&p1)+15) ; RF1 MSBs
- cp_read_state_wd %%((&p1)+14) ; RF1 LSBs
- cp_read_state_wd %%((&p1)+17) ; RF2 MSBs
- cp_read_state_wd %%((&p1)+16) ; RF2 LSBs
- cp_read_state_wd %%((&p1)+19) ; RF3 MSBs
- cp_read_state_wd %%((&p1)+18) ; RF3 LSBs
- cp_read_state_wd %%((&p1)+21) ; RF4 MSBs
- cp_read_state_wd %%((&p1)+20) ; RF4 LSBs
- cp_read_state_wd %%((&p1)+23) ; RF5 MSBs
- cp_read_state_wd %%((&p1)+22) ; RF5 LSBs
- cp_read_state_wd %%((&p1)+25) ; RF6 MSBs
- cp_read_state_wd %%((&p1)+24) ; RF6 LSBs
- cp_read_state_wd %%((&p1)+27) ; RF7 MSBs
- cp_read_state_wd %%((&p1)+26) ; RF7 LSBs
- cp_read_state_wd %%((&p1)+29) ; mode MSBs
- cp_read_state_wd %%((&p1)+28) ; mode LSBs
- .exitm
- .endif
-;
-;
- .if $narg>=2
- .err
- .print "cp_save_state: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_restore_state
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 18, 1988
-;
-; FUNCTION: Restores Am29027 state
-;
-; PARAMETERS:
-; reg - the first of 30 Am29000 g.p. registers containing Am29027
-; state.
-;
-; temp - a scratch register used by cp_restore_state
-;
-; USAGE:
-;
-; cp_restore_state reg,temp
-;
-; This macro restores Am29027 state by transferring 30 words to the
-; Am29027; these words are taken from a block of Am29000 g.p. registers
-; starting at "reg." The words are assumed to be stored in the following
-; order:
-;
-; reg instruction register
-; reg+1 I-Temp
-; reg+2 R MSBs
-; reg+3 R LSBs
-; reg+4 S MSBs
-; reg+5 S LSBs
-; reg+6 R-Temp MSBs
-; reg+7 R-Temp LSBs
-; reg+8 S-Temp MSBs
-; reg+9 S-Temp LSBs
-; reg+10 status
-; reg+11 precision
-; reg+12 RF0 MSBs
-; reg+13 RF0 LSBs
-; . .
-; . .
-; . .
-; reg+26 RF7 MSBs
-; reg+27 RF7 LSBs
-; reg+28 mode MSBs
-; reg+29 mode LSBs
-;
-;
-; Ex: cp_restore_state lr2,gr70 Restores Am29027 state by
-; transferring a block of 30 words
-; that begins at lr2. Register gr70
-; is used as scratch storage by this
-; macro.
-;
-;
-;============================================================================
-;
- .macro cp_restore_state,p1,p2
-;
- .if $narg<=1
- .err
- .print "cp_restore_state: missing parameter(s)"
- .endif
-;
-;
- .if $narg==2
-
- const p2,0 ;clear the status register
- cp_write_status p2
-;
- cp_write_mode %%((&p1)+28) ;restore the mode register
-;
- const p2,0x80000018 ; restore RF0
- consth p2,0x80000018
- cp_write_inst p2
- cp_write_r %%((&p1)+12),START
-;
- consth p2,0x90000018 ; restore RF1
- cp_write_inst p2
- cp_write_r %%((&p1)+14),START
-;
- consth p2,0xA0000018 ; restore RF2
- cp_write_inst p2
- cp_write_r %%((&p1)+16),START
-;
- consth p2,0xB0000018 ; restore RF3
- cp_write_inst p2
- cp_write_r %%((&p1)+18),START
-;
- consth p2,0xC0000018 ; restore RF4
- cp_write_inst p2
- cp_write_r %%((&p1)+20),START
-;
- consth p2,0xD0000018 ; restore RF5
- cp_write_inst p2
- cp_write_r %%((&p1)+22),START
-;
- consth p2,0xE0000018 ; restore RF6
- cp_write_inst p2
- cp_write_r %%((&p1)+24),START
-;
- consth p2,0xF0000018 ; restore RF7
- cp_write_inst p2
- cp_write_r %%((&p1)+26),START
-;
- cp_read_sp p2 ; do a dummy read, to guarantee that
- ; the last operation is complete
-;
- cp_write_prec %%((&p1)+11) ; restore precision
-;
- cp_write_r %%((&p1)+2) ; restore R
- cp_write_s %%((&p1)+4) ; restore S
- cp_write_inst %%((&p1)+0) ; restore instruction
- cp_advance_temps ; move R,S, and inst. to working registers
-;
- cp_write_r %%((&p1)+6) ; restore R-Temp
- cp_write_s %%((&p1)+8) ; restore S-Temp
- cp_write_inst %%((&p1)+1) ; restore I-Temp
-;
-; restore the status register, retime last operation
-;
- cp_write_status %%((&p1)+10),RESTORE
-;
- .exitm
- .endif
-;
-;
- .if $narg>=3
- .err
- .print "cp_restore_state: too many parameters"
- .endif
-;
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_build_inst
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 24, 1988
-; : January 4, 1989 Rich Parker
-;
-; FUNCTION: Builds a 32-bit Am29027 instruction in an Am29000 g.p.
-; register.
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the instruction word
-; is to be written
-;
-; op_code - mnemonic specifying the operation to be performed
-; (e.g. FADD, P_TIMES_Q)
-;
-; precision - precision specification for destination, source operands:
-; D_S - double-prec. result, single-prec. input(s)
-; D_D - double-prec. result, double-prec. input(s)
-; S_S - single-prec. result, single-prec. input(s)
-; S_D - single-prec. result, double-prec. input(s)
-;
-; dest - destination for the operation result:
-; RF0 - store result in Am29027 register file location RF0
-; RF1 - store result in Am29027 register file location RF1
-; RF2 - store result in Am29027 register file location RF2
-; RF3 - store result in Am29027 register file location RF3
-; RF4 - store result in Am29027 register file location RF4
-; RF5 - store result in Am29027 register file location RF5
-; RF6 - store result in Am29027 register file location RF6
-; RF7 - store result in Am29027 register file location RF7
-; GP - result is to be stored in an Am29000 g.p. register
-; with a read_dp, read_sp, or read_int macro.
-;
-; source1,
-; source2,
-; source3 - source operand specifications:
-; R - take source from Am29027 register R
-; S - take source from Am29027 register S
-; RF0 - take source from Am29027 register file location RF0
-; RF1 - take source from Am29027 register file location RF1
-; RF2 - take source from Am29027 register file location RF2
-; RF3 - take source from Am29027 register file location RF3
-; RF4 - take source from Am29027 register file location RF4
-; RF5 - take source from Am29027 register file location RF5
-; RF6 - take source from Am29027 register file location RF6
-; RF7 - take source from Am29027 register file location RF7
-; 0 - source is 0
-; ONE_HALF - source is constant .5 (f.p. operations only)
-; IMINUS1 - source is constant -1 (integer operations only)
-; 1 - source is constant 1
-; 2 - source is constant 2
-; 3 - source is constant 3
-; PI - source is constant pi (f.p. operations only)
-; IMINUSMAX - source is -(2**63) (integer operations only)
-;
-;
-; USAGE:
-;
-; cp_build_inst reg,op_code,[precision,]dest,source1[,source2][,source3]
-;
-; Op-codes fall into two categories: those that correspond to Am29000
-; floating-point op-codes, and for which the precision is implicit (e.g.
-; FADD, DMUL); and those that correspond to Am29027 base operations
-; (e.g. P_PLUS_T, P_TIMES_Q), and which require an explicit precision
-; specification.
-;
-; Every operation specified must have a destination; if the operation
-; does not write a result to the Am29027 register file, destination GP
-; must be specified. The number of source operands specified must agree
-; with the number of source operands required by the operation specified.
-;
-; Ex:
-;
-; cp_build_inst lr2,FADD,RF7,R,S
-; Builds an instruction word to
-; perform the operation:
-; RF7 <- R + S
-; where R, S, and RF7 are single-
-; precision f.p. operands. The
-; instruction word is placed in lr2.
-;
-; cp_build_inst gr119,DMUL,GP,R,ONE_HALF
-; Builds an instruction word to
-; perform the operation:
-; R * .5
-; where R, .5, and the result
-; are double-precision f.p. operands.
-; The result is not written to the
-; Am29027 register file. The
-; instruction word is written to
-; gr119.
-;
-;
-; cp_build_inst lr3,MIN_P_AND_T,S_D,RF7,R,S
-; Builds an instruction word to
-; perform the operation:
-; RF7 <- smaller of(R,S)
-; where R and S are double-precision
-; f.p. operands, and RF7 is a single-
-; precison f.p. operand. The
-; instruction word is written to
-; lr3.
-;
-;
-; cp_build_inst gr97,I_P_TIMES_Q,S_S,GP,R,2
-; Builds an instruction word to
-; perform the operation:
-; R * 2
-; where R, .5, and the result
-; are single-precision integer operands.
-; The result is not written to the
-; Am29027 register file. The
-; instruction word is written to
-; gr97
-;
-;
-; cp_build_inst lr7,ABS_P,D_D,RF6,S
-; Builds an instruction word to
-; perform the operation:
-; RF6 <- |S|
-; where S and RF7 are double-precision
-; f.p. operands. The instruction
-; word is written to gr7.
-;
-;
-; cp_build_inst gr127,PQ_PLUS_T,D_D,RF6,R,S,RF6
-; Builds an instruction word to
-; perform the operation:
-; RF6 <- (R * S) + RF6
-; where R, S and the result are
-; double-precision f.p. operands.
-; The instruction word is written
-; to gr127.
-;
-;
-;
-;============================================================================
-;
- .macro cp_build_inst,p1,p2,p3,p4,p5,p6,p7
-;
- .if $narg<=3
- .err
- .print "cp_build_inst: missing parameter(s)"
- .exitm
- .endif
-;
-; classify operation type
-;
- .set _cp_op_type,255
-
- _cp_set_op_params p2,FADD,1,5,4,0,5
- _cp_set_op_params p2,DADD,1,5,4,0,5
- _cp_set_op_params p2,FSUB,1,5,4,0,5
- _cp_set_op_params p2,DSUB,1,5,4,0,5
- _cp_set_op_params p2,FMUL,1,5,4,5,0
- _cp_set_op_params p2,DMUL,1,5,4,5,0
- _cp_set_op_params p2,FEQ,1,5,4,0,5
- _cp_set_op_params p2,DEQ,1,5,4,0,5
- _cp_set_op_params p2,FGE,1,5,4,0,5
- _cp_set_op_params p2,DGE,1,5,4,0,5
- _cp_set_op_params p2,FGT,1,5,4,0,5
- _cp_set_op_params p2,DGT,1,5,4,0,5
- _cp_set_op_params p2,CONVERT_I_TO_F,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_I_TO_D,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_F_TO_I,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_D_TO_I,1,4,0,0,4
-;
-; The next two lines were corrected on 1-4-89, Rich Parker
-;
- _cp_set_op_params p2,CONVERT_F_TO_D,1,4,4,0,0
- _cp_set_op_params p2,CONVERT_D_TO_F,1,4,4,0,0
-;
- _cp_set_op_params p2,PASS_P,0,5,5,0,0
- _cp_set_op_params p2,MINUSP,0,5,5,0,0
- _cp_set_op_params p2,ABSP,0,5,5,0,0
- _cp_set_op_params p2,SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABSP_PLUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABS_ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,MINUSP_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,ABS_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MIN_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,LIMIT_P_TO_MAGT,0,6,5,0,6
- _cp_set_op_params p2,CONVERT_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,SCALE_T_TO_INT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,PQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,PQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,MINUSABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_MINUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ROUND_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,RECIPROCAL_OF_P,0,5,5,0,0
- _cp_set_op_params p2,CONVERT_T_TO_ALT,0,5,0,0,5
- _cp_set_op_params p2,CONVERT_T_FROM_ALT,0,5,0,0,5
- _cp_set_op_params p2,I_PASS_P,0,5,5,0,0
- _cp_set_op_params p2,I_MINUSP,0,5,5,0,0
- _cp_set_op_params p2,I_ABSP,0,5,5,0,0
- _cp_set_op_params p2,I_SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,I_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,I_COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_CONVERT_T_TO_FLOAT,0,5,0,0,5
- _cp_set_op_params p2,I_SCALE_T_TO_FLOAT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,I_P_OR_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_XOR_T,0,6,5,0,6
- _cp_set_op_params p2,I_NOT_T,0,5,0,0,5
- _cp_set_op_params p2,I_LSHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_ASHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_FSHIFT_PT_BY_Q,0,7,5,7,6
- _cp_set_op_params p2,MOVE_P,0,5,5,0,0
-;
-;
-; if we couldn't find the op_code, flag an error
-;
- .if _cp_op_type>=2
- .err
- .print "cp_build_inst: invalid Am29027 instruction mnemonic"
- .exitm
- .endif
-;
-; if number of parameters is incorrect, flag error
-;
- .if $narg!=_cp_no_params
- .err
- .print "cp_build_inst: incorrect number of parameters"
- .exitm
- .endif
-;
-; find correct value for precision field, if appropriate
-;
- .set _cp_prec_field,0 ; ** CORRECTION (1/4/89 ROP)
- .if _cp_op_type==0 ; need to look for precision
- .set _cp_found_precision,0
- .ifeqs "@p3@","D_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","D_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .if _cp_found_precision==0
- .err
- .print "cp_build_inst: missing precision field"
- .exitm
- .endif
- .endif
-;
-; find value for destination field
-;
- .if _cp_op_type==0
- .set _cp_dest_field_val,CP_DEST_EQ_@p4
- .else
- .set _cp_dest_field_val,CP_DEST_EQ_@p3
- .endif
-;
-; find correct value for p select field
-;
- .if _cp_p_paramno==0
- .set _cp_p_field_val,0x00000000
- .endif
- .if _cp_p_paramno==4
- .set _cp_p_field_val,CP_P_EQ_@p4
- .endif
- .if _cp_p_paramno==5
- .set _cp_p_field_val,CP_P_EQ_@p5
- .endif
- .if _cp_p_paramno==6
- .set _cp_p_field_val,CP_P_EQ_@p6
- .endif
- .if _cp_p_paramno==7
- .set _cp_p_field_val,CP_P_EQ_@p7
- .endif
- .ifeqs "@p2@","I_NOT_T"
- .set _cp_p_field_val,CP_P_EQ_IMINUS1
- .endif
-;
-; find correct value for q select field
-;
- .if _cp_q_paramno==0
- .set _cp_q_field_val,0x00000000
- .endif
- .if _cp_q_paramno==4
- .set _cp_q_field_val,CP_Q_EQ_@p4
- .endif
- .if _cp_q_paramno==5
- .set _cp_q_field_val,CP_Q_EQ_@p5
- .endif
- .if _cp_q_paramno==6
- .set _cp_q_field_val,CP_Q_EQ_@p6
- .endif
- .if _cp_q_paramno==7
- .set _cp_q_field_val,CP_Q_EQ_@p7
- .endif
-;
-; find correct value for t select field
-;
- .if _cp_t_paramno==0
- .set _cp_t_field_val,0x00000000
- .endif
- .if _cp_t_paramno==4
- .set _cp_t_field_val,CP_T_EQ_@p4
- .endif
- .if _cp_t_paramno==5
- .set _cp_t_field_val,CP_T_EQ_@p5
- .endif
- .if _cp_t_paramno==6
- .set _cp_t_field_val,CP_T_EQ_@p6
- .endif
- .if _cp_t_paramno==7
- .set _cp_t_field_val,CP_T_EQ_@p7
- .endif
-;
-;
- .set _cp_inst_word,CP_@p2@|_cp_prec_field|_cp_dest_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_p_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_q_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_t_field_val
-
- const p1,_cp_inst_word
- consth p1,_cp_inst_word
-;
- .endm
-;
-;
-;
- .macro _cp_set_op_params,par1,par2,par3,par4,par5,par6,par7
- .ifeqs "@par1@","@par2@"
- .set _cp_op_type,par3
- .set _cp_no_params,par4
- .set _cp_p_paramno,par5
- .set _cp_q_paramno,par6
- .set _cp_t_paramno,par7
- .endif
- .endm
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_build_inst_h
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 24, 1988
-; : January 4, 1989 Rich Parker
-;
-; FUNCTION: Builds a 16 MSBs of a 32-bit Am29027 instruction in an
-; Am29000 g.p. register.
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the instruction word
-; is to be written
-;
-; op_code - mnemonic specifying the operation to be performed
-; (e.g. FADD, P_TIMES_Q)
-;
-; precision - precision specification for destination, source operands:
-; D_S - double-prec. result, single-prec. input(s)
-; D_D - double-prec. result, double-prec. input(s)
-; S_S - single-prec. result, single-prec. input(s)
-; S_D - single-prec. result, double-prec. input(s)
-;
-; dest - destination for the operation result:
-; RF0 - store result in Am29027 register file location RF0
-; RF1 - store result in Am29027 register file location RF1
-; RF2 - store result in Am29027 register file location RF2
-; RF3 - store result in Am29027 register file location RF3
-; RF4 - store result in Am29027 register file location RF4
-; RF5 - store result in Am29027 register file location RF5
-; RF6 - store result in Am29027 register file location RF6
-; RF7 - store result in Am29027 register file location RF7
-; GP - result is to be stored in an Am29000 g.p. register
-; with a read_dp, read_sp, or read_int macro.
-;
-; source1,
-; source2,
-; source3 - source operand specifications:
-; R - take source from Am29027 register R
-; S - take source from Am29027 register S
-; RF0 - take source from Am29027 register file location RF0
-; RF1 - take source from Am29027 register file location RF1
-; RF2 - take source from Am29027 register file location RF2
-; RF3 - take source from Am29027 register file location RF3
-; RF4 - take source from Am29027 register file location RF4
-; RF5 - take source from Am29027 register file location RF5
-; RF6 - take source from Am29027 register file location RF6
-; RF7 - take source from Am29027 register file location RF7
-; 0 - source is 0
-; ONE_HALF - source is constant .5 (f.p. operations only)
-; IMINUS1 - source is constant -1 (integer operations only)
-; 1 - source is constant 1
-; 2 - source is constant 2
-; 3 - source is constant 3
-; PI - source is constant pi (f.p. operations only)
-; IMINUSMAX - source is -(2**63) (integer operations only)
-;
-;
-; USAGE:
-;
-; cp_build_inst_h reg,op_code,[precision,]dest,source1[,source2][,source3]
-;
-; This macro is similar to cp_build_inst, but creates only the 16 MSBs
-; of the 32-bit Am29027 instruction word. This macro is useful in cases
-; where the 16 LSBs of instruction word, which specify the operation
-; to be performed, already exist in an Am29000 g.p. register, but where
-; the 16 MSBs, which specify operand sources and destination, must be
-; changed. In such cases, one Am29000 instruction can be saved by using
-; cp_build_inst_h instead of cp_build_inst.
-;
-; Syntax and usage are identical to that of cp_build_inst.
-;
-; NOTE: This macro references macro _cp_set_op_params, which appears
-; in the assembly listing for macro _cp_build_inst.
-;
-;
-;
-;
-;============================================================================
-;
- .macro cp_build_inst_h,p1,p2,p3,p4,p5,p6,p7
-;
- .if $narg<=3
- .err
- .print "cp_build_inst_h: missing parameter(s)"
- .exitm
- .endif
-;
-; classify operation type
-;
- .set _cp_op_type,255
-
- _cp_set_op_params p2,FADD,1,5,4,0,5
- _cp_set_op_params p2,DADD,1,5,4,0,5
- _cp_set_op_params p2,FSUB,1,5,4,0,5
- _cp_set_op_params p2,DSUB,1,5,4,0,5
- _cp_set_op_params p2,FMUL,1,5,4,5,0
- _cp_set_op_params p2,DMUL,1,5,4,5,0
- _cp_set_op_params p2,FEQ,1,5,4,0,5
- _cp_set_op_params p2,DEQ,1,5,4,0,5
- _cp_set_op_params p2,FGE,1,5,4,0,5
- _cp_set_op_params p2,DGE,1,5,4,0,5
- _cp_set_op_params p2,FGT,1,5,4,0,5
- _cp_set_op_params p2,DGT,1,5,4,0,5
- _cp_set_op_params p2,CONVERT_I_TO_F,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_I_TO_D,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_F_TO_I,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_D_TO_I,1,4,0,0,4
-;
-; The next two lines were corrected on 1-4-89, Rich Parker
-;
- _cp_set_op_params p2,CONVERT_F_TO_D,1,4,4,0,0
- _cp_set_op_params p2,CONVERT_D_TO_F,1,4,4,0,0
-;
- _cp_set_op_params p2,PASS_P,0,5,5,0,0
- _cp_set_op_params p2,MINUSP,0,5,5,0,0
- _cp_set_op_params p2,ABSP,0,5,5,0,0
- _cp_set_op_params p2,SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABSP_PLUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABS_ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,MINUSP_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,ABS_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MIN_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,LIMIT_P_TO_MAGT,0,6,5,0,6
- _cp_set_op_params p2,CONVERT_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,SCALE_T_TO_INT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,PQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,PQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,MINUSABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_MINUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ROUND_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,RECIPROCAL_OF_P,0,5,5,0,0
- _cp_set_op_params p2,CONVERT_T_TO_ALT,0,5,0,0,5
- _cp_set_op_params p2,CONVERT_T_FROM_ALT,0,5,0,0,5
- _cp_set_op_params p2,I_PASS_P,0,5,5,0,0
- _cp_set_op_params p2,I_MINUSP,0,5,5,0,0
- _cp_set_op_params p2,I_ABSP,0,5,5,0,0
- _cp_set_op_params p2,I_SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,I_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,I_COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_CONVERT_T_TO_FLOAT,0,5,0,0,5
- _cp_set_op_params p2,I_SCALE_T_TO_FLOAT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,I_P_OR_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_XOR_T,0,6,5,0,6
- _cp_set_op_params p2,I_NOT_T,0,5,0,0,5
- _cp_set_op_params p2,I_LSHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_ASHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_FSHIFT_PT_BY_Q,0,7,5,7,6
- _cp_set_op_params p2,MOVE_P,0,5,5,0,0
-;
-;
-; if we couldn't find the op_code, flag an error
-;
- .if _cp_op_type>=2
- .err
- .print "cp_build_inst_h: invalid Am29027 instruction mnemonic"
- .exitm
- .endif
-;
-; if number of parameters is incorrect, flag error
-;
- .if $narg!=_cp_no_params
- .err
- .print "cp_build_inst_h: incorrect number of parameters"
- .exitm
- .endif
-;
-; find correct value for precision field, if appropriate
-;
- .set _cp_prec_field,0 ; ** CORRECTION (1-4-89 Rich Parker)
- .if _cp_op_type==0 ; need to look for precision
- .set _cp_found_precision,0
- .ifeqs "@p3@","D_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","D_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .if _cp_found_precision==0
- .err
- .print "cp_build_inst_h: missing precision field"
- .exitm
- .endif
- .endif
-;
-; find value for destination field
-;
- .if _cp_op_type==0
- .set _cp_dest_field_val,CP_DEST_EQ_@p4
- .else
- .set _cp_dest_field_val,CP_DEST_EQ_@p3
- .endif
-;
-; find correct value for p select field
-;
- .if _cp_p_paramno==0
- .set _cp_p_field_val,0x00000000
- .endif
- .if _cp_p_paramno==4
- .set _cp_p_field_val,CP_P_EQ_@p4
- .endif
- .if _cp_p_paramno==5
- .set _cp_p_field_val,CP_P_EQ_@p5
- .endif
- .if _cp_p_paramno==6
- .set _cp_p_field_val,CP_P_EQ_@p6
- .endif
- .if _cp_p_paramno==7
- .set _cp_p_field_val,CP_P_EQ_@p7
- .endif
- .ifeqs "@p2@","I_NOT_T"
- .set _cp_p_field_val,CP_P_EQ_IMINUS1
- .endif
-;
-; find correct value for q select field
-;
- .if _cp_q_paramno==0
- .set _cp_q_field_val,0x00000000
- .endif
- .if _cp_q_paramno==4
- .set _cp_q_field_val,CP_Q_EQ_@p4
- .endif
- .if _cp_q_paramno==5
- .set _cp_q_field_val,CP_Q_EQ_@p5
- .endif
- .if _cp_q_paramno==6
- .set _cp_q_field_val,CP_Q_EQ_@p6
- .endif
- .if _cp_q_paramno==7
- .set _cp_q_field_val,CP_Q_EQ_@p7
- .endif
-;
-; find correct value for t select field
-;
- .if _cp_t_paramno==0
- .set _cp_t_field_val,0x00000000
- .endif
- .if _cp_t_paramno==4
- .set _cp_t_field_val,CP_T_EQ_@p4
- .endif
- .if _cp_t_paramno==5
- .set _cp_t_field_val,CP_T_EQ_@p5
- .endif
- .if _cp_t_paramno==6
- .set _cp_t_field_val,CP_T_EQ_@p6
- .endif
- .if _cp_t_paramno==7
- .set _cp_t_field_val,CP_T_EQ_@p7
- .endif
-;
-;
- .set _cp_inst_word,CP_@p2@|_cp_prec_field|_cp_dest_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_p_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_q_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_t_field_val
-;
- consth p1,_cp_inst_word
-;
- .endm
-;
-;
-;
-;
-;============================================================================
-; MACRO NAME: cp_build_inst_l
-;
-; WRITTEN BY: Bob Perlman
-;
-; MOST RECENT UPDATE: April 24, 1988
-; : January 4, 1989 Rich Parker
-;
-; FUNCTION: Builds a 16 LSBs of a 32-bit Am29027 instruction in an
-; Am29000 g.p. register; the 16 MSBs of the register are
-; set to 0..
-;
-; PARAMETERS:
-; reg - the Am29000 g.p. register into which the instruction word
-; is to be written
-;
-; op_code - mnemonic specifying the operation to be performed
-; (e.g. FADD, P_TIMES_Q)
-;
-; precision - precision specification for destination, source operands:
-; D_S - double-prec. result, single-prec. input(s)
-; D_D - double-prec. result, double-prec. input(s)
-; S_S - single-prec. result, single-prec. input(s)
-; S_D - single-prec. result, double-prec. input(s)
-;
-; dest - destination for the operation result:
-; RF0 - store result in Am29027 register file location RF0
-; RF1 - store result in Am29027 register file location RF1
-; RF2 - store result in Am29027 register file location RF2
-; RF3 - store result in Am29027 register file location RF3
-; RF4 - store result in Am29027 register file location RF4
-; RF5 - store result in Am29027 register file location RF5
-; RF6 - store result in Am29027 register file location RF6
-; RF7 - store result in Am29027 register file location RF7
-; GP - result is to be stored in an Am29000 g.p. register
-; with a read_dp, read_sp, or read_int macro.
-;
-; source1,
-; source2,
-; source3 - source operand specifications:
-; R - take source from Am29027 register R
-; S - take source from Am29027 register S
-; RF0 - take source from Am29027 register file location RF0
-; RF1 - take source from Am29027 register file location RF1
-; RF2 - take source from Am29027 register file location RF2
-; RF3 - take source from Am29027 register file location RF3
-; RF4 - take source from Am29027 register file location RF4
-; RF5 - take source from Am29027 register file location RF5
-; RF6 - take source from Am29027 register file location RF6
-; RF7 - take source from Am29027 register file location RF7
-; 0 - source is 0
-; ONE_HALF - source is constant .5 (f.p. operations only)
-; IMINUS1 - source is constant -1 (integer operations only)
-; 1 - source is constant 1
-; 2 - source is constant 2
-; 3 - source is constant 3
-; PI - source is constant pi (f.p. operations only)
-; IMINUSMAX - source is -(2**63) (integer operations only)
-;
-;
-; USAGE:
-;
-; cp_build_inst_l reg,op_code,[precision,]dest,source1[,source2][,source3]
-;
-; This macro is similar to cp_build_inst, but creates only the 16 LSBs
-; of the 32-bit Am29027 instruction word; the 16 MSBs of the target
-; register are set to 0. This macro is useful in cases
-; where it is helpful to specify instruction LSBs and MSBs separately,
-; to improve instruction scheduling.
-;
-; Syntax and usage are identical to that of cp_build_inst.
-;
-; NOTE: This macro references macro _cp_set_op_params, which appears
-; in the assembly listing for macro _cp_build_inst.
-;
-;
-;============================================================================
-;
- .macro cp_build_inst_l,p1,p2,p3,p4,p5,p6,p7
-;
- .if $narg<=3
- .err
- .print "cp_build_inst_h: missing parameter(s)"
- .exitm
- .endif
-;
-; classify operation type
-;
- .set _cp_op_type,255
-
- _cp_set_op_params p2,FADD,1,5,4,0,5
- _cp_set_op_params p2,DADD,1,5,4,0,5
- _cp_set_op_params p2,FSUB,1,5,4,0,5
- _cp_set_op_params p2,DSUB,1,5,4,0,5
- _cp_set_op_params p2,FMUL,1,5,4,5,0
- _cp_set_op_params p2,DMUL,1,5,4,5,0
- _cp_set_op_params p2,FEQ,1,5,4,0,5
- _cp_set_op_params p2,DEQ,1,5,4,0,5
- _cp_set_op_params p2,FGE,1,5,4,0,5
- _cp_set_op_params p2,DGE,1,5,4,0,5
- _cp_set_op_params p2,FGT,1,5,4,0,5
- _cp_set_op_params p2,DGT,1,5,4,0,5
- _cp_set_op_params p2,CONVERT_I_TO_F,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_I_TO_D,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_F_TO_I,1,4,0,0,4
- _cp_set_op_params p2,CONVERT_D_TO_I,1,4,0,0,4
-;
-; The next two lines were corrected on 1-4-89, Rich Parker
-;
- _cp_set_op_params p2,CONVERT_F_TO_D,1,4,4,0,0
- _cp_set_op_params p2,CONVERT_D_TO_F,1,4,4,0,0
-;
- _cp_set_op_params p2,PASS_P,0,5,5,0,0
- _cp_set_op_params p2,MINUSP,0,5,5,0,0
- _cp_set_op_params p2,ABSP,0,5,5,0,0
- _cp_set_op_params p2,SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,MINUSP_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,ABSP_PLUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,ABS_ABSP_MINUS_ABST,0,6,5,0,6
- _cp_set_op_params p2,P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,MINUSP_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,ABS_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MAX_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,MIN_ABSP_AND_ABST,0,6,5,0,6
- _cp_set_op_params p2,LIMIT_P_TO_MAGT,0,6,5,0,6
- _cp_set_op_params p2,CONVERT_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,SCALE_T_TO_INT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,PQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_PLUS_T,0,7,5,6,7
- _cp_set_op_params p2,PQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,MINUSPQ_MINUS_T,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,MINUSABSPQ_PLUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ABSPQ_MINUS_ABST,0,7,5,6,7
- _cp_set_op_params p2,ROUND_T_TO_INT,0,5,0,0,5
- _cp_set_op_params p2,RECIPROCAL_OF_P,0,5,5,0,0
- _cp_set_op_params p2,CONVERT_T_TO_ALT,0,5,0,0,5
- _cp_set_op_params p2,CONVERT_T_FROM_ALT,0,5,0,0,5
- _cp_set_op_params p2,I_PASS_P,0,5,5,0,0
- _cp_set_op_params p2,I_MINUSP,0,5,5,0,0
- _cp_set_op_params p2,I_ABSP,0,5,5,0,0
- _cp_set_op_params p2,I_SIGNT_TIMES_ABSP,0,6,6,0,5
- _cp_set_op_params p2,I_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_MINUSP_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_PLUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_ABS_P_MINUS_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_TIMES_Q,0,6,5,6,0
- _cp_set_op_params p2,I_COMPARE_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MAX_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_MIN_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_CONVERT_T_TO_FLOAT,0,5,0,0,5
- _cp_set_op_params p2,I_SCALE_T_TO_FLOAT_BY_Q,0,6,0,6,5
- _cp_set_op_params p2,I_P_OR_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_AND_T,0,6,5,0,6
- _cp_set_op_params p2,I_P_XOR_T,0,6,5,0,6
- _cp_set_op_params p2,I_NOT_T,0,5,0,0,5
- _cp_set_op_params p2,I_LSHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_ASHIFT_P_BY_Q,0,6,5,6,0
- _cp_set_op_params p2,I_FSHIFT_PT_BY_Q,0,7,5,7,6
- _cp_set_op_params p2,MOVE_P,0,5,5,0,0
-;
-;
-; if we couldn't find the op_code, flag an error
-;
- .if _cp_op_type>=2
- .err
- .print "cp_build_inst_h: invalid Am29027 instruction mnemonic"
- .exitm
- .endif
-;
-; if number of parameters is incorrect, flag error
-;
- .if $narg!=_cp_no_params
- .err
- .print "cp_build_inst_h: incorrect number of parameters"
- .exitm
- .endif
-;
-; find correct value for precision field, if appropriate
-;
- .set _cp_prec_field,0 ; CORRECTION (1-4-89 Rich Parker)
- .if _cp_op_type==0 ; need to look for precision
- .set _cp_found_precision,0
- .ifeqs "@p3@","D_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","D_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_D"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .ifeqs "@p3@","S_S"
- .set _cp_prec_field,CP_@p3
- .set _cp_found_precision,1
- .endif
- .if _cp_found_precision==0
- .err
- .print "cp_build_inst_h: missing precision field"
- .exitm
- .endif
- .endif
-;
-; find value for destination field
-;
- .if _cp_op_type==0
- .set _cp_dest_field_val,CP_DEST_EQ_@p4
- .else
- .set _cp_dest_field_val,CP_DEST_EQ_@p3
- .endif
-;
-; find correct value for p select field
-;
- .if _cp_p_paramno==0
- .set _cp_p_field_val,0x00000000
- .endif
- .if _cp_p_paramno==4
- .set _cp_p_field_val,CP_P_EQ_@p4
- .endif
- .if _cp_p_paramno==5
- .set _cp_p_field_val,CP_P_EQ_@p5
- .endif
- .if _cp_p_paramno==6
- .set _cp_p_field_val,CP_P_EQ_@p6
- .endif
- .if _cp_p_paramno==7
- .set _cp_p_field_val,CP_P_EQ_@p7
- .endif
- .ifeqs "@p2@","I_NOT_T"
- .set _cp_p_field_val,CP_P_EQ_IMINUS1
- .endif
-;
-; find correct value for q select field
-;
- .if _cp_q_paramno==0
- .set _cp_q_field_val,0x00000000
- .endif
- .if _cp_q_paramno==4
- .set _cp_q_field_val,CP_Q_EQ_@p4
- .endif
- .if _cp_q_paramno==5
- .set _cp_q_field_val,CP_Q_EQ_@p5
- .endif
- .if _cp_q_paramno==6
- .set _cp_q_field_val,CP_Q_EQ_@p6
- .endif
- .if _cp_q_paramno==7
- .set _cp_q_field_val,CP_Q_EQ_@p7
- .endif
-;
-; find correct value for t select field
-;
- .if _cp_t_paramno==0
- .set _cp_t_field_val,0x00000000
- .endif
- .if _cp_t_paramno==4
- .set _cp_t_field_val,CP_T_EQ_@p4
- .endif
- .if _cp_t_paramno==5
- .set _cp_t_field_val,CP_T_EQ_@p5
- .endif
- .if _cp_t_paramno==6
- .set _cp_t_field_val,CP_T_EQ_@p6
- .endif
- .if _cp_t_paramno==7
- .set _cp_t_field_val,CP_T_EQ_@p7
- .endif
-;
-;
- .set _cp_inst_word,CP_@p2@|_cp_prec_field|_cp_dest_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_p_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_q_field_val
- .set _cp_inst_word,_cp_inst_word|_cp_t_field_val
-;
- const p1,_cp_inst_word
-;
- .endm
-;
-; end of file fpsymbol.h
diff --git a/newlib/libc/sys/a29khif/sys/intrinsi.h b/newlib/libc/sys/a29khif/sys/intrinsi.h
deleted file mode 100644
index 1ae3a8b5c..000000000
--- a/newlib/libc/sys/a29khif/sys/intrinsi.h
+++ /dev/null
@@ -1,457 +0,0 @@
-; @(#)intrinsi.h 1.4 90/10/14 20:56:06, Copyright 1988, 1989, 1990 AMD
-; start of file intrinsi.h
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-;
- .title "QTC Intrinsics Header file"
-;
-; Floating point library package for AMD 29000 family
-;
-; Copyright 1988 Advanced Micro Devices, Inc.
-;
-; All rights reserved
-;
-; Developed for AMD by Quantitative Technology Corporation
-; 8700 SW Creekside Place Suite D
-; Beaverton OR 97005
-; (503) 626-3081
-;
-; Version information :
-;
-; Revision 1.6 89/06/29 16:08:51 jimh
-; Fixed two bugs regarding compatiblility with the fpsymbol file. The
-; definitions of ROUND_TO_PLUS/MINUS_INFINITY were reversed. Set_Rounding
-; _Mode was fixed to set the local copy (29000 resident) of rounding mode
-; in 29027 mode.
-;
-;
-; Revision 1.5 89/04/17 11:20:49 jim
-; replaced emfsr and emtsr macro calls with mfsr and mtsr instructions.
-;
-; Revision 1.4 89/02/24 15:18:04 jimh
-; Added the definitions of FP_ENV_MODE_1_DEFAULT, FP_ENV_MODE_2_DEFAULT,
-; FP_FLAGS_DEFAULT.
-; Added macro clear_Flags.
-; Changed the operation of set_Invalid_Op_flag, set_Reserved_Op_flag.
-;
-; Revision 1.3 89/02/01 18:30:12 jimh
-; Changed the way set_Rounding_Mode, extract_Rounding_Mode, set_Invalid_Op_flag
-; and set_Reserved_Op_flag are done. Changed save_FP_regs.
-;
-; Revision 1.2 89/01/31 10:01:54 jimh
-; Updated to the new standard. This includes moving in register
-; definitions, changing old symbols to reflect those in fpsymbol.h,
-; and changing the include file to smartmac.h.
-;
-;
- .include "../traps/fpenv.h" ; RPD 8/21/89
- .include "sys/smartmac.h"
-
- .equ DOUBLE_EXP_WIDTH, 11
- .equ DOUBLE_EXTENDED_WIDTH, 56
-
- .equ SIGNED, 0
- .equ UNSIGNED, 1
-
- .equ ROUND_TO_NEAREST, 0
- .equ ROUND_TO_MINUS_INFINITY, 1
- .equ ROUND_TO_PLUS_INFINITY, 2
- .equ ROUND_TO_ZERO, 3
- .equ ROUNDING_MODE_POSITION, 14
-
- .equ FORMAT_INTEGER, 0
- .equ FORMAT_SINGLE, 1
- .equ FORMAT_DOUBLE, 2
-
- .equ DOUBLE_MSB_MASK,0x00080000
-;
-; The following are definitions used in the smart macro package, defining
-; the 29000 shadow registers for the floating-point register file, and
-; some temporary registers used during the library routines
-;
- .reg FP0, gr96
- .reg FP1, gr98
- .reg FP2, gr100
- .reg FP3, gr102
- .reg FP4, gr104
- .reg FP5, gr106
- .reg FP6, gr108
- .reg FP7, gr110
-;
-; GR60 through GR6F are used to return the value of a function
-;
- .reg rtn0, gr96
- .reg rtn1, gr97
- .reg rtn2, gr98
- .reg rtn3, gr99
- .reg rtn4, gr100
- .reg rtn5, gr101
- .reg rtn6, gr102
- .reg rtn7, gr103
- .reg rtn8, gr104
- .reg rtn9, gr105
- .reg rtn10, gr106
- .reg rtn11, gr107
- .reg rtn12, gr108
- .reg rtn13, gr109
- .reg rtn14, gr110
- .reg rtn15, gr111
-;
-; GR74..GR78 (116-120) - temporaries
-;
- .reg t0, gr116
- .reg t1, gr117
- .reg t2, gr118
- .reg t3, gr119
- .reg t4, gr120
-;
-; FP_ENV_MODE_1 and FP_ENV_MODE_2 are based on 64-bit 29027 Mode register,
-; and thus the fpsymbol.h CP_ constants may be used directly.
-;
-; FP_ENV_MODE_1 (Bits 0-31)
-;
-; 0-3 - floating-point format select, always 0
-; 4 - Saturate enable
-; 5 - IEEE Affine/Projective mode (ignored by traps code)
-; 6 - IEEE Trap enable
-; 7 - IEEE Sudden underflow / FP Environment Fast Float Select
-; 8-10 - ignored
-; 11 - Integer multiplication signed/unsigned select
-; 12-13 - Integer multiplication format adjust
-; 14-16 - Rounding mode select
-; 17-19 - ignored
-; 20 - Pipeline mode select
-; 21 - ignored
-; 22 - Invalid operation mask bit
-; 23 - Reserved operand mask bit
-; 24 - Overflow mask bit
-; 25 - Underflow mask bit
-; 26 - Inexact result mask bit
-; 27 - Zero mask bit
-; 28-31 - ignored
-;
-; FP_ENV_MODE_2 (Bits 32-63) [Hardware configuration register, rarely modified]
-;
-; 32-35 - Pipeline timer count
-; 36-39 - Timer count for multiply-accumulate operation
-; 40-43 - Timer count for save state transaction request
-; 44-63 - ignored
-;
-; FP_ENV_MODE_1 definitions
-;
- .set FP_ENV_MODE_1_DEFAULT, CP_PFF_EQ_IEEE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_AFF_EQ_IEEE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_AFFINE_MODE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_IEEE_TRAPS_DISABLED
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_IEEE_GRADUAL_UFLOW_MODE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_UNSIGNED_INT_MPY_MODE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_MF_EQ_LSBS
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_RMS_EQ_NEAREST
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_FLOWTHROUGH_MODE
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_INVALID_OP_EXCP_MASK
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_RESERVED_OP_EXCP_MASK
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_OVERFLOW_EXCP_MASK
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_UNDERFLOW_EXCP_MASK
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_INEXACT_EXCP_MASK
- .set FP_ENV_MODE_1_DEFAULT,FP_ENV_MODE_1_DEFAULT|CP_ZERO_EXCP_MASK
-;
-; FP_ENV_MODE_2 definitions
-;
- .set FP_ENV_MODE_2_DEFAULT, CP_PLTC_EQ_6
- .set FP_ENV_MODE_2_DEFAULT,FP_ENV_MODE_2_DEFAULT|CP_MATC_EQ_9
- .set FP_ENV_MODE_2_DEFAULT,FP_ENV_MODE_2_DEFAULT|CP_MVTC_EQ_3
- .set FP_ENV_MODE_2_DEFAULT,FP_ENV_MODE_2_DEFAULT|CP_NORMAL_DRDY_MODE
- .set FP_ENV_MODE_2_DEFAULT,FP_ENV_MODE_2_DEFAULT|CP_HALT_ON_ERROR_DISABLED
- .set FP_ENV_MODE_2_DEFAULT,FP_ENV_MODE_2_DEFAULT|CP_EXCP_DISABLED
-;
-; FP_FLAGS_DEFAULT definitions
-;
- .equ FP_FLAGS_DEFAULT, 0x00000000 ; No flags set
-;
-; The following macros are used by transcendentals to access the environment.
-;
-; MACRO NAME: clear_Flags
-;
-; FUNCTION: to clear the flags on entry to a transcendental routine.
-;
-; INPUT PARAMETERS: reg - temporary working register
-; reg2 - temporary working register
-;
- .macro clear_Flags,reg,reg2
- .endm
-;
-; MACRO NAME: set_Invalid_Op_flag
-;
-; FUNCTION: to set the Invalid operation flag in the floating-point status
-; register
-;
-; INPUT PARAMETERS: reg - temporary working register
-; reg2 - 2nd temporary working register
-;
- .macro set_Invalid_Op_flag,reg,reg2
- .endm
-
-;
-; MACRO NAME: set_Reserved_Op_flag
-;
-; FUNCTION: to set the Reserved Op flag in the floating-point status register
-;
-; INPUT PARAMETERS: reg - temporary working register
-; reg2 - 2nd temporary working register
-;
- .macro set_Reserved_Op_flag,reg,reg2
- .endm
-
-;
-; MACRO NAME: extract_Rounding_Mode
-;
-; FUNCTION: to extract the Rounding Mode portion of the floating-point
-; invironment mode register, shift the value to the range of
-; 0-7, and leave it in a register
-;
-; INPUT PARAMETERS: reg - destination for the mode
-;
- .macro extract_Rounding_Mode,reg
- .ifdef _29027_MODE
- .extern __29027Mode
- const reg,__29027Mode
- consth reg,__29027Mode
- load 0,0,reg,reg
- srl reg,reg,CP_RMS_POSITION
- and reg,reg,CP_RMS_MASK >> CP_RMS_POSITION
- .else
- mfsr reg,FPE
- and reg,reg,FPE_FPRND_MASK
- srl reg,reg,FPE_FPRND_POSITION
- .endif
- .endm
-
-;
-; MACRO NAME: set_Rounding_Mode
-;
-; FUNCTION: to set the 29027 Rounding Mode to a given value
-;
-; INPUT PARAMETERS: reg - working register
-; reg2 - second working register
-; rounding_mode - value of the rounding mode
-; 0 - round to nearest
-; 1 - round to minus infinity
-; 2 - round to plus infinity
-; 3 - round to zero
-;
-; NOTES: rounding_mode value is not checked
-; 29027 Mode register is NOT written by this macro
-;
- .macro set_Rounding_Mode,reg,reg2,mode
- .ifdef _29027_MODE
- .extern __29027Mode
- const reg2,__29027Mode
- consth reg2,__29027Mode
- load 0,0,reg,reg2
- const reg2,CP_RMS_MASK
- consth reg2,CP_RMS_MASK
- andn reg,reg,reg2
- const reg2,mode
- sll reg2,reg2,CP_RMS_POSITION
- or reg,reg,reg2
- const reg2,__29027Mode
- consth reg2,__29027Mode
- store 0,0,reg,reg2
- add reg2,reg2,4
- load 0,0,reg2,reg2
- cp_write_mode reg2,reg
- .else
- mfsr reg,FPE
- andn reg,reg,FPE_FPRND_MASK
- const reg2,mode
- sll reg2,reg2,FPE_FPRND_POSITION
- or reg,reg,reg2
- mtsr FPE,reg
- .endif
- .endm
-;
-;
-; NOTE: The 29027 is the floating point coprocessor for the 29000.
-; It contains 8 floating point registers FP0 to FP7. Three of
-; these, FP0, FP1, and FP2, are currently designated as scratch,
-; that is, they will not be preserved across calls. The other
-; five contain values that must be saved whenever they are used
-; in code, and restored before the exit of the routine. The 29027
-; registers are tagged with a single bit indicating the precision
-; of the current value. When numbers are read into the 29027,
-; they are always stored in double precision, so that single
-; precision values are converted on input. Only the MOVE instruction
-; fails to do this automatic widening. If the result from calculations
-; in the 29027 ALU (determined by the result precision bit in the
-; instruction word) is to be single precision and the result saved in
-; an FP reg, the result precision bit from the instruction gets copied
-; into the precision bit for the register. If a single precision
-; SNaN is saved from the 29027, it will be converted to a double
-; precision QNaN. Along the way it will cause an unmasked exception
-; when read off the chip and cause changes to the status register.
-; So the preservation routine will need to modify the mode register to
-; mask off the exceptions, save the state of the status register before
-; saving the FP regs, and restore the status and mode registers to their
-; original settings when the save is complete.
-;
-; REFERENCE: The instructions to drive the Am29027 are described in the
-; Am29027 manual beginning on page 17. Table 4 describes the
-; operation codes and table 3 the multiplexer codes. Communication
-; with the 29000 is described on pages 11 and 12 of the Am29027
-; manual and chapters 6 and 8 of the Am29000 User's Manual
-;
-; MACRO NAME: save_FP_regs
-;
-; FUNCTION: to save the AMD 29027 floating point register values in the
-; 29000 general purpose registers
-;
-; INPUT PARAMETERS: fp_register, one of the 29027 registers FP3 - FP7
-;
-; REGISTER USAGE: the following registers are used in save_FP_regs
-;
-; rtn0 this register is used in setting the mode and status registers
-; rtn1 this register is used in setting the mode and status registers
-; rtn6 this register is used to store the MSW when FP3 is saved
-; rtn7 this register is used to store the LSW when FP3 is saved
-; rtn8 this register is used to store the MSW when FP4 is saved
-; rtn9 this register is used to store the LSW when FP4 is saved
-;
-
- .macro save_FP_regs,fp_register
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, expand the macro into 29027 code to preserve FP register
- ;
- .ifeqs "@fp_register@","FP3"
- const rtn6,__29027Mode ; Load the address of FP mode
- consth rtn6,__29027Mode
- load 0,0,rtn0,rtn6 ; Load MSW of FP mode into rtn0
- add rtn6,rtn6,4 ; Increment rtn6 + 4
- load 0,0,rtn1,rtn6 ; Load LSW of FP mode into rtn1
- const rtn6,CP_RESERVED_OP_EXCP_MASK ; Load mask to disable exception
- consth rtn6,CP_RESERVED_OP_EXCP_MASK
- or rtn0,rtn0,rtn6 ; OR in disable of exception mask
- cp_write_mode rtn1, rtn0 ; Reset mode w/exception disabled
- cp_read_status rtn0 ; Read status and save in rtn1
- const rtn6,CP_PASS_P | CP_P_EQ_RF3 ; Instruction is PASS_P from RF3
- consth rtn6,CP_PASS_P | CP_P_EQ_RF3
- ; Load & execute the instruction
- ;
- store 1,CP_WRITE_INST | CP_START,rtn6,rtn6
- load 1,CP_READ_MSBS,rtn6,rtn6 ; Read the MSW to first register
- load 1,CP_READ_LSBS,rtn7,rtn7 ; Read the LSW to second register
- cp_write_status rtn0 ; Restore the original status
- const rtn1,__29027Mode ; Load the address of FP mode
- consth rtn1,__29027Mode
- load 0,0,rtn0,rtn1 ; Load MSW of FP mode into rtn0
- add rtn1,rtn1,4 ; Increment rtn6 to __29027Mode+4
- load 0,0,rtn1,rtn1 ; Load LSW of FP mode into rtn1
- cp_write_mode rtn1, rtn0 ; Restore the original write mode
- .endif
- .ifeqs "@fp_register@","FP4"
- const rtn8,__29027Mode ; Load the address of FP mode
- consth rtn8,__29027Mode
- load 0,0,rtn0,rtn8 ; Load MSW of FP mode into rtn0
- add rtn8,rtn8,4 ; Increment rtn6 + 4
- load 0,0,rtn1,rtn8 ; Load LSW of FP mode into rtn1
- const rtn8,CP_RESERVED_OP_EXCP_MASK ; Load mask to disable exception
- consth rtn8,CP_RESERVED_OP_EXCP_MASK
- or rtn0,rtn0,rtn8 ; OR in disable of exception mask
- cp_write_mode rtn1, rtn0 ; Reset mode w/exception disabled
- cp_read_status rtn0 ; Read status and save in rtn1
- const rtn8,CP_PASS_P | CP_P_EQ_RF4 ; Instruction is PASS_P from RF4
- consth rtn8,CP_PASS_P | CP_P_EQ_RF4
- ; Load & execute the instruction
- ;
- store 1,CP_WRITE_INST | CP_START,rtn8,rtn8
- load 1,CP_READ_MSBS,rtn8,rtn8 ; Read the MSW to first register
- load 1,CP_READ_LSBS,rtn9,rtn9 ; Read the LSW to second register
- cp_write_status rtn0 ; Restore the original status
- const rtn1,__29027Mode ; Load the address of FP mode
- consth rtn1,__29027Mode
- load 0,0,rtn0,rtn1 ; Load MSW of FP mode into rtn0
- add rtn1,rtn1,4 ; Increment rtn6 + 4
- load 0,0,rtn1,rtn1 ; Load LSW of FP mode into rtn1
- cp_write_mode rtn1, rtn0 ; Restore the original write mode
- .endif
- .else
- ;
- ; For 29000 mode, do nothing
- ;
- .endif
- .endm
-;
-; MACRO NAME: restore_FP_regs
-;
-; FUNCTION: to restore the AMD 29027 floating point register values from the
-; 29000 general purpose registers
-;
-; INPUT PARAMETERS: fp_register, one of the 29027 registers FP3 - FP7
-;
-; REGISTER USAGE: the following registers are used in restore_FP_regs
-;
-; rtn0 this register is used in setting the mode and status registers
-; rtn6 the value in this register is stored as the MSW of FP3
-; rtn7 the value in this register is stored as the LSW of FP3
-; rtn8 the value in this register is stored as the MSW of FP4
-; rtn9 the value in this register is stored as the LSW of FP4
-;
- .macro restore_FP_regs,fp_register
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, move data from return registers to the correct FP register
- ;
- .ifeqs "@fp_register@","FP3"
- store 1,CP_WRITE_R ,rtn6,rtn7 ; Move the data to the R register
- ; Then create the instruction
- ;
- const rtn0,CP_MOVE_P|CP_D_D|CP_P_EQ_R|CP_DEST_EQ_RF3
- consth rtn0,CP_MOVE_P|CP_D_D|CP_P_EQ_R|CP_DEST_EQ_RF3
- ;
- ; Perform the write
- ;
- store 1,(CP_WRITE_INST | CP_START),rtn0,0
- .endif
- .ifeqs "@fp_register@","FP4"
- store 1,CP_WRITE_R ,rtn8,rtn9 ; Move the data to the R register
- ; Then create the instruction
- ;
- const rtn0,CP_MOVE_P|CP_D_D|CP_P_EQ_R|CP_DEST_EQ_RF4
- consth rtn0,CP_MOVE_P|CP_D_D|CP_P_EQ_R|CP_DEST_EQ_RF4
- ;
- ; Perform the write
- ;
- store 1,(CP_WRITE_INST | CP_START),rtn0,0
- .endif
- .else
- ;
- ; For 29000 mode, do nothing.
- ;
- .endif
- .endm
-;
-; end of file intrinsi.h
diff --git a/newlib/libc/sys/a29khif/sys/macros.h b/newlib/libc/sys/a29khif/sys/macros.h
deleted file mode 100644
index 3c832f033..000000000
--- a/newlib/libc/sys/a29khif/sys/macros.h
+++ /dev/null
@@ -1,37 +0,0 @@
-; @(#)macros.h 1.3 90/10/14 20:56:10, Copyright 1989, 1990 AMD
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; macros.h
-; Short macros of general utility
-
- .macro mov, dest,src
- add dest, src, 0
- .endm
-
- .macro not, dest,src
- nand dest, src, src
- .endm
diff --git a/newlib/libc/sys/a29khif/sys/proreg.h b/newlib/libc/sys/a29khif/sys/proreg.h
deleted file mode 100644
index ca16b708c..000000000
--- a/newlib/libc/sys/a29khif/sys/proreg.h
+++ /dev/null
@@ -1,60 +0,0 @@
-; @(#)proreg.h 1.3 90/10/14 20:56:11, AMD
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; proreg.h
-;
- ; 16 function value return regs
- .reg v0, gr96
- .reg v1, gr97
- .reg v2, gr98
- .reg v3, gr99
- .reg v4, gr100
- .reg v5, gr101
- .reg v6, gr102
- .reg v7, gr103
- .reg v8, gr104
- .reg v9, gr105
- .reg v10, gr106
- .reg v11, gr107
- .reg v12, gr108
- .reg v13, gr109
- .reg v14, gr110
- .reg v15, gr111
-;
- .reg rsp, gr1 ; Register Stack Pointer
- .reg ret, gr96 ; First word of return value
- .reg rp0, gr112 ; Reserved for Programmer, #0
- .reg rp1, gr113 ; Reserved for Programmer, #1
- .reg rp2, gr114 ; Reserved for Programmer, #2
- .reg rp3, gr115 ; Reserved for Programmer, #3
- .reg tav, gr121 ; Temporary, Argument for Trap Handlers
- .reg tpc, gr122 ; Temporary, Return PC for Trap Handlers
- .reg lrp, gr123 ; Large Return Pointer
- .reg slp, gr124 ; Static Link Pointer
- .reg msp, gr125 ; Memory Stack Pointer
- .reg rab, gr126 ; Register Allocate Bound
- .reg rfb, gr127 ; Register Free Bound
diff --git a/newlib/libc/sys/a29khif/sys/romdcl.h b/newlib/libc/sys/a29khif/sys/romdcl.h
deleted file mode 100644
index d52ca0598..000000000
--- a/newlib/libc/sys/a29khif/sys/romdcl.h
+++ /dev/null
@@ -1,392 +0,0 @@
-; @(#)romdcl.h 1.4 90/10/14 20:56:12, Copyright 1988, 1989, 1990 AMD
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- .sbttl "Register, Constant and Macro Declarations - v1.4"
-
-; Copyright 1988, Advanced Micro Devices
-; Written by Gibbons and Associates, Inc.
-
-;v1.4 JG correct FUNCTION macro - fault in register padding to even
-
-;-----------------------------------------------------------------------
-;Global registers
-;-----------------------------------------------------------------------
- .reg rsp, gr1 ;local reg. var. stack pointer
-
- .equ SYS_TEMP, 64 ;system temp registers
-
- .reg st0, gr64
- .reg st1, gr65
- .reg st2, gr66
- .reg st3, gr67
- .reg st4, gr68
- .reg st5, gr69
- .reg st6, gr70
- .reg st7, gr71
- .reg st8, gr72
- .reg st9, gr73
- .reg st10, gr74
- .reg st11, gr75
- .reg st12, gr76
- .reg st13, gr77
- .reg st14, gr78
- .reg st15, gr79
-
- .equ SYS_STAT, 80 ;system static registers
-
- .reg ss0, gr80
- .reg ss1, gr81
- .reg ss2, gr82
- .reg ss3, gr83
- .reg ss4, gr84
- .reg ss5, gr85
- .reg ss6, gr86
- .reg ss7, gr87
- .reg ss8, gr88
- .reg ss9, gr89
- .reg ss10, gr90
- .reg ss11, gr91
- .reg ss12, gr92
- .reg ss13, gr93
- .reg ss14, gr94
- .reg ss15, gr95
-
- .equ RET_VAL, 96 ;return registers
-
- .reg v0, gr96
- .reg v1, gr97
- .reg v2, gr98
- .reg v3, gr99
- .reg v4, gr100
- .reg v5, gr101
- .reg v6, gr102
- .reg v7, gr103
- .reg v8, gr104
- .reg v9, gr105
- .reg v10, gr106
- .reg v11, gr107
- .reg v12, gr108
- .reg v13, gr109
- .reg v14, gr110
- .reg v15, gr111
-
- .equ TEMP_REG, 96 ;temp registers
-
- .reg t0, gr96
- .reg t1, gr97
- .reg t2, gr98
- .reg t3, gr99
- .reg t4, gr100
- .reg t5, gr101
- .reg t6, gr102
- .reg t7, gr103
- .reg t8, gr104
- .reg t9, gr105
- .reg t10, gr106
- .reg t11, gr107
- .reg t12, gr108
- .reg t13, gr109
- .reg t14, gr110
- .reg t15, gr111
-
- .equ RES_REG, 112 ;reserved (for user)
-
- .reg r0, gr112
- .reg r1, gr113
- .reg r2, gr114
- .reg r3, gr115
-
- .equ TEMP_EXT, 116 ;temp extension (and shared)
-
- .reg x0, gr116
- .reg x1, gr117
- .reg x2, gr118
- .reg x3, gr119
- .reg x4, gr120
- .reg x5, gr121
- .reg x6, gr122
- .reg x7, gr123
- .reg x8, gr124
-
-;-----------------------------------------------------------------------
-;Global registers with special calling convention uses
-;-----------------------------------------------------------------------
-
- .reg tav, gr121 ;trap handler argument (also x6)
- .reg tpc, gr122 ;trap handler return (also x7)
- .reg lsrp, gr123 ;large return pointer (also x8)
- .reg slp, gr124 ;static link pointer (also x9)
- .reg msp, gr125 ;memory stack pointer
- .reg rab, gr126 ;register alloc bound
- .reg rfb, gr127 ;register frame bound
-
-;-----------------------------------------------------------------------
-;Local compiler registers - output parameters, etc.
-; (only valid if frame has been established)
-;-----------------------------------------------------------------------
-
- .reg p15, lr17 ;parameter registers
- .reg p14, lr16
- .reg p13, lr15
- .reg p12, lr14
- .reg p11, lr13
- .reg p10, lr12
- .reg p9, lr11
- .reg p8, lr10
- .reg p7, lr9
- .reg p6, lr8
- .reg p5, lr7
- .reg p4, lr6
- .reg p3, lr5
- .reg p2, lr4
- .reg p1, lr3
- .reg p0, lr2
-
-
-;-----------------------------------------------------------------------
-;TLB register count
-;-----------------------------------------------------------------------
-
- .equ TLB_CNT, 128
-
- .eject
-
-;-----------------------------------------------------------------------
-;constants for general use
-;-----------------------------------------------------------------------
- .equ WRD_SIZ, 4 ;word size
- .equ TRUE, 0x80000000 ;logical true -- bit 31
- .equ FALSE, 0x00000000 ;logical false -- 0
- .equ CHKPAT_a5, 0xa5a5a5a5 ;check pattern
-
-;-----------------------------------------------------------------------
-;constants for data access control
-;-----------------------------------------------------------------------
- .equ CE, 0b1 ;coprocessor enable
- .equ CD, 0b0 ;coprocessor disable
-
- .equ AS, 0b1000000 ;set for I/O
- .equ PA, 0b0100000 ;set for physical ad
- .equ SB, 0b0010000 ;set for set BP
- .equ UA, 0b0001000 ;set for user access
-
- .equ ROM_OPT, 0b100 ;OPT values for acc
- .equ DATA_OPT, 0b000
- .equ INST_OPT, 0b000
-
- .equ ROM_CTL, (PA + ROM_OPT) ;control field
- .equ DATA_CTL, (PA + DATA_OPT)
- .equ INST_CTL, (PA + INST_OPT)
- .equ IO_CTL, (AS + PA + DATA_OPT)
-
-
- .eject
-
-;-----------------------------------------------------------------------
-;defined vectors
-;-----------------------------------------------------------------------
-
- .equ V_IllegalOp, 0
- .equ V_Unaligned, 1
- .equ V_OutOfRange, 2
- .equ V_NoCoProc, 3
- .equ V_CoProcExcept, 4
- .equ V_ProtViol, 5
- .equ V_InstAccExcept, 6
- .equ V_DataAccExcept, 7
- .equ V_UserInstTLB, 8
- .equ V_UserDataTLB, 9
- .equ V_SupInstTLB, 10
- .equ V_SupDataTLB, 11
- .equ V_InstTLBProt, 12
- .equ V_DataTLBProt, 13
- .equ V_Timer, 14
- .equ V_Trace, 15
- .equ V_INTR0, 16
- .equ V_INTR1, 17
- .equ V_INTR2, 18
- .equ V_INTR3, 19
- .equ V_TRAP0, 20
- .equ V_TRAP1, 21
-
- ; 22 - 31 reserved
-
- .equ V_MULTIPLY, 32
- .equ V_DIVIDE, 33
- .equ V_MULTIPLU, 34
- .equ V_DIVIDU, 35
- .equ V_CONVERT, 36
-
- ; 37 - 41 reserved
-
- .equ V_FEQ, 42
- .equ V_DEQ, 43
- .equ V_FGT, 44
- .equ V_DGT, 45
- .equ V_FGE, 46
- .equ V_DGE, 47
- .equ V_FADD, 48
- .equ V_DADD, 49
- .equ V_FSUB, 50
- .equ V_DSUB, 51
- .equ V_FMUL, 52
- .equ V_DMUL, 53
- .equ V_FDIV, 54
- .equ V_DDIV, 55
-
- ; 56 - 63 reserved
-
- .equ V_SPILL, 64
- .equ V_FILL, 65
- .equ V_BSDCALL, 66
- .equ V_SYSVCALL, 67
- .equ V_BRKPNT, 68
- .equ V_EPI_OS, 69
-
- .eject
-
- .macro R_LEFT,REGVAR
-
- ;Rotate left
- ;
- ; Parameters: REGVAR register to rotate
-
- add REGVAR, REGVAR, REGVAR ;shift left by 1 bit, C = MSB
- addc REGVAR, REGVAR, 0 ;add C to LSB
-
- .endm
-;----------------------------------------------------------------------
-
-
- .macro FUNCTION,NAME,INCNT,LOCCNT,OUTCNT
-
- ;Introduces a non-leaf routine.
- ;
- ;This macro defines the standard tag word before the function,
- ;then establishes the statement label with the function's name
- ;and finally allocates a register stack frame. It may not be used
- ;if a memory stack frame is required.
- ;
- ;Note also that the size of the register stack frame is limited.
- ;Neither this nor the lack of a memory frame is considered to be
- ;a severe restriction in an assembly language environment. The
- ;assembler will report errors if the requested frame is too large
- ;for this macro.
- ;
- ;It may be good practice to allocate an even number of both output
- ;registers and local registers. This will help in maintaining
- ;double word alignment within these groups. The macro will assure
- ;double word alignment of the stack frame as a whole as required
- ;for correct linkage.
- ;
- ; Paramters: NAME the function name
- ; INCNT input parameter count
- ; LOCCNT local register count
- ; OUTCNT output parameter count
-
- .set ALLOC_CNT, ((2 + OUTCNT + LOCCNT) << 2)
- .set PAD_CNT, (ALLOC_CNT & 4)
- .set ALLOC_CNT, (ALLOC_CNT + PAD_CNT)
- .set REG_PAD, (PAD_CNT >> 2)
- .if (INCNT)
- .set IN_PRM, (4 + OUTCNT + REG_PAD + LOCCNT + 0x80)
- .endif
- .if (LOCCNT)
- .set LOC_REG, (2 + OUTCNT + REG_PAD + 0x80)
- .endif
- .if (OUTCNT)
- .set OUT_PRM, (2 + 0x80)
- .endif
-
- .word ((2 + OUTCNT + LOCCNT) << 16)
-NAME:
- sub rsp, rsp, ALLOC_CNT
- asgeu V_SPILL, rsp, rab
- add lr1, rsp, ((4 + OUTCNT + LOCCNT + REG_PAD + INCNT) << 2)
-
- .endm
-;----------------------------------------------------------------------
-
-
- .macro LEAF,NAME,INCNT
-
- ;Introduces a leaf routine
- ;
- ;This macro defines the standard tag word before the function,
- ;then establishes the statement label with the function's name.
- ;
- ; Paramters: NAME the function name
- ; INCNT input parameter count
-
- .if (INCNT)
- .set IN_PRM, (2 + 0x80)
- .endif
- .set ALLOC_CNT, 0
-
- .word 0
-NAME:
-
- .endm
-;----------------------------------------------------------------------
-
-
- .macro EPILOGUE
-
- ;De-allocates register stack frame (only and only if necessary).
-
- .if (ALLOC_CNT)
-
- add rsp, rsp, ALLOC_CNT
- nop
- jmpi lr0
- asleu V_FILL, lr1, rfb
-
- .else
-
- jmpi lr0
- nop
-
- .endif
-
- .set IN_PRM, (1024) ;illegal, to cause err on ref
- .set LOC_REG, (1024) ;illegal, to cause err on ref
- .set OUT_PRM, (1024) ;illegal, to cause err on ref
- .set ALLOC_CNT, (1024) ;illegal, to cause err on ref
-
- .endm
-;----------------------------------------------------------------------
-
-
-;Initial values for macro set variables to guard against misuse
-
- .set IN_PRM, (1024) ;illegal, to cause err on ref
- .set LOC_REG, (1024) ;illegal, to cause err on ref
- .set OUT_PRM, (1024) ;illegal, to cause err on ref
- .set ALLOC_CNT, (1024) ;illegal, to cause err on ref
-
-;......................................................................
-; end of romdcl.h
diff --git a/newlib/libc/sys/a29khif/sys/smartmac.h b/newlib/libc/sys/a29khif/sys/smartmac.h
deleted file mode 100644
index 2c870fa2a..000000000
--- a/newlib/libc/sys/a29khif/sys/smartmac.h
+++ /dev/null
@@ -1,1491 +0,0 @@
-; @(#)smartmac.h 1.2 90/10/14 20:56:14, AMD
-; start of smartmac.h file
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1988, 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-;
- .title "AM29000 Smart Macro Package"
-;
-; Floating point package for AMD 29000 family
-;
-; Copyright 1988 Advanced Micro Devices, Inc.
-;
-; All rights reserved
-;
-; Developed for AMD by Quantitative Technology Corporation
-; 8700 SW Creekside Place Suite D
-; Beaverton OR 97005
-; (503) 626-3081
-;
-; Version information :
-;
-; Version 1.0 - 1 June 1988 - Larry Westerman (smart_macros.h)
-;
-; Revision 1.4 89/02/01 18:26:03 jimh
-; Changed to relect the new symbols from Bob Perlman, and the new include file.s
-;
-; Revision 1.3 89/01/31 10:13:34 jimh
-; Updated to use symbols from Bob Perlmans fpsymbol.h file. This is
-; an extensive change.
-;
-; Revision 1.2 89/01/26 09:23:50 jimh
-; This version checked in previous to substituting Bob Perlman's floating
-; point symbols.
-;
-; Revision 1.1 89/01/24 13:23:29 jim
-; Initial revision
-; Replaces smart_macros.h ver 1.11.
-;
-;
-;
-;
-; NOTES:
-;
-; This package makes the following assumptions about the use of these
-; smart macros:
-;
-; 1. These macros will be after the entry code for a transcendental
-; routine. This entry code will move the original function arguments
-; (by value, if the target language is FORTRAN) into the global
-; registers t0/t1 and t2/t3 (t0 and t2 for single precision
-; routines).
-; 2. The sources of all operands will be one register from the
-; following list:
-; t0 or t2 - the source is one of the original input operands
-; rtn0 - the source is rtn0, which should be used as the
-; source for all constant values to be sent to the
-; AM29027 (when used)
-; FP0 - FP7 - the source is one of the fp registers
-; 3. The destination of all operations will be a register from the
-; following list:
-; rtn0 - the destination is the function return value
-; FP0 - FP7 - the destination is one of the fp registers
-; 4. The additional registers available for temporary use are
-; t4, lrp, and slp.
-;
-; These register definitions are all taken from the file "proregs.a"
-; which was supplied by AMD. NOTE that the FP0-FP7 registers, for the
-; Am29000 version of the file, overlap with the rtn0-rtn15 registers, so
-; that FP0 corresponds to rtn0/rtn1, FP1 to rtn2/rtn3, and so forth.
-;
- .equ ERROR,0
- .equ NO_ERROR,1
-
- .equ DOUBLE_FUNCTION,0
- .equ SINGLE_FUNCTION,1
-
- .equ T_OPERATION,0
- .equ Q_OPERATION,1
-
- .equ R_SOURCE_29000,0
- .equ R_SOURCE_29027,1
-
- .equ S_SOURCE_29000,0
- .equ S_SOURCE_29027,1
-
- .equ DESTINATION_29000, 0
- .equ DESTINATION_29027, 1
-
-;
-; SMART MACRO : mfadd
-;
-; FUNCTION : single-precision floating point addition
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mfadd,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mfadd: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_P_PLUS_T
- .set OPERATION_TYPE, T_OPERATION
- perform_single_operation destination,operand1,operand2
- read_single_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- fadd destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfadd macro definition
-
-;
-; SMART MACRO : mfsub
-;
-; FUNCTION : single-precision floating point subtraction
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mfsub,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mfsub: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_P_MINUS_T
- .set OPERATION_TYPE, T_OPERATION
- perform_single_operation destination,operand1,operand2
- read_single_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- fsub destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfsub macro definition
-
-;
-; SMART MACRO : mfmul
-;
-; FUNCTION : single-precision floating point multiplication
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mfmul,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mfmul: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_P_TIMES_Q
- .set OPERATION_TYPE, Q_OPERATION
- perform_single_operation destination,operand1,operand2
- read_single_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- fmul destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfmul macro definition
-
-;
-; SMART MACRO : mfdiv
-;
-; FUNCTION : single-precision floating point divide
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mfdiv,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mfdiv: missing parameter(s)"
- .exitm
- .endif
-
- ;
- ; Generate the trap instruction in all cases
- ;
- fdiv destination, operand1, operand2
-
- .endm ; end of mfdiv macro definition
-
-
-;
-; SMART MACRO : mdadd
-;
-; FUNCTION : double-precision floating point addition
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mdadd,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mdadd: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_P_PLUS_T
- .set OPERATION_TYPE, T_OPERATION
- perform_double_operation destination,operand1,operand2
- read_double_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- dadd destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdadd macro definition
-
-;
-; SMART MACRO : mdsub
-;
-; FUNCTION : double-precision floating point subtraction
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mdsub,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mdsub: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_P_MINUS_T
- .set OPERATION_TYPE, T_OPERATION
- perform_double_operation destination,operand1,operand2
- read_double_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- dsub destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdsub macro definition
-
-;
-; SMART MACRO : mdmul
-;
-; FUNCTION : double-precision floating point multiplication
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mdmul,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mdmul: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; For 29027 mode, perform full suite of checking
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_P_TIMES_Q
- .set OPERATION_TYPE, Q_OPERATION
- perform_double_operation destination,operand1,operand2
- read_double_result destination
- ;
- ; Save the instruction for the next macro invocation
- ;
- .set PREVIOUS_INSTRUCTION, CURRENT_INSTRUCTION
-
- .else
- ;
- ; For 29000 mode, simply produce equivalent trap-inducing instruction
- ;
- dmul destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdmul macro definition
-
-;
-; SMART MACRO : mddiv
-;
-; FUNCTION : double-precision floating point divide
-;
-; Required arguments : destination - one of possible destinations
-; operand1 - one of possible sources
-; operand2 - one of possible sources
-;
- .macro mddiv,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "mddiv: missing parameter(s)"
- .exitm
- .endif
-
- ;
- ; Generate the trap instruction in all cases
- ;
- ddiv destination, operand1, operand2
-
- .endm ; end of mfdiv macro definition
-
-;
-; SMART MACRO: mconvert
-;
-; FUNCTION: Floating point/integer conversion
-;
-; PARAMETERS: destination - one of the possible destinations
-; source - one of the possible sources
-; sign_flag - one of SIGNED or UNSIGNED
-; rounding_mode - one of ROUND_TO_NEAREST, ROUND_TO_PLUS,
-; ROUND_TO_MINUS, ROUND_TO_ZERO
-; destination_precision - one of FORMAT_INTEGER, FORMAT_DOUBLE,
-; or FORMAT_SINGLE
-; source_precision - one of FORMAT_INTEGER, FORMAT_DOUBLE,
-; or FORMAT_SINGLE
-;
- .macro mconvert, destination, source, sign_flag, rounding_mode, destination_precision, source_precision
-
- .if $narg!=6
- .err
- .print "mconvert: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .if ( destination_precision == FORMAT_INTEGER )
- .set CURRENT_INSTRUCTION, CP_CONVERT_T_TO_INT
- select_T_operand source
- .if ( source_precision == FORMAT_DOUBLE )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_S_D
- .else
- .if ( source_precision == FORMAT_SINGLE )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_S_S
- .else
- .err
- .print "mconvert: invalid source type"
- .exitm
- .endif
- .endif
- .else
- .if ( destination_precision == FORMAT_DOUBLE )
- .if ( source_precision == FORMAT_SINGLE )
- .set CURRENT_INSTRUCTION, CP_PASS_P | CP_P_EQ_R | CP_D_S
- select_P_operand source
- .else
- .if ( source_precision == FORMAT_INTEGER )
- .set CURRENT_INSTRUCTION, CP_I_CONVERT_T_TO_FLOAT | CP_D_S
- select_T_operand source
- .else
- .err
- .print "mconvert: invalid source type"
- .exitm
- .endif
- .endif
- .else
- .if ( destination_precision == FORMAT_SINGLE )
- .if ( source_precision == FORMAT_DOUBLE )
- .set CURRENT_INSTRUCTION, CP_PASS_P | CP_P_EQ_R | CP_S_D
- select_P_operand source
- .else
- .if ( source_precision == FORMAT_INTEGER )
- .set CURRENT_INSTRUCTION, CP_I_CONVERT_T_TO_FLOAT | CP_S_S
- select_T_operand source
- .else
- .err
- .print "mconvert: invalid source type"
- .exitm
- .endif
- .endif
- .else
- .err
- .print "mconvert: invalid destination type "
- .exitm
- .endif
- .endif
- .endif
- ;
- ; Perform the operation, using a 29027 dummy register as the second
- ; source operand, to avoid writing any data inappropriately to the
- ; 29027
- ;
- select_destination destination
- .set S_SOURCE, S_SOURCE_29027
- .if ( source_precision == FORMAT_DOUBLE )
- write_and_execute_double_operation source, FP0
- .else
- write_and_execute_single_operation source, FP0
- .endif
- .if ( destination_precision == FORMAT_DOUBLE )
- read_double_result destination
- .else
- .if ( destination_precision == FORMAT_SINGLE )
- read_single_result destination
- .else
- read_integer_result destination
- .endif
- .endif
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- convert destination,source,sign_flag,rounding_mode,destination_precision,source_precision
-
- .endif
-
- .endm ; end of mfeq macro definition
-
-;
-; SMART MACRO: mfeq
-;
-; FUNCTION: Single precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mfeq, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mfeq: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compares - @destination@"
- .exitm
- .else
- perform_single_operation destination, operand1, operand2
- cp_read_flags destination
- srl destination, destination, CP_EQUAL_FLAG_POSITION
- sll destination, destination, 31
- .endif
-
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- feq destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfeq macro definition
-
-;
-; SMART MACRO: mfge
-;
-; FUNCTION: Single precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mfge, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mfge: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compares - @destination@"
- .exitm
- .else
- perform_single_operation destination, operand1, operand2
- cp_read_flags destination
- and destination, destination, CP_EQUAL_FLAG | CP_GREATER_THAN_FLAG
- cpneq destination, destination, 0x0
- .endif
-
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- fge destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfge macro definition
-
-;
-; SMART MACRO: mfgt
-;
-; FUNCTION: Single precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mfgt, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mfgt: missing parameter(s)"
- .exitm
- .endif
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_S_S | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compares - @destination@"
- .exitm
- .else
- perform_single_operation destination, operand1, operand2
- cp_read_flags destination
- srl destination, destination, CP_GREATER_THAN_FLAG_POSITION
- sll destination, destination, 31
- .endif
-
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- fgt destination,operand1,operand2
-
- .endif
-
- .endm ; end of mfgt macro definition
-
-;
-; SMART MACRO: mdeq
-;
-; FUNCTION: Double precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mdeq, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mdeq: missing parameter(s)"
- .exitm
- .endif
-
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compare - @destination@"
- .exitm
- .else
- perform_double_operation destination, operand1, operand2
- cp_read_flags destination
- srl destination, destination, CP_EQUAL_FLAG_POSITION
- sll destination, destination, 31
- .endif
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- deq destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdeq macro definition
-
-;
-; SMART MACRO: mdge
-;
-; FUNCTION: Double precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mdge, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mdge: missing parameter(s)"
- .exitm
- .endif
-
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compare - @destination@"
- .exitm
- .else
- perform_double_operation destination, operand1, operand2
- cp_read_flags destination
- and destination, destination, CP_EQUAL_FLAG | CP_GREATER_THAN_FLAG
- cpneq destination, destination, 0x0
- .endif
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- dge destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdge macro definition
-
-;
-; SMART MACRO: mdgt
-;
-; FUNCTION: Double precision, floating point compare
-;
-; PARAMETERS: destination - one of the possible destinations
-; operand1 - one of the possible sources
-; operand2 - one of the possible sources
-;
- .macro mdgt, destination, operand1, operand2
-
- .if $narg!=3
- .err
- .print "mdgt: missing parameter(s)"
- .exitm
- .endif
-
-
- .ifdef _29027_MODE
- ;
- ; Generate in line 29027 code
- ;
- initialize_previous_instruction
- .set CURRENT_INSTRUCTION, CP_D_D | CP_COMPARE_P_AND_T
- .set OPERATION_TYPE, T_OPERATION
- select_destination destination
- ;
- ; 29027 registers are not valid destinations for compare operations
- ; If the destination is a 29000 register, write the appropriate
- ; Boolean value to that register.
- ;
- .if ( DESTINATION == DESTINATION_29027 )
- .err
- .print "29027 destinations invalid for compare - @destination@"
- .exitm
- .else
- perform_double_operation destination, operand1, operand2
- cp_read_flags destination
- srl destination, destination, CP_GREATER_THAN_FLAG_POSITION
- sll destination, destination, 31
- .endif
- .else
- ;
- ; For 29000 mode (the default) just invoke the trap-inducing instruction
- ;
- dgt destination,operand1,operand2
-
- .endif
-
- .endm ; end of mdgt macro definition
-
-;
-; MACRO NAME : perform_double_operation
-;
-; FUNCTION : After the instruction base is set up, do the appropriate checking
-; to send the instruction if necessary, send the double-precision
-; operands if necessary, and start the operation
-;
-; PARAMETERS : destination - one of possible destination operands
-; operand1 - one of possible source operands
-; operand2 - one of possible source operands
-;
- .macro perform_double_operation,destination,operand1,operand2
-
- .if $narg!=3
- .err
- .print "perform_double_operation: missing parameter(s)"
- .exitm
- .endif
-
- ;
- ; Start defining the instruction
- ;
- select_destination destination
- select_P_operand operand1
- select_S_operand operand2
-
- write_and_execute_double_operation operand1, operand2
-
- .endm ; End of perform_double_operation macro definition
-
-;
-; MACRO NAME : perform_single_operation
-;
-; FUNCTION : After the instruction base is set up, do the appropriate checking
-; to send the instruction if necessary, send the single-precision
-; operands if necessary and start the operation
-;
-; PARAMETERS : destination - one of possible destination operands
-; operand1 - one of possible source operands
-; operand2 - one of possible source operands
-;
- .macro perform_single_operation,destination,operand1,operand2
-
- ;
- ; Start defining the instruction
- ;
- select_destination destination
- select_P_operand operand1
- select_S_operand operand2
- write_and_execute_single_operation operand1,operand2
-
- .endm ; End of perform_single_operation macro definition
-
-;
-; MACRO NAME : write_and_execute_double_operation
-;
-; FUNCTION : Write the instruction and operands for a double-precision
-; operation, and start the operation
-;
-; PARAMETER : operand1 - first operand of double-precision operation
-; operand2 - second operand of operation
-;
- .macro write_and_execute_double_operation,operand1,operand2
- .if ( ( R_SOURCE == R_SOURCE_29027 ) && ( S_SOURCE == S_SOURCE_29027 ) )
- ;
- ; If both sources are within the 29027, write the instruction
- ; and start the operation
- ;
- const t4, CURRENT_INSTRUCTION
- consth t4, CURRENT_INSTRUCTION
- cp_write_inst t4, START
- .else
- ;
- ; One or both of the sources must be written first, so check the
- ; previous instruction
- ;
- const t4, CURRENT_INSTRUCTION
- consth t4, CURRENT_INSTRUCTION
- cp_write_inst t4
- .if ( R_SOURCE == R_SOURCE_29000 ) && ( S_SOURCE == S_SOURCE_29027 )
- .ifeqs "@operand1@","t0"
- cp_write_r t0, t1, START
- .else
- .ifeqs "@operand1@","t2"
- cp_write_r t2, t3, START
- .else
- .ifeqs "@operand1@","rtn0"
- cp_write_r rtn0, rtn1, START
- .else
- .err
- .print "Invalid source for double operation - @operand1@"
- .exitm
- .endif
- .endif
- .endif
- .endif
- .if ( R_SOURCE == R_SOURCE_29027 ) && ( S_SOURCE == S_SOURCE_29000 )
- .ifeqs "@operand2@","t0"
- cp_write_s t0, t1, START
- .else
- .ifeqs "@operand2@","t2"
- cp_write_s t2, t3, START
- .else
- .ifeqs "@operand2@","rtn0"
- cp_write_s rtn0, rtn1, START
- .else
- .err
- .print "Invalid source for double operation - @operand1@"
- .exitm
- .endif
- .endif
- .endif
- .endif
- .if ( R_SOURCE == R_SOURCE_29000 ) && ( S_SOURCE == S_SOURCE_29000 )
- .ifeqs "@operand1@","t0"
- cp_write_r t0, t1
- .else
- .ifeqs "@operand1@","t2"
- cp_write_r t2, t3
- .else
- .ifeqs "@operand1@","rtn0"
- cp_write_r rtn0, rtn1
- .else
- .err
- .print "Invalid source for double operation - @operand1@"
- .exitm
- .endif
- .endif
- .endif
- .ifeqs "@operand2@","t0"
- cp_write_s t0, t1, START
- .else
- .ifeqs "@operand2@","t2"
- cp_write_s t2, t3, START
- .else
- .ifeqs "@operand2@","rtn0"
- cp_write_s rtn0, rtn1, START
- .else
- .err
- .print "Invalid source for double operation - @operand1@"
- .exitm
- .endif
- .endif
- .endif
- .endif
- .endif
-
- .endm ; end of write_and_execute_double_operation macro definition
-
-;
-; MACRO NAME : write_and_execute_single_operation
-;
-; FUNCTION : If necessary, read the result from the 29027 into a
-; register on the 29000
-;
-; PARAMETER : operand1 - first source for single-precision operation
-; operand2 - second source for operation
-;
- .macro write_and_execute_single_operation,operand1,operand2
-
- .if ( ( R_SOURCE == R_SOURCE_29027 ) && ( S_SOURCE == S_SOURCE_29027 ) )
- ;
- ; If both sources are within the 29027, write the instruction
- ; and start the operation
- ;
- const t4, CURRENT_INSTRUCTION
- consth t4, CURRENT_INSTRUCTION
- cp_write_inst t4, START
- .else
- ;
- ; One or both of the sources must be written first, so check the
- ; previous instruction
- ;
- const t4,CURRENT_INSTRUCTION
- consth t4,CURRENT_INSTRUCTION
- cp_write_inst t4, START
- .if ( R_SOURCE == R_SOURCE_29000 ) && ( S_SOURCE == S_SOURCE_29027 )
- cp_write_r operand1, operand1, START
- .endif
- .if ( R_SOURCE == R_SOURCE_29027 ) && ( S_SOURCE == S_SOURCE_29000 )
- cp_write_s operand2, operand2, START
- .endif
- .if ( R_SOURCE == R_SOURCE_29000 ) && ( S_SOURCE == S_SOURCE_29000 )
- cp_write_rs operand1, operand2, START
- .endif
- .endif
-
- .endm ; End of write_and_execute_single_operation macro definition
-
-;
-; MACRO NAME : read_double_result
-;
-; FUNCTION : If necessary, read the result from the 29027 into a
-; register on the 29000
-;
-; PARAMETER : destination - one of the possible destination registers
-;
- .macro read_double_result,destination
- .if ( DESTINATION == DESTINATION_29000 )
- ;
- ; If the destination is not within the 29027 register file, read
- ; the result and store it into the correct register in the 29000
- ;
- .ifeqs "@destination@","rtn0"
- cp_read_dp rtn0, rtn1
- .else
- .err
- .print "Invalid destination for double result - @destination@"
- .exitm
- .endif
- .endif
-
- .endm ; End of read_double_result macro definition
-
-;
-; MACRO NAME : read_single_result
-;
-; FUNCTION : If necessary, read the result from the 29027 into a
-; register on the 29000
-;
-; PARAMETER : destination
-;
- .macro read_single_result,destination
-
- .if ( DESTINATION == DESTINATION_29000 )
- ;
- ; If the destination is not within the 29027 register file, read
- ; the result and store it into the correct register in the 29000
- ;
- .ifeqs "@destination@","rtn0"
- cp_read_sp rtn0
- .else
- .err
- .print "Invalid destination for single result - @destination@"
- .exitm
- .endif
- .endif
-
- .endm ; End of read_single_result macro definition
-
-;
-; MACRO NAME : read_integer_result
-;
-; FUNCTION : If necessary, read the result from the 29027 into a
-; register on the 29000
-;
-; PARAMETER : destination
-;
- .macro read_integer_result,destination
-
- .if ( DESTINATION == DESTINATION_29000 )
- ;
- ; If the destination is not within the 29027 register file, read
- ; the result and store it into the correct register in the 29000
- ;
- .ifeqs "@destination@","rtn0"
- cp_read_int rtn0
- .else
- .err
- .print "Invalid destination for single result - @destination@"
- .exitm
- .endif
- .endif
-
- .endm ; End of read_integer_result macro definition
-
-;
-; MACRO NAME : select_P_operand
-;
-; FUNCTION : Given an operand, determine if the operand is from the
-; register file, and if so, set the appropriate bits in
-; the current instruction word. In addition, set the
-; variable R_SOURCE to 0 for local register file, or 1 for
-; floating-point register file.
-;
-; PARAMETER : operand1 - one of the possible source operands
-;
- .macro select_P_operand,operand1
- .ifeqs "@operand1@","t0"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","t2"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","rtn0"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","FP0"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF0
- .exitm
- .endif
- .ifeqs "@operand1@","FP1"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF1
- .exitm
- .endif
- .ifeqs "@operand1@","FP2"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF2
- .exitm
- .endif
- .ifeqs "@operand1@","FP3"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF3
- .exitm
- .endif
- .ifeqs "@operand1@","FP4"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF4
- .exitm
- .endif
- .ifeqs "@operand1@","FP5"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF5
- .exitm
- .endif
- .ifeqs "@operand1@","FP6"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF6
- .exitm
- .endif
- .ifeqs "@operand1@","FP7"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_P_EQ_RF7
- .exitm
- .endif
- .err
- .print "@operand1@ - Invalid operand"
-
- .endm ; end of select_P_operand macro definition
-
-;
-; MACRO NAME : select_S_operand
-;
-; FUNCTION : Given an operand, determine if the operand is from the
-; register file, and if so, set the appropriate bits in
-; the current instruction word. In addition, set the
-; variable S_SOURCE to S_SOURCE_29000 or S_SOURCE_29027
-; as appropriate
-;
-; PARAMETER : operand2 - one of the possible source operands
-;
- .macro select_S_operand,operand2
- .ifeqs "@operand2@","t0"
- .set S_SOURCE,S_SOURCE_29000
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_S
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_S
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","t2"
- .set S_SOURCE,S_SOURCE_29000
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_S
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_S
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","rtn0"
- .set S_SOURCE,S_SOURCE_29000
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_S
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_S
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP0"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF0
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF0
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP1"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF1
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF1
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP2"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF2
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF2
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP3"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF3
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF3
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP4"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF4
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF4
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP5"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF5
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF5
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP6"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF6
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF6
- .endif
- .exitm
- .endif
- .ifeqs "@operand2@","FP7"
- .set S_SOURCE,S_SOURCE_29027
- .if ( OPERATION_TYPE == T_OPERATION )
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF7
- .else
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_Q_EQ_RF7
- .endif
- .exitm
- .endif
- .err
- .print "@operand2@ - Invalid operand"
-
- .endm ; end of select_S_operand macro definition
-
-;
-; MACRO NAME : select_T_operand
-;
-; FUNCTION : Given an operand, determine if the operand is from the
-; register file, and if so, set the appropriate bits in
-; the current instruction word, to read the corresponding
-; source into the T operand. In addition, set the
-; variable R_SOURCE to 0 for local register file, or 1 for
-; floating-point register file.
-;
-; PARAMETER : operand1 - one of the possible source operands
-;
- .macro select_T_operand,operand1
- .ifeqs "@operand1@","t0"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","t2"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","rtn0"
- .set R_SOURCE,R_SOURCE_29000
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_R
- .exitm
- .endif
- .ifeqs "@operand1@","FP0"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF0
- .exitm
- .endif
- .ifeqs "@operand1@","FP1"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF1
- .exitm
- .endif
- .ifeqs "@operand1@","FP2"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF2
- .exitm
- .endif
- .ifeqs "@operand1@","FP3"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF3
- .exitm
- .endif
- .ifeqs "@operand1@","FP4"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF4
- .exitm
- .endif
- .ifeqs "@operand1@","FP5"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF5
- .exitm
- .endif
- .ifeqs "@operand1@","FP6"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF6
- .exitm
- .endif
- .ifeqs "@operand1@","FP7"
- .set R_SOURCE,R_SOURCE_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_T_EQ_RF7
- .exitm
- .endif
- .err
- .print "@operand1@ - Invalid operand"
-
- .endm ; end of select_T_operand macro definition
-
-;
-; MACRO NAME : select_destination
-;
-; FUNCTION : Given a destination, determine if the operand is from the
-; register file, and if so, set the appropriate bits in
-; the current instruction word. In addition, set the
-; variable DESTINATION to DESTINATION_29000 or
-; DESTINATION_29027 as appropriate
-;
-; PARAMETER : destination - one of the possible destination operands
-;
- .macro select_destination,destination
- .ifeqs "@destination@","rtn0"
- .set DESTINATION,DESTINATION_29000
- .exitm
- .endif
- .ifeqs "@destination@","FP0"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF0
- .exitm
- .endif
- .ifeqs "@destination@","FP1"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF1
- .exitm
- .endif
- .ifeqs "@destination@","FP2"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF2
- .exitm
- .endif
- .ifeqs "@destination@","FP3"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF3
- .exitm
- .endif
- .ifeqs "@destination@","FP4"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF4
- .exitm
- .endif
- .ifeqs "@destination@","FP5"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF5
- .exitm
- .endif
- .ifeqs "@destination@","FP6"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF6
- .exitm
- .endif
- .ifeqs "@destination@","FP7"
- .set DESTINATION,DESTINATION_29027
- .set CURRENT_INSTRUCTION, CURRENT_INSTRUCTION | CP_DEST_EQ_RF7
- .exitm
- .endif
- .err
- .print "@destination@ - Invalid operand"
-
- .endm ; end of select_destination macro definition
-
-; MACRO NAME : initialize_previous_instruction
-;
-; FUNCTION : Make sure the previous instruction is defined and set to zero
-;
- .macro initialize_previous_instruction
-
- .ifndef PREVIOUS_INSTRUCTION
- ;
- ; Make sure that the previous instruction variable is initialized
- ;
- .set PREVIOUS_INSTRUCTION,0
- .endif
-
- .endm ; end of initialize_previous_instruction macro definition
-
-
-; MACRO NAME : prepare_function_parameters
-;
-; FUNCTION : To place the input parameters into the correct position for
-; use by the function body. When the target language is
-; FORTRAN, the values of the input arguments are read from the
-; supplied addresses and moved to the t0-t3 temporary area.
-; When the target language is C or Pascal, the values of the
-; input arguments are simply moved to the t0-t3 temporary area.
-;
- .macro prepare_function_parameters,arg1,arg2
-
- .if $narg==0
- .err
- .print "Missing function argument(s)"
- .exitm
- .endif
-
- .if $narg>2
- .err
- .print "Too many function arguments
- .exitm
- .endif
-
- .if $narg>=1
- .if $isreg(@arg1)
- .ifdef FORTRAN
- load 0,0,t0,arg1
- .if ( FUNCTION_TYPE == DOUBLE_FUNCTION )
- add t1,arg1,4
- load 0,0,t1,t1
- .endif
- .else
- add t0,arg1,0
- .if ( FUNCTION_TYPE == DOUBLE_FUNCTION )
- add t1,%%(&arg1+1),0
- .endif
- .endif
- .else
- .err
- .print "Function argument not register - @arg1@"
- .endif
- .endif
- .if $narg==2
- .if $isreg (@arg2)
- .ifdef FORTRAN
- load 0,0,t2,arg2
- .if ( FUNCTION_TYPE == DOUBLE_FUNCTION )
- add t3,arg2,4
- load 0,0,t3,t3
- .endif
- .else
- add t2,arg2,0
- .if ( FUNCTION_TYPE == DOUBLE_FUNCTION )
- add t3,%%(&arg2+1),0
- .endif
- .endif
- .else
- .err
- .print "Function argument not register - @arg2@"
- .endif
- .endif
-
- .endm ; end of prepare_function_parameters macro definition
-
-; end of smartmac.h file
diff --git a/newlib/libc/sys/a29khif/sys/sysmac.h b/newlib/libc/sys/a29khif/sys/sysmac.h
deleted file mode 100644
index 01ff9eec2..000000000
--- a/newlib/libc/sys/a29khif/sys/sysmac.h
+++ /dev/null
@@ -1,165 +0,0 @@
-; @(#)sysmac.h 1.7 90/10/14 20:56:17, Copyright 1988, 1989, 1990 AMD
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; Copyright 1988, 1989, 1990 Advanced Micro Devices, Inc.
-;
-; This software is the property of Advanced Micro Devices, Inc (AMD) which
-; specifically grants the user the right to modify, use and distribute this
-; software provided this notice is not removed or altered. All other rights
-; are reserved by AMD.
-;
-; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
-; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
-; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
-; USE OF THIS SOFTWARE.
-;
-; So that all may benefit from your experience, please report any problems
-; or suggestions about this software to the 29K Technical Support Center at
-; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
-; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
-;
-; Advanced Micro Devices, Inc.
-; 29K Support Products
-; Mail Stop 573
-; 5900 E. Ben White Blvd.
-; Austin, TX 78741
-; 800-292-9263
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; sysmac.h
-;
- .include "sys/proreg.h"
-
-; Supported system call function numbers - BSD emulation
-
- .equ BSD_exit, 1
- .equ BSD_open, 5
- .equ BSD_close, 6
- .equ BSD_remove, 10
- .equ BSD_lseek, 19
- .equ BSD_sbrk, 69
- .equ BSD_readv, 120
- .equ BSD_writev, 121
- .equ BSD_rename, 128
-; Functions above 0x100 are handled by Am29000 code
- .equ BSD_alloc, 0x101
- .equ BSD_free, 0x102
- .equ BSD_getpagesize, 0x103
-
- .equ BSD_clock, 0x111
-
-; Supported system call function numbers - HIF version 2.0
-
- .equ HIF_exit, 0x01
-
- .equ HIF_open, 0x11
- .equ HIF_close, 0x12
- .equ HIF_read, 0x13
- .equ HIF_write, 0x14
- .equ HIF_lseek, 0x15
- .equ HIF_remove, 0x16
- .equ HIF_rename, 0x17
- .equ HIF_ioctl, 0x18
- .equ HIF_iowait, 0x19
- .equ HIF_iostat, 0x1a
-
- .equ HIF_tmpnam, 0x21
-
- .equ HIF_time, 0x31
-
- .equ HIF_getenv, 0x41
- .equ HIF_gettz, 0x43
-
- .equ HIF_sysalloc, 0x101
- .equ HIF_alloc, HIF_sysalloc ;Synonym.
- .equ HIF_sysfree, 0x102
- .equ HIF_free, HIF_sysfree ;Synonym.
- .equ HIF_getpsize, 0x103
- .equ HIF_getpagesize,HIF_getpsize ;Synonym.
- .equ HIF_getargs, 0x104
-
- .equ HIF_clock, 0x111
- .equ HIF_cycles, 0x112
-
- .equ HIF_setvec, 0x121
- .equ HIF_settrap, 0x122
- .equ HIF_setim, 0x123
-
- .equ HIF_query, 0x131
-
- .equ HIF_signal, 0x141
- .equ HIF_sigdfl, 0x142
- .equ HIF_sigret, 0x143
- .equ HIF_sigrep, 0x144
- .equ HIF_sigskp, 0x145
- .equ HIF_sendsig, 0x146
-
-;Maintain compatibility with HIF 1.0 code.
-
- .equ EPI_exit, HIF_exit
-
- .equ EPI_open, HIF_open
- .equ EPI_close, HIF_close
- .equ EPI_read, HIF_read
- .equ EPI_write, HIF_write
- .equ EPI_lseek, HIF_lseek
- .equ EPI_remove, HIF_remove
- .equ EPI_rename, HIF_rename
-
- .equ EPI_tmpnam, HIF_tmpnam
-
- .equ EPI_time, HIF_time
-
- .equ EPI_getenv, HIF_getenv
- .equ EPI_gettz, HIF_gettz
- .equ EPI_alloc, HIF_sysalloc
- .equ EPI_free, HIF_sysfree
- .equ EPI_getpagesize, HIF_getpsize
- .equ EPI_getargs, HIF_getargs
-
- .equ EPI_clock, HIF_clock
- .equ EPI_cycles, HIF_cycles
-
- .equ EPI_setvec, HIF_setvec
-
- .equ V_SYSCALL, 69
-
-; System call macros
-/* Now that source files have been sed'd to avoid these macros, they
- are just commented out. -- gnu@cygnus.com Oct 90
-
- .ifdef _BSD_OS
- .equ V_SYSCALL, 66
- .else
- .equ V_SYSCALL, 69
- .endif
-
- .macro syscall, name
- .ifdef _BSD_OS
- const tav, SYS_@name
- .else
- const tav, HIF_@name
- .endif
- asneq V_SYSCALL, gr1, gr1
- .endm
-
-; error return
-; set errno to the error value in tav.
-; return -1
-;
- .macro returnerr
-;; .extern _errno ; rather have undef'd sym than multiple def's
- const tpc, _errno
- consth tpc, _errno
- store 0, 0, tav, tpc
- jmpi lr0
- constn v0, -1
- .endm
-
-; package the most common case in one macro
-;
- .macro system, name
- syscall name
- jmpti tav, lr0
- returnerr
- .endm
- */