diff options
author | Marcelo Araujo <araujo@FreeBSD.org> | 2009-08-21 00:54:33 +0000 |
---|---|---|
committer | Marcelo Araujo <araujo@FreeBSD.org> | 2009-08-21 00:54:33 +0000 |
commit | 8cbd3957fb9309b77590faad70c31ada2caee71f (patch) | |
tree | 6e6dc53459a6b9a79b032994edb9301bd33d61c2 /devel/psptoolchain-binutils/files/patch-include-opcode-mips.h | |
parent | Update to the 20090818 snapshot of GCC 4.4.2. (diff) |
The PlayStation Portable Toolchain is a collection of tools and utilities
for homebrew PSP development.
WWW: http://www.ps2dev.org
PR: ports/132323, ports/132324, ports/132325, ports/132326
ports/132327, ports/132328, ports/132329, ports/132330
Submitted by: Tassilo Philipp <tphilipp@potion-studios.com>
Notes
Notes:
svn path=/head/; revision=240002
Diffstat (limited to 'devel/psptoolchain-binutils/files/patch-include-opcode-mips.h')
-rw-r--r-- | devel/psptoolchain-binutils/files/patch-include-opcode-mips.h | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/devel/psptoolchain-binutils/files/patch-include-opcode-mips.h b/devel/psptoolchain-binutils/files/patch-include-opcode-mips.h new file mode 100644 index 000000000000..f046ecb244dc --- /dev/null +++ b/devel/psptoolchain-binutils/files/patch-include-opcode-mips.h @@ -0,0 +1,356 @@ +--- include/opcode/mips.h.orig 2005-03-03 11:58:10.000000000 +0000 ++++ include/opcode/mips.h 2006-05-09 02:55:36.000000000 +0100 +@@ -171,6 +171,228 @@ + #define MDMX_FMTSEL_VEC_QH 0x15 + #define MDMX_FMTSEL_VEC_OB 0x16 + ++#include "vfpu.h" ++ ++#define VF_MASK_VT 0x7f ++#define VF_SH_VT 16 ++#define VF_MASK_VS 0x7f ++#define VF_SH_VS 8 ++#define VF_MASK_VD 0x7f ++#define VF_SH_VD 0 ++#define VF_MASK_VML 0x1f ++#define VF_SH_VML 16 ++#define VF_MASK_VMH 0x3 ++#define VF_SH_VMH 0 ++#define VF_MASK_VNL 0x1f ++#define VF_SH_VNL 16 ++#define VF_MASK_VNH 0x1 ++#define VF_SH_VNH 0 ++#define VF_MASK_OFFSET 0x3fff ++#define VF_SH_OFFSET 2 ++#define VF_MASK_CC 0xf ++#define VF_SH_CC 0 ++#define VF_MASK_CONST 0x1f ++#define VF_SH_CONST 16 ++#define VF_MASK_SCALE 0x1f ++#define VF_SH_SCALE 16 ++#define VF_MASK_BCOND 0x7 ++#define VF_SH_BCOND 18 ++#define VF_MASK_MCOND 0x7 ++#define VF_SH_MCOND 16 ++#define VF_MASK_VCD 0xff ++#define VF_SH_VCD 0 ++#define VF_MASK_VCS 0xff ++#define VF_SH_VCS 8 ++#define VF_MASK_ROT 0x1f ++#define VF_SH_ROT 16 ++#define VF_MASK_WRAP 0xff ++#define VF_SH_WRAP 16 ++#define VF_MASK_TSIGN 0x1 ++#define VF_SH_TSIGN 5 ++#define VF_MASK_BMCOND 0x1f ++#define VF_SH_BMCOND 0 ++#define VF_MASK_HFLOAT 0xffff ++#define VF_SH_HFLOAT 0 ++#define VF_MASK_PFX 0xffffff ++#define VF_SH_PFX 0 ++#define VF_MASK_RWB 0x1 ++#define VF_SH_RWB 1 ++ ++#define VF_MASK_PFX_SWZ 0x3 ++#define VF_SH_PFX_SWZ 0 ++#define VF_MASK_PFX_ABS 0x1 ++#define VF_SH_PFX_ABS 8 ++#define VF_MASK_PFX_CST 0x1 ++#define VF_SH_PFX_CST 12 ++#define VF_MASK_PFX_NEG 0x1 ++#define VF_SH_PFX_NEG 16 ++#define VF_MASK_PFX_SAT 0x3 ++#define VF_SH_PFX_SAT 0 ++#define VF_MASK_PFX_MSK 0x1 ++#define VF_SH_PFX_MSK 8 ++ ++#define VF_MASK_ROT_COS 0x3 ++#define VF_SH_ROT_COS 0 ++#define VF_MASK_ROT_SIN 0x3 ++#define VF_SH_ROT_SIN 2 ++#define VF_MASK_ROT_NEG 0x1 ++#define VF_SH_ROT_NEG 4 ++ ++#define VF_MASK_MR_MTX 0x7 ++#define VF_SH_MR_MTX 2 ++#define VF_MASK_MR_IDX 0x3 ++#define VF_SH_MR_IDX 0 ++#define VF_MASK_MR_FSL 0x3 ++#define VF_SH_MR_FSL 5 ++#define VF_MASK_MR_RXC 0x1 ++#define VF_SH_MR_RXC 5 ++#define VF_MASK_MR_VFSL 0x1 ++#define VF_SH_MR_VFSL 6 ++ ++#define VF_MAX_MR_MTX 7 ++#define VF_MAX_MR_IDX 3 ++#define VF_MAX_MR_FSL 3 ++#define VF_MAX_MR_VIDX 1 ++#define VF_MAX_MR_VFSL 1 ++ ++#define VF_MIN_MR 0 ++#define VF_MAX_MR 127 ++#define VF_MIN_CR 128 ++#define VF_MAX_CR 255 ++#define VF_MIN_VCR 128 ++#define VF_MAX_VCR 143 ++#define VF_MIN_CC 0 ++#define VF_MAX_CC 15 ++#define VF_MIN_CONST 1 ++#define VF_MAX_CONST 19 ++#define VF_MIN_SCALE 0 ++#define VF_MAX_SCALE 31 ++#define VF_MIN_BCOND 0 ++#define VF_MAX_BCOND 5 ++#define VF_MIN_MCOND 0 ++#define VF_MAX_MCOND 6 ++#define VF_MIN_WRAP 0 ++#define VF_MAX_WRAP 255 ++#define VF_MIN_ROT 0 ++#define VF_MAX_ROT 31 ++#define VF_MIN_TSIGN 0 ++#define VF_MAX_TSIGN 1 ++#define VF_MIN_BMCOND 0 ++#define VF_MAX_BMCOND 31 ++#define VF_MIN_HFLOAT 0 ++#define VF_MAX_HFLOAT 0xffff ++ ++#define VF_MASK_F32_SIGN 0x1 ++#define VF_SH_F32_SIGN 31 ++#define VF_MASK_F32_EXP 0xff ++#define VF_SH_F32_EXP 23 ++#define VF_MASK_F32_FRA 0x7fffff ++#define VF_SH_F32_FRA 0 ++#define VF_MASK_F16_SIGN 0x1 ++#define VF_SH_F16_SIGN 15 ++#define VF_MASK_F16_EXP 0x1f ++#define VF_SH_F16_EXP 10 ++#define VF_MASK_F16_FRA 0x3ff ++#define VF_SH_F16_FRA 0 ++ ++#define VF_MIN_F32_EXP 0 ++#define VF_MAX_F32_EXP 255 ++#define VF_BIAS_F32_EXP 127 ++#define VF_MIN_F16_EXP 0 ++#define VF_MAX_F16_EXP 31 ++#define VF_BIAS_F16_EXP 15 ++ ++#define OP_SH_VFPU_DELTA 0 ++#define OP_MASK_VFPU_DELTA 0xfffc ++#define OP_SH_VFPU_IMM3 16 ++#define OP_MASK_VFPU_IMM3 0x7 ++#define OP_SH_VFPU_IMM5 16 ++#define OP_MASK_VFPU_IMM5 0x1f ++#define OP_SH_VFPU_IMM8 16 ++#define OP_MASK_VFPU_IMM8 0xff ++#define OP_SH_VFPU_CC 18 /* Condition code. */ ++#define OP_MASK_VFPU_CC 0x7 ++#define OP_SH_VFPU_CONST 16 ++#define OP_MASK_VFPU_CONST 0x1f ++#define OP_SH_VFPU_COND 0 /* Conditional compare. */ ++#define OP_MASK_VFPU_COND 0xf ++#define OP_SH_VFPU_VMTVC 0 ++#define OP_MASK_VFPU_VMTVC 0xff ++#define OP_SH_VFPU_VMFVC 8 ++#define OP_MASK_VFPU_VMFVC 0xff ++#define OP_SH_VFPU_RWB 1 ++#define OP_MASK_VFPU_RWB 0x1 ++#define OP_SH_VFPU_ROT 16 /* Rotators used in vrot. */ ++#define OP_MASK_VFPU_ROT 0x1f ++#define OP_SH_VFPU_FLOAT16 0 ++#define OP_MASK_VFPU_FLOAT16 0xffff ++ ++/* VFPU registers. */ ++#define OP_SH_VFPU_VD 0 ++#define OP_MASK_VFPU_VD 0x7f ++#define OP_SH_VFPU_VS 8 ++#define OP_MASK_VFPU_VS 0x7f ++#define OP_SH_VFPU_VT 16 ++#define OP_MASK_VFPU_VT 0x7f ++#define OP_SH_VFPU_VT_LO 16 /* Bits 0-4 of vt. */ ++#define OP_MASK_VFPU_VT_LO 0x1f ++#define OP_SH_VFPU_VT_HI 5 /* Right-shifted. */ ++#define OP_MASK_VFPU_VT_HI1 0x1 /* Bit 5 of vt. */ ++#define OP_MASK_VFPU_VT_HI2 0x3 /* Bits 5-6 of vt. */ ++/* Special handling of vs in vmmul instructions. */ ++#define VFPU_OP_VT_VS_VD 0xff800000 ++#define VFPU_OPCODE_VMMUL 0xf0000000 ++ ++/* VFPU condition codes. FL and TR accept no arguments, while any conditions ++ above and including EZ only accept one argument. The rest require two ++ arguments. */ ++enum ++{ ++ VFPU_COND_FL, VFPU_COND_EQ, VFPU_COND_LT, VFPU_COND_LE, ++ VFPU_COND_TR, VFPU_COND_NE, VFPU_COND_GE, VFPU_COND_GT, ++ VFPU_COND_EZ, VFPU_COND_EN, VFPU_COND_EI, VFPU_COND_ES, ++ VFPU_COND_NZ, VFPU_COND_NN, VFPU_COND_NI, VFPU_COND_NS, ++ VFPU_NUM_CONDS ++}; ++ ++/* VFPU prefix instruction operands. The *_SH_* values really specify where ++ the bitfield begins, as VFPU prefix instructions have four operands ++ encoded within the immediate field. */ ++#define VFPU_SH_PFX_NEG 16 ++#define VFPU_MASK_PFX_NEG 0x1 /* Negation. */ ++#define VFPU_SH_PFX_CST 12 ++#define VFPU_MASK_PFX_CST 0x1 /* Constant. */ ++#define VFPU_SH_PFX_ABS_CSTHI 8 ++#define VFPU_MASK_PFX_ABS_CSTHI 0x1 /* Abs/Constant (bit 2). */ ++#define VFPU_SH_PFX_SWZ_CSTLO 0 ++#define VFPU_MASK_PFX_SWZ_CSTLO 0x3 /* Swizzle/Constant (bits 0-1). */ ++#define VFPU_SH_PFX_MASK 8 ++#define VFPU_MASK_PFX_MASK 0x1 /* Mask. */ ++#define VFPU_SH_PFX_SAT 0 ++#define VFPU_MASK_PFX_SAT 0x3 /* Saturation. */ ++ ++/* Special handling of the vrot instructions. */ ++#define VFPU_MASK_OP_SIZE 0x8080 /* Masks the operand size (pair, triple, quad). */ ++#define VFPU_OP_SIZE_PAIR 0x80 ++#define VFPU_OP_SIZE_TRIPLE 0x8000 ++#define VFPU_OP_SIZE_QUAD 0x8080 ++/* Note that these are within the rotators field, and not the full opcode. */ ++#define VFPU_SH_ROT_HI 2 ++#define VFPU_MASK_ROT_HI 0x3 ++#define VFPU_SH_ROT_LO 0 ++#define VFPU_MASK_ROT_LO 0x3 ++#define VFPU_SH_ROT_NEG 4 /* Negation. */ ++#define VFPU_MASK_ROT_NEG 0x1 ++ ++/* VFPU 16-bit floating-point format. */ ++#define VFPU_FLOAT16_EXP_MAX 0x1f ++#define VFPU_SH_FLOAT16_SIGN 15 ++#define VFPU_MASK_FLOAT16_SIGN 0x1 ++#define VFPU_SH_FLOAT16_EXP 10 ++#define VFPU_MASK_FLOAT16_EXP 0x1f ++#define VFPU_SH_FLOAT16_FRAC 0 ++#define VFPU_MASK_FLOAT16_FRAC 0x3ff ++ + /* This structure holds information for a particular instruction. */ + + struct mips_opcode +@@ -258,6 +480,29 @@ + Requires that "+A" or "+E" occur first to set position. + Enforces: 32 < (pos+size) <= 64. + ++ Sony Allegrex VFPU instructions: ++ "?o" ++ "?0" - "?3" ++ "?4" - "?7" ++ "?a" ++ "?b" ++ "?c" ++ "?e" ++ "?f" ++ "?i" ++ "?q" ++ "?r" ++ "?u" ++ "?w" ++ "?d" ++ "?m" ++ "?n" ++ "?s" ++ "?t" ++ "?v" ++ "?x" ++ "?z" ++ + Floating point instructions: + "D" 5 bit destination register (OP_*_FD) + "M" 3 bit compare condition code (OP_*_CCC) (only used for mips4 and up) +@@ -442,6 +687,8 @@ + #define INSN_5400 0x01000000 + /* NEC VR5500 instruction. */ + #define INSN_5500 0x02000000 ++/* Sony Allegrex instruction. */ ++#define INSN_ALLEGREX 0x10000000 + + /* MIPS ISA defines, use instead of hardcoding ISA level. */ + +@@ -489,6 +736,7 @@ + #define CPU_MIPS64 64 + #define CPU_MIPS64R2 65 + #define CPU_SB1 12310201 /* octal 'SB', 01. */ ++#define CPU_ALLEGREX 10111431 /* octal 'AL', 31. */ + + /* Test for membership in an ISA including chip specific ISAs. INSN + is pointer to an element of the opcode table; ISA is the specified +@@ -510,6 +758,7 @@ + || (cpu == CPU_VR4120 && ((insn)->membership & INSN_4120) != 0) \ + || (cpu == CPU_VR5400 && ((insn)->membership & INSN_5400) != 0) \ + || (cpu == CPU_VR5500 && ((insn)->membership & INSN_5500) != 0) \ ++ || (cpu == CPU_ALLEGREX && ((insn)->membership & INSN_ALLEGREX) != 0) \ + || 0) /* Please keep this term for easier source merging. */ + + /* This is a list of macro expanded instructions. +@@ -622,9 +871,25 @@ + M_LI_DD, + M_LI_S, + M_LI_SS, ++ M_LVHI_S_SS, ++ M_LVHI_P_SS, ++ M_LVI_S_SS, ++ M_LVI_P_SS, ++ M_LVI_T_SS, ++ M_LVI_Q_SS, + M_LL_AB, + M_LLD_AB, + M_LS_A, ++ M_LVHI_P, ++ M_LVHI_S, ++ M_LVI_P, ++ M_LVI_Q, ++ M_LVI_S, ++ M_LVI_T, ++ M_LVL_Q_AB, ++ M_LVR_Q_AB, ++ M_LV_Q_AB, ++ M_LV_Q_AB_2, + M_LW_A, + M_LW_AB, + M_LWC0_A, +@@ -635,6 +900,7 @@ + M_LWC2_AB, + M_LWC3_A, + M_LWC3_AB, ++ M_LV_S_AB, + M_LWL_A, + M_LWL_AB, + M_LWR_A, +@@ -714,6 +980,10 @@ + M_SUB_I, + M_SUBU_I, + M_SUBU_I_2, ++ M_SVL_Q_AB, ++ M_SV_Q_AB, ++ M_SVR_Q_AB, ++ M_SV_S_AB, + M_TEQ_I, + M_TGE_I, + M_TGEU_I, +@@ -728,14 +998,24 @@ + M_ULH_A, + M_ULHU, + M_ULHU_A, ++ M_ULV_Q, ++ M_ULV_Q_AB, ++ M_ULV_S, + M_ULW, + M_ULW_A, + M_USH, + M_USH_A, ++ M_USV_Q, ++ M_USV_Q_AB, ++ M_USV_S, + M_USW, + M_USW_A, + M_USD, + M_USD_A, ++ M_VCMOV_P, ++ M_VCMOV_Q, ++ M_VCMOV_S, ++ M_VCMOV_T, + M_XOR_I, + M_COP0, + M_COP1, |