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

Side by Side Diff: src/IceInstX8632.cpp

Issue 620373004: Subzero: Add a few performance measurement tools. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Improve the use of containers Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/IceGlobalContext.cpp ('k') | src/IceOperand.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===// 1 //===- subzero/src/IceInstX8632.cpp - X86-32 instruction implementation ---===//
2 // 2 //
3 // The Subzero Code Generator 3 // The Subzero Code Generator
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // This file implements the InstX8632 and OperandX8632 classes, 10 // This file implements the InstX8632 and OperandX8632 classes,
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 template <> 775 template <>
776 const x86::AssemblerX86::GPREmitterRegOp InstX8632Bsr::Emitter = { 776 const x86::AssemblerX86::GPREmitterRegOp InstX8632Bsr::Emitter = {
777 &x86::AssemblerX86::bsr, &x86::AssemblerX86::bsr, NULL}; 777 &x86::AssemblerX86::bsr, &x86::AssemblerX86::bsr, NULL};
778 template <> 778 template <>
779 const x86::AssemblerX86::GPREmitterRegOp InstX8632Lea::Emitter = { 779 const x86::AssemblerX86::GPREmitterRegOp InstX8632Lea::Emitter = {
780 /* reg/reg and reg/imm are illegal */ NULL, &x86::AssemblerX86::lea, NULL}; 780 /* reg/reg and reg/imm are illegal */ NULL, &x86::AssemblerX86::lea, NULL};
781 781
782 // Unary XMM ops 782 // Unary XMM ops
783 template <> 783 template <>
784 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Sqrtss::Emitter = { 784 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Sqrtss::Emitter = {
785 &x86::AssemblerX86::sqrtss, &x86::AssemblerX86::sqrtss}; 785 &x86::AssemblerX86::sqrtss, &x86::AssemblerX86::sqrtss
786 };
786 787
787 // Binary GPR ops 788 // Binary GPR ops
788 template <> 789 template <>
789 const x86::AssemblerX86::GPREmitterRegOp InstX8632Add::Emitter = { 790 const x86::AssemblerX86::GPREmitterRegOp InstX8632Add::Emitter = {
790 &x86::AssemblerX86::add, &x86::AssemblerX86::add, &x86::AssemblerX86::add}; 791 &x86::AssemblerX86::add, &x86::AssemblerX86::add, &x86::AssemblerX86::add};
791 template <> 792 template <>
792 const x86::AssemblerX86::GPREmitterRegOp InstX8632Adc::Emitter = { 793 const x86::AssemblerX86::GPREmitterRegOp InstX8632Adc::Emitter = {
793 &x86::AssemblerX86::adc, &x86::AssemblerX86::adc, &x86::AssemblerX86::adc}; 794 &x86::AssemblerX86::adc, &x86::AssemblerX86::adc, &x86::AssemblerX86::adc};
794 template <> 795 template <>
795 const x86::AssemblerX86::GPREmitterRegOp InstX8632And::Emitter = { 796 const x86::AssemblerX86::GPREmitterRegOp InstX8632And::Emitter = {
(...skipping 21 matching lines...) Expand all
817 template <> 818 template <>
818 const x86::AssemblerX86::GPREmitterShiftOp InstX8632Shl::Emitter = { 819 const x86::AssemblerX86::GPREmitterShiftOp InstX8632Shl::Emitter = {
819 &x86::AssemblerX86::shl, &x86::AssemblerX86::shl}; 820 &x86::AssemblerX86::shl, &x86::AssemblerX86::shl};
820 template <> 821 template <>
821 const x86::AssemblerX86::GPREmitterShiftOp InstX8632Shr::Emitter = { 822 const x86::AssemblerX86::GPREmitterShiftOp InstX8632Shr::Emitter = {
822 &x86::AssemblerX86::shr, &x86::AssemblerX86::shr}; 823 &x86::AssemblerX86::shr, &x86::AssemblerX86::shr};
823 824
824 // Binary XMM ops 825 // Binary XMM ops
825 template <> 826 template <>
826 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Addss::Emitter = { 827 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Addss::Emitter = {
827 &x86::AssemblerX86::addss, &x86::AssemblerX86::addss}; 828 &x86::AssemblerX86::addss, &x86::AssemblerX86::addss
829 };
828 template <> 830 template <>
829 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Addps::Emitter = { 831 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Addps::Emitter = {
830 &x86::AssemblerX86::addps, &x86::AssemblerX86::addps}; 832 &x86::AssemblerX86::addps, &x86::AssemblerX86::addps
833 };
831 template <> 834 template <>
832 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Divss::Emitter = { 835 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Divss::Emitter = {
833 &x86::AssemblerX86::divss, &x86::AssemblerX86::divss}; 836 &x86::AssemblerX86::divss, &x86::AssemblerX86::divss
837 };
834 template <> 838 template <>
835 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Divps::Emitter = { 839 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Divps::Emitter = {
836 &x86::AssemblerX86::divps, &x86::AssemblerX86::divps}; 840 &x86::AssemblerX86::divps, &x86::AssemblerX86::divps
841 };
837 template <> 842 template <>
838 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Mulss::Emitter = { 843 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Mulss::Emitter = {
839 &x86::AssemblerX86::mulss, &x86::AssemblerX86::mulss}; 844 &x86::AssemblerX86::mulss, &x86::AssemblerX86::mulss
845 };
840 template <> 846 template <>
841 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Mulps::Emitter = { 847 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Mulps::Emitter = {
842 &x86::AssemblerX86::mulps, &x86::AssemblerX86::mulps}; 848 &x86::AssemblerX86::mulps, &x86::AssemblerX86::mulps
849 };
843 template <> 850 template <>
844 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Padd::Emitter = { 851 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Padd::Emitter = {
845 &x86::AssemblerX86::padd, &x86::AssemblerX86::padd}; 852 &x86::AssemblerX86::padd, &x86::AssemblerX86::padd
853 };
846 template <> 854 template <>
847 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pand::Emitter = { 855 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pand::Emitter = {
848 &x86::AssemblerX86::pand, &x86::AssemblerX86::pand}; 856 &x86::AssemblerX86::pand, &x86::AssemblerX86::pand
857 };
849 template <> 858 template <>
850 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pandn::Emitter = { 859 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pandn::Emitter = {
851 &x86::AssemblerX86::pandn, &x86::AssemblerX86::pandn}; 860 &x86::AssemblerX86::pandn, &x86::AssemblerX86::pandn
861 };
852 template <> 862 template <>
853 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pcmpeq::Emitter = { 863 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pcmpeq::Emitter = {
854 &x86::AssemblerX86::pcmpeq, &x86::AssemblerX86::pcmpeq}; 864 &x86::AssemblerX86::pcmpeq, &x86::AssemblerX86::pcmpeq
865 };
855 template <> 866 template <>
856 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pcmpgt::Emitter = { 867 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pcmpgt::Emitter = {
857 &x86::AssemblerX86::pcmpgt, &x86::AssemblerX86::pcmpgt}; 868 &x86::AssemblerX86::pcmpgt, &x86::AssemblerX86::pcmpgt
869 };
858 template <> 870 template <>
859 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pmull::Emitter = { 871 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pmull::Emitter = {
860 &x86::AssemblerX86::pmull, &x86::AssemblerX86::pmull}; 872 &x86::AssemblerX86::pmull, &x86::AssemblerX86::pmull
873 };
861 template <> 874 template <>
862 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pmuludq::Emitter = { 875 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pmuludq::Emitter = {
863 &x86::AssemblerX86::pmuludq, &x86::AssemblerX86::pmuludq}; 876 &x86::AssemblerX86::pmuludq, &x86::AssemblerX86::pmuludq
877 };
864 template <> 878 template <>
865 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Por::Emitter = { 879 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Por::Emitter = {
866 &x86::AssemblerX86::por, &x86::AssemblerX86::por}; 880 &x86::AssemblerX86::por, &x86::AssemblerX86::por
881 };
867 template <> 882 template <>
868 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Psub::Emitter = { 883 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Psub::Emitter = {
869 &x86::AssemblerX86::psub, &x86::AssemblerX86::psub}; 884 &x86::AssemblerX86::psub, &x86::AssemblerX86::psub
885 };
870 template <> 886 template <>
871 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pxor::Emitter = { 887 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Pxor::Emitter = {
872 &x86::AssemblerX86::pxor, &x86::AssemblerX86::pxor}; 888 &x86::AssemblerX86::pxor, &x86::AssemblerX86::pxor
889 };
873 template <> 890 template <>
874 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Subss::Emitter = { 891 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Subss::Emitter = {
875 &x86::AssemblerX86::subss, &x86::AssemblerX86::subss}; 892 &x86::AssemblerX86::subss, &x86::AssemblerX86::subss
893 };
876 template <> 894 template <>
877 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Subps::Emitter = { 895 const x86::AssemblerX86::XmmEmitterRegOp InstX8632Subps::Emitter = {
878 &x86::AssemblerX86::subps, &x86::AssemblerX86::subps}; 896 &x86::AssemblerX86::subps, &x86::AssemblerX86::subps
897 };
879 898
880 // Binary XMM Shift ops 899 // Binary XMM Shift ops
881 template <> 900 template <>
882 const x86::AssemblerX86::XmmEmitterShiftOp InstX8632Psll::Emitter = { 901 const x86::AssemblerX86::XmmEmitterShiftOp InstX8632Psll::Emitter = {
883 &x86::AssemblerX86::psll, &x86::AssemblerX86::psll, 902 &x86::AssemblerX86::psll, &x86::AssemblerX86::psll,
884 &x86::AssemblerX86::psll}; 903 &x86::AssemblerX86::psll};
885 template <> 904 template <>
886 const x86::AssemblerX86::XmmEmitterShiftOp InstX8632Psra::Emitter = { 905 const x86::AssemblerX86::XmmEmitterShiftOp InstX8632Psra::Emitter = {
887 &x86::AssemblerX86::psra, &x86::AssemblerX86::psra, 906 &x86::AssemblerX86::psra, &x86::AssemblerX86::psra,
888 &x86::AssemblerX86::psra}; 907 &x86::AssemblerX86::psra};
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 getSrc(1)->emit(Func); 1439 getSrc(1)->emit(Func);
1421 Str << "\n"; 1440 Str << "\n";
1422 } 1441 }
1423 1442
1424 void InstX8632Icmp::emitIAS(const Cfg *Func) const { 1443 void InstX8632Icmp::emitIAS(const Cfg *Func) const {
1425 assert(getSrcSize() == 2); 1444 assert(getSrcSize() == 2);
1426 const Operand *Src0 = getSrc(0); 1445 const Operand *Src0 = getSrc(0);
1427 const Operand *Src1 = getSrc(1); 1446 const Operand *Src1 = getSrc(1);
1428 Type Ty = Src0->getType(); 1447 Type Ty = Src0->getType();
1429 static const x86::AssemblerX86::GPREmitterRegOp RegEmitter = { 1448 static const x86::AssemblerX86::GPREmitterRegOp RegEmitter = {
1430 &x86::AssemblerX86::cmp, &x86::AssemblerX86::cmp, 1449 &x86::AssemblerX86::cmp, &x86::AssemblerX86::cmp, &x86::AssemblerX86::cmp
1431 &x86::AssemblerX86::cmp}; 1450 };
1432 static const x86::AssemblerX86::GPREmitterAddrOp AddrEmitter = { 1451 static const x86::AssemblerX86::GPREmitterAddrOp AddrEmitter = {
1433 &x86::AssemblerX86::cmp, &x86::AssemblerX86::cmp}; 1452 &x86::AssemblerX86::cmp, &x86::AssemblerX86::cmp
1453 };
1434 if (const Variable *SrcVar0 = llvm::dyn_cast<Variable>(Src0)) { 1454 if (const Variable *SrcVar0 = llvm::dyn_cast<Variable>(Src0)) {
1435 if (SrcVar0->hasReg()) { 1455 if (SrcVar0->hasReg()) {
1436 emitIASRegOpTyGPR(Func, Ty, SrcVar0, Src1, RegEmitter); 1456 emitIASRegOpTyGPR(Func, Ty, SrcVar0, Src1, RegEmitter);
1437 } else { 1457 } else {
1438 x86::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget()) 1458 x86::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget())
1439 ->stackVarToAsmOperand(SrcVar0)); 1459 ->stackVarToAsmOperand(SrcVar0));
1440 emitIASAddrOpTyGPR(Func, Ty, StackAddr, Src1, AddrEmitter); 1460 emitIASAddrOpTyGPR(Func, Ty, StackAddr, Src1, AddrEmitter);
1441 } 1461 }
1442 } else if (const OperandX8632Mem *SrcMem0 = 1462 } else if (const OperandX8632Mem *SrcMem0 =
1443 llvm::dyn_cast<OperandX8632Mem>(Src0)) { 1463 llvm::dyn_cast<OperandX8632Mem>(Src0)) {
(...skipping 20 matching lines...) Expand all
1464 } 1484 }
1465 1485
1466 void InstX8632Ucomiss::emitIAS(const Cfg *Func) const { 1486 void InstX8632Ucomiss::emitIAS(const Cfg *Func) const {
1467 assert(getSrcSize() == 2); 1487 assert(getSrcSize() == 2);
1468 // Currently src0 is always a variable by convention, to avoid having 1488 // Currently src0 is always a variable by convention, to avoid having
1469 // two memory operands. 1489 // two memory operands.
1470 assert(llvm::isa<Variable>(getSrc(0))); 1490 assert(llvm::isa<Variable>(getSrc(0)));
1471 const Variable *Src0 = llvm::cast<Variable>(getSrc(0)); 1491 const Variable *Src0 = llvm::cast<Variable>(getSrc(0));
1472 Type Ty = Src0->getType(); 1492 Type Ty = Src0->getType();
1473 const static x86::AssemblerX86::XmmEmitterRegOp Emitter = { 1493 const static x86::AssemblerX86::XmmEmitterRegOp Emitter = {
1474 &x86::AssemblerX86::ucomiss, &x86::AssemblerX86::ucomiss}; 1494 &x86::AssemblerX86::ucomiss, &x86::AssemblerX86::ucomiss
1495 };
1475 emitIASRegOpTyXMM(Func, Ty, Src0, getSrc(1), Emitter); 1496 emitIASRegOpTyXMM(Func, Ty, Src0, getSrc(1), Emitter);
1476 } 1497 }
1477 1498
1478 void InstX8632Ucomiss::dump(const Cfg *Func) const { 1499 void InstX8632Ucomiss::dump(const Cfg *Func) const {
1479 Ostream &Str = Func->getContext()->getStrDump(); 1500 Ostream &Str = Func->getContext()->getStrDump();
1480 Str << "ucomiss." << getSrc(0)->getType() << " "; 1501 Str << "ucomiss." << getSrc(0)->getType() << " ";
1481 dumpSources(Func); 1502 dumpSources(Func);
1482 } 1503 }
1483 1504
1484 void InstX8632UD2::emit(const Cfg *Func) const { 1505 void InstX8632UD2::emit(const Cfg *Func) const {
(...skipping 25 matching lines...) Expand all
1510 Str << "\n"; 1531 Str << "\n";
1511 } 1532 }
1512 1533
1513 void InstX8632Test::emitIAS(const Cfg *Func) const { 1534 void InstX8632Test::emitIAS(const Cfg *Func) const {
1514 assert(getSrcSize() == 2); 1535 assert(getSrcSize() == 2);
1515 const Operand *Src0 = getSrc(0); 1536 const Operand *Src0 = getSrc(0);
1516 const Operand *Src1 = getSrc(1); 1537 const Operand *Src1 = getSrc(1);
1517 Type Ty = Src0->getType(); 1538 Type Ty = Src0->getType();
1518 // The Reg/Addr form of test is not encodeable. 1539 // The Reg/Addr form of test is not encodeable.
1519 static const x86::AssemblerX86::GPREmitterRegOp RegEmitter = { 1540 static const x86::AssemblerX86::GPREmitterRegOp RegEmitter = {
1520 &x86::AssemblerX86::test, NULL, &x86::AssemblerX86::test}; 1541 &x86::AssemblerX86::test, NULL, &x86::AssemblerX86::test
1542 };
1521 static const x86::AssemblerX86::GPREmitterAddrOp AddrEmitter = { 1543 static const x86::AssemblerX86::GPREmitterAddrOp AddrEmitter = {
1522 &x86::AssemblerX86::test, &x86::AssemblerX86::test}; 1544 &x86::AssemblerX86::test, &x86::AssemblerX86::test
1545 };
1523 if (const Variable *SrcVar0 = llvm::dyn_cast<Variable>(Src0)) { 1546 if (const Variable *SrcVar0 = llvm::dyn_cast<Variable>(Src0)) {
1524 if (SrcVar0->hasReg()) { 1547 if (SrcVar0->hasReg()) {
1525 emitIASRegOpTyGPR(Func, Ty, SrcVar0, Src1, RegEmitter); 1548 emitIASRegOpTyGPR(Func, Ty, SrcVar0, Src1, RegEmitter);
1526 } else { 1549 } else {
1527 llvm_unreachable("Nothing actually generates this so it's untested"); 1550 llvm_unreachable("Nothing actually generates this so it's untested");
1528 x86::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget()) 1551 x86::Address StackAddr(static_cast<TargetX8632 *>(Func->getTarget())
1529 ->stackVarToAsmOperand(SrcVar0)); 1552 ->stackVarToAsmOperand(SrcVar0));
1530 emitIASAddrOpTyGPR(Func, Ty, StackAddr, Src1, AddrEmitter); 1553 emitIASAddrOpTyGPR(Func, Ty, StackAddr, Src1, AddrEmitter);
1531 } 1554 }
1532 } else if (const OperandX8632Mem *SrcMem0 = 1555 } else if (const OperandX8632Mem *SrcMem0 =
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1763 getSrc(0)->emit(Func); 1786 getSrc(0)->emit(Func);
1764 Str << "\n"; 1787 Str << "\n";
1765 } 1788 }
1766 1789
1767 template <> void InstX8632Movp::emitIAS(const Cfg *Func) const { 1790 template <> void InstX8632Movp::emitIAS(const Cfg *Func) const {
1768 assert(getSrcSize() == 1); 1791 assert(getSrcSize() == 1);
1769 assert(isVectorType(getDest()->getType())); 1792 assert(isVectorType(getDest()->getType()));
1770 const Variable *Dest = getDest(); 1793 const Variable *Dest = getDest();
1771 const Operand *Src = getSrc(0); 1794 const Operand *Src = getSrc(0);
1772 const static x86::AssemblerX86::XmmEmitterMovOps Emitter = { 1795 const static x86::AssemblerX86::XmmEmitterMovOps Emitter = {
1773 &x86::AssemblerX86::movups, &x86::AssemblerX86::movups, 1796 &x86::AssemblerX86::movups, &x86::AssemblerX86::movups,
1774 &x86::AssemblerX86::movups}; 1797 &x86::AssemblerX86::movups
1798 };
1775 emitIASMovlikeXMM(Func, Dest, Src, Emitter); 1799 emitIASMovlikeXMM(Func, Dest, Src, Emitter);
1776 } 1800 }
1777 1801
1778 template <> void InstX8632Movq::emit(const Cfg *Func) const { 1802 template <> void InstX8632Movq::emit(const Cfg *Func) const {
1779 Ostream &Str = Func->getContext()->getStrEmit(); 1803 Ostream &Str = Func->getContext()->getStrEmit();
1780 assert(getSrcSize() == 1); 1804 assert(getSrcSize() == 1);
1781 assert(getDest()->getType() == IceType_i64 || 1805 assert(getDest()->getType() == IceType_i64 ||
1782 getDest()->getType() == IceType_f64); 1806 getDest()->getType() == IceType_f64);
1783 Str << "\tmovq\t"; 1807 Str << "\tmovq\t";
1784 getDest()->emit(Func); 1808 getDest()->emit(Func);
1785 Str << ", "; 1809 Str << ", ";
1786 getSrc(0)->emit(Func); 1810 getSrc(0)->emit(Func);
1787 Str << "\n"; 1811 Str << "\n";
1788 } 1812 }
1789 1813
1790 template <> void InstX8632Movq::emitIAS(const Cfg *Func) const { 1814 template <> void InstX8632Movq::emitIAS(const Cfg *Func) const {
1791 assert(getSrcSize() == 1); 1815 assert(getSrcSize() == 1);
1792 assert(getDest()->getType() == IceType_i64 || 1816 assert(getDest()->getType() == IceType_i64 ||
1793 getDest()->getType() == IceType_f64); 1817 getDest()->getType() == IceType_f64);
1794 const Variable *Dest = getDest(); 1818 const Variable *Dest = getDest();
1795 const Operand *Src = getSrc(0); 1819 const Operand *Src = getSrc(0);
1796 const static x86::AssemblerX86::XmmEmitterMovOps Emitter = { 1820 const static x86::AssemblerX86::XmmEmitterMovOps Emitter = {
1797 &x86::AssemblerX86::movq, &x86::AssemblerX86::movq, 1821 &x86::AssemblerX86::movq, &x86::AssemblerX86::movq, &x86::AssemblerX86::movq
1798 &x86::AssemblerX86::movq}; 1822 };
1799 emitIASMovlikeXMM(Func, Dest, Src, Emitter); 1823 emitIASMovlikeXMM(Func, Dest, Src, Emitter);
1800 } 1824 }
1801 1825
1802 template <> void InstX8632MovssRegs::emitIAS(const Cfg *Func) const { 1826 template <> void InstX8632MovssRegs::emitIAS(const Cfg *Func) const {
1803 // This is Binop variant is only intended to be used for reg-reg moves 1827 // This is Binop variant is only intended to be used for reg-reg moves
1804 // where part of the Dest register is untouched. 1828 // where part of the Dest register is untouched.
1805 assert(getSrcSize() == 2); 1829 assert(getSrcSize() == 2);
1806 const Variable *Dest = getDest(); 1830 const Variable *Dest = getDest();
1807 assert(Dest == getSrc(0)); 1831 assert(Dest == getSrc(0));
1808 const Variable *Src = llvm::cast<Variable>(getSrc(1)); 1832 const Variable *Src = llvm::cast<Variable>(getSrc(1));
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
2366 } 2390 }
2367 Str << "("; 2391 Str << "(";
2368 if (Func) 2392 if (Func)
2369 Var->dump(Func); 2393 Var->dump(Func);
2370 else 2394 else
2371 Var->dump(Str); 2395 Var->dump(Str);
2372 Str << ")"; 2396 Str << ")";
2373 } 2397 }
2374 2398
2375 } // end of namespace Ice 2399 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceGlobalContext.cpp ('k') | src/IceOperand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698