diff options
Diffstat (limited to 'newlib/libc/sys/a29khif/sys/fpsymbol.h')
-rw-r--r-- | newlib/libc/sys/a29khif/sys/fpsymbol.h | 2970 |
1 files changed, 0 insertions, 2970 deletions
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 |