Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Side by Side Diff: src/mips64/assembler-mips64.h

Issue 2740123004: MIPS[64]: Support for MSA instructions (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 V(v0) V(v1) V(a0) V(a1) V(a2) V(a3) \ 57 V(v0) V(v1) V(a0) V(a1) V(a2) V(a3) \
58 V(a4) V(a5) V(a6) V(a7) V(t0) V(t1) V(t2) V(s7) 58 V(a4) V(a5) V(a6) V(a7) V(t0) V(t1) V(t2) V(s7)
59 59
60 #define DOUBLE_REGISTERS(V) \ 60 #define DOUBLE_REGISTERS(V) \
61 V(f0) V(f1) V(f2) V(f3) V(f4) V(f5) V(f6) V(f7) \ 61 V(f0) V(f1) V(f2) V(f3) V(f4) V(f5) V(f6) V(f7) \
62 V(f8) V(f9) V(f10) V(f11) V(f12) V(f13) V(f14) V(f15) \ 62 V(f8) V(f9) V(f10) V(f11) V(f12) V(f13) V(f14) V(f15) \
63 V(f16) V(f17) V(f18) V(f19) V(f20) V(f21) V(f22) V(f23) \ 63 V(f16) V(f17) V(f18) V(f19) V(f20) V(f21) V(f22) V(f23) \
64 V(f24) V(f25) V(f26) V(f27) V(f28) V(f29) V(f30) V(f31) 64 V(f24) V(f25) V(f26) V(f27) V(f28) V(f29) V(f30) V(f31)
65 65
66 #define FLOAT_REGISTERS DOUBLE_REGISTERS 66 #define FLOAT_REGISTERS DOUBLE_REGISTERS
67 #define SIMD128_REGISTERS DOUBLE_REGISTERS 67 #define SIMD128_REGISTERS(V) \
68 V(w0) V(w1) V(w2) V(w3) V(w4) V(w5) V(w6) V(w7) \
69 V(w8) V(w9) V(w10) V(w11) V(w12) V(w13) V(w14) V(w15) \
70 V(w16) V(w17) V(w18) V(w19) V(w20) V(w21) V(w22) V(w23) \
71 V(w24) V(w25) V(w26) V(w27) V(w28) V(w29) V(w30) V(w31)
68 72
69 #define ALLOCATABLE_DOUBLE_REGISTERS(V) \ 73 #define ALLOCATABLE_DOUBLE_REGISTERS(V) \
70 V(f0) V(f2) V(f4) V(f6) V(f8) V(f10) V(f12) V(f14) \ 74 V(f0) V(f2) V(f4) V(f6) V(f8) V(f10) V(f12) V(f14) \
71 V(f16) V(f18) V(f20) V(f22) V(f24) V(f26) 75 V(f16) V(f18) V(f20) V(f22) V(f24) V(f26)
72 // clang-format on 76 // clang-format on
73 77
74 // CPU Registers. 78 // CPU Registers.
75 // 79 //
76 // 1) We would prefer to use an enum, but enum values are assignment- 80 // 1) We would prefer to use an enum, but enum values are assignment-
77 // compatible with int, which has caused code-generation bugs. 81 // compatible with int, which has caused code-generation bugs.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 constexpr bool kSimpleFPAliasing = true; 160 constexpr bool kSimpleFPAliasing = true;
157 constexpr bool kSimdMaskRegisters = false; 161 constexpr bool kSimdMaskRegisters = false;
158 162
159 // Coprocessor register. 163 // Coprocessor register.
160 struct FPURegister { 164 struct FPURegister {
161 enum Code { 165 enum Code {
162 #define REGISTER_CODE(R) kCode_##R, 166 #define REGISTER_CODE(R) kCode_##R,
163 DOUBLE_REGISTERS(REGISTER_CODE) 167 DOUBLE_REGISTERS(REGISTER_CODE)
164 #undef REGISTER_CODE 168 #undef REGISTER_CODE
165 kAfterLast, 169 kAfterLast,
166 kCode_no_reg = -1 170 kCode_no_reg = kInvalidFPURegister
167 }; 171 };
168 172
169 static constexpr int kMaxNumRegisters = Code::kAfterLast; 173 static constexpr int kMaxNumRegisters = Code::kAfterLast;
170 174
171 inline static int NumRegisters(); 175 inline static int NumRegisters();
172 176
173 // TODO(plind): Warning, inconsistent numbering here. kNumFPURegisters refers 177 // TODO(plind): Warning, inconsistent numbering here. kNumFPURegisters refers
174 // to number of 32-bit FPU regs, but kNumAllocatableRegisters refers to 178 // to number of 32-bit FPU regs, but kNumAllocatableRegisters refers to
175 // number of Double regs (64-bit regs, or FPU-reg-pairs). 179 // number of Double regs (64-bit regs, or FPU-reg-pairs).
176 180
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 return r; 214 return r;
211 } 215 }
212 void setcode(int f) { 216 void setcode(int f) {
213 reg_code = f; 217 reg_code = f;
214 DCHECK(is_valid()); 218 DCHECK(is_valid());
215 } 219 }
216 // Unfortunately we can't make this private in a struct. 220 // Unfortunately we can't make this private in a struct.
217 int reg_code; 221 int reg_code;
218 }; 222 };
219 223
224 // MIPS SIMD (MSA) register
225 struct MSARegister {
226 enum Code {
227 #define REGISTER_CODE(R) kCode_##R,
228 SIMD128_REGISTERS(REGISTER_CODE)
229 #undef REGISTER_CODE
230 kAfterLast,
231 kCode_no_reg = kInvalidMSARegister
232 };
233
234 static const int kMaxNumRegisters = Code::kAfterLast;
235
236 inline static int NumRegisters();
237
238 bool is_valid() const { return 0 <= reg_code && reg_code < kMaxNumRegisters; }
239 bool is(MSARegister reg) const { return reg_code == reg.reg_code; }
240
241 int code() const {
242 DCHECK(is_valid());
243 return reg_code;
244 }
245 int bit() const {
246 DCHECK(is_valid());
247 return 1 << reg_code;
248 }
249
250 static MSARegister from_code(int code) {
251 MSARegister r = {code};
252 return r;
253 }
254 void setcode(int f) {
255 reg_code = f;
256 DCHECK(is_valid());
257 }
258 // Unfortunately we can't make this private in a struct.
259 int reg_code;
260 };
261
220 // A few double registers are reserved: one as a scratch register and one to 262 // A few double registers are reserved: one as a scratch register and one to
221 // hold 0.0. 263 // hold 0.0.
222 // f28: 0.0 264 // f28: 0.0
223 // f30: scratch register. 265 // f30: scratch register.
224 266
225 // V8 now supports the O32 ABI, and the FPU Registers are organized as 32 267 // V8 now supports the O32 ABI, and the FPU Registers are organized as 32
226 // 32-bit registers, f0 through f31. When used as 'double' they are used 268 // 32-bit registers, f0 through f31. When used as 'double' they are used
227 // in pairs, starting with the even numbered register. So a double operation 269 // in pairs, starting with the even numbered register. So a double operation
228 // on f0 really uses f0 and f1. 270 // on f0 really uses f0 and f1.
229 // (Modern mips hardware also supports 32 64-bit registers, via setting 271 // (Modern mips hardware also supports 32 64-bit registers, via setting
230 // (privileged) Status Register FR bit to 1. This is used by the N32 ABI, 272 // (privileged) Status Register FR bit to 1. This is used by the N32 ABI,
231 // but it is not in common use. Someday we will want to support this in v8.) 273 // but it is not in common use. Someday we will want to support this in v8.)
232 274
233 // For O32 ABI, Floats and Doubles refer to same set of 32 32-bit registers. 275 // For O32 ABI, Floats and Doubles refer to same set of 32 32-bit registers.
234 typedef FPURegister FloatRegister; 276 typedef FPURegister FloatRegister;
235 277
236 typedef FPURegister DoubleRegister; 278 typedef FPURegister DoubleRegister;
237 279
238 // TODO(mips64) Define SIMD registers. 280 constexpr DoubleRegister no_freg = {kInvalidFPURegister};
239 typedef FPURegister Simd128Register;
240
241 constexpr DoubleRegister no_freg = {-1};
242 281
243 constexpr DoubleRegister f0 = {0}; // Return value in hard float mode. 282 constexpr DoubleRegister f0 = {0}; // Return value in hard float mode.
244 constexpr DoubleRegister f1 = {1}; 283 constexpr DoubleRegister f1 = {1};
245 constexpr DoubleRegister f2 = {2}; 284 constexpr DoubleRegister f2 = {2};
246 constexpr DoubleRegister f3 = {3}; 285 constexpr DoubleRegister f3 = {3};
247 constexpr DoubleRegister f4 = {4}; 286 constexpr DoubleRegister f4 = {4};
248 constexpr DoubleRegister f5 = {5}; 287 constexpr DoubleRegister f5 = {5};
249 constexpr DoubleRegister f6 = {6}; 288 constexpr DoubleRegister f6 = {6};
250 constexpr DoubleRegister f7 = {7}; 289 constexpr DoubleRegister f7 = {7};
251 constexpr DoubleRegister f8 = {8}; 290 constexpr DoubleRegister f8 = {8};
(...skipping 14 matching lines...) Expand all
266 constexpr DoubleRegister f23 = {23}; 305 constexpr DoubleRegister f23 = {23};
267 constexpr DoubleRegister f24 = {24}; 306 constexpr DoubleRegister f24 = {24};
268 constexpr DoubleRegister f25 = {25}; 307 constexpr DoubleRegister f25 = {25};
269 constexpr DoubleRegister f26 = {26}; 308 constexpr DoubleRegister f26 = {26};
270 constexpr DoubleRegister f27 = {27}; 309 constexpr DoubleRegister f27 = {27};
271 constexpr DoubleRegister f28 = {28}; 310 constexpr DoubleRegister f28 = {28};
272 constexpr DoubleRegister f29 = {29}; 311 constexpr DoubleRegister f29 = {29};
273 constexpr DoubleRegister f30 = {30}; 312 constexpr DoubleRegister f30 = {30};
274 constexpr DoubleRegister f31 = {31}; 313 constexpr DoubleRegister f31 = {31};
275 314
315 // SIMD registers.
316 typedef MSARegister Simd128Register;
317
318 const Simd128Register no_msareg = {kInvalidMSARegister};
319
320 constexpr Simd128Register w0 = {0};
321 constexpr Simd128Register w1 = {1};
322 constexpr Simd128Register w2 = {2};
323 constexpr Simd128Register w3 = {3};
324 constexpr Simd128Register w4 = {4};
325 constexpr Simd128Register w5 = {5};
326 constexpr Simd128Register w6 = {6};
327 constexpr Simd128Register w7 = {7};
328 constexpr Simd128Register w8 = {8};
329 constexpr Simd128Register w9 = {9};
330 constexpr Simd128Register w10 = {10};
331 constexpr Simd128Register w11 = {11};
332 constexpr Simd128Register w12 = {12};
333 constexpr Simd128Register w13 = {13};
334 constexpr Simd128Register w14 = {14};
335 constexpr Simd128Register w15 = {15};
336 constexpr Simd128Register w16 = {16};
337 constexpr Simd128Register w17 = {17};
338 constexpr Simd128Register w18 = {18};
339 constexpr Simd128Register w19 = {19};
340 constexpr Simd128Register w20 = {20};
341 constexpr Simd128Register w21 = {21};
342 constexpr Simd128Register w22 = {22};
343 constexpr Simd128Register w23 = {23};
344 constexpr Simd128Register w24 = {24};
345 constexpr Simd128Register w25 = {25};
346 constexpr Simd128Register w26 = {26};
347 constexpr Simd128Register w27 = {27};
348 constexpr Simd128Register w28 = {28};
349 constexpr Simd128Register w29 = {29};
350 constexpr Simd128Register w30 = {30};
351 constexpr Simd128Register w31 = {31};
352
276 // Register aliases. 353 // Register aliases.
277 // cp is assumed to be a callee saved register. 354 // cp is assumed to be a callee saved register.
278 constexpr Register kRootRegister = s6; 355 constexpr Register kRootRegister = s6;
279 constexpr Register cp = s7; 356 constexpr Register cp = s7;
280 constexpr Register kLithiumScratchReg = s3; 357 constexpr Register kLithiumScratchReg = s3;
281 constexpr Register kLithiumScratchReg2 = s4; 358 constexpr Register kLithiumScratchReg2 = s4;
282 constexpr DoubleRegister kLithiumScratchDouble = f30; 359 constexpr DoubleRegister kLithiumScratchDouble = f30;
283 constexpr DoubleRegister kDoubleRegZero = f28; 360 constexpr DoubleRegister kDoubleRegZero = f28;
284 // Used on mips64r6 for compare operations. 361 // Used on mips64r6 for compare operations.
285 // We use the last non-callee saved odd register for N64 ABI 362 // We use the last non-callee saved odd register for N64 ABI
(...skipping 16 matching lines...) Expand all
302 reg_code = f; 379 reg_code = f;
303 DCHECK(is_valid()); 380 DCHECK(is_valid());
304 } 381 }
305 // Unfortunately we can't make this private in a struct. 382 // Unfortunately we can't make this private in a struct.
306 int reg_code; 383 int reg_code;
307 }; 384 };
308 385
309 constexpr FPUControlRegister no_fpucreg = {kInvalidFPUControlRegister}; 386 constexpr FPUControlRegister no_fpucreg = {kInvalidFPUControlRegister};
310 constexpr FPUControlRegister FCSR = {kFCSRRegister}; 387 constexpr FPUControlRegister FCSR = {kFCSRRegister};
311 388
389 // MSA control registers
390 struct MSAControlRegister {
391 bool is_valid() const {
392 return (reg_code == kMSAIRRegister) || (reg_code == kMSACSRRegister);
393 }
394 bool is(MSAControlRegister creg) const { return reg_code == creg.reg_code; }
395 int code() const {
396 DCHECK(is_valid());
397 return reg_code;
398 }
399 int bit() const {
400 DCHECK(is_valid());
401 return 1 << reg_code;
402 }
403 void setcode(int f) {
404 reg_code = f;
405 DCHECK(is_valid());
406 }
407 // Unfortunately we can't make this private in a struct.
408 int reg_code;
409 };
410
411 constexpr MSAControlRegister no_msacreg = {kInvalidMSAControlRegister};
412 constexpr MSAControlRegister MSAIR = {kMSAIRRegister};
413 constexpr MSAControlRegister MSACSR = {kMSACSRRegister};
414
312 // ----------------------------------------------------------------------------- 415 // -----------------------------------------------------------------------------
313 // Machine instruction Operands. 416 // Machine instruction Operands.
314 constexpr int kSmiShift = kSmiTagSize + kSmiShiftSize; 417 constexpr int kSmiShift = kSmiTagSize + kSmiShiftSize;
315 constexpr uint64_t kSmiShiftMask = (1UL << kSmiShift) - 1; 418 constexpr uint64_t kSmiShiftMask = (1UL << kSmiShift) - 1;
316 // Class Operand represents a shifter operand in data processing instructions. 419 // Class Operand represents a shifter operand in data processing instructions.
317 class Operand BASE_EMBEDDED { 420 class Operand BASE_EMBEDDED {
318 public: 421 public:
319 // Immediate. 422 // Immediate.
320 INLINE(explicit Operand(int64_t immediate, 423 INLINE(explicit Operand(int64_t immediate,
321 RelocInfo::Mode rmode = RelocInfo::NONE64)); 424 RelocInfo::Mode rmode = RelocInfo::NONE64));
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 void bc1f(int16_t offset, uint16_t cc = 0); 1138 void bc1f(int16_t offset, uint16_t cc = 0);
1036 inline void bc1f(Label* L, uint16_t cc = 0) { 1139 inline void bc1f(Label* L, uint16_t cc = 0) {
1037 bc1f(shifted_branch_offset(L), cc); 1140 bc1f(shifted_branch_offset(L), cc);
1038 } 1141 }
1039 void bc1t(int16_t offset, uint16_t cc = 0); 1142 void bc1t(int16_t offset, uint16_t cc = 0);
1040 inline void bc1t(Label* L, uint16_t cc = 0) { 1143 inline void bc1t(Label* L, uint16_t cc = 0) {
1041 bc1t(shifted_branch_offset(L), cc); 1144 bc1t(shifted_branch_offset(L), cc);
1042 } 1145 }
1043 void fcmp(FPURegister src1, const double src2, FPUCondition cond); 1146 void fcmp(FPURegister src1, const double src2, FPUCondition cond);
1044 1147
1148 // MSA instructions
1149 void bz_v(MSARegister wt, int16_t offset);
1150 void bz_b(MSARegister wt, int16_t offset);
1151 void bz_h(MSARegister wt, int16_t offset);
1152 void bz_w(MSARegister wt, int16_t offset);
1153 void bz_d(MSARegister wt, int16_t offset);
1154 void bnz_v(MSARegister wt, int16_t offset);
1155 void bnz_b(MSARegister wt, int16_t offset);
1156 void bnz_h(MSARegister wt, int16_t offset);
1157 void bnz_w(MSARegister wt, int16_t offset);
1158 void bnz_d(MSARegister wt, int16_t offset);
1159
1160 void ld_b(MSARegister wd, const MemOperand& rs);
1161 void ld_h(MSARegister wd, const MemOperand& rs);
1162 void ld_w(MSARegister wd, const MemOperand& rs);
1163 void ld_d(MSARegister wd, const MemOperand& rs);
1164 void st_b(MSARegister wd, const MemOperand& rs);
1165 void st_h(MSARegister wd, const MemOperand& rs);
1166 void st_w(MSARegister wd, const MemOperand& rs);
1167 void st_d(MSARegister wd, const MemOperand& rs);
1168
1169 void ldi_b(MSARegister wd, int32_t imm10);
1170 void ldi_h(MSARegister wd, int32_t imm10);
1171 void ldi_w(MSARegister wd, int32_t imm10);
1172 void ldi_d(MSARegister wd, int32_t imm10);
1173
1174 void addvi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1175 void addvi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1176 void addvi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1177 void addvi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1178 void subvi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1179 void subvi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1180 void subvi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1181 void subvi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1182 void maxi_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1183 void maxi_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1184 void maxi_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1185 void maxi_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1186 void maxi_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1187 void maxi_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1188 void maxi_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1189 void maxi_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1190 void mini_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1191 void mini_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1192 void mini_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1193 void mini_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1194 void mini_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1195 void mini_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1196 void mini_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1197 void mini_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1198 void ceqi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1199 void ceqi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1200 void ceqi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1201 void ceqi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1202 void clti_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1203 void clti_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1204 void clti_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1205 void clti_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1206 void clti_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1207 void clti_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1208 void clti_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1209 void clti_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1210 void clei_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1211 void clei_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1212 void clei_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1213 void clei_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1214 void clei_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
1215 void clei_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
1216 void clei_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
1217 void clei_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
1218
1219 void andi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1220 void ori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1221 void nori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1222 void xori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1223 void bmnzi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1224 void bmzi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1225 void bseli_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1226 void shf_b(MSARegister wd, MSARegister ws, uint32_t imm8);
1227 void shf_h(MSARegister wd, MSARegister ws, uint32_t imm8);
1228 void shf_w(MSARegister wd, MSARegister ws, uint32_t imm8);
1229
1230 void and_v(MSARegister wd, MSARegister ws, MSARegister wt);
1231 void or_v(MSARegister wd, MSARegister ws, MSARegister wt);
1232 void nor_v(MSARegister wd, MSARegister ws, MSARegister wt);
1233 void xor_v(MSARegister wd, MSARegister ws, MSARegister wt);
1234 void bmnz_v(MSARegister wd, MSARegister ws, MSARegister wt);
1235 void bmz_v(MSARegister wd, MSARegister ws, MSARegister wt);
1236 void bsel_v(MSARegister wd, MSARegister ws, MSARegister wt);
1237
1238 void fill_b(MSARegister wd, Register rs);
1239 void fill_h(MSARegister wd, Register rs);
1240 void fill_w(MSARegister wd, Register rs);
1241 void fill_d(MSARegister wd, Register rs);
1242 void pcnt_b(MSARegister wd, MSARegister ws);
1243 void pcnt_h(MSARegister wd, MSARegister ws);
1244 void pcnt_w(MSARegister wd, MSARegister ws);
1245 void pcnt_d(MSARegister wd, MSARegister ws);
1246 void nloc_b(MSARegister wd, MSARegister ws);
1247 void nloc_h(MSARegister wd, MSARegister ws);
1248 void nloc_w(MSARegister wd, MSARegister ws);
1249 void nloc_d(MSARegister wd, MSARegister ws);
1250 void nlzc_b(MSARegister wd, MSARegister ws);
1251 void nlzc_h(MSARegister wd, MSARegister ws);
1252 void nlzc_w(MSARegister wd, MSARegister ws);
1253 void nlzc_d(MSARegister wd, MSARegister ws);
1254
1255 void fclass_w(MSARegister wd, MSARegister ws);
1256 void fclass_d(MSARegister wd, MSARegister ws);
1257 void ftrunc_s_w(MSARegister wd, MSARegister ws);
1258 void ftrunc_s_d(MSARegister wd, MSARegister ws);
1259 void ftrunc_u_w(MSARegister wd, MSARegister ws);
1260 void ftrunc_u_d(MSARegister wd, MSARegister ws);
1261 void fsqrt_w(MSARegister wd, MSARegister ws);
1262 void fsqrt_d(MSARegister wd, MSARegister ws);
1263 void frsqrt_w(MSARegister wd, MSARegister ws);
1264 void frsqrt_d(MSARegister wd, MSARegister ws);
1265 void frcp_w(MSARegister wd, MSARegister ws);
1266 void frcp_d(MSARegister wd, MSARegister ws);
1267 void frint_w(MSARegister wd, MSARegister ws);
1268 void frint_d(MSARegister wd, MSARegister ws);
1269 void flog2_w(MSARegister wd, MSARegister ws);
1270 void flog2_d(MSARegister wd, MSARegister ws);
1271 void fexupl_w(MSARegister wd, MSARegister ws);
1272 void fexupl_d(MSARegister wd, MSARegister ws);
1273 void fexupr_w(MSARegister wd, MSARegister ws);
1274 void fexupr_d(MSARegister wd, MSARegister ws);
1275 void ffql_w(MSARegister wd, MSARegister ws);
1276 void ffql_d(MSARegister wd, MSARegister ws);
1277 void ffqr_w(MSARegister wd, MSARegister ws);
1278 void ffqr_d(MSARegister wd, MSARegister ws);
1279 void ftint_s_w(MSARegister wd, MSARegister ws);
1280 void ftint_s_d(MSARegister wd, MSARegister ws);
1281 void ftint_u_w(MSARegister wd, MSARegister ws);
1282 void ftint_u_d(MSARegister wd, MSARegister ws);
1283 void ffint_s_w(MSARegister wd, MSARegister ws);
1284 void ffint_s_d(MSARegister wd, MSARegister ws);
1285 void ffint_u_w(MSARegister wd, MSARegister ws);
1286 void ffint_u_d(MSARegister wd, MSARegister ws);
1287
1288 void sll_b(MSARegister wd, MSARegister ws, MSARegister wt);
1289 void sll_h(MSARegister wd, MSARegister ws, MSARegister wt);
1290 void sll_w(MSARegister wd, MSARegister ws, MSARegister wt);
1291 void sll_d(MSARegister wd, MSARegister ws, MSARegister wt);
1292 void sra_b(MSARegister wd, MSARegister ws, MSARegister wt);
1293 void sra_h(MSARegister wd, MSARegister ws, MSARegister wt);
1294 void sra_w(MSARegister wd, MSARegister ws, MSARegister wt);
1295 void sra_d(MSARegister wd, MSARegister ws, MSARegister wt);
1296 void srl_b(MSARegister wd, MSARegister ws, MSARegister wt);
1297 void srl_h(MSARegister wd, MSARegister ws, MSARegister wt);
1298 void srl_w(MSARegister wd, MSARegister ws, MSARegister wt);
1299 void srl_d(MSARegister wd, MSARegister ws, MSARegister wt);
1300 void bclr_b(MSARegister wd, MSARegister ws, MSARegister wt);
1301 void bclr_h(MSARegister wd, MSARegister ws, MSARegister wt);
1302 void bclr_w(MSARegister wd, MSARegister ws, MSARegister wt);
1303 void bclr_d(MSARegister wd, MSARegister ws, MSARegister wt);
1304 void bset_b(MSARegister wd, MSARegister ws, MSARegister wt);
1305 void bset_h(MSARegister wd, MSARegister ws, MSARegister wt);
1306 void bset_w(MSARegister wd, MSARegister ws, MSARegister wt);
1307 void bset_d(MSARegister wd, MSARegister ws, MSARegister wt);
1308 void bneg_b(MSARegister wd, MSARegister ws, MSARegister wt);
1309 void bneg_h(MSARegister wd, MSARegister ws, MSARegister wt);
1310 void bneg_w(MSARegister wd, MSARegister ws, MSARegister wt);
1311 void bneg_d(MSARegister wd, MSARegister ws, MSARegister wt);
1312 void binsl_b(MSARegister wd, MSARegister ws, MSARegister wt);
1313 void binsl_h(MSARegister wd, MSARegister ws, MSARegister wt);
1314 void binsl_w(MSARegister wd, MSARegister ws, MSARegister wt);
1315 void binsl_d(MSARegister wd, MSARegister ws, MSARegister wt);
1316 void binsr_b(MSARegister wd, MSARegister ws, MSARegister wt);
1317 void binsr_h(MSARegister wd, MSARegister ws, MSARegister wt);
1318 void binsr_w(MSARegister wd, MSARegister ws, MSARegister wt);
1319 void binsr_d(MSARegister wd, MSARegister ws, MSARegister wt);
1320 void addv_b(MSARegister wd, MSARegister ws, MSARegister wt);
1321 void addv_h(MSARegister wd, MSARegister ws, MSARegister wt);
1322 void addv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1323 void addv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1324 void subv_b(MSARegister wd, MSARegister ws, MSARegister wt);
1325 void subv_h(MSARegister wd, MSARegister ws, MSARegister wt);
1326 void subv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1327 void subv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1328 void max_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1329 void max_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1330 void max_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1331 void max_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1332 void max_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1333 void max_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1334 void max_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1335 void max_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1336 void min_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1337 void min_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1338 void min_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1339 void min_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1340 void min_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1341 void min_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1342 void min_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1343 void min_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1344 void max_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
1345 void max_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
1346 void max_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1347 void max_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1348 void min_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
1349 void min_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
1350 void min_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1351 void min_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1352 void ceq_b(MSARegister wd, MSARegister ws, MSARegister wt);
1353 void ceq_h(MSARegister wd, MSARegister ws, MSARegister wt);
1354 void ceq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1355 void ceq_d(MSARegister wd, MSARegister ws, MSARegister wt);
1356 void clt_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1357 void clt_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1358 void clt_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1359 void clt_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1360 void clt_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1361 void clt_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1362 void clt_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1363 void clt_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1364 void cle_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1365 void cle_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1366 void cle_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1367 void cle_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1368 void cle_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1369 void cle_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1370 void cle_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1371 void cle_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1372 void add_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
1373 void add_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
1374 void add_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1375 void add_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1376 void adds_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
1377 void adds_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
1378 void adds_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1379 void adds_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1380 void adds_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1381 void adds_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1382 void adds_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1383 void adds_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1384 void adds_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1385 void adds_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1386 void adds_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1387 void adds_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1388 void ave_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1389 void ave_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1390 void ave_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1391 void ave_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1392 void ave_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1393 void ave_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1394 void ave_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1395 void ave_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1396 void aver_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1397 void aver_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1398 void aver_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1399 void aver_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1400 void aver_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1401 void aver_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1402 void aver_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1403 void aver_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1404 void subs_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1405 void subs_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1406 void subs_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1407 void subs_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1408 void subs_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1409 void subs_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1410 void subs_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1411 void subs_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1412 void subsus_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1413 void subsus_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1414 void subsus_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1415 void subsus_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1416 void subsus_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1417 void subsus_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1418 void subsus_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1419 void subsus_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1420 void subsuu_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1421 void subsuu_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1422 void subsuu_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1423 void subsuu_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1424 void subsuu_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1425 void subsuu_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1426 void subsuu_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1427 void subsuu_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1428 void asub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1429 void asub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1430 void asub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1431 void asub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1432 void asub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1433 void asub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1434 void asub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1435 void asub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1436 void mulv_b(MSARegister wd, MSARegister ws, MSARegister wt);
1437 void mulv_h(MSARegister wd, MSARegister ws, MSARegister wt);
1438 void mulv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1439 void mulv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1440 void maddv_b(MSARegister wd, MSARegister ws, MSARegister wt);
1441 void maddv_h(MSARegister wd, MSARegister ws, MSARegister wt);
1442 void maddv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1443 void maddv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1444 void msubv_b(MSARegister wd, MSARegister ws, MSARegister wt);
1445 void msubv_h(MSARegister wd, MSARegister ws, MSARegister wt);
1446 void msubv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1447 void msubv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1448 void div_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1449 void div_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1450 void div_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1451 void div_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1452 void div_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1453 void div_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1454 void div_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1455 void div_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1456 void mod_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1457 void mod_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1458 void mod_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1459 void mod_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1460 void mod_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1461 void mod_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1462 void mod_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1463 void mod_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1464 void dotp_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1465 void dotp_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1466 void dotp_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1467 void dotp_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1468 void dotp_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1469 void dotp_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1470 void dotp_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1471 void dotp_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1472 void dpadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1473 void dpadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1474 void dpadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1475 void dpadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1476 void dpadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1477 void dpadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1478 void dpadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1479 void dpadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1480 void dpsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1481 void dpsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1482 void dpsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1483 void dpsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1484 void dpsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1485 void dpsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1486 void dpsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1487 void dpsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1488 void sld_b(MSARegister wd, MSARegister ws, Register rt);
1489 void sld_h(MSARegister wd, MSARegister ws, Register rt);
1490 void sld_w(MSARegister wd, MSARegister ws, Register rt);
1491 void sld_d(MSARegister wd, MSARegister ws, Register rt);
1492 void splat_b(MSARegister wd, MSARegister ws, Register rt);
1493 void splat_h(MSARegister wd, MSARegister ws, Register rt);
1494 void splat_w(MSARegister wd, MSARegister ws, Register rt);
1495 void splat_d(MSARegister wd, MSARegister ws, Register rt);
1496 void pckev_b(MSARegister wd, MSARegister ws, MSARegister wt);
1497 void pckev_h(MSARegister wd, MSARegister ws, MSARegister wt);
1498 void pckev_w(MSARegister wd, MSARegister ws, MSARegister wt);
1499 void pckev_d(MSARegister wd, MSARegister ws, MSARegister wt);
1500 void pckod_b(MSARegister wd, MSARegister ws, MSARegister wt);
1501 void pckod_h(MSARegister wd, MSARegister ws, MSARegister wt);
1502 void pckod_w(MSARegister wd, MSARegister ws, MSARegister wt);
1503 void pckod_d(MSARegister wd, MSARegister ws, MSARegister wt);
1504 void ilvl_b(MSARegister wd, MSARegister ws, MSARegister wt);
1505 void ilvl_h(MSARegister wd, MSARegister ws, MSARegister wt);
1506 void ilvl_w(MSARegister wd, MSARegister ws, MSARegister wt);
1507 void ilvl_d(MSARegister wd, MSARegister ws, MSARegister wt);
1508 void ilvr_b(MSARegister wd, MSARegister ws, MSARegister wt);
1509 void ilvr_h(MSARegister wd, MSARegister ws, MSARegister wt);
1510 void ilvr_w(MSARegister wd, MSARegister ws, MSARegister wt);
1511 void ilvr_d(MSARegister wd, MSARegister ws, MSARegister wt);
1512 void ilvev_b(MSARegister wd, MSARegister ws, MSARegister wt);
1513 void ilvev_h(MSARegister wd, MSARegister ws, MSARegister wt);
1514 void ilvev_w(MSARegister wd, MSARegister ws, MSARegister wt);
1515 void ilvev_d(MSARegister wd, MSARegister ws, MSARegister wt);
1516 void ilvod_b(MSARegister wd, MSARegister ws, MSARegister wt);
1517 void ilvod_h(MSARegister wd, MSARegister ws, MSARegister wt);
1518 void ilvod_w(MSARegister wd, MSARegister ws, MSARegister wt);
1519 void ilvod_d(MSARegister wd, MSARegister ws, MSARegister wt);
1520 void vshf_b(MSARegister wd, MSARegister ws, MSARegister wt);
1521 void vshf_h(MSARegister wd, MSARegister ws, MSARegister wt);
1522 void vshf_w(MSARegister wd, MSARegister ws, MSARegister wt);
1523 void vshf_d(MSARegister wd, MSARegister ws, MSARegister wt);
1524 void srar_b(MSARegister wd, MSARegister ws, MSARegister wt);
1525 void srar_h(MSARegister wd, MSARegister ws, MSARegister wt);
1526 void srar_w(MSARegister wd, MSARegister ws, MSARegister wt);
1527 void srar_d(MSARegister wd, MSARegister ws, MSARegister wt);
1528 void srlr_b(MSARegister wd, MSARegister ws, MSARegister wt);
1529 void srlr_h(MSARegister wd, MSARegister ws, MSARegister wt);
1530 void srlr_w(MSARegister wd, MSARegister ws, MSARegister wt);
1531 void srlr_d(MSARegister wd, MSARegister ws, MSARegister wt);
1532 void hadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1533 void hadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1534 void hadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1535 void hadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1536 void hadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1537 void hadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1538 void hadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1539 void hadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1540 void hsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
1541 void hsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
1542 void hsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
1543 void hsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
1544 void hsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
1545 void hsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
1546 void hsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
1547 void hsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
1548
1549 void fcaf_w(MSARegister wd, MSARegister ws, MSARegister wt);
1550 void fcaf_d(MSARegister wd, MSARegister ws, MSARegister wt);
1551 void fcun_w(MSARegister wd, MSARegister ws, MSARegister wt);
1552 void fcun_d(MSARegister wd, MSARegister ws, MSARegister wt);
1553 void fceq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1554 void fceq_d(MSARegister wd, MSARegister ws, MSARegister wt);
1555 void fcueq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1556 void fcueq_d(MSARegister wd, MSARegister ws, MSARegister wt);
1557 void fclt_w(MSARegister wd, MSARegister ws, MSARegister wt);
1558 void fclt_d(MSARegister wd, MSARegister ws, MSARegister wt);
1559 void fcult_w(MSARegister wd, MSARegister ws, MSARegister wt);
1560 void fcult_d(MSARegister wd, MSARegister ws, MSARegister wt);
1561 void fcle_w(MSARegister wd, MSARegister ws, MSARegister wt);
1562 void fcle_d(MSARegister wd, MSARegister ws, MSARegister wt);
1563 void fcule_w(MSARegister wd, MSARegister ws, MSARegister wt);
1564 void fcule_d(MSARegister wd, MSARegister ws, MSARegister wt);
1565 void fsaf_w(MSARegister wd, MSARegister ws, MSARegister wt);
1566 void fsaf_d(MSARegister wd, MSARegister ws, MSARegister wt);
1567 void fsun_w(MSARegister wd, MSARegister ws, MSARegister wt);
1568 void fsun_d(MSARegister wd, MSARegister ws, MSARegister wt);
1569 void fseq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1570 void fseq_d(MSARegister wd, MSARegister ws, MSARegister wt);
1571 void fsueq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1572 void fsueq_d(MSARegister wd, MSARegister ws, MSARegister wt);
1573 void fslt_w(MSARegister wd, MSARegister ws, MSARegister wt);
1574 void fslt_d(MSARegister wd, MSARegister ws, MSARegister wt);
1575 void fsult_w(MSARegister wd, MSARegister ws, MSARegister wt);
1576 void fsult_d(MSARegister wd, MSARegister ws, MSARegister wt);
1577 void fsle_w(MSARegister wd, MSARegister ws, MSARegister wt);
1578 void fsle_d(MSARegister wd, MSARegister ws, MSARegister wt);
1579 void fsule_w(MSARegister wd, MSARegister ws, MSARegister wt);
1580 void fsule_d(MSARegister wd, MSARegister ws, MSARegister wt);
1581 void fadd_w(MSARegister wd, MSARegister ws, MSARegister wt);
1582 void fadd_d(MSARegister wd, MSARegister ws, MSARegister wt);
1583 void fsub_w(MSARegister wd, MSARegister ws, MSARegister wt);
1584 void fsub_d(MSARegister wd, MSARegister ws, MSARegister wt);
1585 void fmul_w(MSARegister wd, MSARegister ws, MSARegister wt);
1586 void fmul_d(MSARegister wd, MSARegister ws, MSARegister wt);
1587 void fdiv_w(MSARegister wd, MSARegister ws, MSARegister wt);
1588 void fdiv_d(MSARegister wd, MSARegister ws, MSARegister wt);
1589 void fmadd_w(MSARegister wd, MSARegister ws, MSARegister wt);
1590 void fmadd_d(MSARegister wd, MSARegister ws, MSARegister wt);
1591 void fmsub_w(MSARegister wd, MSARegister ws, MSARegister wt);
1592 void fmsub_d(MSARegister wd, MSARegister ws, MSARegister wt);
1593 void fexp2_w(MSARegister wd, MSARegister ws, MSARegister wt);
1594 void fexp2_d(MSARegister wd, MSARegister ws, MSARegister wt);
1595 void fexdo_h(MSARegister wd, MSARegister ws, MSARegister wt);
1596 void fexdo_w(MSARegister wd, MSARegister ws, MSARegister wt);
1597 void ftq_h(MSARegister wd, MSARegister ws, MSARegister wt);
1598 void ftq_w(MSARegister wd, MSARegister ws, MSARegister wt);
1599 void fmin_w(MSARegister wd, MSARegister ws, MSARegister wt);
1600 void fmin_d(MSARegister wd, MSARegister ws, MSARegister wt);
1601 void fmin_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1602 void fmin_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1603 void fmax_w(MSARegister wd, MSARegister ws, MSARegister wt);
1604 void fmax_d(MSARegister wd, MSARegister ws, MSARegister wt);
1605 void fmax_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
1606 void fmax_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
1607 void fcor_w(MSARegister wd, MSARegister ws, MSARegister wt);
1608 void fcor_d(MSARegister wd, MSARegister ws, MSARegister wt);
1609 void fcune_w(MSARegister wd, MSARegister ws, MSARegister wt);
1610 void fcune_d(MSARegister wd, MSARegister ws, MSARegister wt);
1611 void fcne_w(MSARegister wd, MSARegister ws, MSARegister wt);
1612 void fcne_d(MSARegister wd, MSARegister ws, MSARegister wt);
1613 void mul_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1614 void mul_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1615 void madd_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1616 void madd_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1617 void msub_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1618 void msub_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1619 void fsor_w(MSARegister wd, MSARegister ws, MSARegister wt);
1620 void fsor_d(MSARegister wd, MSARegister ws, MSARegister wt);
1621 void fsune_w(MSARegister wd, MSARegister ws, MSARegister wt);
1622 void fsune_d(MSARegister wd, MSARegister ws, MSARegister wt);
1623 void fsne_w(MSARegister wd, MSARegister ws, MSARegister wt);
1624 void fsne_d(MSARegister wd, MSARegister ws, MSARegister wt);
1625 void mulr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1626 void mulr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1627 void maddr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1628 void maddr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1629 void msubr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
1630 void msubr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
1631
1632 void sldi_b(MSARegister wd, MSARegister ws, uint32_t n);
1633 void sldi_h(MSARegister wd, MSARegister ws, uint32_t n);
1634 void sldi_w(MSARegister wd, MSARegister ws, uint32_t n);
1635 void sldi_d(MSARegister wd, MSARegister ws, uint32_t n);
1636 void splati_b(MSARegister wd, MSARegister ws, uint32_t n);
1637 void splati_h(MSARegister wd, MSARegister ws, uint32_t n);
1638 void splati_w(MSARegister wd, MSARegister ws, uint32_t n);
1639 void splati_d(MSARegister wd, MSARegister ws, uint32_t n);
1640 void copy_s_b(Register rd, MSARegister ws, uint32_t n);
1641 void copy_s_h(Register rd, MSARegister ws, uint32_t n);
1642 void copy_s_w(Register rd, MSARegister ws, uint32_t n);
1643 void copy_s_d(Register rd, MSARegister ws, uint32_t n);
1644 void copy_u_b(Register rd, MSARegister ws, uint32_t n);
1645 void copy_u_h(Register rd, MSARegister ws, uint32_t n);
1646 void copy_u_w(Register rd, MSARegister ws, uint32_t n);
1647 void insert_b(MSARegister wd, uint32_t n, Register rs);
1648 void insert_h(MSARegister wd, uint32_t n, Register rs);
1649 void insert_w(MSARegister wd, uint32_t n, Register rs);
1650 void insert_d(MSARegister wd, uint32_t n, Register rs);
1651 void insve_b(MSARegister wd, uint32_t n, MSARegister ws);
1652 void insve_h(MSARegister wd, uint32_t n, MSARegister ws);
1653 void insve_w(MSARegister wd, uint32_t n, MSARegister ws);
1654 void insve_d(MSARegister wd, uint32_t n, MSARegister ws);
1655 void move_v(MSARegister wd, MSARegister ws);
1656 void ctcmsa(MSAControlRegister cd, Register rs);
1657 void cfcmsa(Register rd, MSAControlRegister cs);
1658
1659 void slli_b(MSARegister wd, MSARegister ws, uint32_t m);
1660 void slli_h(MSARegister wd, MSARegister ws, uint32_t m);
1661 void slli_w(MSARegister wd, MSARegister ws, uint32_t m);
1662 void slli_d(MSARegister wd, MSARegister ws, uint32_t m);
1663 void srai_b(MSARegister wd, MSARegister ws, uint32_t m);
1664 void srai_h(MSARegister wd, MSARegister ws, uint32_t m);
1665 void srai_w(MSARegister wd, MSARegister ws, uint32_t m);
1666 void srai_d(MSARegister wd, MSARegister ws, uint32_t m);
1667 void srli_b(MSARegister wd, MSARegister ws, uint32_t m);
1668 void srli_h(MSARegister wd, MSARegister ws, uint32_t m);
1669 void srli_w(MSARegister wd, MSARegister ws, uint32_t m);
1670 void srli_d(MSARegister wd, MSARegister ws, uint32_t m);
1671 void bclri_b(MSARegister wd, MSARegister ws, uint32_t m);
1672 void bclri_h(MSARegister wd, MSARegister ws, uint32_t m);
1673 void bclri_w(MSARegister wd, MSARegister ws, uint32_t m);
1674 void bclri_d(MSARegister wd, MSARegister ws, uint32_t m);
1675 void bseti_b(MSARegister wd, MSARegister ws, uint32_t m);
1676 void bseti_h(MSARegister wd, MSARegister ws, uint32_t m);
1677 void bseti_w(MSARegister wd, MSARegister ws, uint32_t m);
1678 void bseti_d(MSARegister wd, MSARegister ws, uint32_t m);
1679 void bnegi_b(MSARegister wd, MSARegister ws, uint32_t m);
1680 void bnegi_h(MSARegister wd, MSARegister ws, uint32_t m);
1681 void bnegi_w(MSARegister wd, MSARegister ws, uint32_t m);
1682 void bnegi_d(MSARegister wd, MSARegister ws, uint32_t m);
1683 void binsli_b(MSARegister wd, MSARegister ws, uint32_t m);
1684 void binsli_h(MSARegister wd, MSARegister ws, uint32_t m);
1685 void binsli_w(MSARegister wd, MSARegister ws, uint32_t m);
1686 void binsli_d(MSARegister wd, MSARegister ws, uint32_t m);
1687 void binsri_b(MSARegister wd, MSARegister ws, uint32_t m);
1688 void binsri_h(MSARegister wd, MSARegister ws, uint32_t m);
1689 void binsri_w(MSARegister wd, MSARegister ws, uint32_t m);
1690 void binsri_d(MSARegister wd, MSARegister ws, uint32_t m);
1691 void sat_s_b(MSARegister wd, MSARegister ws, uint32_t m);
1692 void sat_s_h(MSARegister wd, MSARegister ws, uint32_t m);
1693 void sat_s_w(MSARegister wd, MSARegister ws, uint32_t m);
1694 void sat_s_d(MSARegister wd, MSARegister ws, uint32_t m);
1695 void sat_u_b(MSARegister wd, MSARegister ws, uint32_t m);
1696 void sat_u_h(MSARegister wd, MSARegister ws, uint32_t m);
1697 void sat_u_w(MSARegister wd, MSARegister ws, uint32_t m);
1698 void sat_u_d(MSARegister wd, MSARegister ws, uint32_t m);
1699 void srari_b(MSARegister wd, MSARegister ws, uint32_t m);
1700 void srari_h(MSARegister wd, MSARegister ws, uint32_t m);
1701 void srari_w(MSARegister wd, MSARegister ws, uint32_t m);
1702 void srari_d(MSARegister wd, MSARegister ws, uint32_t m);
1703 void srlri_b(MSARegister wd, MSARegister ws, uint32_t m);
1704 void srlri_h(MSARegister wd, MSARegister ws, uint32_t m);
1705 void srlri_w(MSARegister wd, MSARegister ws, uint32_t m);
1706 void srlri_d(MSARegister wd, MSARegister ws, uint32_t m);
1707
1045 // Check the code size generated from label to here. 1708 // Check the code size generated from label to here.
1046 int SizeOfCodeGeneratedSince(Label* label) { 1709 int SizeOfCodeGeneratedSince(Label* label) {
1047 return pc_offset() - label->pos(); 1710 return pc_offset() - label->pos();
1048 } 1711 }
1049 1712
1050 // Check the number of instructions generated from label to here. 1713 // Check the number of instructions generated from label to here.
1051 int InstructionsGeneratedSince(Label* label) { 1714 int InstructionsGeneratedSince(Label* label) {
1052 return SizeOfCodeGeneratedSince(label) / kInstrSize; 1715 return SizeOfCodeGeneratedSince(label) / kInstrSize;
1053 } 1716 }
1054 1717
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1423 Opcode opcode, Register rs, int32_t offset21, 2086 Opcode opcode, Register rs, int32_t offset21,
1424 CompactBranchType is_compact_branch = CompactBranchType::NO); 2087 CompactBranchType is_compact_branch = CompactBranchType::NO);
1425 void GenInstrImmediate(Opcode opcode, Register rs, uint32_t offset21); 2088 void GenInstrImmediate(Opcode opcode, Register rs, uint32_t offset21);
1426 void GenInstrImmediate( 2089 void GenInstrImmediate(
1427 Opcode opcode, int32_t offset26, 2090 Opcode opcode, int32_t offset26,
1428 CompactBranchType is_compact_branch = CompactBranchType::NO); 2091 CompactBranchType is_compact_branch = CompactBranchType::NO);
1429 2092
1430 void GenInstrJump(Opcode opcode, 2093 void GenInstrJump(Opcode opcode,
1431 uint32_t address); 2094 uint32_t address);
1432 2095
2096 // MSA
2097 void GenInstrMsaI8(SecondaryField operation, uint32_t imm8, MSARegister ws,
2098 MSARegister wd);
2099
2100 void GenInstrMsaI5(SecondaryField operation, SecondaryField df, int32_t imm5,
2101 MSARegister ws, MSARegister wd);
2102
2103 void GenInstrMsaBit(SecondaryField operation, SecondaryField df, uint32_t m,
2104 MSARegister ws, MSARegister wd);
2105
2106 void GenInstrMsaI10(SecondaryField operation, SecondaryField df,
2107 int32_t imm10, MSARegister wd);
2108
2109 template <typename RegType>
2110 void GenInstrMsa3R(SecondaryField operation, SecondaryField df, RegType t,
2111 MSARegister ws, MSARegister wd);
2112
2113 template <typename DstType, typename SrcType>
2114 void GenInstrMsaElm(SecondaryField operation, SecondaryField df, uint32_t n,
2115 SrcType src, DstType dst);
2116
2117 void GenInstrMsa3RF(SecondaryField operation, uint32_t df, MSARegister wt,
2118 MSARegister ws, MSARegister wd);
2119
2120 void GenInstrMsaVec(SecondaryField operation, MSARegister wt, MSARegister ws,
2121 MSARegister wd);
2122
2123 void GenInstrMsaMI10(SecondaryField operation, int32_t s10, Register rs,
2124 MSARegister wd);
2125
2126 void GenInstrMsa2R(SecondaryField operation, SecondaryField df,
2127 MSARegister ws, MSARegister wd);
2128
2129 void GenInstrMsa2RF(SecondaryField operation, SecondaryField df,
2130 MSARegister ws, MSARegister wd);
2131
2132 void GenInstrMsaBranch(SecondaryField operation, MSARegister wt,
2133 int32_t offset16);
2134
2135 inline bool is_valid_msa_df_m(SecondaryField bit_df, uint32_t m) {
2136 switch (bit_df) {
2137 case BIT_DF_b:
2138 return is_uint3(m);
2139 case BIT_DF_h:
2140 return is_uint4(m);
2141 case BIT_DF_w:
2142 return is_uint5(m);
2143 case BIT_DF_d:
2144 return is_uint6(m);
2145 default:
2146 return false;
2147 }
2148 }
2149
2150 inline bool is_valid_msa_df_n(SecondaryField elm_df, uint32_t n) {
2151 switch (elm_df) {
2152 case ELM_DF_B:
2153 return is_uint4(n);
2154 case ELM_DF_H:
2155 return is_uint3(n);
2156 case ELM_DF_W:
2157 return is_uint2(n);
2158 case ELM_DF_D:
2159 return is_uint1(n);
2160 default:
2161 return false;
2162 }
2163 }
2164
1433 // Labels. 2165 // Labels.
1434 void print(Label* L); 2166 void print(Label* L);
1435 void bind_to(Label* L, int pos); 2167 void bind_to(Label* L, int pos);
1436 void next(Label* L, bool is_internal); 2168 void next(Label* L, bool is_internal);
1437 2169
1438 // One trampoline consists of: 2170 // One trampoline consists of:
1439 // - space for trampoline slots, 2171 // - space for trampoline slots,
1440 // - space for labels. 2172 // - space for labels.
1441 // 2173 //
1442 // Space for trampoline slots is equal to slot_count * 2 * kInstrSize. 2174 // Space for trampoline slots is equal to slot_count * 2 * kInstrSize.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 public: 2255 public:
1524 explicit EnsureSpace(Assembler* assembler) { 2256 explicit EnsureSpace(Assembler* assembler) {
1525 assembler->CheckBuffer(); 2257 assembler->CheckBuffer();
1526 } 2258 }
1527 }; 2259 };
1528 2260
1529 } // namespace internal 2261 } // namespace internal
1530 } // namespace v8 2262 } // namespace v8
1531 2263
1532 #endif // V8_ARM_ASSEMBLER_MIPS_H_ 2264 #endif // V8_ARM_ASSEMBLER_MIPS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698