diff options
Diffstat (limited to 'newlib/libc/sys/a29khif/sys')
-rw-r--r-- | newlib/libc/sys/a29khif/sys/cpudef.h | 270 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/fpsymbol.h | 2970 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/intrinsi.h | 457 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/macros.h | 37 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/proreg.h | 60 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/romdcl.h | 392 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/smartmac.h | 1491 | ||||
-rw-r--r-- | newlib/libc/sys/a29khif/sys/sysmac.h | 165 |
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 - */ |