diff options
Diffstat (limited to 'src/lj_target_mips.h')
-rw-r--r-- | src/lj_target_mips.h | 193 |
1 files changed, 175 insertions, 18 deletions
diff --git a/src/lj_target_mips.h b/src/lj_target_mips.h index 4bbdc743..6e436967 100644 --- a/src/lj_target_mips.h +++ b/src/lj_target_mips.h | |||
@@ -13,11 +13,15 @@ | |||
13 | _(R8) _(R9) _(R10) _(R11) _(R12) _(R13) _(R14) _(R15) \ | 13 | _(R8) _(R9) _(R10) _(R11) _(R12) _(R13) _(R14) _(R15) \ |
14 | _(R16) _(R17) _(R18) _(R19) _(R20) _(R21) _(R22) _(R23) \ | 14 | _(R16) _(R17) _(R18) _(R19) _(R20) _(R21) _(R22) _(R23) \ |
15 | _(R24) _(R25) _(SYS1) _(SYS2) _(R28) _(SP) _(R30) _(RA) | 15 | _(R24) _(R25) _(SYS1) _(SYS2) _(R28) _(SP) _(R30) _(RA) |
16 | #if LJ_SOFTFP | ||
17 | #define FPRDEF(_) | ||
18 | #else | ||
16 | #define FPRDEF(_) \ | 19 | #define FPRDEF(_) \ |
17 | _(F0) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) \ | 20 | _(F0) _(F1) _(F2) _(F3) _(F4) _(F5) _(F6) _(F7) \ |
18 | _(F8) _(F9) _(F10) _(F11) _(F12) _(F13) _(F14) _(F15) \ | 21 | _(F8) _(F9) _(F10) _(F11) _(F12) _(F13) _(F14) _(F15) \ |
19 | _(F16) _(F17) _(F18) _(F19) _(F20) _(F21) _(F22) _(F23) \ | 22 | _(F16) _(F17) _(F18) _(F19) _(F20) _(F21) _(F22) _(F23) \ |
20 | _(F24) _(F25) _(F26) _(F27) _(F28) _(F29) _(F30) _(F31) | 23 | _(F24) _(F25) _(F26) _(F27) _(F28) _(F29) _(F30) _(F31) |
24 | #endif | ||
21 | #define VRIDDEF(_) | 25 | #define VRIDDEF(_) |
22 | 26 | ||
23 | #define RIDENUM(name) RID_##name, | 27 | #define RIDENUM(name) RID_##name, |
@@ -39,7 +43,11 @@ enum { | |||
39 | RID_RETHI = RID_R2, | 43 | RID_RETHI = RID_R2, |
40 | RID_RETLO = RID_R3, | 44 | RID_RETLO = RID_R3, |
41 | #endif | 45 | #endif |
46 | #if LJ_SOFTFP | ||
47 | RID_FPRET = RID_R2, | ||
48 | #else | ||
42 | RID_FPRET = RID_F0, | 49 | RID_FPRET = RID_F0, |
50 | #endif | ||
43 | RID_CFUNCADDR = RID_R25, | 51 | RID_CFUNCADDR = RID_R25, |
44 | 52 | ||
45 | /* These definitions must match with the *.dasc file(s): */ | 53 | /* These definitions must match with the *.dasc file(s): */ |
@@ -52,8 +60,12 @@ enum { | |||
52 | /* Register ranges [min, max) and number of registers. */ | 60 | /* Register ranges [min, max) and number of registers. */ |
53 | RID_MIN_GPR = RID_R0, | 61 | RID_MIN_GPR = RID_R0, |
54 | RID_MAX_GPR = RID_RA+1, | 62 | RID_MAX_GPR = RID_RA+1, |
55 | RID_MIN_FPR = RID_F0, | 63 | RID_MIN_FPR = RID_MAX_GPR, |
64 | #if LJ_SOFTFP | ||
65 | RID_MAX_FPR = RID_MIN_FPR, | ||
66 | #else | ||
56 | RID_MAX_FPR = RID_F31+1, | 67 | RID_MAX_FPR = RID_F31+1, |
68 | #endif | ||
57 | RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, | 69 | RID_NUM_GPR = RID_MAX_GPR - RID_MIN_GPR, |
58 | RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR /* Only even regs are used. */ | 70 | RID_NUM_FPR = RID_MAX_FPR - RID_MIN_FPR /* Only even regs are used. */ |
59 | }; | 71 | }; |
@@ -68,28 +80,60 @@ enum { | |||
68 | (RID2RSET(RID_ZERO)|RID2RSET(RID_TMP)|RID2RSET(RID_SP)|\ | 80 | (RID2RSET(RID_ZERO)|RID2RSET(RID_TMP)|RID2RSET(RID_SP)|\ |
69 | RID2RSET(RID_SYS1)|RID2RSET(RID_SYS2)|RID2RSET(RID_JGL)|RID2RSET(RID_GP)) | 81 | RID2RSET(RID_SYS1)|RID2RSET(RID_SYS2)|RID2RSET(RID_JGL)|RID2RSET(RID_GP)) |
70 | #define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED) | 82 | #define RSET_GPR (RSET_RANGE(RID_MIN_GPR, RID_MAX_GPR) - RSET_FIXED) |
83 | #if LJ_SOFTFP | ||
84 | #define RSET_FPR 0 | ||
85 | #else | ||
86 | #if LJ_32 | ||
71 | #define RSET_FPR \ | 87 | #define RSET_FPR \ |
72 | (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ | 88 | (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ |
73 | RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ | 89 | RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ |
74 | RID2RSET(RID_F16)|RID2RSET(RID_F18)|RID2RSET(RID_F20)|RID2RSET(RID_F22)|\ | 90 | RID2RSET(RID_F16)|RID2RSET(RID_F18)|RID2RSET(RID_F20)|RID2RSET(RID_F22)|\ |
75 | RID2RSET(RID_F24)|RID2RSET(RID_F26)|RID2RSET(RID_F28)|RID2RSET(RID_F30)) | 91 | RID2RSET(RID_F24)|RID2RSET(RID_F26)|RID2RSET(RID_F28)|RID2RSET(RID_F30)) |
76 | #define RSET_ALL (RSET_GPR|RSET_FPR) | 92 | #else |
77 | #define RSET_INIT RSET_ALL | 93 | #define RSET_FPR RSET_RANGE(RID_MIN_FPR, RID_MAX_FPR) |
94 | #endif | ||
95 | #endif | ||
96 | #define RSET_ALL (RSET_GPR|RSET_FPR) | ||
97 | #define RSET_INIT RSET_ALL | ||
78 | 98 | ||
79 | #define RSET_SCRATCH_GPR \ | 99 | #define RSET_SCRATCH_GPR \ |
80 | (RSET_RANGE(RID_R1, RID_R15+1)|\ | 100 | (RSET_RANGE(RID_R1, RID_R15+1)|\ |
81 | RID2RSET(RID_R24)|RID2RSET(RID_R25)) | 101 | RID2RSET(RID_R24)|RID2RSET(RID_R25)) |
102 | #if LJ_SOFTFP | ||
103 | #define RSET_SCRATCH_FPR 0 | ||
104 | #else | ||
105 | #if LJ_32 | ||
82 | #define RSET_SCRATCH_FPR \ | 106 | #define RSET_SCRATCH_FPR \ |
83 | (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ | 107 | (RID2RSET(RID_F0)|RID2RSET(RID_F2)|RID2RSET(RID_F4)|RID2RSET(RID_F6)|\ |
84 | RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ | 108 | RID2RSET(RID_F8)|RID2RSET(RID_F10)|RID2RSET(RID_F12)|RID2RSET(RID_F14)|\ |
85 | RID2RSET(RID_F16)|RID2RSET(RID_F18)) | 109 | RID2RSET(RID_F16)|RID2RSET(RID_F18)) |
110 | #else | ||
111 | #define RSET_SCRATCH_FPR RSET_RANGE(RID_F0, RID_F24) | ||
112 | #endif | ||
113 | #endif | ||
86 | #define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR) | 114 | #define RSET_SCRATCH (RSET_SCRATCH_GPR|RSET_SCRATCH_FPR) |
87 | #define REGARG_FIRSTGPR RID_R4 | 115 | #define REGARG_FIRSTGPR RID_R4 |
116 | #if LJ_32 | ||
88 | #define REGARG_LASTGPR RID_R7 | 117 | #define REGARG_LASTGPR RID_R7 |
89 | #define REGARG_NUMGPR 4 | 118 | #define REGARG_NUMGPR 4 |
119 | #else | ||
120 | #define REGARG_LASTGPR RID_R11 | ||
121 | #define REGARG_NUMGPR 8 | ||
122 | #endif | ||
123 | #if LJ_ABI_SOFTFP | ||
124 | #define REGARG_FIRSTFPR 0 | ||
125 | #define REGARG_LASTFPR 0 | ||
126 | #define REGARG_NUMFPR 0 | ||
127 | #else | ||
90 | #define REGARG_FIRSTFPR RID_F12 | 128 | #define REGARG_FIRSTFPR RID_F12 |
129 | #if LJ_32 | ||
91 | #define REGARG_LASTFPR RID_F14 | 130 | #define REGARG_LASTFPR RID_F14 |
92 | #define REGARG_NUMFPR 2 | 131 | #define REGARG_NUMFPR 2 |
132 | #else | ||
133 | #define REGARG_LASTFPR RID_F19 | ||
134 | #define REGARG_NUMFPR 8 | ||
135 | #endif | ||
136 | #endif | ||
93 | 137 | ||
94 | /* -- Spill slots --------------------------------------------------------- */ | 138 | /* -- Spill slots --------------------------------------------------------- */ |
95 | 139 | ||
@@ -100,7 +144,11 @@ enum { | |||
100 | ** | 144 | ** |
101 | ** SPS_FIRST: First spill slot for general use. | 145 | ** SPS_FIRST: First spill slot for general use. |
102 | */ | 146 | */ |
147 | #if LJ_32 | ||
103 | #define SPS_FIXED 5 | 148 | #define SPS_FIXED 5 |
149 | #else | ||
150 | #define SPS_FIXED 4 | ||
151 | #endif | ||
104 | #define SPS_FIRST 4 | 152 | #define SPS_FIRST 4 |
105 | 153 | ||
106 | #define SPOFS_TMP 0 | 154 | #define SPOFS_TMP 0 |
@@ -112,8 +160,10 @@ enum { | |||
112 | 160 | ||
113 | /* This definition must match with the *.dasc file(s). */ | 161 | /* This definition must match with the *.dasc file(s). */ |
114 | typedef struct { | 162 | typedef struct { |
163 | #if !LJ_SOFTFP | ||
115 | lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ | 164 | lua_Number fpr[RID_NUM_FPR]; /* Floating-point registers. */ |
116 | int32_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ | 165 | #endif |
166 | intptr_t gpr[RID_NUM_GPR]; /* General-purpose registers. */ | ||
117 | int32_t spill[256]; /* Spill slots. */ | 167 | int32_t spill[256]; /* Spill slots. */ |
118 | } ExitState; | 168 | } ExitState; |
119 | 169 | ||
@@ -142,52 +192,85 @@ static LJ_AINLINE uint32_t *exitstub_trace_addr_(uint32_t *p) | |||
142 | #define MIPSF_F(r) ((r) << 6) | 192 | #define MIPSF_F(r) ((r) << 6) |
143 | #define MIPSF_A(n) ((n) << 6) | 193 | #define MIPSF_A(n) ((n) << 6) |
144 | #define MIPSF_M(n) ((n) << 11) | 194 | #define MIPSF_M(n) ((n) << 11) |
195 | #define MIPSF_L(n) ((n) << 6) | ||
145 | 196 | ||
146 | typedef enum MIPSIns { | 197 | typedef enum MIPSIns { |
198 | MIPSI_D = 0x38, | ||
199 | MIPSI_DV = 0x10, | ||
200 | MIPSI_D32 = 0x3c, | ||
147 | /* Integer instructions. */ | 201 | /* Integer instructions. */ |
148 | MIPSI_MOVE = 0x00000021, | 202 | MIPSI_MOVE = 0x00000025, |
149 | MIPSI_NOP = 0x00000000, | 203 | MIPSI_NOP = 0x00000000, |
150 | 204 | ||
151 | MIPSI_LI = 0x24000000, | 205 | MIPSI_LI = 0x24000000, |
152 | MIPSI_LU = 0x34000000, | 206 | MIPSI_LU = 0x34000000, |
153 | MIPSI_LUI = 0x3c000000, | 207 | MIPSI_LUI = 0x3c000000, |
154 | 208 | ||
155 | MIPSI_ADDIU = 0x24000000, | 209 | MIPSI_AND = 0x00000024, |
156 | MIPSI_ANDI = 0x30000000, | 210 | MIPSI_ANDI = 0x30000000, |
211 | MIPSI_OR = 0x00000025, | ||
157 | MIPSI_ORI = 0x34000000, | 212 | MIPSI_ORI = 0x34000000, |
213 | MIPSI_XOR = 0x00000026, | ||
158 | MIPSI_XORI = 0x38000000, | 214 | MIPSI_XORI = 0x38000000, |
215 | MIPSI_NOR = 0x00000027, | ||
216 | |||
217 | MIPSI_SLT = 0x0000002a, | ||
218 | MIPSI_SLTU = 0x0000002b, | ||
159 | MIPSI_SLTI = 0x28000000, | 219 | MIPSI_SLTI = 0x28000000, |
160 | MIPSI_SLTIU = 0x2c000000, | 220 | MIPSI_SLTIU = 0x2c000000, |
161 | 221 | ||
162 | MIPSI_ADDU = 0x00000021, | 222 | MIPSI_ADDU = 0x00000021, |
223 | MIPSI_ADDIU = 0x24000000, | ||
224 | MIPSI_SUB = 0x00000022, | ||
163 | MIPSI_SUBU = 0x00000023, | 225 | MIPSI_SUBU = 0x00000023, |
226 | |||
227 | #if !LJ_TARGET_MIPSR6 | ||
164 | MIPSI_MUL = 0x70000002, | 228 | MIPSI_MUL = 0x70000002, |
165 | MIPSI_AND = 0x00000024, | 229 | MIPSI_DIV = 0x0000001a, |
166 | MIPSI_OR = 0x00000025, | 230 | MIPSI_DIVU = 0x0000001b, |
167 | MIPSI_XOR = 0x00000026, | 231 | |
168 | MIPSI_NOR = 0x00000027, | ||
169 | MIPSI_SLT = 0x0000002a, | ||
170 | MIPSI_SLTU = 0x0000002b, | ||
171 | MIPSI_MOVZ = 0x0000000a, | 232 | MIPSI_MOVZ = 0x0000000a, |
172 | MIPSI_MOVN = 0x0000000b, | 233 | MIPSI_MOVN = 0x0000000b, |
234 | MIPSI_MFHI = 0x00000010, | ||
235 | MIPSI_MFLO = 0x00000012, | ||
236 | MIPSI_MULT = 0x00000018, | ||
237 | #else | ||
238 | MIPSI_MUL = 0x00000098, | ||
239 | MIPSI_MUH = 0x000000d8, | ||
240 | MIPSI_DIV = 0x0000009a, | ||
241 | MIPSI_DIVU = 0x0000009b, | ||
242 | |||
243 | MIPSI_SELEQZ = 0x00000035, | ||
244 | MIPSI_SELNEZ = 0x00000037, | ||
245 | #endif | ||
173 | 246 | ||
174 | MIPSI_SLL = 0x00000000, | 247 | MIPSI_SLL = 0x00000000, |
175 | MIPSI_SRL = 0x00000002, | 248 | MIPSI_SRL = 0x00000002, |
176 | MIPSI_SRA = 0x00000003, | 249 | MIPSI_SRA = 0x00000003, |
177 | MIPSI_ROTR = 0x00200002, /* MIPS32R2 */ | 250 | MIPSI_ROTR = 0x00200002, /* MIPSXXR2 */ |
251 | MIPSI_DROTR = 0x0020003a, | ||
252 | MIPSI_DROTR32 = 0x0020003e, | ||
178 | MIPSI_SLLV = 0x00000004, | 253 | MIPSI_SLLV = 0x00000004, |
179 | MIPSI_SRLV = 0x00000006, | 254 | MIPSI_SRLV = 0x00000006, |
180 | MIPSI_SRAV = 0x00000007, | 255 | MIPSI_SRAV = 0x00000007, |
181 | MIPSI_ROTRV = 0x00000046, /* MIPS32R2 */ | 256 | MIPSI_ROTRV = 0x00000046, /* MIPSXXR2 */ |
257 | MIPSI_DROTRV = 0x00000056, | ||
182 | 258 | ||
183 | MIPSI_SEB = 0x7c000420, /* MIPS32R2 */ | 259 | MIPSI_SEB = 0x7c000420, /* MIPSXXR2 */ |
184 | MIPSI_SEH = 0x7c000620, /* MIPS32R2 */ | 260 | MIPSI_SEH = 0x7c000620, /* MIPSXXR2 */ |
185 | MIPSI_WSBH = 0x7c0000a0, /* MIPS32R2 */ | 261 | MIPSI_WSBH = 0x7c0000a0, /* MIPSXXR2 */ |
262 | MIPSI_DSBH = 0x7c0000a4, | ||
186 | 263 | ||
187 | MIPSI_B = 0x10000000, | 264 | MIPSI_B = 0x10000000, |
188 | MIPSI_J = 0x08000000, | 265 | MIPSI_J = 0x08000000, |
189 | MIPSI_JAL = 0x0c000000, | 266 | MIPSI_JAL = 0x0c000000, |
267 | #if !LJ_TARGET_MIPSR6 | ||
268 | MIPSI_JALX = 0x74000000, | ||
190 | MIPSI_JR = 0x00000008, | 269 | MIPSI_JR = 0x00000008, |
270 | #else | ||
271 | MIPSI_JR = 0x00000009, | ||
272 | MIPSI_BALC = 0xe8000000, | ||
273 | #endif | ||
191 | MIPSI_JALR = 0x0000f809, | 274 | MIPSI_JALR = 0x0000f809, |
192 | 275 | ||
193 | MIPSI_BEQ = 0x10000000, | 276 | MIPSI_BEQ = 0x10000000, |
@@ -199,7 +282,9 @@ typedef enum MIPSIns { | |||
199 | 282 | ||
200 | /* Load/store instructions. */ | 283 | /* Load/store instructions. */ |
201 | MIPSI_LW = 0x8c000000, | 284 | MIPSI_LW = 0x8c000000, |
285 | MIPSI_LD = 0xdc000000, | ||
202 | MIPSI_SW = 0xac000000, | 286 | MIPSI_SW = 0xac000000, |
287 | MIPSI_SD = 0xfc000000, | ||
203 | MIPSI_LB = 0x80000000, | 288 | MIPSI_LB = 0x80000000, |
204 | MIPSI_SB = 0xa0000000, | 289 | MIPSI_SB = 0xa0000000, |
205 | MIPSI_LH = 0x84000000, | 290 | MIPSI_LH = 0x84000000, |
@@ -211,11 +296,69 @@ typedef enum MIPSIns { | |||
211 | MIPSI_LDC1 = 0xd4000000, | 296 | MIPSI_LDC1 = 0xd4000000, |
212 | MIPSI_SDC1 = 0xf4000000, | 297 | MIPSI_SDC1 = 0xf4000000, |
213 | 298 | ||
299 | /* MIPS64 instructions. */ | ||
300 | MIPSI_DADD = 0x0000002c, | ||
301 | MIPSI_DADDU = 0x0000002d, | ||
302 | MIPSI_DADDIU = 0x64000000, | ||
303 | MIPSI_DSUB = 0x0000002e, | ||
304 | MIPSI_DSUBU = 0x0000002f, | ||
305 | #if !LJ_TARGET_MIPSR6 | ||
306 | MIPSI_DDIV = 0x0000001e, | ||
307 | MIPSI_DDIVU = 0x0000001f, | ||
308 | MIPSI_DMULT = 0x0000001c, | ||
309 | MIPSI_DMULTU = 0x0000001d, | ||
310 | #else | ||
311 | MIPSI_DDIV = 0x0000009e, | ||
312 | MIPSI_DMOD = 0x000000de, | ||
313 | MIPSI_DDIVU = 0x0000009f, | ||
314 | MIPSI_DMODU = 0x000000df, | ||
315 | MIPSI_DMUL = 0x0000009c, | ||
316 | MIPSI_DMUH = 0x000000dc, | ||
317 | #endif | ||
318 | |||
319 | MIPSI_DSLL = 0x00000038, | ||
320 | MIPSI_DSRL = 0x0000003a, | ||
321 | MIPSI_DSLLV = 0x00000014, | ||
322 | MIPSI_DSRLV = 0x00000016, | ||
323 | MIPSI_DSRA = 0x0000003b, | ||
324 | MIPSI_DSRAV = 0x00000017, | ||
325 | MIPSI_DSRA32 = 0x0000003f, | ||
326 | MIPSI_DSLL32 = 0x0000003c, | ||
327 | MIPSI_DSRL32 = 0x0000003e, | ||
328 | MIPSI_DSHD = 0x7c000164, | ||
329 | |||
330 | MIPSI_AADDU = LJ_32 ? MIPSI_ADDU : MIPSI_DADDU, | ||
331 | MIPSI_AADDIU = LJ_32 ? MIPSI_ADDIU : MIPSI_DADDIU, | ||
332 | MIPSI_ASUBU = LJ_32 ? MIPSI_SUBU : MIPSI_DSUBU, | ||
333 | MIPSI_AL = LJ_32 ? MIPSI_LW : MIPSI_LD, | ||
334 | MIPSI_AS = LJ_32 ? MIPSI_SW : MIPSI_SD, | ||
335 | #if LJ_TARGET_MIPSR6 | ||
336 | MIPSI_LSA = 0x00000005, | ||
337 | MIPSI_DLSA = 0x00000015, | ||
338 | MIPSI_ALSA = LJ_32 ? MIPSI_LSA : MIPSI_DLSA, | ||
339 | #endif | ||
340 | |||
341 | /* Extract/insert instructions. */ | ||
342 | MIPSI_DEXTM = 0x7c000001, | ||
343 | MIPSI_DEXTU = 0x7c000002, | ||
344 | MIPSI_DEXT = 0x7c000003, | ||
345 | MIPSI_DINSM = 0x7c000005, | ||
346 | MIPSI_DINSU = 0x7c000006, | ||
347 | MIPSI_DINS = 0x7c000007, | ||
348 | |||
349 | MIPSI_FLOOR_D = 0x4620000b, | ||
350 | |||
214 | /* FP instructions. */ | 351 | /* FP instructions. */ |
215 | MIPSI_MOV_S = 0x46000006, | 352 | MIPSI_MOV_S = 0x46000006, |
216 | MIPSI_MOV_D = 0x46200006, | 353 | MIPSI_MOV_D = 0x46200006, |
354 | #if !LJ_TARGET_MIPSR6 | ||
217 | MIPSI_MOVT_D = 0x46210011, | 355 | MIPSI_MOVT_D = 0x46210011, |
218 | MIPSI_MOVF_D = 0x46200011, | 356 | MIPSI_MOVF_D = 0x46200011, |
357 | #else | ||
358 | MIPSI_MIN_D = 0x4620001C, | ||
359 | MIPSI_MAX_D = 0x4620001E, | ||
360 | MIPSI_SEL_D = 0x46200010, | ||
361 | #endif | ||
219 | 362 | ||
220 | MIPSI_ABS_D = 0x46200005, | 363 | MIPSI_ABS_D = 0x46200005, |
221 | MIPSI_NEG_D = 0x46200007, | 364 | MIPSI_NEG_D = 0x46200007, |
@@ -235,23 +378,37 @@ typedef enum MIPSIns { | |||
235 | MIPSI_CVT_W_D = 0x46200024, | 378 | MIPSI_CVT_W_D = 0x46200024, |
236 | MIPSI_CVT_S_W = 0x46800020, | 379 | MIPSI_CVT_S_W = 0x46800020, |
237 | MIPSI_CVT_D_W = 0x46800021, | 380 | MIPSI_CVT_D_W = 0x46800021, |
381 | MIPSI_CVT_S_L = 0x46a00020, | ||
382 | MIPSI_CVT_D_L = 0x46a00021, | ||
238 | 383 | ||
239 | MIPSI_TRUNC_W_S = 0x4600000d, | 384 | MIPSI_TRUNC_W_S = 0x4600000d, |
240 | MIPSI_TRUNC_W_D = 0x4620000d, | 385 | MIPSI_TRUNC_W_D = 0x4620000d, |
386 | MIPSI_TRUNC_L_S = 0x46000009, | ||
387 | MIPSI_TRUNC_L_D = 0x46200009, | ||
241 | MIPSI_FLOOR_W_S = 0x4600000f, | 388 | MIPSI_FLOOR_W_S = 0x4600000f, |
242 | MIPSI_FLOOR_W_D = 0x4620000f, | 389 | MIPSI_FLOOR_W_D = 0x4620000f, |
243 | 390 | ||
244 | MIPSI_MFC1 = 0x44000000, | 391 | MIPSI_MFC1 = 0x44000000, |
245 | MIPSI_MTC1 = 0x44800000, | 392 | MIPSI_MTC1 = 0x44800000, |
393 | MIPSI_DMTC1 = 0x44a00000, | ||
394 | MIPSI_DMFC1 = 0x44200000, | ||
246 | 395 | ||
396 | #if !LJ_TARGET_MIPSR6 | ||
247 | MIPSI_BC1F = 0x45000000, | 397 | MIPSI_BC1F = 0x45000000, |
248 | MIPSI_BC1T = 0x45010000, | 398 | MIPSI_BC1T = 0x45010000, |
249 | |||
250 | MIPSI_C_EQ_D = 0x46200032, | 399 | MIPSI_C_EQ_D = 0x46200032, |
400 | MIPSI_C_OLT_S = 0x46000034, | ||
251 | MIPSI_C_OLT_D = 0x46200034, | 401 | MIPSI_C_OLT_D = 0x46200034, |
252 | MIPSI_C_ULT_D = 0x46200035, | 402 | MIPSI_C_ULT_D = 0x46200035, |
253 | MIPSI_C_OLE_D = 0x46200036, | 403 | MIPSI_C_OLE_D = 0x46200036, |
254 | MIPSI_C_ULE_D = 0x46200037, | 404 | MIPSI_C_ULE_D = 0x46200037, |
405 | #else | ||
406 | MIPSI_BC1EQZ = 0x45200000, | ||
407 | MIPSI_BC1NEZ = 0x45a00000, | ||
408 | MIPSI_CMP_EQ_D = 0x46a00002, | ||
409 | MIPSI_CMP_LT_S = 0x46800004, | ||
410 | MIPSI_CMP_LT_D = 0x46a00004, | ||
411 | #endif | ||
255 | 412 | ||
256 | } MIPSIns; | 413 | } MIPSIns; |
257 | 414 | ||