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

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

Issue 426863006: MIPS64: Add support for architecture revision 6. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments. Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « src/mips64/code-stubs-mips64.cc ('k') | src/mips64/constants-mips64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_MIPS_CONSTANTS_H_ 5 #ifndef V8_MIPS_CONSTANTS_H_
6 #define V8_MIPS_CONSTANTS_H_ 6 #define V8_MIPS_CONSTANTS_H_
7 7
8 // UNIMPLEMENTED_ macro for MIPS. 8 // UNIMPLEMENTED_ macro for MIPS.
9 #ifdef DEBUG 9 #ifdef DEBUG
10 #define UNIMPLEMENTED_MIPS() \ 10 #define UNIMPLEMENTED_MIPS() \
11 v8::internal::PrintF("%s, \tline %d: \tfunction %s not implemented. \n", \ 11 v8::internal::PrintF("%s, \tline %d: \tfunction %s not implemented. \n", \
12 __FILE__, __LINE__, __func__) 12 __FILE__, __LINE__, __func__)
13 #else 13 #else
14 #define UNIMPLEMENTED_MIPS() 14 #define UNIMPLEMENTED_MIPS()
15 #endif 15 #endif
16 16
17 #define UNSUPPORTED_MIPS() v8::internal::PrintF("Unsupported instruction.\n") 17 #define UNSUPPORTED_MIPS() v8::internal::PrintF("Unsupported instruction.\n")
18 18
19 enum ArchVariants { 19 enum ArchVariants {
20 kMips32r2, 20 kMips64r2,
21 kMips32r1, 21 kMips64r6
22 kLoongson,
23 kMips64r2
24 }; 22 };
25 23
26 24
27 #ifdef _MIPS_ARCH_MIPS64R2 25 #ifdef _MIPS_ARCH_MIPS64R2
28 static const ArchVariants kArchVariant = kMips64r2; 26 static const ArchVariants kArchVariant = kMips64r2;
29 #elif _MIPS_ARCH_LOONGSON 27 #elif _MIPS_ARCH_MIPS64R6
30 // The loongson flag refers to the LOONGSON architectures based on MIPS-III, 28 static const ArchVariants kArchVariant = kMips64r6;
31 // which predates (and is a subset of) the mips32r2 and r1 architectures.
32 static const ArchVariants kArchVariant = kLoongson;
33 #else 29 #else
34 static const ArchVariants kArchVariant = kMips64r1; 30 static const ArchVariants kArchVariant = kMips64r2;
35 #endif 31 #endif
36 32
37 33
38 // TODO(plind): consider deriving ABI from compiler flags or build system. 34 // TODO(plind): consider deriving ABI from compiler flags or build system.
39 35
40 // ABI-dependent definitions are made with #define in simulator-mips64.h, 36 // ABI-dependent definitions are made with #define in simulator-mips64.h,
41 // so the ABI choice must be available to the pre-processor. However, in all 37 // so the ABI choice must be available to the pre-processor. However, in all
42 // other cases, we should use the enum AbiVariants with normal if statements. 38 // other cases, we should use the enum AbiVariants with normal if statements.
43 39
44 #define MIPS_ABI_N64 1 40 #define MIPS_ABI_N64 1
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 const int kRdShift = 11; 217 const int kRdShift = 11;
222 const int kRdBits = 5; 218 const int kRdBits = 5;
223 const int kSaShift = 6; 219 const int kSaShift = 6;
224 const int kSaBits = 5; 220 const int kSaBits = 5;
225 const int kFunctionShift = 0; 221 const int kFunctionShift = 0;
226 const int kFunctionBits = 6; 222 const int kFunctionBits = 6;
227 const int kLuiShift = 16; 223 const int kLuiShift = 16;
228 224
229 const int kImm16Shift = 0; 225 const int kImm16Shift = 0;
230 const int kImm16Bits = 16; 226 const int kImm16Bits = 16;
227 const int kImm21Shift = 0;
228 const int kImm21Bits = 21;
231 const int kImm26Shift = 0; 229 const int kImm26Shift = 0;
232 const int kImm26Bits = 26; 230 const int kImm26Bits = 26;
233 const int kImm28Shift = 0; 231 const int kImm28Shift = 0;
234 const int kImm28Bits = 28; 232 const int kImm28Bits = 28;
235 const int kImm32Shift = 0; 233 const int kImm32Shift = 0;
236 const int kImm32Bits = 32; 234 const int kImm32Bits = 32;
237 235
238 // In branches and jumps immediate fields point to words, not bytes, 236 // In branches and jumps immediate fields point to words, not bytes,
239 // and are therefore shifted by 2. 237 // and are therefore shifted by 2.
240 const int kImmFieldShift = 2; 238 const int kImmFieldShift = 2;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 BLEZ = ((0 << 3) + 6) << kOpcodeShift, 286 BLEZ = ((0 << 3) + 6) << kOpcodeShift,
289 BGTZ = ((0 << 3) + 7) << kOpcodeShift, 287 BGTZ = ((0 << 3) + 7) << kOpcodeShift,
290 288
291 ADDI = ((1 << 3) + 0) << kOpcodeShift, 289 ADDI = ((1 << 3) + 0) << kOpcodeShift,
292 ADDIU = ((1 << 3) + 1) << kOpcodeShift, 290 ADDIU = ((1 << 3) + 1) << kOpcodeShift,
293 SLTI = ((1 << 3) + 2) << kOpcodeShift, 291 SLTI = ((1 << 3) + 2) << kOpcodeShift,
294 SLTIU = ((1 << 3) + 3) << kOpcodeShift, 292 SLTIU = ((1 << 3) + 3) << kOpcodeShift,
295 ANDI = ((1 << 3) + 4) << kOpcodeShift, 293 ANDI = ((1 << 3) + 4) << kOpcodeShift,
296 ORI = ((1 << 3) + 5) << kOpcodeShift, 294 ORI = ((1 << 3) + 5) << kOpcodeShift,
297 XORI = ((1 << 3) + 6) << kOpcodeShift, 295 XORI = ((1 << 3) + 6) << kOpcodeShift,
298 LUI = ((1 << 3) + 7) << kOpcodeShift, 296 LUI = ((1 << 3) + 7) << kOpcodeShift, // LUI/AUI family.
297 DAUI = ((3 << 3) + 5) << kOpcodeShift,
299 298
299 BEQC = ((2 << 3) + 0) << kOpcodeShift,
300 COP1 = ((2 << 3) + 1) << kOpcodeShift, // Coprocessor 1 class. 300 COP1 = ((2 << 3) + 1) << kOpcodeShift, // Coprocessor 1 class.
301 BEQL = ((2 << 3) + 4) << kOpcodeShift, 301 BEQL = ((2 << 3) + 4) << kOpcodeShift,
302 BNEL = ((2 << 3) + 5) << kOpcodeShift, 302 BNEL = ((2 << 3) + 5) << kOpcodeShift,
303 BLEZL = ((2 << 3) + 6) << kOpcodeShift, 303 BLEZL = ((2 << 3) + 6) << kOpcodeShift,
304 BGTZL = ((2 << 3) + 7) << kOpcodeShift, 304 BGTZL = ((2 << 3) + 7) << kOpcodeShift,
305 305
306 DADDI = ((3 << 3) + 0) << kOpcodeShift, 306 DADDI = ((3 << 3) + 0) << kOpcodeShift, // This is also BNEC.
307 DADDIU = ((3 << 3) + 1) << kOpcodeShift, 307 DADDIU = ((3 << 3) + 1) << kOpcodeShift,
308 LDL = ((3 << 3) + 2) << kOpcodeShift, 308 LDL = ((3 << 3) + 2) << kOpcodeShift,
309 LDR = ((3 << 3) + 3) << kOpcodeShift, 309 LDR = ((3 << 3) + 3) << kOpcodeShift,
310 SPECIAL2 = ((3 << 3) + 4) << kOpcodeShift, 310 SPECIAL2 = ((3 << 3) + 4) << kOpcodeShift,
311 SPECIAL3 = ((3 << 3) + 7) << kOpcodeShift, 311 SPECIAL3 = ((3 << 3) + 7) << kOpcodeShift,
312 312
313 LB = ((4 << 3) + 0) << kOpcodeShift, 313 LB = ((4 << 3) + 0) << kOpcodeShift,
314 LH = ((4 << 3) + 1) << kOpcodeShift, 314 LH = ((4 << 3) + 1) << kOpcodeShift,
315 LWL = ((4 << 3) + 2) << kOpcodeShift, 315 LWL = ((4 << 3) + 2) << kOpcodeShift,
316 LW = ((4 << 3) + 3) << kOpcodeShift, 316 LW = ((4 << 3) + 3) << kOpcodeShift,
317 LBU = ((4 << 3) + 4) << kOpcodeShift, 317 LBU = ((4 << 3) + 4) << kOpcodeShift,
318 LHU = ((4 << 3) + 5) << kOpcodeShift, 318 LHU = ((4 << 3) + 5) << kOpcodeShift,
319 LWR = ((4 << 3) + 6) << kOpcodeShift, 319 LWR = ((4 << 3) + 6) << kOpcodeShift,
320 LWU = ((4 << 3) + 7) << kOpcodeShift, 320 LWU = ((4 << 3) + 7) << kOpcodeShift,
321 321
322 SB = ((5 << 3) + 0) << kOpcodeShift, 322 SB = ((5 << 3) + 0) << kOpcodeShift,
323 SH = ((5 << 3) + 1) << kOpcodeShift, 323 SH = ((5 << 3) + 1) << kOpcodeShift,
324 SWL = ((5 << 3) + 2) << kOpcodeShift, 324 SWL = ((5 << 3) + 2) << kOpcodeShift,
325 SW = ((5 << 3) + 3) << kOpcodeShift, 325 SW = ((5 << 3) + 3) << kOpcodeShift,
326 SDL = ((5 << 3) + 4) << kOpcodeShift, 326 SDL = ((5 << 3) + 4) << kOpcodeShift,
327 SDR = ((5 << 3) + 5) << kOpcodeShift, 327 SDR = ((5 << 3) + 5) << kOpcodeShift,
328 SWR = ((5 << 3) + 6) << kOpcodeShift, 328 SWR = ((5 << 3) + 6) << kOpcodeShift,
329 329
330 LWC1 = ((6 << 3) + 1) << kOpcodeShift, 330 LWC1 = ((6 << 3) + 1) << kOpcodeShift,
331 LLD = ((6 << 3) + 4) << kOpcodeShift, 331 LLD = ((6 << 3) + 4) << kOpcodeShift,
332 LDC1 = ((6 << 3) + 5) << kOpcodeShift, 332 LDC1 = ((6 << 3) + 5) << kOpcodeShift,
333 BEQZC = ((6 << 3) + 6) << kOpcodeShift,
333 LD = ((6 << 3) + 7) << kOpcodeShift, 334 LD = ((6 << 3) + 7) << kOpcodeShift,
334 335
335 PREF = ((6 << 3) + 3) << kOpcodeShift, 336 PREF = ((6 << 3) + 3) << kOpcodeShift,
336 337
337 SWC1 = ((7 << 3) + 1) << kOpcodeShift, 338 SWC1 = ((7 << 3) + 1) << kOpcodeShift,
338 SCD = ((7 << 3) + 4) << kOpcodeShift, 339 SCD = ((7 << 3) + 4) << kOpcodeShift,
339 SDC1 = ((7 << 3) + 5) << kOpcodeShift, 340 SDC1 = ((7 << 3) + 5) << kOpcodeShift,
341 BNEZC = ((7 << 3) + 6) << kOpcodeShift,
340 SD = ((7 << 3) + 7) << kOpcodeShift, 342 SD = ((7 << 3) + 7) << kOpcodeShift,
341 343
342 COP1X = ((1 << 4) + 3) << kOpcodeShift 344 COP1X = ((1 << 4) + 3) << kOpcodeShift
343 }; 345 };
344 346
345 enum SecondaryField { 347 enum SecondaryField {
346 // SPECIAL Encoding of Function Field. 348 // SPECIAL Encoding of Function Field.
347 SLL = ((0 << 3) + 0), 349 SLL = ((0 << 3) + 0),
348 MOVCI = ((0 << 3) + 1), 350 MOVCI = ((0 << 3) + 1),
349 SRL = ((0 << 3) + 2), 351 SRL = ((0 << 3) + 2),
350 SRA = ((0 << 3) + 3), 352 SRA = ((0 << 3) + 3),
351 SLLV = ((0 << 3) + 4), 353 SLLV = ((0 << 3) + 4),
352 SRLV = ((0 << 3) + 6), 354 SRLV = ((0 << 3) + 6),
353 SRAV = ((0 << 3) + 7), 355 SRAV = ((0 << 3) + 7),
354 356
355 JR = ((1 << 3) + 0), 357 JR = ((1 << 3) + 0),
356 JALR = ((1 << 3) + 1), 358 JALR = ((1 << 3) + 1),
357 MOVZ = ((1 << 3) + 2), 359 MOVZ = ((1 << 3) + 2),
358 MOVN = ((1 << 3) + 3), 360 MOVN = ((1 << 3) + 3),
359 BREAK = ((1 << 3) + 5), 361 BREAK = ((1 << 3) + 5),
360 362
361 MFHI = ((2 << 3) + 0), 363 MFHI = ((2 << 3) + 0),
364 CLZ_R6 = ((2 << 3) + 0),
365 CLO_R6 = ((2 << 3) + 1),
362 MFLO = ((2 << 3) + 2), 366 MFLO = ((2 << 3) + 2),
363 DSLLV = ((2 << 3) + 4), 367 DSLLV = ((2 << 3) + 4),
364 DSRLV = ((2 << 3) + 6), 368 DSRLV = ((2 << 3) + 6),
365 DSRAV = ((2 << 3) + 7), 369 DSRAV = ((2 << 3) + 7),
366 370
367 MULT = ((3 << 3) + 0), 371 MULT = ((3 << 3) + 0),
368 MULTU = ((3 << 3) + 1), 372 MULTU = ((3 << 3) + 1),
369 DIV = ((3 << 3) + 2), 373 DIV = ((3 << 3) + 2),
370 DIVU = ((3 << 3) + 3), 374 DIVU = ((3 << 3) + 3),
371 DMULT = ((3 << 3) + 4), 375 DMULT = ((3 << 3) + 4),
(...skipping 15 matching lines...) Expand all
387 DADD = ((5 << 3) + 4), 391 DADD = ((5 << 3) + 4),
388 DADDU = ((5 << 3) + 5), 392 DADDU = ((5 << 3) + 5),
389 DSUB = ((5 << 3) + 6), 393 DSUB = ((5 << 3) + 6),
390 DSUBU = ((5 << 3) + 7), 394 DSUBU = ((5 << 3) + 7),
391 395
392 TGE = ((6 << 3) + 0), 396 TGE = ((6 << 3) + 0),
393 TGEU = ((6 << 3) + 1), 397 TGEU = ((6 << 3) + 1),
394 TLT = ((6 << 3) + 2), 398 TLT = ((6 << 3) + 2),
395 TLTU = ((6 << 3) + 3), 399 TLTU = ((6 << 3) + 3),
396 TEQ = ((6 << 3) + 4), 400 TEQ = ((6 << 3) + 4),
401 SELEQZ_S = ((6 << 3) + 5),
397 TNE = ((6 << 3) + 6), 402 TNE = ((6 << 3) + 6),
403 SELNEZ_S = ((6 << 3) + 7),
398 404
399 DSLL = ((7 << 3) + 0), 405 DSLL = ((7 << 3) + 0),
400 DSRL = ((7 << 3) + 2), 406 DSRL = ((7 << 3) + 2),
401 DSRA = ((7 << 3) + 3), 407 DSRA = ((7 << 3) + 3),
402 DSLL32 = ((7 << 3) + 4), 408 DSLL32 = ((7 << 3) + 4),
403 DSRL32 = ((7 << 3) + 6), 409 DSRL32 = ((7 << 3) + 6),
404 DSRA32 = ((7 << 3) + 7), 410 DSRA32 = ((7 << 3) + 7),
411
412 // Multiply integers in r6.
413 MUL_MUH = ((3 << 3) + 0), // MUL, MUH.
414 MUL_MUH_U = ((3 << 3) + 1), // MUL_U, MUH_U.
415 D_MUL_MUH = ((7 << 2) + 0), // DMUL, DMUH.
416 D_MUL_MUH_U = ((7 << 2) + 1), // DMUL_U, DMUH_U.
417
418 MUL_OP = ((0 << 3) + 2),
419 MUH_OP = ((0 << 3) + 3),
420 DIV_OP = ((0 << 3) + 2),
421 MOD_OP = ((0 << 3) + 3),
422
423 DIV_MOD = ((3 << 3) + 2),
424 DIV_MOD_U = ((3 << 3) + 3),
425 D_DIV_MOD = ((3 << 3) + 6),
426 D_DIV_MOD_U = ((3 << 3) + 7),
427
405 // drotr in special4? 428 // drotr in special4?
406 429
407 // SPECIAL2 Encoding of Function Field. 430 // SPECIAL2 Encoding of Function Field.
408 MUL = ((0 << 3) + 2), 431 MUL = ((0 << 3) + 2),
409 CLZ = ((4 << 3) + 0), 432 CLZ = ((4 << 3) + 0),
410 CLO = ((4 << 3) + 1), 433 CLO = ((4 << 3) + 1),
411 434
412 // SPECIAL3 Encoding of Function Field. 435 // SPECIAL3 Encoding of Function Field.
413 EXT = ((0 << 3) + 0), 436 EXT = ((0 << 3) + 0),
414 DEXTM = ((0 << 3) + 1), 437 DEXTM = ((0 << 3) + 1),
415 DEXTU = ((0 << 3) + 2), 438 DEXTU = ((0 << 3) + 2),
416 DEXT = ((0 << 3) + 3), 439 DEXT = ((0 << 3) + 3),
417 INS = ((0 << 3) + 4), 440 INS = ((0 << 3) + 4),
418 DINSM = ((0 << 3) + 5), 441 DINSM = ((0 << 3) + 5),
419 DINSU = ((0 << 3) + 6), 442 DINSU = ((0 << 3) + 6),
420 DINS = ((0 << 3) + 7), 443 DINS = ((0 << 3) + 7),
421 444
422 DSBH = ((4 << 3) + 4), 445 DSBH = ((4 << 3) + 4),
423 446
424 // REGIMM encoding of rt Field. 447 // REGIMM encoding of rt Field.
425 BLTZ = ((0 << 3) + 0) << 16, 448 BLTZ = ((0 << 3) + 0) << 16,
426 BGEZ = ((0 << 3) + 1) << 16, 449 BGEZ = ((0 << 3) + 1) << 16,
427 BLTZAL = ((2 << 3) + 0) << 16, 450 BLTZAL = ((2 << 3) + 0) << 16,
428 BGEZAL = ((2 << 3) + 1) << 16, 451 BGEZAL = ((2 << 3) + 1) << 16,
452 BGEZALL = ((2 << 3) + 3) << 16,
453 DAHI = ((0 << 3) + 6) << 16,
454 DATI = ((3 << 3) + 6) << 16,
429 455
430 // COP1 Encoding of rs Field. 456 // COP1 Encoding of rs Field.
431 MFC1 = ((0 << 3) + 0) << 21, 457 MFC1 = ((0 << 3) + 0) << 21,
432 DMFC1 = ((0 << 3) + 1) << 21, 458 DMFC1 = ((0 << 3) + 1) << 21,
433 CFC1 = ((0 << 3) + 2) << 21, 459 CFC1 = ((0 << 3) + 2) << 21,
434 MFHC1 = ((0 << 3) + 3) << 21, 460 MFHC1 = ((0 << 3) + 3) << 21,
435 MTC1 = ((0 << 3) + 4) << 21, 461 MTC1 = ((0 << 3) + 4) << 21,
436 DMTC1 = ((0 << 3) + 5) << 21, 462 DMTC1 = ((0 << 3) + 5) << 21,
437 CTC1 = ((0 << 3) + 6) << 21, 463 CTC1 = ((0 << 3) + 6) << 21,
438 MTHC1 = ((0 << 3) + 7) << 21, 464 MTHC1 = ((0 << 3) + 7) << 21,
(...skipping 26 matching lines...) Expand all
465 MOV_D = ((0 << 3) + 6), 491 MOV_D = ((0 << 3) + 6),
466 NEG_D = ((0 << 3) + 7), 492 NEG_D = ((0 << 3) + 7),
467 ROUND_L_D = ((1 << 3) + 0), 493 ROUND_L_D = ((1 << 3) + 0),
468 TRUNC_L_D = ((1 << 3) + 1), 494 TRUNC_L_D = ((1 << 3) + 1),
469 CEIL_L_D = ((1 << 3) + 2), 495 CEIL_L_D = ((1 << 3) + 2),
470 FLOOR_L_D = ((1 << 3) + 3), 496 FLOOR_L_D = ((1 << 3) + 3),
471 ROUND_W_D = ((1 << 3) + 4), 497 ROUND_W_D = ((1 << 3) + 4),
472 TRUNC_W_D = ((1 << 3) + 5), 498 TRUNC_W_D = ((1 << 3) + 5),
473 CEIL_W_D = ((1 << 3) + 6), 499 CEIL_W_D = ((1 << 3) + 6),
474 FLOOR_W_D = ((1 << 3) + 7), 500 FLOOR_W_D = ((1 << 3) + 7),
501 MIN = ((3 << 3) + 4),
502 MINA = ((3 << 3) + 5),
503 MAX = ((3 << 3) + 6),
504 MAXA = ((3 << 3) + 7),
475 CVT_S_D = ((4 << 3) + 0), 505 CVT_S_D = ((4 << 3) + 0),
476 CVT_W_D = ((4 << 3) + 4), 506 CVT_W_D = ((4 << 3) + 4),
477 CVT_L_D = ((4 << 3) + 5), 507 CVT_L_D = ((4 << 3) + 5),
478 C_F_D = ((6 << 3) + 0), 508 C_F_D = ((6 << 3) + 0),
479 C_UN_D = ((6 << 3) + 1), 509 C_UN_D = ((6 << 3) + 1),
480 C_EQ_D = ((6 << 3) + 2), 510 C_EQ_D = ((6 << 3) + 2),
481 C_UEQ_D = ((6 << 3) + 3), 511 C_UEQ_D = ((6 << 3) + 3),
482 C_OLT_D = ((6 << 3) + 4), 512 C_OLT_D = ((6 << 3) + 4),
483 C_ULT_D = ((6 << 3) + 5), 513 C_ULT_D = ((6 << 3) + 5),
484 C_OLE_D = ((6 << 3) + 6), 514 C_OLE_D = ((6 << 3) + 6),
485 C_ULE_D = ((6 << 3) + 7), 515 C_ULE_D = ((6 << 3) + 7),
486 // COP1 Encoding of Function Field When rs=W or L. 516 // COP1 Encoding of Function Field When rs=W or L.
487 CVT_S_W = ((4 << 3) + 0), 517 CVT_S_W = ((4 << 3) + 0),
488 CVT_D_W = ((4 << 3) + 1), 518 CVT_D_W = ((4 << 3) + 1),
489 CVT_S_L = ((4 << 3) + 0), 519 CVT_S_L = ((4 << 3) + 0),
490 CVT_D_L = ((4 << 3) + 1), 520 CVT_D_L = ((4 << 3) + 1),
521 BC1EQZ = ((2 << 2) + 1) << 21,
522 BC1NEZ = ((3 << 2) + 1) << 21,
523 // COP1 CMP positive predicates Bit 5..4 = 00.
524 CMP_AF = ((0 << 3) + 0),
525 CMP_UN = ((0 << 3) + 1),
526 CMP_EQ = ((0 << 3) + 2),
527 CMP_UEQ = ((0 << 3) + 3),
528 CMP_LT = ((0 << 3) + 4),
529 CMP_ULT = ((0 << 3) + 5),
530 CMP_LE = ((0 << 3) + 6),
531 CMP_ULE = ((0 << 3) + 7),
532 CMP_SAF = ((1 << 3) + 0),
533 CMP_SUN = ((1 << 3) + 1),
534 CMP_SEQ = ((1 << 3) + 2),
535 CMP_SUEQ = ((1 << 3) + 3),
536 CMP_SSLT = ((1 << 3) + 4),
537 CMP_SSULT = ((1 << 3) + 5),
538 CMP_SLE = ((1 << 3) + 6),
539 CMP_SULE = ((1 << 3) + 7),
540 // COP1 CMP negative predicates Bit 5..4 = 01.
541 CMP_AT = ((2 << 3) + 0), // Reserved, not implemented.
542 CMP_OR = ((2 << 3) + 1),
543 CMP_UNE = ((2 << 3) + 2),
544 CMP_NE = ((2 << 3) + 3),
545 CMP_UGE = ((2 << 3) + 4), // Reserved, not implemented.
546 CMP_OGE = ((2 << 3) + 5), // Reserved, not implemented.
547 CMP_UGT = ((2 << 3) + 6), // Reserved, not implemented.
548 CMP_OGT = ((2 << 3) + 7), // Reserved, not implemented.
549 CMP_SAT = ((3 << 3) + 0), // Reserved, not implemented.
550 CMP_SOR = ((3 << 3) + 1),
551 CMP_SUNE = ((3 << 3) + 2),
552 CMP_SNE = ((3 << 3) + 3),
553 CMP_SUGE = ((3 << 3) + 4), // Reserved, not implemented.
554 CMP_SOGE = ((3 << 3) + 5), // Reserved, not implemented.
555 CMP_SUGT = ((3 << 3) + 6), // Reserved, not implemented.
556 CMP_SOGT = ((3 << 3) + 7), // Reserved, not implemented.
557
558 SEL = ((2 << 3) + 0),
559 SELEQZ_C = ((2 << 3) + 4), // COP1 on FPR registers.
560 SELNEZ_C = ((2 << 3) + 7), // COP1 on FPR registers.
561
491 // COP1 Encoding of Function Field When rs=PS. 562 // COP1 Encoding of Function Field When rs=PS.
492 // COP1X Encoding of Function Field. 563 // COP1X Encoding of Function Field.
493 MADD_D = ((4 << 3) + 1), 564 MADD_D = ((4 << 3) + 1),
494 565
495 NULLSF = 0 566 NULLSF = 0
496 }; 567 };
497 568
498 569
499 // ----- Emulated conditions. 570 // ----- Emulated conditions.
500 // On MIPS we use this enum to abstract from conditionnal branch instructions. 571 // On MIPS we use this enum to abstract from conditional branch instructions.
501 // The 'U' prefix is used to specify unsigned comparisons. 572 // The 'U' prefix is used to specify unsigned comparisons.
502 // Oppposite conditions must be paired as odd/even numbers 573 // Opposite conditions must be paired as odd/even numbers
503 // because 'NegateCondition' function flips LSB to negate condition. 574 // because 'NegateCondition' function flips LSB to negate condition.
504 enum Condition { 575 enum Condition {
505 // Any value < 0 is considered no_condition. 576 // Any value < 0 is considered no_condition.
506 kNoCondition = -1, 577 kNoCondition = -1,
507 578
508 overflow = 0, 579 overflow = 0,
509 no_overflow = 1, 580 no_overflow = 1,
510 Uless = 2, 581 Uless = 2,
511 Ugreater_equal= 3, 582 Ugreater_equal= 3,
512 equal = 4, 583 equal = 4,
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 default: 897 default:
827 return NULLSF; 898 return NULLSF;
828 } 899 }
829 } 900 }
830 901
831 inline int32_t Imm16Value() const { 902 inline int32_t Imm16Value() const {
832 ASSERT(InstructionType() == kImmediateType); 903 ASSERT(InstructionType() == kImmediateType);
833 return Bits(kImm16Shift + kImm16Bits - 1, kImm16Shift); 904 return Bits(kImm16Shift + kImm16Bits - 1, kImm16Shift);
834 } 905 }
835 906
907 inline int32_t Imm21Value() const {
908 ASSERT(InstructionType() == kImmediateType);
909 return Bits(kImm21Shift + kImm21Bits - 1, kImm21Shift);
910 }
911
836 inline int32_t Imm26Value() const { 912 inline int32_t Imm26Value() const {
837 ASSERT(InstructionType() == kJumpType); 913 ASSERT(InstructionType() == kJumpType);
838 return Bits(kImm26Shift + kImm26Bits - 1, kImm26Shift); 914 return Bits(kImm26Shift + kImm26Bits - 1, kImm26Shift);
839 } 915 }
840 916
841 // Say if the instruction should not be used in a branch delay slot. 917 // Say if the instruction should not be used in a branch delay slot.
842 bool IsForbiddenInBranchDelay() const; 918 bool IsForbiddenInBranchDelay() const;
843 // Say if the instruction 'links'. e.g. jal, bal. 919 // Say if the instruction 'links'. e.g. jal, bal.
844 bool IsLinkingInstruction() const; 920 bool IsLinkingInstruction() const;
845 // Say if the instruction is a break or a trap. 921 // Say if the instruction is a break or a trap.
(...skipping 21 matching lines...) Expand all
867 943
868 // TODO(plind): below should be based on kPointerSize 944 // TODO(plind): below should be based on kPointerSize
869 // TODO(plind): find all usages and remove the needless instructions for n64. 945 // TODO(plind): find all usages and remove the needless instructions for n64.
870 const int kCArgsSlotsSize = kCArgSlotCount * Instruction::kInstrSize * 2; 946 const int kCArgsSlotsSize = kCArgSlotCount * Instruction::kInstrSize * 2;
871 947
872 const int kBranchReturnOffset = 2 * Instruction::kInstrSize; 948 const int kBranchReturnOffset = 2 * Instruction::kInstrSize;
873 949
874 } } // namespace v8::internal 950 } } // namespace v8::internal
875 951
876 #endif // #ifndef V8_MIPS_CONSTANTS_H_ 952 #endif // #ifndef V8_MIPS_CONSTANTS_H_
OLDNEW
« no previous file with comments | « src/mips64/code-stubs-mips64.cc ('k') | src/mips64/constants-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698