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 |