| OLD | NEW |
| 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 | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are 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 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 } | 521 } |
| 522 L->link_to(pc_offset()); | 522 L->link_to(pc_offset()); |
| 523 | 523 |
| 524 constant = target_pos - pc_offset(); | 524 constant = target_pos - pc_offset(); |
| 525 } | 525 } |
| 526 llilf(r1, Operand(constant)); | 526 llilf(r1, Operand(constant)); |
| 527 } | 527 } |
| 528 | 528 |
| 529 // Pseudo op - branch on condition | 529 // Pseudo op - branch on condition |
| 530 void Assembler::branchOnCond(Condition c, int branch_offset, bool is_bound) { | 530 void Assembler::branchOnCond(Condition c, int branch_offset, bool is_bound) { |
| 531 int offset = branch_offset; | 531 int offset_in_halfwords = branch_offset / 2; |
| 532 if (is_bound && is_int16(offset)) { | 532 if (is_bound && is_int16(offset_in_halfwords)) { |
| 533 brc(c, Operand(offset & 0xFFFF)); // short jump | 533 brc(c, Operand(offset_in_halfwords & 0xFFFF)); // short jump |
| 534 } else { | 534 } else { |
| 535 brcl(c, Operand(offset)); // long jump | 535 brcl(c, Operand(offset_in_halfwords)); // long jump |
| 536 } | 536 } |
| 537 } | 537 } |
| 538 | 538 |
| 539 // 32-bit Store Multiple - short displacement (12-bits unsigned) | 539 // 32-bit Store Multiple - short displacement (12-bits unsigned) |
| 540 void Assembler::stm(Register r1, Register r2, const MemOperand& src) { | 540 void Assembler::stm(Register r1, Register r2, const MemOperand& src) { |
| 541 rs_form(STM, r1, r2, src.rb(), src.offset()); | 541 rs_form(STM, r1, r2, src.rb(), src.offset()); |
| 542 } | 542 } |
| 543 | 543 |
| 544 // 32-bit Store Multiple - long displacement (20-bits signed) | 544 // 32-bit Store Multiple - long displacement (20-bits signed) |
| 545 void Assembler::stmy(Register r1, Register r2, const MemOperand& src) { | 545 void Assembler::stmy(Register r1, Register r2, const MemOperand& src) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 break; | 579 break; |
| 580 case DEBUG_BREAK_NOP: | 580 case DEBUG_BREAK_NOP: |
| 581 // TODO(john.yan): Use a better NOP break | 581 // TODO(john.yan): Use a better NOP break |
| 582 oill(r3, Operand::Zero()); | 582 oill(r3, Operand::Zero()); |
| 583 break; | 583 break; |
| 584 default: | 584 default: |
| 585 UNIMPLEMENTED(); | 585 UNIMPLEMENTED(); |
| 586 } | 586 } |
| 587 } | 587 } |
| 588 | 588 |
| 589 // RR format: <insn> R1,R2 | |
| 590 // +--------+----+----+ | |
| 591 // | OpCode | R1 | R2 | | |
| 592 // +--------+----+----+ | |
| 593 // 0 8 12 15 | |
| 594 #define RR_FORM_EMIT(name, op) \ | |
| 595 void Assembler::name(Register r1, Register r2) { rr_form(op, r1, r2); } | |
| 596 | |
| 597 void Assembler::rr_form(Opcode op, Register r1, Register r2) { | |
| 598 DCHECK(is_uint8(op)); | |
| 599 emit2bytes(op * B8 | r1.code() * B4 | r2.code()); | |
| 600 } | |
| 601 | |
| 602 void Assembler::rr_form(Opcode op, DoubleRegister r1, DoubleRegister r2) { | |
| 603 DCHECK(is_uint8(op)); | |
| 604 emit2bytes(op * B8 | r1.code() * B4 | r2.code()); | |
| 605 } | |
| 606 | |
| 607 // RR2 format: <insn> M1,R2 | |
| 608 // +--------+----+----+ | |
| 609 // | OpCode | M1 | R2 | | |
| 610 // +--------+----+----+ | |
| 611 // 0 8 12 15 | |
| 612 #define RR2_FORM_EMIT(name, op) \ | |
| 613 void Assembler::name(Condition m1, Register r2) { rr_form(op, m1, r2); } | |
| 614 | |
| 615 void Assembler::rr_form(Opcode op, Condition m1, Register r2) { | |
| 616 DCHECK(is_uint8(op)); | |
| 617 DCHECK(is_uint4(m1)); | |
| 618 emit2bytes(op * B8 | m1 * B4 | r2.code()); | |
| 619 } | |
| 620 | |
| 621 // RX format: <insn> R1,D2(X2,B2) | 589 // RX format: <insn> R1,D2(X2,B2) |
| 622 // +--------+----+----+----+-------------+ | 590 // +--------+----+----+----+-------------+ |
| 623 // | OpCode | R1 | X2 | B2 | D2 | | 591 // | OpCode | R1 | X2 | B2 | D2 | |
| 624 // +--------+----+----+----+-------------+ | 592 // +--------+----+----+----+-------------+ |
| 625 // 0 8 12 16 20 31 | 593 // 0 8 12 16 20 31 |
| 626 #define RX_FORM_EMIT(name, op) \ | 594 #define RX_FORM_EMIT(name, op) \ |
| 627 void Assembler::name(Register r, const MemOperand& opnd) { \ | 595 void Assembler::name(Register r, const MemOperand& opnd) { \ |
| 628 name(r, opnd.getIndexRegister(), opnd.getBaseRegister(), \ | 596 name(r, opnd.getIndexRegister(), opnd.getBaseRegister(), \ |
| 629 opnd.getDisplacement()); \ | 597 opnd.getDisplacement()); \ |
| 630 } \ | 598 } \ |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 715 DCHECK(is_uint16(op)); | 683 DCHECK(is_uint16(op)); |
| 716 DCHECK(is_int16(i2.imm_)); | 684 DCHECK(is_int16(i2.imm_)); |
| 717 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | | 685 uint64_t code = (static_cast<uint64_t>(op & 0xFF00)) * B32 | |
| 718 (static_cast<uint64_t>(r1.code())) * B36 | | 686 (static_cast<uint64_t>(r1.code())) * B36 | |
| 719 (static_cast<uint64_t>(r3.code())) * B32 | | 687 (static_cast<uint64_t>(r3.code())) * B32 | |
| 720 (static_cast<uint64_t>(i2.imm_ & 0xFFFF)) * B16 | | 688 (static_cast<uint64_t>(i2.imm_ & 0xFFFF)) * B16 | |
| 721 (static_cast<uint64_t>(op & 0x00FF)); | 689 (static_cast<uint64_t>(op & 0x00FF)); |
| 722 emit6bytes(code); | 690 emit6bytes(code); |
| 723 } | 691 } |
| 724 | 692 |
| 725 // RIL1 format: <insn> R1,I2 | |
| 726 // +--------+----+----+------------------------------------+ | |
| 727 // | OpCode | R1 |OpCd| I2 | | |
| 728 // +--------+----+----+------------------------------------+ | |
| 729 // 0 8 12 16 47 | |
| 730 #define RIL1_FORM_EMIT(name, op) \ | |
| 731 void Assembler::name(Register r, const Operand& i2) { ril_form(op, r, i2); } | |
| 732 | |
| 733 void Assembler::ril_form(Opcode op, Register r1, const Operand& i2) { | |
| 734 DCHECK(is_uint12(op)); | |
| 735 uint64_t code = (static_cast<uint64_t>(op & 0xFF0)) * B36 | | |
| 736 (static_cast<uint64_t>(r1.code())) * B36 | | |
| 737 (static_cast<uint64_t>(op & 0x00F)) * B32 | | |
| 738 (static_cast<uint64_t>(i2.imm_) & 0xFFFFFFFF); | |
| 739 emit6bytes(code); | |
| 740 } | |
| 741 | |
| 742 // RIL2 format: <insn> M1,I2 | |
| 743 // +--------+----+----+------------------------------------+ | |
| 744 // | OpCode | M1 |OpCd| I2 | | |
| 745 // +--------+----+----+------------------------------------+ | |
| 746 // 0 8 12 16 47 | |
| 747 #define RIL2_FORM_EMIT(name, op) \ | |
| 748 void Assembler::name(Condition m1, const Operand& i2) { \ | |
| 749 ril_form(op, m1, i2); \ | |
| 750 } | |
| 751 | |
| 752 void Assembler::ril_form(Opcode op, Condition m1, const Operand& i2) { | |
| 753 DCHECK(is_uint12(op)); | |
| 754 DCHECK(is_uint4(m1)); | |
| 755 uint64_t code = (static_cast<uint64_t>(op & 0xFF0)) * B36 | | |
| 756 (static_cast<uint64_t>(m1)) * B36 | | |
| 757 (static_cast<uint64_t>(op & 0x00F)) * B32 | | |
| 758 (static_cast<uint64_t>(i2.imm_ & 0xFFFFFFFF)); | |
| 759 emit6bytes(code); | |
| 760 } | |
| 761 | |
| 762 // RRE format: <insn> R1,R2 | |
| 763 // +------------------+--------+----+----+ | |
| 764 // | OpCode |////////| R1 | R2 | | |
| 765 // +------------------+--------+----+----+ | |
| 766 // 0 16 24 28 31 | |
| 767 #define RRE_FORM_EMIT(name, op) \ | |
| 768 void Assembler::name(Register r1, Register r2) { rre_form(op, r1, r2); } | |
| 769 | |
| 770 void Assembler::rre_form(Opcode op, Register r1, Register r2) { | |
| 771 DCHECK(is_uint16(op)); | |
| 772 emit4bytes(op << 16 | r1.code() * B4 | r2.code()); | |
| 773 } | |
| 774 | |
| 775 void Assembler::rre_form(Opcode op, DoubleRegister r1, DoubleRegister r2) { | |
| 776 DCHECK(is_uint16(op)); | |
| 777 emit4bytes(op << 16 | r1.code() * B4 | r2.code()); | |
| 778 } | |
| 779 | |
| 780 // RRD format: <insn> R1,R3, R2 | |
| 781 // +------------------+----+----+----+----+ | |
| 782 // | OpCode | R1 |////| R3 | R2 | | |
| 783 // +------------------+----+----+----+----+ | |
| 784 // 0 16 20 24 28 31 | |
| 785 #define RRD_FORM_EMIT(name, op) \ | |
| 786 void Assembler::name(Register r1, Register r3, Register r2) { \ | |
| 787 rrd_form(op, r1, r3, r2); \ | |
| 788 } | |
| 789 | |
| 790 void Assembler::rrd_form(Opcode op, Register r1, Register r3, Register r2) { | |
| 791 emit4bytes(op << 16 | r1.code() * B12 | r3.code() * B4 | r2.code()); | |
| 792 } | |
| 793 | |
| 794 // RS1 format: <insn> R1,R3,D2(B2) | 693 // RS1 format: <insn> R1,R3,D2(B2) |
| 795 // +--------+----+----+----+-------------+ | 694 // +--------+----+----+----+-------------+ |
| 796 // | OpCode | R1 | R3 | B2 | D2 | | 695 // | OpCode | R1 | R3 | B2 | D2 | |
| 797 // +--------+----+----+----+-------------+ | 696 // +--------+----+----+----+-------------+ |
| 798 // 0 8 12 16 20 31 | 697 // 0 8 12 16 20 31 |
| 799 #define RS1_FORM_EMIT(name, op) \ | 698 #define RS1_FORM_EMIT(name, op) \ |
| 800 void Assembler::name(Register r1, Register r3, Register b2, Disp d2) { \ | 699 void Assembler::name(Register r1, Register r3, Register b2, Disp d2) { \ |
| 801 rs_form(op, r1, r3, b2, d2); \ | 700 rs_form(op, r1, r3, b2, d2); \ |
| 802 } \ | 701 } \ |
| 803 void Assembler::name(Register r1, Register r3, const MemOperand& opnd) { \ | 702 void Assembler::name(Register r1, Register r3, const MemOperand& opnd) { \ |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1417 void Assembler::rrfe_form(Opcode op, Condition m3, Condition m4, Register r1, | 1316 void Assembler::rrfe_form(Opcode op, Condition m3, Condition m4, Register r1, |
| 1418 Register r2) { | 1317 Register r2) { |
| 1419 uint32_t code = op << 16 | m3 * B12 | m4 * B8 | r1.code() * B4 | r2.code(); | 1318 uint32_t code = op << 16 | m3 * B12 | m4 * B8 | r1.code() * B4 | r2.code(); |
| 1420 emit4bytes(code); | 1319 emit4bytes(code); |
| 1421 } | 1320 } |
| 1422 | 1321 |
| 1423 // end of S390 Instruction generation | 1322 // end of S390 Instruction generation |
| 1424 | 1323 |
| 1425 // start of S390 instruction | 1324 // start of S390 instruction |
| 1426 RX_FORM_EMIT(bc, BC) | 1325 RX_FORM_EMIT(bc, BC) |
| 1427 RR_FORM_EMIT(bctr, BCTR) | |
| 1428 RXE_FORM_EMIT(ceb, CEB) | 1326 RXE_FORM_EMIT(ceb, CEB) |
| 1429 SS1_FORM_EMIT(ed, ED) | 1327 SS1_FORM_EMIT(ed, ED) |
| 1430 RX_FORM_EMIT(ex, EX) | 1328 RX_FORM_EMIT(ex, EX) |
| 1431 RRE_FORM_EMIT(flogr, FLOGR) | |
| 1432 RRE_FORM_EMIT(lcgr, LCGR) | |
| 1433 RR_FORM_EMIT(lcr, LCR) | |
| 1434 RX_FORM_EMIT(le_z, LE) | 1329 RX_FORM_EMIT(le_z, LE) |
| 1435 RXY_FORM_EMIT(ley, LEY) | 1330 RXY_FORM_EMIT(ley, LEY) |
| 1436 RIL1_FORM_EMIT(llihf, LLIHF) | |
| 1437 RIL1_FORM_EMIT(llilf, LLILF) | |
| 1438 RRE_FORM_EMIT(lngr, LNGR) | |
| 1439 RR_FORM_EMIT(lnr, LNR) | |
| 1440 RRE_FORM_EMIT(lrvr, LRVR) | |
| 1441 RRE_FORM_EMIT(lrvgr, LRVGR) | |
| 1442 RXY_FORM_EMIT(lrv, LRV) | 1331 RXY_FORM_EMIT(lrv, LRV) |
| 1443 RXY_FORM_EMIT(lrvg, LRVG) | 1332 RXY_FORM_EMIT(lrvg, LRVG) |
| 1444 RXY_FORM_EMIT(lrvh, LRVH) | 1333 RXY_FORM_EMIT(lrvh, LRVH) |
| 1445 SS1_FORM_EMIT(mvn, MVN) | 1334 SS1_FORM_EMIT(mvn, MVN) |
| 1446 SS1_FORM_EMIT(nc, NC) | 1335 SS1_FORM_EMIT(nc, NC) |
| 1447 SI_FORM_EMIT(ni, NI) | 1336 SI_FORM_EMIT(ni, NI) |
| 1448 RIL1_FORM_EMIT(nihf, NIHF) | |
| 1449 RIL1_FORM_EMIT(nilf, NILF) | |
| 1450 RI1_FORM_EMIT(nilh, NILH) | 1337 RI1_FORM_EMIT(nilh, NILH) |
| 1451 RI1_FORM_EMIT(nill, NILL) | 1338 RI1_FORM_EMIT(nill, NILL) |
| 1452 RIL1_FORM_EMIT(oihf, OIHF) | |
| 1453 RIL1_FORM_EMIT(oilf, OILF) | |
| 1454 RI1_FORM_EMIT(oill, OILL) | 1339 RI1_FORM_EMIT(oill, OILL) |
| 1455 RRE_FORM_EMIT(popcnt, POPCNT_Z) | |
| 1456 RIL1_FORM_EMIT(slfi, SLFI) | |
| 1457 RXY_FORM_EMIT(slgf, SLGF) | 1340 RXY_FORM_EMIT(slgf, SLGF) |
| 1458 RIL1_FORM_EMIT(slgfi, SLGFI) | |
| 1459 RXY_FORM_EMIT(strvh, STRVH) | 1341 RXY_FORM_EMIT(strvh, STRVH) |
| 1460 RXY_FORM_EMIT(strv, STRV) | 1342 RXY_FORM_EMIT(strv, STRV) |
| 1461 RXY_FORM_EMIT(strvg, STRVG) | 1343 RXY_FORM_EMIT(strvg, STRVG) |
| 1462 RI1_FORM_EMIT(tmll, TMLL) | 1344 RI1_FORM_EMIT(tmll, TMLL) |
| 1463 SS1_FORM_EMIT(tr, TR) | 1345 SS1_FORM_EMIT(tr, TR) |
| 1464 S_FORM_EMIT(ts, TS) | 1346 S_FORM_EMIT(ts, TS) |
| 1465 RIL1_FORM_EMIT(xihf, XIHF) | |
| 1466 RIL1_FORM_EMIT(xilf, XILF) | |
| 1467 | 1347 |
| 1468 // ------------------------- | 1348 // ------------------------- |
| 1469 // Load Address Instructions | 1349 // Load Address Instructions |
| 1470 // ------------------------- | 1350 // ------------------------- |
| 1471 // Load Address Register-Storage | 1351 // Load Address Register-Storage |
| 1472 void Assembler::la(Register r1, const MemOperand& opnd) { | 1352 void Assembler::la(Register r1, const MemOperand& opnd) { |
| 1473 rx_form(LA, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1353 rx_form(LA, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1474 } | 1354 } |
| 1475 | 1355 |
| 1476 // Load Address Register-Storage | 1356 // Load Address Register-Storage |
| 1477 void Assembler::lay(Register r1, const MemOperand& opnd) { | 1357 void Assembler::lay(Register r1, const MemOperand& opnd) { |
| 1478 rxy_form(LAY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1358 rxy_form(LAY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1479 } | 1359 } |
| 1480 | 1360 |
| 1481 // Load Address Relative Long | 1361 // Load Address Relative Long |
| 1482 void Assembler::larl(Register r1, const Operand& opnd) { | |
| 1483 ril_form(LARL, r1, opnd); | |
| 1484 } | |
| 1485 | |
| 1486 // Load Address Relative Long | |
| 1487 void Assembler::larl(Register r1, Label* l) { | 1362 void Assembler::larl(Register r1, Label* l) { |
| 1488 larl(r1, Operand(branch_offset(l))); | 1363 larl(r1, Operand(branch_offset(l))); |
| 1489 } | 1364 } |
| 1490 | 1365 |
| 1491 // ----------------- | 1366 // ----------------- |
| 1492 // Load Instructions | 1367 // Load Instructions |
| 1493 // ----------------- | 1368 // ----------------- |
| 1494 // Load Byte Register-Storage (32<-8) | 1369 // Load Byte Register-Storage (32<-8) |
| 1495 void Assembler::lb(Register r, const MemOperand& src) { | 1370 void Assembler::lb(Register r, const MemOperand& src) { |
| 1496 rxy_form(LB, r, src.rx(), src.rb(), src.offset()); | 1371 rxy_form(LB, r, src.rx(), src.rb(), src.offset()); |
| 1497 } | 1372 } |
| 1498 | 1373 |
| 1499 // Load Byte Register-Register (32<-8) | |
| 1500 void Assembler::lbr(Register r1, Register r2) { rre_form(LBR, r1, r2); } | |
| 1501 | |
| 1502 // Load Byte Register-Storage (64<-8) | 1374 // Load Byte Register-Storage (64<-8) |
| 1503 void Assembler::lgb(Register r, const MemOperand& src) { | 1375 void Assembler::lgb(Register r, const MemOperand& src) { |
| 1504 rxy_form(LGB, r, src.rx(), src.rb(), src.offset()); | 1376 rxy_form(LGB, r, src.rx(), src.rb(), src.offset()); |
| 1505 } | 1377 } |
| 1506 | 1378 |
| 1507 // Load Byte Register-Register (64<-8) | |
| 1508 void Assembler::lgbr(Register r1, Register r2) { rre_form(LGBR, r1, r2); } | |
| 1509 | |
| 1510 // Load Halfword Register-Storage (32<-16) | 1379 // Load Halfword Register-Storage (32<-16) |
| 1511 void Assembler::lh(Register r, const MemOperand& src) { | 1380 void Assembler::lh(Register r, const MemOperand& src) { |
| 1512 rx_form(LH, r, src.rx(), src.rb(), src.offset()); | 1381 rx_form(LH, r, src.rx(), src.rb(), src.offset()); |
| 1513 } | 1382 } |
| 1514 | 1383 |
| 1515 // Load Halfword Register-Storage (32<-16) | 1384 // Load Halfword Register-Storage (32<-16) |
| 1516 void Assembler::lhy(Register r, const MemOperand& src) { | 1385 void Assembler::lhy(Register r, const MemOperand& src) { |
| 1517 rxy_form(LHY, r, src.rx(), src.rb(), src.offset()); | 1386 rxy_form(LHY, r, src.rx(), src.rb(), src.offset()); |
| 1518 } | 1387 } |
| 1519 | 1388 |
| 1520 // Load Halfword Register-Register (32<-16) | |
| 1521 void Assembler::lhr(Register r1, Register r2) { rre_form(LHR, r1, r2); } | |
| 1522 | |
| 1523 // Load Halfword Register-Storage (64<-16) | 1389 // Load Halfword Register-Storage (64<-16) |
| 1524 void Assembler::lgh(Register r, const MemOperand& src) { | 1390 void Assembler::lgh(Register r, const MemOperand& src) { |
| 1525 rxy_form(LGH, r, src.rx(), src.rb(), src.offset()); | 1391 rxy_form(LGH, r, src.rx(), src.rb(), src.offset()); |
| 1526 } | 1392 } |
| 1527 | 1393 |
| 1528 // Load Halfword Register-Register (64<-16) | |
| 1529 void Assembler::lghr(Register r1, Register r2) { rre_form(LGHR, r1, r2); } | |
| 1530 | |
| 1531 // Load Register-Storage (32) | 1394 // Load Register-Storage (32) |
| 1532 void Assembler::l(Register r, const MemOperand& src) { | 1395 void Assembler::l(Register r, const MemOperand& src) { |
| 1533 rx_form(L, r, src.rx(), src.rb(), src.offset()); | 1396 rx_form(L, r, src.rx(), src.rb(), src.offset()); |
| 1534 } | 1397 } |
| 1535 | 1398 |
| 1536 // Load Register-Storage (32) | 1399 // Load Register-Storage (32) |
| 1537 void Assembler::ly(Register r, const MemOperand& src) { | 1400 void Assembler::ly(Register r, const MemOperand& src) { |
| 1538 rxy_form(LY, r, src.rx(), src.rb(), src.offset()); | 1401 rxy_form(LY, r, src.rx(), src.rb(), src.offset()); |
| 1539 } | 1402 } |
| 1540 | 1403 |
| 1541 // Load Register-Register (32) | |
| 1542 void Assembler::lr(Register r1, Register r2) { rr_form(LR, r1, r2); } | |
| 1543 | |
| 1544 // Load Register-Storage (64) | 1404 // Load Register-Storage (64) |
| 1545 void Assembler::lg(Register r, const MemOperand& src) { | 1405 void Assembler::lg(Register r, const MemOperand& src) { |
| 1546 rxy_form(LG, r, src.rx(), src.rb(), src.offset()); | 1406 rxy_form(LG, r, src.rx(), src.rb(), src.offset()); |
| 1547 } | 1407 } |
| 1548 | 1408 |
| 1549 // Load Register-Register (64) | |
| 1550 void Assembler::lgr(Register r1, Register r2) { rre_form(LGR, r1, r2); } | |
| 1551 | |
| 1552 // Load Register-Storage (64<-32) | 1409 // Load Register-Storage (64<-32) |
| 1553 void Assembler::lgf(Register r, const MemOperand& src) { | 1410 void Assembler::lgf(Register r, const MemOperand& src) { |
| 1554 rxy_form(LGF, r, src.rx(), src.rb(), src.offset()); | 1411 rxy_form(LGF, r, src.rx(), src.rb(), src.offset()); |
| 1555 } | 1412 } |
| 1556 | 1413 |
| 1557 // Load Sign Extended Register-Register (64<-32) | |
| 1558 void Assembler::lgfr(Register r1, Register r2) { rre_form(LGFR, r1, r2); } | |
| 1559 | |
| 1560 // Load Halfword Immediate (32) | 1414 // Load Halfword Immediate (32) |
| 1561 void Assembler::lhi(Register r, const Operand& imm) { ri_form(LHI, r, imm); } | 1415 void Assembler::lhi(Register r, const Operand& imm) { ri_form(LHI, r, imm); } |
| 1562 | 1416 |
| 1563 // Load Halfword Immediate (64) | 1417 // Load Halfword Immediate (64) |
| 1564 void Assembler::lghi(Register r, const Operand& imm) { ri_form(LGHI, r, imm); } | 1418 void Assembler::lghi(Register r, const Operand& imm) { ri_form(LGHI, r, imm); } |
| 1565 | 1419 |
| 1566 // -------------------------- | 1420 // -------------------------- |
| 1567 // Load And Test Instructions | 1421 // Load And Test Instructions |
| 1568 // -------------------------- | 1422 // -------------------------- |
| 1569 // Load and Test Register-Storage (32) | 1423 // Load and Test Register-Storage (32) |
| 1570 void Assembler::lt_z(Register r1, const MemOperand& opnd) { | 1424 void Assembler::lt_z(Register r1, const MemOperand& opnd) { |
| 1571 rxy_form(LT, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1425 rxy_form(LT, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1572 } | 1426 } |
| 1573 | 1427 |
| 1574 // Load and Test Register-Storage (64) | 1428 // Load and Test Register-Storage (64) |
| 1575 void Assembler::ltg(Register r1, const MemOperand& opnd) { | 1429 void Assembler::ltg(Register r1, const MemOperand& opnd) { |
| 1576 rxy_form(LTG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1430 rxy_form(LTG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1577 } | 1431 } |
| 1578 | 1432 |
| 1579 // Load and Test Register-Register (32) | |
| 1580 void Assembler::ltr(Register r1, Register r2) { rr_form(LTR, r1, r2); } | |
| 1581 | |
| 1582 // Load and Test Register-Register (64) | |
| 1583 void Assembler::ltgr(Register r1, Register r2) { rre_form(LTGR, r1, r2); } | |
| 1584 | |
| 1585 // Load and Test Register-Register (64<-32) | |
| 1586 void Assembler::ltgfr(Register r1, Register r2) { rre_form(LTGFR, r1, r2); } | |
| 1587 | |
| 1588 // ------------------------- | 1433 // ------------------------- |
| 1589 // Load Logical Instructions | 1434 // Load Logical Instructions |
| 1590 // ------------------------- | 1435 // ------------------------- |
| 1591 // Load Logical Character (32) - loads a byte and zero ext. | 1436 // Load Logical Character (32) - loads a byte and zero ext. |
| 1592 void Assembler::llc(Register r1, const MemOperand& opnd) { | 1437 void Assembler::llc(Register r1, const MemOperand& opnd) { |
| 1593 rxy_form(LLC, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1438 rxy_form(LLC, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1594 } | 1439 } |
| 1595 | 1440 |
| 1596 // Load Logical Character (64) - loads a byte and zero ext. | 1441 // Load Logical Character (64) - loads a byte and zero ext. |
| 1597 void Assembler::llgc(Register r1, const MemOperand& opnd) { | 1442 void Assembler::llgc(Register r1, const MemOperand& opnd) { |
| 1598 rxy_form(LLGC, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1443 rxy_form(LLGC, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1599 } | 1444 } |
| 1600 | 1445 |
| 1601 // Load Logical halfword Register-Storage (64<-32) | 1446 // Load Logical halfword Register-Storage (64<-32) |
| 1602 void Assembler::llgf(Register r1, const MemOperand& opnd) { | 1447 void Assembler::llgf(Register r1, const MemOperand& opnd) { |
| 1603 rxy_form(LLGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1448 rxy_form(LLGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1604 } | 1449 } |
| 1605 | 1450 |
| 1606 // Load Logical Register-Register (64<-32) | |
| 1607 void Assembler::llgfr(Register r1, Register r2) { rre_form(LLGFR, r1, r2); } | |
| 1608 | |
| 1609 // Load Logical halfword Register-Storage (32) | 1451 // Load Logical halfword Register-Storage (32) |
| 1610 void Assembler::llh(Register r1, const MemOperand& opnd) { | 1452 void Assembler::llh(Register r1, const MemOperand& opnd) { |
| 1611 rxy_form(LLH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1453 rxy_form(LLH, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1612 } | 1454 } |
| 1613 | 1455 |
| 1614 // Load Logical halfword Register-Storage (64) | 1456 // Load Logical halfword Register-Storage (64) |
| 1615 void Assembler::llgh(Register r1, const MemOperand& opnd) { | 1457 void Assembler::llgh(Register r1, const MemOperand& opnd) { |
| 1616 rxy_form(LLGH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1458 rxy_form(LLGH, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1617 } | 1459 } |
| 1618 | 1460 |
| 1619 // Load Logical halfword Register-Register (32) | |
| 1620 void Assembler::llhr(Register r1, Register r2) { rre_form(LLHR, r1, r2); } | |
| 1621 | |
| 1622 // Load Logical halfword Register-Register (64) | |
| 1623 void Assembler::llghr(Register r1, Register r2) { rre_form(LLGHR, r1, r2); } | |
| 1624 | |
| 1625 // Load On Condition R-R (32) | 1461 // Load On Condition R-R (32) |
| 1626 void Assembler::locr(Condition m3, Register r1, Register r2) { | 1462 void Assembler::locr(Condition m3, Register r1, Register r2) { |
| 1627 rrf2_form(LOCR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); | 1463 rrf2_form(LOCR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); |
| 1628 } | 1464 } |
| 1629 | 1465 |
| 1630 // Load On Condition R-R (64) | 1466 // Load On Condition R-R (64) |
| 1631 void Assembler::locgr(Condition m3, Register r1, Register r2) { | 1467 void Assembler::locgr(Condition m3, Register r1, Register r2) { |
| 1632 rrf2_form(LOCGR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); | 1468 rrf2_form(LOCGR << 16 | m3 * B12 | r1.code() * B4 | r2.code()); |
| 1633 } | 1469 } |
| 1634 | 1470 |
| 1635 // Load On Condition R-M (32) | 1471 // Load On Condition R-M (32) |
| 1636 void Assembler::loc(Condition m3, Register r1, const MemOperand& src) { | 1472 void Assembler::loc(Condition m3, Register r1, const MemOperand& src) { |
| 1637 rxy_form(LOC, r1, m3, src.rb(), src.offset()); | 1473 rxy_form(LOC, r1, m3, src.rb(), src.offset()); |
| 1638 } | 1474 } |
| 1639 | 1475 |
| 1640 // Load On Condition R-M (64) | 1476 // Load On Condition R-M (64) |
| 1641 void Assembler::locg(Condition m3, Register r1, const MemOperand& src) { | 1477 void Assembler::locg(Condition m3, Register r1, const MemOperand& src) { |
| 1642 rxy_form(LOCG, r1, m3, src.rb(), src.offset()); | 1478 rxy_form(LOCG, r1, m3, src.rb(), src.offset()); |
| 1643 } | 1479 } |
| 1644 | 1480 |
| 1645 // ------------------- | 1481 // ------------------- |
| 1646 // Branch Instructions | 1482 // Branch Instructions |
| 1647 // ------------------- | 1483 // ------------------- |
| 1648 // Branch and Save | |
| 1649 void Assembler::basr(Register r1, Register r2) { rr_form(BASR, r1, r2); } | |
| 1650 | |
| 1651 // Indirect Conditional Branch via register | |
| 1652 void Assembler::bcr(Condition m, Register target) { rr_form(BCR, m, target); } | |
| 1653 | 1484 |
| 1654 // Branch on Count (32) | 1485 // Branch on Count (32) |
| 1655 void Assembler::bct(Register r, const MemOperand& opnd) { | 1486 void Assembler::bct(Register r, const MemOperand& opnd) { |
| 1656 rx_form(BCT, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1487 rx_form(BCT, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1657 } | 1488 } |
| 1658 | 1489 |
| 1659 // Branch on Count (64) | 1490 // Branch on Count (64) |
| 1660 void Assembler::bctg(Register r, const MemOperand& opnd) { | 1491 void Assembler::bctg(Register r, const MemOperand& opnd) { |
| 1661 rxy_form(BCTG, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1492 rxy_form(BCTG, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1662 } | 1493 } |
| 1663 | 1494 |
| 1664 // Branch Relative and Save (32) | 1495 // Branch Relative and Save (32) |
| 1665 void Assembler::bras(Register r, const Operand& opnd) { | 1496 void Assembler::bras(Register r, const Operand& opnd) { |
| 1666 ri_form(BRAS, r, opnd); | 1497 ri_form(BRAS, r, opnd); |
| 1667 } | 1498 } |
| 1668 | 1499 |
| 1669 // Branch Relative and Save (64) | |
| 1670 void Assembler::brasl(Register r, const Operand& opnd) { | |
| 1671 ril_form(BRASL, r, opnd); | |
| 1672 } | |
| 1673 | |
| 1674 // Branch relative on Condition (32) | 1500 // Branch relative on Condition (32) |
| 1675 void Assembler::brc(Condition c, const Operand& opnd) { | 1501 void Assembler::brc(Condition c, const Operand& opnd) { ri_form(BRC, c, opnd); } |
| 1676 // BRC actually encodes # of halfwords, so divide by 2. | |
| 1677 int16_t numHalfwords = static_cast<int16_t>(opnd.immediate()) / 2; | |
| 1678 Operand halfwordOp = Operand(numHalfwords); | |
| 1679 halfwordOp.setBits(16); | |
| 1680 ri_form(BRC, c, halfwordOp); | |
| 1681 } | |
| 1682 | |
| 1683 // Branch Relative on Condition (64) | |
| 1684 void Assembler::brcl(Condition c, const Operand& opnd, bool isCodeTarget) { | |
| 1685 Operand halfwordOp = opnd; | |
| 1686 // Operand for code targets will be index to code_targets_ | |
| 1687 if (!isCodeTarget) { | |
| 1688 // BRCL actually encodes # of halfwords, so divide by 2. | |
| 1689 int32_t numHalfwords = static_cast<int32_t>(opnd.immediate()) / 2; | |
| 1690 halfwordOp = Operand(numHalfwords); | |
| 1691 } | |
| 1692 ril_form(BRCL, c, halfwordOp); | |
| 1693 } | |
| 1694 | 1502 |
| 1695 // Branch On Count (32) | 1503 // Branch On Count (32) |
| 1696 void Assembler::brct(Register r1, const Operand& imm) { | 1504 void Assembler::brct(Register r1, const Operand& imm) { |
| 1697 // BRCT encodes # of halfwords, so divide by 2. | 1505 // BRCT encodes # of halfwords, so divide by 2. |
| 1698 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; | 1506 int16_t numHalfwords = static_cast<int16_t>(imm.immediate()) / 2; |
| 1699 Operand halfwordOp = Operand(numHalfwords); | 1507 Operand halfwordOp = Operand(numHalfwords); |
| 1700 halfwordOp.setBits(16); | 1508 halfwordOp.setBits(16); |
| 1701 ri_form(BRCT, r1, halfwordOp); | 1509 ri_form(BRCT, r1, halfwordOp); |
| 1702 } | 1510 } |
| 1703 | 1511 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1716 // Compare Register-Storage (32) | 1524 // Compare Register-Storage (32) |
| 1717 void Assembler::c(Register r, const MemOperand& opnd) { | 1525 void Assembler::c(Register r, const MemOperand& opnd) { |
| 1718 rx_form(C, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1526 rx_form(C, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1719 } | 1527 } |
| 1720 | 1528 |
| 1721 // Compare Register-Storage (32) | 1529 // Compare Register-Storage (32) |
| 1722 void Assembler::cy(Register r, const MemOperand& opnd) { | 1530 void Assembler::cy(Register r, const MemOperand& opnd) { |
| 1723 rxy_form(CY, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1531 rxy_form(CY, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1724 } | 1532 } |
| 1725 | 1533 |
| 1726 // Compare Register-Register (32) | |
| 1727 void Assembler::cr_z(Register r1, Register r2) { rr_form(CR, r1, r2); } | |
| 1728 | |
| 1729 // Compare Register-Storage (64) | 1534 // Compare Register-Storage (64) |
| 1730 void Assembler::cg(Register r, const MemOperand& opnd) { | 1535 void Assembler::cg(Register r, const MemOperand& opnd) { |
| 1731 rxy_form(CG, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1536 rxy_form(CG, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1732 } | 1537 } |
| 1733 | 1538 |
| 1734 // Compare Register-Register (64) | |
| 1735 void Assembler::cgr(Register r1, Register r2) { rre_form(CGR, r1, r2); } | |
| 1736 | |
| 1737 // Compare Halfword Register-Storage (32) | 1539 // Compare Halfword Register-Storage (32) |
| 1738 void Assembler::ch(Register r, const MemOperand& opnd) { | 1540 void Assembler::ch(Register r, const MemOperand& opnd) { |
| 1739 rx_form(CH, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1541 rx_form(CH, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1740 } | 1542 } |
| 1741 | 1543 |
| 1742 // Compare Halfword Register-Storage (32) | 1544 // Compare Halfword Register-Storage (32) |
| 1743 void Assembler::chy(Register r, const MemOperand& opnd) { | 1545 void Assembler::chy(Register r, const MemOperand& opnd) { |
| 1744 rxy_form(CHY, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1546 rxy_form(CHY, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1745 } | 1547 } |
| 1746 | 1548 |
| 1747 // Compare Halfword Immediate (32) | 1549 // Compare Halfword Immediate (32) |
| 1748 void Assembler::chi(Register r, const Operand& opnd) { ri_form(CHI, r, opnd); } | 1550 void Assembler::chi(Register r, const Operand& opnd) { ri_form(CHI, r, opnd); } |
| 1749 | 1551 |
| 1750 // Compare Halfword Immediate (64) | 1552 // Compare Halfword Immediate (64) |
| 1751 void Assembler::cghi(Register r, const Operand& opnd) { | 1553 void Assembler::cghi(Register r, const Operand& opnd) { |
| 1752 ri_form(CGHI, r, opnd); | 1554 ri_form(CGHI, r, opnd); |
| 1753 } | 1555 } |
| 1754 | 1556 |
| 1755 // Compare Immediate (32) | |
| 1756 void Assembler::cfi(Register r, const Operand& opnd) { ril_form(CFI, r, opnd); } | |
| 1757 | |
| 1758 // Compare Immediate (64) | |
| 1759 void Assembler::cgfi(Register r, const Operand& opnd) { | |
| 1760 ril_form(CGFI, r, opnd); | |
| 1761 } | |
| 1762 | |
| 1763 // ---------------------------- | 1557 // ---------------------------- |
| 1764 // Compare Logical Instructions | 1558 // Compare Logical Instructions |
| 1765 // ---------------------------- | 1559 // ---------------------------- |
| 1766 // Compare Logical Register-Storage (32) | 1560 // Compare Logical Register-Storage (32) |
| 1767 void Assembler::cl(Register r, const MemOperand& opnd) { | 1561 void Assembler::cl(Register r, const MemOperand& opnd) { |
| 1768 rx_form(CL, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1562 rx_form(CL, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1769 } | 1563 } |
| 1770 | 1564 |
| 1771 // Compare Logical Register-Storage (32) | 1565 // Compare Logical Register-Storage (32) |
| 1772 void Assembler::cly(Register r, const MemOperand& opnd) { | 1566 void Assembler::cly(Register r, const MemOperand& opnd) { |
| 1773 rxy_form(CLY, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1567 rxy_form(CLY, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1774 } | 1568 } |
| 1775 | 1569 |
| 1776 // Compare Logical Register-Register (32) | |
| 1777 void Assembler::clr(Register r1, Register r2) { rr_form(CLR, r1, r2); } | |
| 1778 | |
| 1779 // Compare Logical Register-Storage (64) | 1570 // Compare Logical Register-Storage (64) |
| 1780 void Assembler::clg(Register r, const MemOperand& opnd) { | 1571 void Assembler::clg(Register r, const MemOperand& opnd) { |
| 1781 rxy_form(CLG, r, opnd.rx(), opnd.rb(), opnd.offset()); | 1572 rxy_form(CLG, r, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1782 } | 1573 } |
| 1783 | 1574 |
| 1784 // Compare Logical Register-Register (64) | |
| 1785 void Assembler::clgr(Register r1, Register r2) { rre_form(CLGR, r1, r2); } | |
| 1786 | |
| 1787 // Compare Logical Immediate (32) | |
| 1788 void Assembler::clfi(Register r1, const Operand& i2) { ril_form(CLFI, r1, i2); } | |
| 1789 | |
| 1790 // Compare Logical Immediate (64<32) | |
| 1791 void Assembler::clgfi(Register r1, const Operand& i2) { | |
| 1792 ril_form(CLGFI, r1, i2); | |
| 1793 } | |
| 1794 | |
| 1795 // Compare Immediate (Mem - Imm) (8) | 1575 // Compare Immediate (Mem - Imm) (8) |
| 1796 void Assembler::cli(const MemOperand& opnd, const Operand& imm) { | 1576 void Assembler::cli(const MemOperand& opnd, const Operand& imm) { |
| 1797 si_form(CLI, imm, opnd.rb(), opnd.offset()); | 1577 si_form(CLI, imm, opnd.rb(), opnd.offset()); |
| 1798 } | 1578 } |
| 1799 | 1579 |
| 1800 // Compare Immediate (Mem - Imm) (8) | 1580 // Compare Immediate (Mem - Imm) (8) |
| 1801 void Assembler::cliy(const MemOperand& opnd, const Operand& imm) { | 1581 void Assembler::cliy(const MemOperand& opnd, const Operand& imm) { |
| 1802 siy_form(CLIY, imm, opnd.rb(), opnd.offset()); | 1582 siy_form(CLIY, imm, opnd.rb(), opnd.offset()); |
| 1803 } | 1583 } |
| 1804 | 1584 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1865 // Add Register-Storage (32) | 1645 // Add Register-Storage (32) |
| 1866 void Assembler::a(Register r1, const MemOperand& opnd) { | 1646 void Assembler::a(Register r1, const MemOperand& opnd) { |
| 1867 rx_form(A, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1647 rx_form(A, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1868 } | 1648 } |
| 1869 | 1649 |
| 1870 // Add Register-Storage (32) | 1650 // Add Register-Storage (32) |
| 1871 void Assembler::ay(Register r1, const MemOperand& opnd) { | 1651 void Assembler::ay(Register r1, const MemOperand& opnd) { |
| 1872 rxy_form(AY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1652 rxy_form(AY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1873 } | 1653 } |
| 1874 | 1654 |
| 1875 // Add Immediate (32) | |
| 1876 void Assembler::afi(Register r1, const Operand& opnd) { | |
| 1877 ril_form(AFI, r1, opnd); | |
| 1878 } | |
| 1879 | |
| 1880 // Add Halfword Register-Storage (32) | 1655 // Add Halfword Register-Storage (32) |
| 1881 void Assembler::ah(Register r1, const MemOperand& opnd) { | 1656 void Assembler::ah(Register r1, const MemOperand& opnd) { |
| 1882 rx_form(AH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1657 rx_form(AH, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1883 } | 1658 } |
| 1884 | 1659 |
| 1885 // Add Halfword Register-Storage (32) | 1660 // Add Halfword Register-Storage (32) |
| 1886 void Assembler::ahy(Register r1, const MemOperand& opnd) { | 1661 void Assembler::ahy(Register r1, const MemOperand& opnd) { |
| 1887 rxy_form(AHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1662 rxy_form(AHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1888 } | 1663 } |
| 1889 | 1664 |
| 1890 // Add Halfword Immediate (32) | 1665 // Add Halfword Immediate (32) |
| 1891 void Assembler::ahi(Register r1, const Operand& i2) { ri_form(AHI, r1, i2); } | 1666 void Assembler::ahi(Register r1, const Operand& i2) { ri_form(AHI, r1, i2); } |
| 1892 | 1667 |
| 1893 // Add Halfword Immediate (32) | 1668 // Add Halfword Immediate (32) |
| 1894 void Assembler::ahik(Register r1, Register r3, const Operand& i2) { | 1669 void Assembler::ahik(Register r1, Register r3, const Operand& i2) { |
| 1895 rie_form(AHIK, r1, r3, i2); | 1670 rie_form(AHIK, r1, r3, i2); |
| 1896 } | 1671 } |
| 1897 | 1672 |
| 1898 // Add Register (32) | |
| 1899 void Assembler::ar(Register r1, Register r2) { rr_form(AR, r1, r2); } | |
| 1900 | |
| 1901 // Add Register-Register-Register (32) | 1673 // Add Register-Register-Register (32) |
| 1902 void Assembler::ark(Register r1, Register r2, Register r3) { | 1674 void Assembler::ark(Register r1, Register r2, Register r3) { |
| 1903 rrf1_form(ARK, r1, r2, r3); | 1675 rrf1_form(ARK, r1, r2, r3); |
| 1904 } | 1676 } |
| 1905 | 1677 |
| 1906 // Add Storage-Imm (32) | 1678 // Add Storage-Imm (32) |
| 1907 void Assembler::asi(const MemOperand& opnd, const Operand& imm) { | 1679 void Assembler::asi(const MemOperand& opnd, const Operand& imm) { |
| 1908 DCHECK(is_int8(imm.imm_)); | 1680 DCHECK(is_int8(imm.imm_)); |
| 1909 DCHECK(is_int20(opnd.offset())); | 1681 DCHECK(is_int20(opnd.offset())); |
| 1910 siy_form(ASI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); | 1682 siy_form(ASI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); |
| 1911 } | 1683 } |
| 1912 | 1684 |
| 1913 // ----------------------- | 1685 // ----------------------- |
| 1914 // 64-bit Add Instructions | 1686 // 64-bit Add Instructions |
| 1915 // ----------------------- | 1687 // ----------------------- |
| 1916 // Add Register-Storage (64) | 1688 // Add Register-Storage (64) |
| 1917 void Assembler::ag(Register r1, const MemOperand& opnd) { | 1689 void Assembler::ag(Register r1, const MemOperand& opnd) { |
| 1918 rxy_form(AG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1690 rxy_form(AG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1919 } | 1691 } |
| 1920 | 1692 |
| 1921 // Add Register-Storage (64<-32) | 1693 // Add Register-Storage (64<-32) |
| 1922 void Assembler::agf(Register r1, const MemOperand& opnd) { | 1694 void Assembler::agf(Register r1, const MemOperand& opnd) { |
| 1923 rxy_form(AGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1695 rxy_form(AGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1924 } | 1696 } |
| 1925 | 1697 |
| 1926 // Add Immediate (64) | |
| 1927 void Assembler::agfi(Register r1, const Operand& opnd) { | |
| 1928 ril_form(AGFI, r1, opnd); | |
| 1929 } | |
| 1930 | |
| 1931 // Add Register-Register (64<-32) | |
| 1932 void Assembler::agfr(Register r1, Register r2) { rre_form(AGFR, r1, r2); } | |
| 1933 | |
| 1934 // Add Halfword Immediate (64) | 1698 // Add Halfword Immediate (64) |
| 1935 void Assembler::aghi(Register r1, const Operand& i2) { ri_form(AGHI, r1, i2); } | 1699 void Assembler::aghi(Register r1, const Operand& i2) { ri_form(AGHI, r1, i2); } |
| 1936 | 1700 |
| 1937 // Add Halfword Immediate (64) | 1701 // Add Halfword Immediate (64) |
| 1938 void Assembler::aghik(Register r1, Register r3, const Operand& i2) { | 1702 void Assembler::aghik(Register r1, Register r3, const Operand& i2) { |
| 1939 rie_form(AGHIK, r1, r3, i2); | 1703 rie_form(AGHIK, r1, r3, i2); |
| 1940 } | 1704 } |
| 1941 | 1705 |
| 1942 // Add Register (64) | |
| 1943 void Assembler::agr(Register r1, Register r2) { rre_form(AGR, r1, r2); } | |
| 1944 | |
| 1945 // Add Register-Register-Register (64) | 1706 // Add Register-Register-Register (64) |
| 1946 void Assembler::agrk(Register r1, Register r2, Register r3) { | 1707 void Assembler::agrk(Register r1, Register r2, Register r3) { |
| 1947 rrf1_form(AGRK, r1, r2, r3); | 1708 rrf1_form(AGRK, r1, r2, r3); |
| 1948 } | 1709 } |
| 1949 | 1710 |
| 1950 // Add Storage-Imm (64) | 1711 // Add Storage-Imm (64) |
| 1951 void Assembler::agsi(const MemOperand& opnd, const Operand& imm) { | 1712 void Assembler::agsi(const MemOperand& opnd, const Operand& imm) { |
| 1952 DCHECK(is_int8(imm.imm_)); | 1713 DCHECK(is_int8(imm.imm_)); |
| 1953 DCHECK(is_int20(opnd.offset())); | 1714 DCHECK(is_int20(opnd.offset())); |
| 1954 siy_form(AGSI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); | 1715 siy_form(AGSI, Operand(0xff & imm.imm_), opnd.rb(), 0xfffff & opnd.offset()); |
| 1955 } | 1716 } |
| 1956 | 1717 |
| 1957 // ------------------------------- | 1718 // ------------------------------- |
| 1958 // 32-bit Add Logical Instructions | 1719 // 32-bit Add Logical Instructions |
| 1959 // ------------------------------- | 1720 // ------------------------------- |
| 1960 // Add Logical Register-Storage (32) | 1721 // Add Logical Register-Storage (32) |
| 1961 void Assembler::al_z(Register r1, const MemOperand& opnd) { | 1722 void Assembler::al_z(Register r1, const MemOperand& opnd) { |
| 1962 rx_form(AL, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1723 rx_form(AL, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1963 } | 1724 } |
| 1964 | 1725 |
| 1965 // Add Logical Register-Storage (32) | 1726 // Add Logical Register-Storage (32) |
| 1966 void Assembler::aly(Register r1, const MemOperand& opnd) { | 1727 void Assembler::aly(Register r1, const MemOperand& opnd) { |
| 1967 rxy_form(ALY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1728 rxy_form(ALY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1968 } | 1729 } |
| 1969 | 1730 |
| 1970 // Add Logical Immediate (32) | |
| 1971 void Assembler::alfi(Register r1, const Operand& opnd) { | |
| 1972 ril_form(ALFI, r1, opnd); | |
| 1973 } | |
| 1974 | |
| 1975 // Add Logical Register-Register (32) | |
| 1976 void Assembler::alr(Register r1, Register r2) { rr_form(ALR, r1, r2); } | |
| 1977 | |
| 1978 // Add Logical With Carry Register-Register (32) | |
| 1979 void Assembler::alcr(Register r1, Register r2) { rre_form(ALCR, r1, r2); } | |
| 1980 | |
| 1981 // Add Logical Register-Register-Register (32) | 1731 // Add Logical Register-Register-Register (32) |
| 1982 void Assembler::alrk(Register r1, Register r2, Register r3) { | 1732 void Assembler::alrk(Register r1, Register r2, Register r3) { |
| 1983 rrf1_form(ALRK, r1, r2, r3); | 1733 rrf1_form(ALRK, r1, r2, r3); |
| 1984 } | 1734 } |
| 1985 | 1735 |
| 1986 // ------------------------------- | 1736 // ------------------------------- |
| 1987 // 64-bit Add Logical Instructions | 1737 // 64-bit Add Logical Instructions |
| 1988 // ------------------------------- | 1738 // ------------------------------- |
| 1989 // Add Logical Register-Storage (64) | 1739 // Add Logical Register-Storage (64) |
| 1990 void Assembler::alg(Register r1, const MemOperand& opnd) { | 1740 void Assembler::alg(Register r1, const MemOperand& opnd) { |
| 1991 rxy_form(ALG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1741 rxy_form(ALG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 1992 } | 1742 } |
| 1993 | 1743 |
| 1994 // Add Logical Immediate (64) | |
| 1995 void Assembler::algfi(Register r1, const Operand& opnd) { | |
| 1996 ril_form(ALGFI, r1, opnd); | |
| 1997 } | |
| 1998 | |
| 1999 // Add Logical Register-Register (64) | |
| 2000 void Assembler::algr(Register r1, Register r2) { rre_form(ALGR, r1, r2); } | |
| 2001 | |
| 2002 // Add Logical Register-Register-Register (64) | 1744 // Add Logical Register-Register-Register (64) |
| 2003 void Assembler::algrk(Register r1, Register r2, Register r3) { | 1745 void Assembler::algrk(Register r1, Register r2, Register r3) { |
| 2004 rrf1_form(ALGRK, r1, r2, r3); | 1746 rrf1_form(ALGRK, r1, r2, r3); |
| 2005 } | 1747 } |
| 2006 | 1748 |
| 2007 // ---------------------------- | 1749 // ---------------------------- |
| 2008 // 32-bit Subtract Instructions | 1750 // 32-bit Subtract Instructions |
| 2009 // ---------------------------- | 1751 // ---------------------------- |
| 2010 // Subtract Register-Storage (32) | 1752 // Subtract Register-Storage (32) |
| 2011 void Assembler::s(Register r1, const MemOperand& opnd) { | 1753 void Assembler::s(Register r1, const MemOperand& opnd) { |
| 2012 rx_form(S, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1754 rx_form(S, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2013 } | 1755 } |
| 2014 | 1756 |
| 2015 // Subtract Register-Storage (32) | 1757 // Subtract Register-Storage (32) |
| 2016 void Assembler::sy(Register r1, const MemOperand& opnd) { | 1758 void Assembler::sy(Register r1, const MemOperand& opnd) { |
| 2017 rxy_form(SY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1759 rxy_form(SY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2018 } | 1760 } |
| 2019 | 1761 |
| 2020 // Subtract Halfword Register-Storage (32) | 1762 // Subtract Halfword Register-Storage (32) |
| 2021 void Assembler::sh(Register r1, const MemOperand& opnd) { | 1763 void Assembler::sh(Register r1, const MemOperand& opnd) { |
| 2022 rx_form(SH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1764 rx_form(SH, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2023 } | 1765 } |
| 2024 | 1766 |
| 2025 // Subtract Halfword Register-Storage (32) | 1767 // Subtract Halfword Register-Storage (32) |
| 2026 void Assembler::shy(Register r1, const MemOperand& opnd) { | 1768 void Assembler::shy(Register r1, const MemOperand& opnd) { |
| 2027 rxy_form(SHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1769 rxy_form(SHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2028 } | 1770 } |
| 2029 | 1771 |
| 2030 // Subtract Register (32) | |
| 2031 void Assembler::sr(Register r1, Register r2) { rr_form(SR, r1, r2); } | |
| 2032 | |
| 2033 // Subtract Register-Register-Register (32) | 1772 // Subtract Register-Register-Register (32) |
| 2034 void Assembler::srk(Register r1, Register r2, Register r3) { | 1773 void Assembler::srk(Register r1, Register r2, Register r3) { |
| 2035 rrf1_form(SRK, r1, r2, r3); | 1774 rrf1_form(SRK, r1, r2, r3); |
| 2036 } | 1775 } |
| 2037 | 1776 |
| 2038 // ---------------------------- | 1777 // ---------------------------- |
| 2039 // 64-bit Subtract Instructions | 1778 // 64-bit Subtract Instructions |
| 2040 // ---------------------------- | 1779 // ---------------------------- |
| 2041 // Subtract Register-Storage (64) | 1780 // Subtract Register-Storage (64) |
| 2042 void Assembler::sg(Register r1, const MemOperand& opnd) { | 1781 void Assembler::sg(Register r1, const MemOperand& opnd) { |
| 2043 rxy_form(SG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1782 rxy_form(SG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2044 } | 1783 } |
| 2045 | 1784 |
| 2046 // Subtract Register-Storage (64<-32) | 1785 // Subtract Register-Storage (64<-32) |
| 2047 void Assembler::sgf(Register r1, const MemOperand& opnd) { | 1786 void Assembler::sgf(Register r1, const MemOperand& opnd) { |
| 2048 rxy_form(SGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1787 rxy_form(SGF, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2049 } | 1788 } |
| 2050 | 1789 |
| 2051 // Subtract Register (64) | |
| 2052 void Assembler::sgr(Register r1, Register r2) { rre_form(SGR, r1, r2); } | |
| 2053 | |
| 2054 // Subtract Register (64<-32) | |
| 2055 void Assembler::sgfr(Register r1, Register r2) { rre_form(SGFR, r1, r2); } | |
| 2056 | |
| 2057 // Subtract Register-Register-Register (64) | 1790 // Subtract Register-Register-Register (64) |
| 2058 void Assembler::sgrk(Register r1, Register r2, Register r3) { | 1791 void Assembler::sgrk(Register r1, Register r2, Register r3) { |
| 2059 rrf1_form(SGRK, r1, r2, r3); | 1792 rrf1_form(SGRK, r1, r2, r3); |
| 2060 } | 1793 } |
| 2061 | 1794 |
| 2062 // ------------------------------------ | 1795 // ------------------------------------ |
| 2063 // 32-bit Subtract Logical Instructions | 1796 // 32-bit Subtract Logical Instructions |
| 2064 // ------------------------------------ | 1797 // ------------------------------------ |
| 2065 // Subtract Logical Register-Storage (32) | 1798 // Subtract Logical Register-Storage (32) |
| 2066 void Assembler::sl(Register r1, const MemOperand& opnd) { | 1799 void Assembler::sl(Register r1, const MemOperand& opnd) { |
| 2067 rx_form(SL, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1800 rx_form(SL, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2068 } | 1801 } |
| 2069 | 1802 |
| 2070 // Subtract Logical Register-Storage (32) | 1803 // Subtract Logical Register-Storage (32) |
| 2071 void Assembler::sly(Register r1, const MemOperand& opnd) { | 1804 void Assembler::sly(Register r1, const MemOperand& opnd) { |
| 2072 rxy_form(SLY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1805 rxy_form(SLY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2073 } | 1806 } |
| 2074 | 1807 |
| 2075 // Subtract Logical Register-Register (32) | |
| 2076 void Assembler::slr(Register r1, Register r2) { rr_form(SLR, r1, r2); } | |
| 2077 | |
| 2078 // Subtract Logical With Borrow Register-Register (32) | |
| 2079 void Assembler::slbr(Register r1, Register r2) { rre_form(SLBR, r1, r2); } | |
| 2080 | |
| 2081 // Subtract Logical Register-Register-Register (32) | 1808 // Subtract Logical Register-Register-Register (32) |
| 2082 void Assembler::slrk(Register r1, Register r2, Register r3) { | 1809 void Assembler::slrk(Register r1, Register r2, Register r3) { |
| 2083 rrf1_form(SLRK, r1, r2, r3); | 1810 rrf1_form(SLRK, r1, r2, r3); |
| 2084 } | 1811 } |
| 2085 | 1812 |
| 2086 // ------------------------------------ | 1813 // ------------------------------------ |
| 2087 // 64-bit Subtract Logical Instructions | 1814 // 64-bit Subtract Logical Instructions |
| 2088 // ------------------------------------ | 1815 // ------------------------------------ |
| 2089 // Subtract Logical Register-Storage (64) | 1816 // Subtract Logical Register-Storage (64) |
| 2090 void Assembler::slg(Register r1, const MemOperand& opnd) { | 1817 void Assembler::slg(Register r1, const MemOperand& opnd) { |
| 2091 rxy_form(SLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1818 rxy_form(SLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2092 } | 1819 } |
| 2093 | 1820 |
| 2094 // Subtract Logical Register-Register (64) | |
| 2095 void Assembler::slgr(Register r1, Register r2) { rre_form(SLGR, r1, r2); } | |
| 2096 | |
| 2097 // Subtract Logical Register-Register-Register (64) | 1821 // Subtract Logical Register-Register-Register (64) |
| 2098 void Assembler::slgrk(Register r1, Register r2, Register r3) { | 1822 void Assembler::slgrk(Register r1, Register r2, Register r3) { |
| 2099 rrf1_form(SLGRK, r1, r2, r3); | 1823 rrf1_form(SLGRK, r1, r2, r3); |
| 2100 } | 1824 } |
| 2101 | 1825 |
| 2102 // ---------------------------- | 1826 // ---------------------------- |
| 2103 // 32-bit Multiply Instructions | 1827 // 32-bit Multiply Instructions |
| 2104 // ---------------------------- | 1828 // ---------------------------- |
| 2105 // Multiply Register-Storage (64<32) | 1829 // Multiply Register-Storage (64<32) |
| 2106 void Assembler::m(Register r1, const MemOperand& opnd) { | 1830 void Assembler::m(Register r1, const MemOperand& opnd) { |
| 2107 DCHECK(r1.code() % 2 == 0); | 1831 DCHECK(r1.code() % 2 == 0); |
| 2108 rx_form(M, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1832 rx_form(M, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2109 } | 1833 } |
| 2110 | 1834 |
| 2111 void Assembler::mfy(Register r1, const MemOperand& opnd) { | 1835 void Assembler::mfy(Register r1, const MemOperand& opnd) { |
| 2112 DCHECK(r1.code() % 2 == 0); | 1836 DCHECK(r1.code() % 2 == 0); |
| 2113 rxy_form(MFY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1837 rxy_form(MFY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2114 } | 1838 } |
| 2115 | 1839 |
| 2116 // Multiply Register (64<32) | |
| 2117 void Assembler::mr_z(Register r1, Register r2) { | |
| 2118 DCHECK(r1.code() % 2 == 0); | |
| 2119 rr_form(MR, r1, r2); | |
| 2120 } | |
| 2121 | |
| 2122 // Multiply Logical Register-Storage (64<32) | 1840 // Multiply Logical Register-Storage (64<32) |
| 2123 void Assembler::ml(Register r1, const MemOperand& opnd) { | 1841 void Assembler::ml(Register r1, const MemOperand& opnd) { |
| 2124 rxy_form(ML, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1842 rxy_form(ML, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2125 } | 1843 } |
| 2126 | 1844 |
| 2127 // Multiply Logical Register (64<32) | |
| 2128 void Assembler::mlr(Register r1, Register r2) { | |
| 2129 DCHECK(r1.code() % 2 == 0); | |
| 2130 rre_form(MLR, r1, r2); | |
| 2131 } | |
| 2132 | |
| 2133 // Multiply Single Register-Storage (32) | 1845 // Multiply Single Register-Storage (32) |
| 2134 void Assembler::ms(Register r1, const MemOperand& opnd) { | 1846 void Assembler::ms(Register r1, const MemOperand& opnd) { |
| 2135 rx_form(MS, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1847 rx_form(MS, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2136 } | 1848 } |
| 2137 | 1849 |
| 2138 // Multiply Single Register-Storage (32) | 1850 // Multiply Single Register-Storage (32) |
| 2139 void Assembler::msy(Register r1, const MemOperand& opnd) { | 1851 void Assembler::msy(Register r1, const MemOperand& opnd) { |
| 2140 rxy_form(MSY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1852 rxy_form(MSY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2141 } | 1853 } |
| 2142 | 1854 |
| 2143 // Multiply Single Immediate (32) | |
| 2144 void Assembler::msfi(Register r1, const Operand& opnd) { | |
| 2145 ril_form(MSFI, r1, opnd); | |
| 2146 } | |
| 2147 | |
| 2148 // Multiply Single Register (64<32) | |
| 2149 void Assembler::msr(Register r1, Register r2) { rre_form(MSR, r1, r2); } | |
| 2150 | |
| 2151 // Multiply Halfword Register-Storage (32) | 1855 // Multiply Halfword Register-Storage (32) |
| 2152 void Assembler::mh(Register r1, const MemOperand& opnd) { | 1856 void Assembler::mh(Register r1, const MemOperand& opnd) { |
| 2153 rx_form(MH, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1857 rx_form(MH, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2154 } | 1858 } |
| 2155 | 1859 |
| 2156 // Multiply Halfword Register-Storage (32) | 1860 // Multiply Halfword Register-Storage (32) |
| 2157 void Assembler::mhy(Register r1, const MemOperand& opnd) { | 1861 void Assembler::mhy(Register r1, const MemOperand& opnd) { |
| 2158 rxy_form(MHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1862 rxy_form(MHY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2159 } | 1863 } |
| 2160 | 1864 |
| 2161 // Multiply Halfword Immediate (32) | 1865 // Multiply Halfword Immediate (32) |
| 2162 void Assembler::mhi(Register r1, const Operand& opnd) { | 1866 void Assembler::mhi(Register r1, const Operand& opnd) { |
| 2163 ri_form(MHI, r1, opnd); | 1867 ri_form(MHI, r1, opnd); |
| 2164 } | 1868 } |
| 2165 | 1869 |
| 2166 // ---------------------------- | 1870 // ---------------------------- |
| 2167 // 64-bit Multiply Instructions | 1871 // 64-bit Multiply Instructions |
| 2168 // ---------------------------- | 1872 // ---------------------------- |
| 2169 // Multiply Logical Register-Storage (128<64) | 1873 // Multiply Logical Register-Storage (128<64) |
| 2170 void Assembler::mlg(Register r1, const MemOperand& opnd) { | 1874 void Assembler::mlg(Register r1, const MemOperand& opnd) { |
| 2171 rxy_form(MLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1875 rxy_form(MLG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2172 } | 1876 } |
| 2173 | 1877 |
| 2174 // Multiply Register (128<64) | |
| 2175 void Assembler::mlgr(Register r1, Register r2) { rre_form(MLGR, r1, r2); } | |
| 2176 | |
| 2177 // Multiply Halfword Immediate (64) | 1878 // Multiply Halfword Immediate (64) |
| 2178 void Assembler::mghi(Register r1, const Operand& opnd) { | 1879 void Assembler::mghi(Register r1, const Operand& opnd) { |
| 2179 ri_form(MGHI, r1, opnd); | 1880 ri_form(MGHI, r1, opnd); |
| 2180 } | 1881 } |
| 2181 | 1882 |
| 2182 // Multiply Single Immediate (64) | |
| 2183 void Assembler::msgfi(Register r1, const Operand& opnd) { | |
| 2184 ril_form(MSGFI, r1, opnd); | |
| 2185 } | |
| 2186 | |
| 2187 // Multiply Single Register-Storage (64) | 1883 // Multiply Single Register-Storage (64) |
| 2188 void Assembler::msg(Register r1, const MemOperand& opnd) { | 1884 void Assembler::msg(Register r1, const MemOperand& opnd) { |
| 2189 rxy_form(MSG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1885 rxy_form(MSG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2190 } | 1886 } |
| 2191 | 1887 |
| 2192 // Multiply Single Register-Register (64) | |
| 2193 void Assembler::msgr(Register r1, Register r2) { rre_form(MSGR, r1, r2); } | |
| 2194 | |
| 2195 // -------------------------- | 1888 // -------------------------- |
| 2196 // 32-bit Divide Instructions | 1889 // 32-bit Divide Instructions |
| 2197 // -------------------------- | 1890 // -------------------------- |
| 2198 // Divide Register-Storage (32<-64) | 1891 // Divide Register-Storage (32<-64) |
| 2199 void Assembler::d(Register r1, const MemOperand& opnd) { | 1892 void Assembler::d(Register r1, const MemOperand& opnd) { |
| 2200 rx_form(D, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1893 rx_form(D, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2201 } | 1894 } |
| 2202 | 1895 |
| 2203 // Divide Register (32<-64) | |
| 2204 void Assembler::dr(Register r1, Register r2) { | |
| 2205 DCHECK(r1.code() % 2 == 0); | |
| 2206 rr_form(DR, r1, r2); | |
| 2207 } | |
| 2208 | |
| 2209 // Divide Logical Register-Storage (32<-64) | 1896 // Divide Logical Register-Storage (32<-64) |
| 2210 void Assembler::dl(Register r1, const MemOperand& opnd) { | 1897 void Assembler::dl(Register r1, const MemOperand& opnd) { |
| 2211 rx_form(DL, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1898 rx_form(DL, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2212 } | 1899 } |
| 2213 | 1900 |
| 2214 // Divide Logical Register (32<-64) | |
| 2215 void Assembler::dlr(Register r1, Register r2) { rre_form(DLR, r1, r2); } | |
| 2216 | |
| 2217 // -------------------------- | |
| 2218 // 64-bit Divide Instructions | |
| 2219 // -------------------------- | |
| 2220 // Divide Logical Register (64<-128) | |
| 2221 void Assembler::dlgr(Register r1, Register r2) { rre_form(DLGR, r1, r2); } | |
| 2222 | |
| 2223 // Divide Single Register (64<-32) | |
| 2224 void Assembler::dsgr(Register r1, Register r2) { rre_form(DSGR, r1, r2); } | |
| 2225 | |
| 2226 // -------------------- | 1901 // -------------------- |
| 2227 // Bitwise Instructions | 1902 // Bitwise Instructions |
| 2228 // -------------------- | 1903 // -------------------- |
| 2229 // AND Register-Storage (32) | 1904 // AND Register-Storage (32) |
| 2230 void Assembler::n(Register r1, const MemOperand& opnd) { | 1905 void Assembler::n(Register r1, const MemOperand& opnd) { |
| 2231 rx_form(N, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1906 rx_form(N, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2232 } | 1907 } |
| 2233 | 1908 |
| 2234 // AND Register-Storage (32) | 1909 // AND Register-Storage (32) |
| 2235 void Assembler::ny(Register r1, const MemOperand& opnd) { | 1910 void Assembler::ny(Register r1, const MemOperand& opnd) { |
| 2236 rxy_form(NY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1911 rxy_form(NY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2237 } | 1912 } |
| 2238 | 1913 |
| 2239 // AND Register (32) | |
| 2240 void Assembler::nr(Register r1, Register r2) { rr_form(NR, r1, r2); } | |
| 2241 | |
| 2242 // AND Register-Register-Register (32) | 1914 // AND Register-Register-Register (32) |
| 2243 void Assembler::nrk(Register r1, Register r2, Register r3) { | 1915 void Assembler::nrk(Register r1, Register r2, Register r3) { |
| 2244 rrf1_form(NRK, r1, r2, r3); | 1916 rrf1_form(NRK, r1, r2, r3); |
| 2245 } | 1917 } |
| 2246 | 1918 |
| 2247 // AND Register-Storage (64) | 1919 // AND Register-Storage (64) |
| 2248 void Assembler::ng(Register r1, const MemOperand& opnd) { | 1920 void Assembler::ng(Register r1, const MemOperand& opnd) { |
| 2249 rxy_form(NG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1921 rxy_form(NG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2250 } | 1922 } |
| 2251 | 1923 |
| 2252 // AND Register (64) | |
| 2253 void Assembler::ngr(Register r1, Register r2) { rre_form(NGR, r1, r2); } | |
| 2254 | |
| 2255 // AND Register-Register-Register (64) | 1924 // AND Register-Register-Register (64) |
| 2256 void Assembler::ngrk(Register r1, Register r2, Register r3) { | 1925 void Assembler::ngrk(Register r1, Register r2, Register r3) { |
| 2257 rrf1_form(NGRK, r1, r2, r3); | 1926 rrf1_form(NGRK, r1, r2, r3); |
| 2258 } | 1927 } |
| 2259 | 1928 |
| 2260 // OR Register-Storage (32) | 1929 // OR Register-Storage (32) |
| 2261 void Assembler::o(Register r1, const MemOperand& opnd) { | 1930 void Assembler::o(Register r1, const MemOperand& opnd) { |
| 2262 rx_form(O, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1931 rx_form(O, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2263 } | 1932 } |
| 2264 | 1933 |
| 2265 // OR Register-Storage (32) | 1934 // OR Register-Storage (32) |
| 2266 void Assembler::oy(Register r1, const MemOperand& opnd) { | 1935 void Assembler::oy(Register r1, const MemOperand& opnd) { |
| 2267 rxy_form(OY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1936 rxy_form(OY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2268 } | 1937 } |
| 2269 | 1938 |
| 2270 // OR Register (32) | |
| 2271 void Assembler::or_z(Register r1, Register r2) { rr_form(OR, r1, r2); } | |
| 2272 | |
| 2273 // OR Register-Register-Register (32) | 1939 // OR Register-Register-Register (32) |
| 2274 void Assembler::ork(Register r1, Register r2, Register r3) { | 1940 void Assembler::ork(Register r1, Register r2, Register r3) { |
| 2275 rrf1_form(ORK, r1, r2, r3); | 1941 rrf1_form(ORK, r1, r2, r3); |
| 2276 } | 1942 } |
| 2277 | 1943 |
| 2278 // OR Register-Storage (64) | 1944 // OR Register-Storage (64) |
| 2279 void Assembler::og(Register r1, const MemOperand& opnd) { | 1945 void Assembler::og(Register r1, const MemOperand& opnd) { |
| 2280 rxy_form(OG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1946 rxy_form(OG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2281 } | 1947 } |
| 2282 | 1948 |
| 2283 // OR Register (64) | |
| 2284 void Assembler::ogr(Register r1, Register r2) { rre_form(OGR, r1, r2); } | |
| 2285 | |
| 2286 // OR Register-Register-Register (64) | 1949 // OR Register-Register-Register (64) |
| 2287 void Assembler::ogrk(Register r1, Register r2, Register r3) { | 1950 void Assembler::ogrk(Register r1, Register r2, Register r3) { |
| 2288 rrf1_form(OGRK, r1, r2, r3); | 1951 rrf1_form(OGRK, r1, r2, r3); |
| 2289 } | 1952 } |
| 2290 | 1953 |
| 2291 // XOR Register-Storage (32) | 1954 // XOR Register-Storage (32) |
| 2292 void Assembler::x(Register r1, const MemOperand& opnd) { | 1955 void Assembler::x(Register r1, const MemOperand& opnd) { |
| 2293 rx_form(X, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1956 rx_form(X, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2294 } | 1957 } |
| 2295 | 1958 |
| 2296 // XOR Register-Storage (32) | 1959 // XOR Register-Storage (32) |
| 2297 void Assembler::xy(Register r1, const MemOperand& opnd) { | 1960 void Assembler::xy(Register r1, const MemOperand& opnd) { |
| 2298 rxy_form(XY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1961 rxy_form(XY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2299 } | 1962 } |
| 2300 | 1963 |
| 2301 // XOR Register (32) | |
| 2302 void Assembler::xr(Register r1, Register r2) { rr_form(XR, r1, r2); } | |
| 2303 | |
| 2304 // XOR Register-Register-Register (32) | 1964 // XOR Register-Register-Register (32) |
| 2305 void Assembler::xrk(Register r1, Register r2, Register r3) { | 1965 void Assembler::xrk(Register r1, Register r2, Register r3) { |
| 2306 rrf1_form(XRK, r1, r2, r3); | 1966 rrf1_form(XRK, r1, r2, r3); |
| 2307 } | 1967 } |
| 2308 | 1968 |
| 2309 // XOR Register-Storage (64) | 1969 // XOR Register-Storage (64) |
| 2310 void Assembler::xg(Register r1, const MemOperand& opnd) { | 1970 void Assembler::xg(Register r1, const MemOperand& opnd) { |
| 2311 rxy_form(XG, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 1971 rxy_form(XG, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2312 } | 1972 } |
| 2313 | 1973 |
| 2314 // XOR Register (64) | |
| 2315 void Assembler::xgr(Register r1, Register r2) { rre_form(XGR, r1, r2); } | |
| 2316 | |
| 2317 // XOR Register-Register-Register (64) | 1974 // XOR Register-Register-Register (64) |
| 2318 void Assembler::xgrk(Register r1, Register r2, Register r3) { | 1975 void Assembler::xgrk(Register r1, Register r2, Register r3) { |
| 2319 rrf1_form(XGRK, r1, r2, r3); | 1976 rrf1_form(XGRK, r1, r2, r3); |
| 2320 } | 1977 } |
| 2321 | 1978 |
| 2322 // XOR Storage-Storage | 1979 // XOR Storage-Storage |
| 2323 void Assembler::xc(const MemOperand& opnd1, const MemOperand& opnd2, | 1980 void Assembler::xc(const MemOperand& opnd1, const MemOperand& opnd2, |
| 2324 Length length) { | 1981 Length length) { |
| 2325 ss_form(XC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), | 1982 ss_form(XC, length - 1, opnd1.getBaseRegister(), opnd1.getDisplacement(), |
| 2326 opnd2.getBaseRegister(), opnd2.getDisplacement()); | 1983 opnd2.getBaseRegister(), opnd2.getDisplacement()); |
| 2327 } | 1984 } |
| 2328 | 1985 |
| 2329 // ------------------------------------------- | |
| 2330 // Bitwise GPR <-> FPR Conversion Instructions | |
| 2331 // ------------------------------------------- | |
| 2332 // Load GR from FPR (64 <- L) | |
| 2333 void Assembler::lgdr(Register r1, DoubleRegister f2) { | |
| 2334 rre_form(LGDR, r1, Register::from_code(f2.code())); | |
| 2335 } | |
| 2336 | |
| 2337 // Load FPR from FR (L <- 64) | |
| 2338 void Assembler::ldgr(DoubleRegister f1, Register r2) { | |
| 2339 rre_form(LDGR, Register::from_code(f1.code()), r2); | |
| 2340 } | |
| 2341 | |
| 2342 void Assembler::EnsureSpaceFor(int space_needed) { | 1986 void Assembler::EnsureSpaceFor(int space_needed) { |
| 2343 if (buffer_space() <= (kGap + space_needed)) { | 1987 if (buffer_space() <= (kGap + space_needed)) { |
| 2344 GrowBuffer(space_needed); | 1988 GrowBuffer(space_needed); |
| 2345 } | 1989 } |
| 2346 } | 1990 } |
| 2347 | 1991 |
| 2348 // Rotate Left Single Logical (32) | 1992 // Rotate Left Single Logical (32) |
| 2349 void Assembler::rll(Register r1, Register r3, Register opnd) { | 1993 void Assembler::rll(Register r1, Register r3, Register opnd) { |
| 2350 DCHECK(!opnd.is(r0)); | 1994 DCHECK(!opnd.is(r0)); |
| 2351 rsy_form(RLL, r1, r3, opnd, 0); | 1995 rsy_form(RLL, r1, r3, opnd, 0); |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2546 | 2190 |
| 2547 int32_t target_index = emit_code_target(target, rmode, ast_id); | 2191 int32_t target_index = emit_code_target(target, rmode, ast_id); |
| 2548 brasl(r14, Operand(target_index)); | 2192 brasl(r14, Operand(target_index)); |
| 2549 } | 2193 } |
| 2550 | 2194 |
| 2551 void Assembler::jump(Handle<Code> target, RelocInfo::Mode rmode, | 2195 void Assembler::jump(Handle<Code> target, RelocInfo::Mode rmode, |
| 2552 Condition cond) { | 2196 Condition cond) { |
| 2553 EnsureSpace ensure_space(this); | 2197 EnsureSpace ensure_space(this); |
| 2554 | 2198 |
| 2555 int32_t target_index = emit_code_target(target, rmode); | 2199 int32_t target_index = emit_code_target(target, rmode); |
| 2556 brcl(cond, Operand(target_index), true); | 2200 brcl(cond, Operand(target_index)); |
| 2557 } | 2201 } |
| 2558 | 2202 |
| 2559 // Store (32) | 2203 // Store (32) |
| 2560 void Assembler::st(Register src, const MemOperand& dst) { | 2204 void Assembler::st(Register src, const MemOperand& dst) { |
| 2561 rx_form(ST, src, dst.rx(), dst.rb(), dst.offset()); | 2205 rx_form(ST, src, dst.rx(), dst.rb(), dst.offset()); |
| 2562 } | 2206 } |
| 2563 | 2207 |
| 2564 // Store (32) | 2208 // Store (32) |
| 2565 void Assembler::sty(Register src, const MemOperand& dst) { | 2209 void Assembler::sty(Register src, const MemOperand& dst) { |
| 2566 rxy_form(STY, src, dst.rx(), dst.rb(), dst.offset()); | 2210 rxy_form(STY, src, dst.rx(), dst.rb(), dst.offset()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2620 // Insert Character | 2264 // Insert Character |
| 2621 void Assembler::ic_z(Register r1, const MemOperand& opnd) { | 2265 void Assembler::ic_z(Register r1, const MemOperand& opnd) { |
| 2622 rx_form(IC_z, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 2266 rx_form(IC_z, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2623 } | 2267 } |
| 2624 | 2268 |
| 2625 // Insert Character | 2269 // Insert Character |
| 2626 void Assembler::icy(Register r1, const MemOperand& opnd) { | 2270 void Assembler::icy(Register r1, const MemOperand& opnd) { |
| 2627 rxy_form(ICY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 2271 rxy_form(ICY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2628 } | 2272 } |
| 2629 | 2273 |
| 2630 // Insert Immediate (High) | |
| 2631 void Assembler::iihf(Register r1, const Operand& opnd) { | |
| 2632 ril_form(IIHF, r1, opnd); | |
| 2633 } | |
| 2634 | |
| 2635 // Insert Immediate (low) | |
| 2636 void Assembler::iilf(Register r1, const Operand& opnd) { | |
| 2637 ril_form(IILF, r1, opnd); | |
| 2638 } | |
| 2639 | |
| 2640 // Insert Immediate (high high) | 2274 // Insert Immediate (high high) |
| 2641 void Assembler::iihh(Register r1, const Operand& opnd) { | 2275 void Assembler::iihh(Register r1, const Operand& opnd) { |
| 2642 ri_form(IIHH, r1, opnd); | 2276 ri_form(IIHH, r1, opnd); |
| 2643 } | 2277 } |
| 2644 | 2278 |
| 2645 // Insert Immediate (high low) | 2279 // Insert Immediate (high low) |
| 2646 void Assembler::iihl(Register r1, const Operand& opnd) { | 2280 void Assembler::iihl(Register r1, const Operand& opnd) { |
| 2647 ri_form(IIHL, r1, opnd); | 2281 ri_form(IIHL, r1, opnd); |
| 2648 } | 2282 } |
| 2649 | 2283 |
| 2650 // Insert Immediate (low high) | 2284 // Insert Immediate (low high) |
| 2651 void Assembler::iilh(Register r1, const Operand& opnd) { | 2285 void Assembler::iilh(Register r1, const Operand& opnd) { |
| 2652 ri_form(IILH, r1, opnd); | 2286 ri_form(IILH, r1, opnd); |
| 2653 } | 2287 } |
| 2654 | 2288 |
| 2655 // Insert Immediate (low low) | 2289 // Insert Immediate (low low) |
| 2656 void Assembler::iill(Register r1, const Operand& opnd) { | 2290 void Assembler::iill(Register r1, const Operand& opnd) { |
| 2657 ri_form(IILL, r1, opnd); | 2291 ri_form(IILL, r1, opnd); |
| 2658 } | 2292 } |
| 2659 | 2293 |
| 2660 // Load Immediate 32->64 | |
| 2661 void Assembler::lgfi(Register r1, const Operand& opnd) { | |
| 2662 ril_form(LGFI, r1, opnd); | |
| 2663 } | |
| 2664 | |
| 2665 // GPR <-> FPR Instructions | 2294 // GPR <-> FPR Instructions |
| 2666 | 2295 |
| 2667 // Floating point instructions | 2296 // Floating point instructions |
| 2668 // | 2297 // |
| 2669 // Load zero Register (64) | |
| 2670 void Assembler::lzdr(DoubleRegister r1) { | |
| 2671 rre_form(LZDR, Register::from_code(r1.code()), Register::from_code(0)); | |
| 2672 } | |
| 2673 | |
| 2674 // Add Register-Register (LB) | |
| 2675 void Assembler::aebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2676 rre_form(AEBR, Register::from_code(r1.code()), | |
| 2677 Register::from_code(r2.code())); | |
| 2678 } | |
| 2679 | |
| 2680 // Add Register-Storage (LB) | 2298 // Add Register-Storage (LB) |
| 2681 void Assembler::adb(DoubleRegister r1, const MemOperand& opnd) { | 2299 void Assembler::adb(DoubleRegister r1, const MemOperand& opnd) { |
| 2682 rxe_form(ADB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 2300 rxe_form(ADB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2683 opnd.offset()); | 2301 opnd.offset()); |
| 2684 } | 2302 } |
| 2685 | 2303 |
| 2686 // Add Register-Register (LB) | |
| 2687 void Assembler::adbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2688 rre_form(ADBR, Register::from_code(r1.code()), | |
| 2689 Register::from_code(r2.code())); | |
| 2690 } | |
| 2691 | |
| 2692 // Compare Register-Register (LB) | |
| 2693 void Assembler::cebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2694 rre_form(CEBR, Register::from_code(r1.code()), | |
| 2695 Register::from_code(r2.code())); | |
| 2696 } | |
| 2697 | |
| 2698 // Compare Register-Storage (LB) | 2304 // Compare Register-Storage (LB) |
| 2699 void Assembler::cdb(DoubleRegister r1, const MemOperand& opnd) { | 2305 void Assembler::cdb(DoubleRegister r1, const MemOperand& opnd) { |
| 2700 rx_form(CD, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 2306 rx_form(CD, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2701 opnd.offset()); | 2307 opnd.offset()); |
| 2702 } | 2308 } |
| 2703 | 2309 |
| 2704 // Compare Register-Register (LB) | |
| 2705 void Assembler::cdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2706 rre_form(CDBR, Register::from_code(r1.code()), | |
| 2707 Register::from_code(r2.code())); | |
| 2708 } | |
| 2709 | |
| 2710 // Divide Register-Register (LB) | |
| 2711 void Assembler::debr(DoubleRegister r1, DoubleRegister r2) { | |
| 2712 rre_form(DEBR, Register::from_code(r1.code()), | |
| 2713 Register::from_code(r2.code())); | |
| 2714 } | |
| 2715 | |
| 2716 // Divide Register-Storage (LB) | 2310 // Divide Register-Storage (LB) |
| 2717 void Assembler::ddb(DoubleRegister r1, const MemOperand& opnd) { | 2311 void Assembler::ddb(DoubleRegister r1, const MemOperand& opnd) { |
| 2718 rxe_form(DDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 2312 rxe_form(DDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2719 opnd.offset()); | 2313 opnd.offset()); |
| 2720 } | 2314 } |
| 2721 | 2315 |
| 2722 // Divide Register-Register (LB) | |
| 2723 void Assembler::ddbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2724 rre_form(DDBR, Register::from_code(r1.code()), | |
| 2725 Register::from_code(r2.code())); | |
| 2726 } | |
| 2727 | |
| 2728 // Multiply Register-Register (LB) | |
| 2729 void Assembler::meebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2730 rre_form(MEEBR, Register::from_code(r1.code()), | |
| 2731 Register::from_code(r2.code())); | |
| 2732 } | |
| 2733 | |
| 2734 // Multiply Register-Storage (LB) | 2316 // Multiply Register-Storage (LB) |
| 2735 void Assembler::mdb(DoubleRegister r1, const MemOperand& opnd) { | 2317 void Assembler::mdb(DoubleRegister r1, const MemOperand& opnd) { |
| 2736 rxe_form(MDB, Register::from_code(r1.code()), opnd.rb(), opnd.rx(), | 2318 rxe_form(MDB, Register::from_code(r1.code()), opnd.rb(), opnd.rx(), |
| 2737 opnd.offset()); | 2319 opnd.offset()); |
| 2738 } | 2320 } |
| 2739 | 2321 |
| 2740 // Multiply Register-Register (LB) | |
| 2741 void Assembler::mdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2742 rre_form(MDBR, Register::from_code(r1.code()), | |
| 2743 Register::from_code(r2.code())); | |
| 2744 } | |
| 2745 | |
| 2746 // Subtract Register-Register (LB) | |
| 2747 void Assembler::sebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2748 rre_form(SEBR, Register::from_code(r1.code()), | |
| 2749 Register::from_code(r2.code())); | |
| 2750 } | |
| 2751 | |
| 2752 // Subtract Register-Storage (LB) | 2322 // Subtract Register-Storage (LB) |
| 2753 void Assembler::sdb(DoubleRegister r1, const MemOperand& opnd) { | 2323 void Assembler::sdb(DoubleRegister r1, const MemOperand& opnd) { |
| 2754 rxe_form(SDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 2324 rxe_form(SDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2755 opnd.offset()); | 2325 opnd.offset()); |
| 2756 } | 2326 } |
| 2757 | 2327 |
| 2758 // Subtract Register-Register (LB) | |
| 2759 void Assembler::sdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2760 rre_form(SDBR, Register::from_code(r1.code()), | |
| 2761 Register::from_code(r2.code())); | |
| 2762 } | |
| 2763 | |
| 2764 // Square Root (LB) | 2328 // Square Root (LB) |
| 2765 void Assembler::sqdb(DoubleRegister r1, const MemOperand& opnd) { | 2329 void Assembler::sqdb(DoubleRegister r1, const MemOperand& opnd) { |
| 2766 rxe_form(SQDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), | 2330 rxe_form(SQDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(), |
| 2767 opnd.offset()); | 2331 opnd.offset()); |
| 2768 } | 2332 } |
| 2769 | 2333 |
| 2770 // Square Root Register-Register (LB) | |
| 2771 void Assembler::sqebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2772 rre_form(SQEBR, Register::from_code(r1.code()), | |
| 2773 Register::from_code(r2.code())); | |
| 2774 } | |
| 2775 | |
| 2776 // Square Root Register-Register (LB) | |
| 2777 void Assembler::sqdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2778 rre_form(SQDBR, Register::from_code(r1.code()), | |
| 2779 Register::from_code(r2.code())); | |
| 2780 } | |
| 2781 | |
| 2782 // Load Rounded (double -> float) | |
| 2783 void Assembler::ledbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2784 rre_form(LEDBR, Register::from_code(r1.code()), | |
| 2785 Register::from_code(r2.code())); | |
| 2786 } | |
| 2787 | |
| 2788 // Load Lengthen (float -> double) | |
| 2789 void Assembler::ldebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2790 rre_form(LDEBR, Register::from_code(r1.code()), | |
| 2791 Register::from_code(r2.code())); | |
| 2792 } | |
| 2793 | |
| 2794 // Load Complement Register-Register (LB) | |
| 2795 void Assembler::lcdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2796 rre_form(LCDBR, Register::from_code(r1.code()), | |
| 2797 Register::from_code(r2.code())); | |
| 2798 } | |
| 2799 | |
| 2800 // Load Complement Register-Register (LB) | |
| 2801 void Assembler::lcebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2802 rre_form(LCEBR, Register::from_code(r1.code()), | |
| 2803 Register::from_code(r2.code())); | |
| 2804 } | |
| 2805 | |
| 2806 // Load Positive Register-Register (LB) | |
| 2807 void Assembler::lpebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2808 rre_form(LPEBR, Register::from_code(r1.code()), | |
| 2809 Register::from_code(r2.code())); | |
| 2810 } | |
| 2811 | |
| 2812 // Load Positive Register-Register (LB) | |
| 2813 void Assembler::lpdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2814 rre_form(LPDBR, Register::from_code(r1.code()), | |
| 2815 Register::from_code(r2.code())); | |
| 2816 } | |
| 2817 | |
| 2818 // Store Double (64) | 2334 // Store Double (64) |
| 2819 void Assembler::std(DoubleRegister r1, const MemOperand& opnd) { | 2335 void Assembler::std(DoubleRegister r1, const MemOperand& opnd) { |
| 2820 rx_form(STD, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 2336 rx_form(STD, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2821 } | 2337 } |
| 2822 | 2338 |
| 2823 // Store Double (64) | 2339 // Store Double (64) |
| 2824 void Assembler::stdy(DoubleRegister r1, const MemOperand& opnd) { | 2340 void Assembler::stdy(DoubleRegister r1, const MemOperand& opnd) { |
| 2825 DCHECK(!(opnd.rb().code() == 15 && opnd.offset() < 0)); | 2341 DCHECK(!(opnd.rb().code() == 15 && opnd.offset() < 0)); |
| 2826 rxy_form(STDY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 2342 rxy_form(STDY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2827 } | 2343 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2854 DCHECK(is_uint12(opnd.offset())); | 2370 DCHECK(is_uint12(opnd.offset())); |
| 2855 rx_form(LE, r1, opnd.rx(), opnd.rb(), opnd.offset() & 0xfff); | 2371 rx_form(LE, r1, opnd.rx(), opnd.rb(), opnd.offset() & 0xfff); |
| 2856 } | 2372 } |
| 2857 | 2373 |
| 2858 // Load Float (32) | 2374 // Load Float (32) |
| 2859 void Assembler::ley(DoubleRegister r1, const MemOperand& opnd) { | 2375 void Assembler::ley(DoubleRegister r1, const MemOperand& opnd) { |
| 2860 DCHECK(is_int20(opnd.offset())); | 2376 DCHECK(is_int20(opnd.offset())); |
| 2861 rxy_form(LEY, r1, opnd.rx(), opnd.rb(), opnd.offset()); | 2377 rxy_form(LEY, r1, opnd.rx(), opnd.rb(), opnd.offset()); |
| 2862 } | 2378 } |
| 2863 | 2379 |
| 2864 // Load Double Register-Register (64) | |
| 2865 void Assembler::ldr(DoubleRegister r1, DoubleRegister r2) { | |
| 2866 rr_form(LDR, r1, r2); | |
| 2867 } | |
| 2868 | |
| 2869 // Load And Test Register-Register (L) | |
| 2870 void Assembler::ltebr(DoubleRegister r1, DoubleRegister r2) { | |
| 2871 rre_form(LTEBR, r1, r2); | |
| 2872 } | |
| 2873 | |
| 2874 // Load And Test Register-Register (L) | |
| 2875 void Assembler::ltdbr(DoubleRegister r1, DoubleRegister r2) { | |
| 2876 rre_form(LTDBR, r1, r2); | |
| 2877 } | |
| 2878 | |
| 2879 // Convert to Fixed point (64<-S) | 2380 // Convert to Fixed point (64<-S) |
| 2880 void Assembler::cgebr(Condition m, Register r1, DoubleRegister r2) { | 2381 void Assembler::cgebr(Condition m, Register r1, DoubleRegister r2) { |
| 2881 rrfe_form(CGEBR, m, Condition(0), r1, Register::from_code(r2.code())); | 2382 rrfe_form(CGEBR, m, Condition(0), r1, Register::from_code(r2.code())); |
| 2882 } | 2383 } |
| 2883 | 2384 |
| 2884 // Convert to Fixed point (64<-L) | 2385 // Convert to Fixed point (64<-L) |
| 2885 void Assembler::cgdbr(Condition m, Register r1, DoubleRegister r2) { | 2386 void Assembler::cgdbr(Condition m, Register r1, DoubleRegister r2) { |
| 2886 rrfe_form(CGDBR, m, Condition(0), r1, Register::from_code(r2.code())); | 2387 rrfe_form(CGDBR, m, Condition(0), r1, Register::from_code(r2.code())); |
| 2887 } | 2388 } |
| 2888 | 2389 |
| 2889 // Convert to Fixed point (32<-L) | 2390 // Convert to Fixed point (32<-L) |
| 2890 void Assembler::cfdbr(Condition m, Register r1, DoubleRegister r2) { | 2391 void Assembler::cfdbr(Condition m, Register r1, DoubleRegister r2) { |
| 2891 rrfe_form(CFDBR, m, Condition(0), r1, Register::from_code(r2.code())); | 2392 rrfe_form(CFDBR, m, Condition(0), r1, Register::from_code(r2.code())); |
| 2892 } | 2393 } |
| 2893 | 2394 |
| 2894 // Convert from Fixed point (L<-64) | |
| 2895 void Assembler::cegbr(DoubleRegister r1, Register r2) { | |
| 2896 rre_form(CEGBR, Register::from_code(r1.code()), r2); | |
| 2897 } | |
| 2898 | |
| 2899 // Convert from Fixed point (L<-64) | |
| 2900 void Assembler::cdgbr(DoubleRegister r1, Register r2) { | |
| 2901 rre_form(CDGBR, Register::from_code(r1.code()), r2); | |
| 2902 } | |
| 2903 | |
| 2904 // Convert from Fixed point (L<-32) | |
| 2905 void Assembler::cdfbr(DoubleRegister r1, Register r2) { | |
| 2906 rre_form(CDFBR, Register::from_code(r1.code()), r2); | |
| 2907 } | |
| 2908 | |
| 2909 // Convert to Fixed Logical (64<-L) | 2395 // Convert to Fixed Logical (64<-L) |
| 2910 void Assembler::clgdbr(Condition m3, Condition m4, Register r1, | 2396 void Assembler::clgdbr(Condition m3, Condition m4, Register r1, |
| 2911 DoubleRegister r2) { | 2397 DoubleRegister r2) { |
| 2912 DCHECK_EQ(m4, Condition(0)); | 2398 DCHECK_EQ(m4, Condition(0)); |
| 2913 rrfe_form(CLGDBR, m3, m4, r1, Register::from_code(r2.code())); | 2399 rrfe_form(CLGDBR, m3, m4, r1, Register::from_code(r2.code())); |
| 2914 } | 2400 } |
| 2915 | 2401 |
| 2916 // Convert to Fixed Logical (64<-F32) | 2402 // Convert to Fixed Logical (64<-F32) |
| 2917 void Assembler::clgebr(Condition m3, Condition m4, Register r1, | 2403 void Assembler::clgebr(Condition m3, Condition m4, Register r1, |
| 2918 DoubleRegister r2) { | 2404 DoubleRegister r2) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2987 // Load FP Integer | 2473 // Load FP Integer |
| 2988 void Assembler::fiebra(DoubleRegister d1, DoubleRegister d2, FIDBRA_MASK3 m3) { | 2474 void Assembler::fiebra(DoubleRegister d1, DoubleRegister d2, FIDBRA_MASK3 m3) { |
| 2989 rrf2_form(FIEBRA << 16 | m3 * B12 | d1.code() * B4 | d2.code()); | 2475 rrf2_form(FIEBRA << 16 | m3 * B12 | d1.code() * B4 | d2.code()); |
| 2990 } | 2476 } |
| 2991 | 2477 |
| 2992 // Load FP Integer | 2478 // Load FP Integer |
| 2993 void Assembler::fidbra(DoubleRegister d1, DoubleRegister d2, FIDBRA_MASK3 m3) { | 2479 void Assembler::fidbra(DoubleRegister d1, DoubleRegister d2, FIDBRA_MASK3 m3) { |
| 2994 rrf2_form(FIDBRA << 16 | m3 * B12 | d1.code() * B4 | d2.code()); | 2480 rrf2_form(FIDBRA << 16 | m3 * B12 | d1.code() * B4 | d2.code()); |
| 2995 } | 2481 } |
| 2996 | 2482 |
| 2997 // Multiply and Add - MADBR R1, R3, R2 | |
| 2998 // R1 = R3 * R2 + R1 | |
| 2999 void Assembler::madbr(DoubleRegister d1, DoubleRegister d3, DoubleRegister d2) { | |
| 3000 rrd_form(MADBR, Register::from_code(d1.code()), | |
| 3001 Register::from_code(d3.code()), Register::from_code(d2.code())); | |
| 3002 } | |
| 3003 | |
| 3004 // Multiply and Subtract - MSDBR R1, R3, R2 | |
| 3005 // R1 = R3 * R2 - R1 | |
| 3006 void Assembler::msdbr(DoubleRegister d1, DoubleRegister d3, DoubleRegister d2) { | |
| 3007 rrd_form(MSDBR, Register::from_code(d1.code()), | |
| 3008 Register::from_code(d3.code()), Register::from_code(d2.code())); | |
| 3009 } | |
| 3010 | |
| 3011 // end of S390instructions | 2483 // end of S390instructions |
| 3012 | 2484 |
| 3013 bool Assembler::IsNop(SixByteInstr instr, int type) { | 2485 bool Assembler::IsNop(SixByteInstr instr, int type) { |
| 3014 DCHECK((0 == type) || (DEBUG_BREAK_NOP == type)); | 2486 DCHECK((0 == type) || (DEBUG_BREAK_NOP == type)); |
| 3015 if (DEBUG_BREAK_NOP == type) { | 2487 if (DEBUG_BREAK_NOP == type) { |
| 3016 return ((instr & 0xffffffff) == 0xa53b0000); // oill r3, 0 | 2488 return ((instr & 0xffffffff) == 0xa53b0000); // oill r3, 0 |
| 3017 } | 2489 } |
| 3018 return ((instr & 0xffff) == 0x1800); // lr r0,r0 | 2490 return ((instr & 0xffff) == 0x1800); // lr r0,r0 |
| 3019 } | 2491 } |
| 3020 | 2492 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3149 SKIP_ICACHE_FLUSH); | 2621 SKIP_ICACHE_FLUSH); |
| 3150 } | 2622 } |
| 3151 | 2623 |
| 3152 reloc_info_writer.Write(&rinfo); | 2624 reloc_info_writer.Write(&rinfo); |
| 3153 } | 2625 } |
| 3154 } | 2626 } |
| 3155 | 2627 |
| 3156 } // namespace internal | 2628 } // namespace internal |
| 3157 } // namespace v8 | 2629 } // namespace v8 |
| 3158 #endif // V8_TARGET_ARCH_S390 | 2630 #endif // V8_TARGET_ARCH_S390 |
| OLD | NEW |