OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/compilation-info.h" | 7 #include "src/compilation-info.h" |
8 #include "src/compiler/code-generator-impl.h" | 8 #include "src/compiler/code-generator-impl.h" |
9 #include "src/compiler/gap-resolver.h" | 9 #include "src/compiler/gap-resolver.h" |
10 #include "src/compiler/node-matchers.h" | 10 #include "src/compiler/node-matchers.h" |
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 template <class _RR, class _RM, class _RI> | 482 template <class _RR, class _RM, class _RI> |
483 static inline int AssembleBinOp(Instruction* instr, _RR _rr, _RM _rm, _RI _ri) { | 483 static inline int AssembleBinOp(Instruction* instr, _RR _rr, _RM _rm, _RI _ri) { |
484 return AssembleOp<2>(instr, _rr, _rm, _ri); | 484 return AssembleOp<2>(instr, _rr, _rm, _ri); |
485 } | 485 } |
486 | 486 |
487 template <class _R, class _M, class _I> | 487 template <class _R, class _M, class _I> |
488 static inline int AssembleUnaryOp(Instruction* instr, _R _r, _M _m, _I _i) { | 488 static inline int AssembleUnaryOp(Instruction* instr, _R _r, _M _m, _I _i) { |
489 return AssembleOp<1>(instr, _r, _m, _i); | 489 return AssembleOp<1>(instr, _r, _m, _i); |
490 } | 490 } |
491 | 491 |
| 492 #define ASSEMBLE_BIN_OP(_rr, _rm, _ri) AssembleBinOp(instr, _rr, _rm, _ri) |
| 493 #define ASSEMBLE_UNARY_OP(_r, _m, _i) AssembleUnaryOp(instr, _r, _m, _i) |
| 494 |
| 495 #ifdef V8_TARGET_ARCH_S390X |
492 #define CHECK_AND_ZERO_EXT_OUTPUT(num) \ | 496 #define CHECK_AND_ZERO_EXT_OUTPUT(num) \ |
493 ([&](int index) { \ | 497 ([&](int index) { \ |
494 DCHECK(HasImmediateInput(instr, (index))); \ | 498 DCHECK(HasImmediateInput(instr, (index))); \ |
495 int doZeroExt = i.InputInt32(index); \ | 499 int doZeroExt = i.InputInt32(index); \ |
496 if (doZeroExt) __ LoadlW(i.OutputRegister(), i.OutputRegister()); \ | 500 if (doZeroExt) __ LoadlW(i.OutputRegister(), i.OutputRegister()); \ |
497 })(num) | 501 })(num) |
498 | 502 |
499 #define ASSEMBLE_BIN_OP(_rr, _rm, _ri) AssembleBinOp(instr, _rr, _rm, _ri) | |
500 #define ASSEMBLE_UNARY_OP(_r, _m, _i) AssembleUnaryOp(instr, _r, _m, _i) | |
501 | |
502 #define ASSEMBLE_BIN32_OP(_rr, _rm, _ri) \ | 503 #define ASSEMBLE_BIN32_OP(_rr, _rm, _ri) \ |
503 { CHECK_AND_ZERO_EXT_OUTPUT(AssembleBinOp(instr, _rr, _rm, _ri)); } | 504 { CHECK_AND_ZERO_EXT_OUTPUT(AssembleBinOp(instr, _rr, _rm, _ri)); } |
| 505 #else |
| 506 #define ASSEMBLE_BIN32_OP ASSEMBLE_BIN_OP |
| 507 #define CHECK_AND_ZERO_EXT_OUTPUT(num) |
| 508 #endif |
504 | 509 |
505 } // namespace | 510 } // namespace |
506 | 511 |
507 #define ASSEMBLE_FLOAT_UNOP(asm_instr) \ | 512 #define ASSEMBLE_FLOAT_UNOP(asm_instr) \ |
508 do { \ | 513 do { \ |
509 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); \ | 514 __ asm_instr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); \ |
510 } while (0) | 515 } while (0) |
511 | 516 |
512 #define ASSEMBLE_FLOAT_BINOP(asm_instr) \ | 517 #define ASSEMBLE_FLOAT_BINOP(asm_instr) \ |
513 do { \ | 518 do { \ |
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1336 break; | 1341 break; |
1337 } | 1342 } |
1338 case kArchStackSlot: { | 1343 case kArchStackSlot: { |
1339 FrameOffset offset = | 1344 FrameOffset offset = |
1340 frame_access_state()->GetFrameOffset(i.InputInt32(0)); | 1345 frame_access_state()->GetFrameOffset(i.InputInt32(0)); |
1341 __ AddP(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp, | 1346 __ AddP(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp, |
1342 Operand(offset.offset())); | 1347 Operand(offset.offset())); |
1343 break; | 1348 break; |
1344 } | 1349 } |
1345 case kS390_And32: | 1350 case kS390_And32: |
| 1351 // zero-ext |
1346 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1352 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1347 ASSEMBLE_BIN32_OP(RRRInstr(nrk), RM32Instr(And), RIInstr(nilf)); | 1353 ASSEMBLE_BIN32_OP(RRRInstr(nrk), RM32Instr(And), RIInstr(nilf)); |
1348 } else { | 1354 } else { |
1349 ASSEMBLE_BIN32_OP(RRInstr(nr), RM32Instr(And), RIInstr(nilf)); | 1355 ASSEMBLE_BIN32_OP(RRInstr(nr), RM32Instr(And), RIInstr(nilf)); |
1350 } | 1356 } |
1351 break; | 1357 break; |
1352 case kS390_And64: | 1358 case kS390_And64: |
1353 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1359 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1354 ASSEMBLE_BIN_OP(RRRInstr(ngrk), RM64Instr(ng), nullInstr); | 1360 ASSEMBLE_BIN_OP(RRRInstr(ngrk), RM64Instr(ng), nullInstr); |
1355 } else { | 1361 } else { |
1356 ASSEMBLE_BIN_OP(RRInstr(ngr), RM64Instr(ng), nullInstr); | 1362 ASSEMBLE_BIN_OP(RRInstr(ngr), RM64Instr(ng), nullInstr); |
1357 } | 1363 } |
1358 break; | 1364 break; |
1359 case kS390_Or32: | 1365 case kS390_Or32: |
| 1366 // zero-ext |
1360 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1367 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1361 ASSEMBLE_BIN32_OP(RRRInstr(ork), RM32Instr(Or), RIInstr(oilf)); | 1368 ASSEMBLE_BIN32_OP(RRRInstr(ork), RM32Instr(Or), RIInstr(oilf)); |
1362 } else { | 1369 } else { |
1363 ASSEMBLE_BIN32_OP(RRInstr(or_z), RM32Instr(Or), RIInstr(oilf)); | 1370 ASSEMBLE_BIN32_OP(RRInstr(or_z), RM32Instr(Or), RIInstr(oilf)); |
1364 } | 1371 } |
1365 break; | 1372 break; |
1366 case kS390_Or64: | 1373 case kS390_Or64: |
1367 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1374 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1368 ASSEMBLE_BIN_OP(RRRInstr(ogrk), RM64Instr(og), nullInstr); | 1375 ASSEMBLE_BIN_OP(RRRInstr(ogrk), RM64Instr(og), nullInstr); |
1369 } else { | 1376 } else { |
1370 ASSEMBLE_BIN_OP(RRInstr(ogr), RM64Instr(og), nullInstr); | 1377 ASSEMBLE_BIN_OP(RRInstr(ogr), RM64Instr(og), nullInstr); |
1371 } | 1378 } |
1372 break; | 1379 break; |
1373 case kS390_Xor32: | 1380 case kS390_Xor32: |
| 1381 // zero-ext |
1374 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1382 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1375 ASSEMBLE_BIN32_OP(RRRInstr(xrk), RM32Instr(Xor), RIInstr(xilf)); | 1383 ASSEMBLE_BIN32_OP(RRRInstr(xrk), RM32Instr(Xor), RIInstr(xilf)); |
1376 } else { | 1384 } else { |
1377 ASSEMBLE_BIN32_OP(RRInstr(xr), RM32Instr(Xor), RIInstr(xilf)); | 1385 ASSEMBLE_BIN32_OP(RRInstr(xr), RM32Instr(Xor), RIInstr(xilf)); |
1378 } | 1386 } |
1379 break; | 1387 break; |
1380 case kS390_Xor64: | 1388 case kS390_Xor64: |
1381 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1389 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1382 ASSEMBLE_BIN_OP(RRRInstr(xgrk), RM64Instr(xg), nullInstr); | 1390 ASSEMBLE_BIN_OP(RRRInstr(xgrk), RM64Instr(xg), nullInstr); |
1383 } else { | 1391 } else { |
1384 ASSEMBLE_BIN_OP(RRInstr(xgr), RM64Instr(xg), nullInstr); | 1392 ASSEMBLE_BIN_OP(RRInstr(xgr), RM64Instr(xg), nullInstr); |
1385 } | 1393 } |
1386 break; | 1394 break; |
1387 case kS390_ShiftLeft32: | 1395 case kS390_ShiftLeft32: |
| 1396 // zero-ext |
1388 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1397 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1389 ASSEMBLE_BIN32_OP(RRRInstr(ShiftLeft), nullInstr, RRIInstr(ShiftLeft)); | 1398 ASSEMBLE_BIN32_OP(RRRInstr(ShiftLeft), nullInstr, RRIInstr(ShiftLeft)); |
1390 } else { | 1399 } else { |
1391 ASSEMBLE_BIN32_OP(RRInstr(sll), nullInstr, RIInstr(sll)); | 1400 ASSEMBLE_BIN32_OP(RRInstr(sll), nullInstr, RIInstr(sll)); |
1392 } | 1401 } |
1393 break; | 1402 break; |
1394 case kS390_ShiftLeft64: | 1403 case kS390_ShiftLeft64: |
1395 ASSEMBLE_BIN_OP(RRRInstr(sllg), nullInstr, RRIInstr(sllg)); | 1404 ASSEMBLE_BIN_OP(RRRInstr(sllg), nullInstr, RRIInstr(sllg)); |
1396 break; | 1405 break; |
1397 case kS390_ShiftRight32: | 1406 case kS390_ShiftRight32: |
| 1407 // zero-ext |
1398 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1408 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1399 ASSEMBLE_BIN32_OP(RRRInstr(srlk), nullInstr, RRIInstr(srlk)); | 1409 ASSEMBLE_BIN32_OP(RRRInstr(srlk), nullInstr, RRIInstr(srlk)); |
1400 } else { | 1410 } else { |
1401 ASSEMBLE_BIN32_OP(RRInstr(srl), nullInstr, RIInstr(srl)); | 1411 ASSEMBLE_BIN32_OP(RRInstr(srl), nullInstr, RIInstr(srl)); |
1402 } | 1412 } |
1403 break; | 1413 break; |
1404 case kS390_ShiftRight64: | 1414 case kS390_ShiftRight64: |
1405 ASSEMBLE_BIN_OP(RRRInstr(srlg), nullInstr, RRIInstr(srlg)); | 1415 ASSEMBLE_BIN_OP(RRRInstr(srlg), nullInstr, RRIInstr(srlg)); |
1406 break; | 1416 break; |
1407 case kS390_ShiftRightArith32: | 1417 case kS390_ShiftRightArith32: |
| 1418 // zero-ext |
1408 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1419 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1409 ASSEMBLE_BIN32_OP(RRRInstr(srak), nullInstr, RRIInstr(srak)); | 1420 ASSEMBLE_BIN32_OP(RRRInstr(srak), nullInstr, RRIInstr(srak)); |
1410 } else { | 1421 } else { |
1411 ASSEMBLE_BIN32_OP(RRInstr(sra), nullInstr, RIInstr(sra)); | 1422 ASSEMBLE_BIN32_OP(RRInstr(sra), nullInstr, RIInstr(sra)); |
1412 } | 1423 } |
1413 break; | 1424 break; |
1414 case kS390_ShiftRightArith64: | 1425 case kS390_ShiftRightArith64: |
1415 ASSEMBLE_BIN_OP(RRRInstr(srag), nullInstr, RRIInstr(srag)); | 1426 ASSEMBLE_BIN_OP(RRRInstr(srag), nullInstr, RRIInstr(srag)); |
1416 break; | 1427 break; |
1417 #if !V8_TARGET_ARCH_S390X | 1428 #if !V8_TARGET_ARCH_S390X |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1483 i.InputInt32(2)); | 1494 i.InputInt32(2)); |
1484 } else { | 1495 } else { |
1485 __ ShiftRightArithPair(i.OutputRegister(0), second_output, | 1496 __ ShiftRightArithPair(i.OutputRegister(0), second_output, |
1486 i.InputRegister(0), i.InputRegister(1), | 1497 i.InputRegister(0), i.InputRegister(1), |
1487 kScratchReg, i.InputRegister(2)); | 1498 kScratchReg, i.InputRegister(2)); |
1488 } | 1499 } |
1489 break; | 1500 break; |
1490 } | 1501 } |
1491 #endif | 1502 #endif |
1492 case kS390_RotRight32: { | 1503 case kS390_RotRight32: { |
| 1504 // zero-ext |
1493 if (HasRegisterInput(instr, 1)) { | 1505 if (HasRegisterInput(instr, 1)) { |
1494 __ LoadComplementRR(kScratchReg, i.InputRegister(1)); | 1506 __ LoadComplementRR(kScratchReg, i.InputRegister(1)); |
1495 __ rll(i.OutputRegister(), i.InputRegister(0), kScratchReg); | 1507 __ rll(i.OutputRegister(), i.InputRegister(0), kScratchReg); |
1496 } else { | 1508 } else { |
1497 __ rll(i.OutputRegister(), i.InputRegister(0), | 1509 __ rll(i.OutputRegister(), i.InputRegister(0), |
1498 Operand(32 - i.InputInt32(1))); | 1510 Operand(32 - i.InputInt32(1))); |
1499 } | 1511 } |
1500 CHECK_AND_ZERO_EXT_OUTPUT(2); | 1512 CHECK_AND_ZERO_EXT_OUTPUT(2); |
1501 break; | 1513 break; |
1502 } | 1514 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1552 Operand(endBit), Operand(shiftAmount), true); | 1564 Operand(endBit), Operand(shiftAmount), true); |
1553 } else { | 1565 } else { |
1554 int shiftAmount = i.InputInt32(1); | 1566 int shiftAmount = i.InputInt32(1); |
1555 int clearBit = i.InputInt32(2); | 1567 int clearBit = i.InputInt32(2); |
1556 __ rllg(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); | 1568 __ rllg(i.OutputRegister(), i.InputRegister(0), Operand(shiftAmount)); |
1557 __ srlg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); | 1569 __ srlg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); |
1558 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); | 1570 __ sllg(i.OutputRegister(), i.OutputRegister(), Operand(clearBit)); |
1559 } | 1571 } |
1560 break; | 1572 break; |
1561 case kS390_Add32: { | 1573 case kS390_Add32: { |
| 1574 // zero-ext |
1562 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1575 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1563 ASSEMBLE_BIN32_OP(RRRInstr(ark), RM32Instr(Add32), RRIInstr(Add32)); | 1576 ASSEMBLE_BIN32_OP(RRRInstr(ark), RM32Instr(Add32), RRIInstr(Add32)); |
1564 } else { | 1577 } else { |
1565 ASSEMBLE_BIN32_OP(RRInstr(ar), RM32Instr(Add32), RIInstr(Add32)); | 1578 ASSEMBLE_BIN32_OP(RRInstr(ar), RM32Instr(Add32), RIInstr(Add32)); |
1566 } | 1579 } |
1567 break; | 1580 break; |
1568 } | 1581 } |
1569 case kS390_Add64: | 1582 case kS390_Add64: |
1570 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1583 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1571 ASSEMBLE_BIN_OP(RRRInstr(agrk), RM64Instr(ag), RRIInstr(AddP)); | 1584 ASSEMBLE_BIN_OP(RRRInstr(agrk), RM64Instr(ag), RRIInstr(AddP)); |
1572 } else { | 1585 } else { |
1573 ASSEMBLE_BIN_OP(RRInstr(agr), RM64Instr(ag), RIInstr(agfi)); | 1586 ASSEMBLE_BIN_OP(RRInstr(agr), RM64Instr(ag), RIInstr(agfi)); |
1574 } | 1587 } |
1575 break; | 1588 break; |
1576 case kS390_AddFloat: | 1589 case kS390_AddFloat: |
1577 ASSEMBLE_BIN_OP(DDInstr(aebr), DMTInstr(AddFloat32), nullInstr); | 1590 ASSEMBLE_BIN_OP(DDInstr(aebr), DMTInstr(AddFloat32), nullInstr); |
1578 break; | 1591 break; |
1579 case kS390_AddDouble: | 1592 case kS390_AddDouble: |
1580 ASSEMBLE_BIN_OP(DDInstr(adbr), DMTInstr(AddFloat64), nullInstr); | 1593 ASSEMBLE_BIN_OP(DDInstr(adbr), DMTInstr(AddFloat64), nullInstr); |
1581 break; | 1594 break; |
1582 case kS390_Sub32: | 1595 case kS390_Sub32: |
| 1596 // zero-ext |
1583 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1597 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1584 ASSEMBLE_BIN32_OP(RRRInstr(srk), RM32Instr(Sub32), RRIInstr(Sub32)); | 1598 ASSEMBLE_BIN32_OP(RRRInstr(srk), RM32Instr(Sub32), RRIInstr(Sub32)); |
1585 } else { | 1599 } else { |
1586 ASSEMBLE_BIN32_OP(RRInstr(sr), RM32Instr(Sub32), RIInstr(Sub32)); | 1600 ASSEMBLE_BIN32_OP(RRInstr(sr), RM32Instr(Sub32), RIInstr(Sub32)); |
1587 } | 1601 } |
1588 break; | 1602 break; |
1589 case kS390_Sub64: | 1603 case kS390_Sub64: |
1590 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { | 1604 if (CpuFeatures::IsSupported(DISTINCT_OPS)) { |
1591 ASSEMBLE_BIN_OP(RRRInstr(sgrk), RM64Instr(sg), RRIInstr(SubP)); | 1605 ASSEMBLE_BIN_OP(RRRInstr(sgrk), RM64Instr(sg), RRIInstr(SubP)); |
1592 } else { | 1606 } else { |
1593 ASSEMBLE_BIN_OP(RRInstr(sgr), RM64Instr(sg), RIInstr(SubP)); | 1607 ASSEMBLE_BIN_OP(RRInstr(sgr), RM64Instr(sg), RIInstr(SubP)); |
1594 } | 1608 } |
1595 break; | 1609 break; |
1596 case kS390_SubFloat: | 1610 case kS390_SubFloat: |
1597 ASSEMBLE_BIN_OP(DDInstr(sebr), DMTInstr(SubFloat32), nullInstr); | 1611 ASSEMBLE_BIN_OP(DDInstr(sebr), DMTInstr(SubFloat32), nullInstr); |
1598 break; | 1612 break; |
1599 case kS390_SubDouble: | 1613 case kS390_SubDouble: |
1600 ASSEMBLE_BIN_OP(DDInstr(sdbr), DMTInstr(SubFloat64), nullInstr); | 1614 ASSEMBLE_BIN_OP(DDInstr(sdbr), DMTInstr(SubFloat64), nullInstr); |
1601 break; | 1615 break; |
1602 case kS390_Mul32: | 1616 case kS390_Mul32: |
| 1617 // zero-ext |
1603 ASSEMBLE_BIN32_OP(RRInstr(Mul32), RM32Instr(Mul32), RIInstr(Mul32)); | 1618 ASSEMBLE_BIN32_OP(RRInstr(Mul32), RM32Instr(Mul32), RIInstr(Mul32)); |
1604 break; | 1619 break; |
1605 case kS390_Mul32WithOverflow: | 1620 case kS390_Mul32WithOverflow: |
| 1621 // zero-ext |
1606 ASSEMBLE_BIN32_OP(RRRInstr(Mul32WithOverflowIfCCUnequal), | 1622 ASSEMBLE_BIN32_OP(RRRInstr(Mul32WithOverflowIfCCUnequal), |
1607 RRM32Instr(Mul32WithOverflowIfCCUnequal), | 1623 RRM32Instr(Mul32WithOverflowIfCCUnequal), |
1608 RRIInstr(Mul32WithOverflowIfCCUnequal)); | 1624 RRIInstr(Mul32WithOverflowIfCCUnequal)); |
1609 break; | 1625 break; |
1610 case kS390_Mul64: | 1626 case kS390_Mul64: |
1611 ASSEMBLE_BIN_OP(RRInstr(Mul64), RM64Instr(Mul64), RIInstr(Mul64)); | 1627 ASSEMBLE_BIN_OP(RRInstr(Mul64), RM64Instr(Mul64), RIInstr(Mul64)); |
1612 break; | 1628 break; |
1613 case kS390_MulHigh32: | 1629 case kS390_MulHigh32: |
1614 ASSEMBLE_BIN32_OP(RRRInstr(MulHigh32), RRM32Instr(MulHigh32), | 1630 // zero-ext |
1615 RRIInstr(MulHigh32)); | 1631 ASSEMBLE_BIN_OP(RRRInstr(MulHigh32), RRM32Instr(MulHigh32), |
| 1632 RRIInstr(MulHigh32)); |
1616 break; | 1633 break; |
1617 case kS390_MulHighU32: | 1634 case kS390_MulHighU32: |
1618 ASSEMBLE_BIN32_OP(RRRInstr(MulHighU32), RRM32Instr(MulHighU32), | 1635 // zero-ext |
1619 RRIInstr(MulHighU32)); | 1636 ASSEMBLE_BIN_OP(RRRInstr(MulHighU32), RRM32Instr(MulHighU32), |
| 1637 RRIInstr(MulHighU32)); |
1620 break; | 1638 break; |
1621 case kS390_MulFloat: | 1639 case kS390_MulFloat: |
1622 ASSEMBLE_BIN_OP(DDInstr(meebr), DMTInstr(MulFloat32), nullInstr); | 1640 ASSEMBLE_BIN_OP(DDInstr(meebr), DMTInstr(MulFloat32), nullInstr); |
1623 break; | 1641 break; |
1624 case kS390_MulDouble: | 1642 case kS390_MulDouble: |
1625 ASSEMBLE_BIN_OP(DDInstr(mdbr), DMTInstr(MulFloat64), nullInstr); | 1643 ASSEMBLE_BIN_OP(DDInstr(mdbr), DMTInstr(MulFloat64), nullInstr); |
1626 break; | 1644 break; |
1627 case kS390_Div64: | 1645 case kS390_Div64: |
1628 ASSEMBLE_BIN_OP(RRRInstr(Div64), RRM64Instr(Div64), nullInstr); | 1646 ASSEMBLE_BIN_OP(RRRInstr(Div64), RRM64Instr(Div64), nullInstr); |
1629 break; | 1647 break; |
1630 case kS390_Div32: { | 1648 case kS390_Div32: { |
1631 ASSEMBLE_BIN32_OP(RRRInstr(Div32), RRM32Instr(Div32), nullInstr); | 1649 // zero-ext |
| 1650 ASSEMBLE_BIN_OP(RRRInstr(Div32), RRM32Instr(Div32), nullInstr); |
1632 break; | 1651 break; |
1633 } | 1652 } |
1634 case kS390_DivU64: | 1653 case kS390_DivU64: |
1635 ASSEMBLE_BIN_OP(RRRInstr(DivU64), RRM64Instr(DivU64), nullInstr); | 1654 ASSEMBLE_BIN_OP(RRRInstr(DivU64), RRM64Instr(DivU64), nullInstr); |
1636 break; | 1655 break; |
1637 case kS390_DivU32: { | 1656 case kS390_DivU32: { |
1638 ASSEMBLE_BIN32_OP(RRRInstr(DivU32), RRM32Instr(DivU32), nullInstr); | 1657 // zero-ext |
| 1658 ASSEMBLE_BIN_OP(RRRInstr(DivU32), RRM32Instr(DivU32), nullInstr); |
1639 break; | 1659 break; |
1640 } | 1660 } |
1641 case kS390_DivFloat: | 1661 case kS390_DivFloat: |
1642 ASSEMBLE_BIN_OP(DDInstr(debr), DMTInstr(DivFloat32), nullInstr); | 1662 ASSEMBLE_BIN_OP(DDInstr(debr), DMTInstr(DivFloat32), nullInstr); |
1643 break; | 1663 break; |
1644 case kS390_DivDouble: | 1664 case kS390_DivDouble: |
1645 ASSEMBLE_BIN_OP(DDInstr(ddbr), DMTInstr(DivFloat64), nullInstr); | 1665 ASSEMBLE_BIN_OP(DDInstr(ddbr), DMTInstr(DivFloat64), nullInstr); |
1646 break; | 1666 break; |
1647 case kS390_Mod32: | 1667 case kS390_Mod32: |
1648 ASSEMBLE_BIN32_OP(RRRInstr(Mod32), RRM32Instr(Mod32), nullInstr); | 1668 // zero-ext |
| 1669 ASSEMBLE_BIN_OP(RRRInstr(Mod32), RRM32Instr(Mod32), nullInstr); |
1649 break; | 1670 break; |
1650 case kS390_ModU32: | 1671 case kS390_ModU32: |
1651 ASSEMBLE_BIN32_OP(RRRInstr(ModU32), RRM32Instr(ModU32), nullInstr); | 1672 // zero-ext |
| 1673 ASSEMBLE_BIN_OP(RRRInstr(ModU32), RRM32Instr(ModU32), nullInstr); |
1652 break; | 1674 break; |
1653 case kS390_Mod64: | 1675 case kS390_Mod64: |
1654 ASSEMBLE_BIN_OP(RRRInstr(Mod64), RRM64Instr(Mod64), nullInstr); | 1676 ASSEMBLE_BIN_OP(RRRInstr(Mod64), RRM64Instr(Mod64), nullInstr); |
1655 break; | 1677 break; |
1656 case kS390_ModU64: | 1678 case kS390_ModU64: |
1657 ASSEMBLE_BIN_OP(RRRInstr(ModU64), RRM64Instr(ModU64), nullInstr); | 1679 ASSEMBLE_BIN_OP(RRRInstr(ModU64), RRM64Instr(ModU64), nullInstr); |
1658 break; | 1680 break; |
1659 case kS390_AbsFloat: | 1681 case kS390_AbsFloat: |
1660 __ lpebr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); | 1682 __ lpebr(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); |
1661 break; | 1683 break; |
(...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2930 padding_size -= 2; | 2952 padding_size -= 2; |
2931 } | 2953 } |
2932 } | 2954 } |
2933 } | 2955 } |
2934 | 2956 |
2935 #undef __ | 2957 #undef __ |
2936 | 2958 |
2937 } // namespace compiler | 2959 } // namespace compiler |
2938 } // namespace internal | 2960 } // namespace internal |
2939 } // namespace v8 | 2961 } // namespace v8 |
OLD | NEW |