Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 //===- subzero/src/IceInstX86BaseImpl.h - Generic X86 instructions -*- C++ -*=// | 1 //===- subzero/src/IceInstX86BaseImpl.h - Generic X86 instructions -*- C++ -*=// |
| 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 /// \file | 10 /// \file |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 579 Str << "*"; | 579 Str << "*"; |
| 580 getCallTarget()->emit(Func); | 580 getCallTarget()->emit(Func); |
| 581 } | 581 } |
| 582 Func->getTarget()->resetStackAdjustment(); | 582 Func->getTarget()->resetStackAdjustment(); |
| 583 } | 583 } |
| 584 | 584 |
| 585 template <class Machine> | 585 template <class Machine> |
| 586 void InstX86Call<Machine>::emitIAS(const Cfg *Func) const { | 586 void InstX86Call<Machine>::emitIAS(const Cfg *Func) const { |
| 587 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 587 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 588 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 588 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 589 Operand *Target = getCallTarget(); | 589 Operand *Target = getCallTarget(); |
|
Jim Stichnoth
2015/11/11 17:39:45
Rename this to CallTarget, and do
TargetLowering
sehr
2015/11/11 22:14:10
I went globally through this file. There are some
| |
| 590 if (const auto *Var = llvm::dyn_cast<Variable>(Target)) { | 590 if (const auto *Var = llvm::dyn_cast<Variable>(Target)) { |
| 591 if (Var->hasReg()) { | 591 if (Var->hasReg()) { |
| 592 Asm->call(InstX86Base<Machine>::Traits::getEncodedGPR(Var->getRegNum())); | 592 Asm->call(InstX86Base<Machine>::Traits::getEncodedGPR(Var->getRegNum())); |
| 593 } else { | 593 } else { |
| 594 Asm->call( | 594 Asm->call( |
| 595 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 595 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 596 Func->getTarget()) | 596 Func->getTarget()) |
| 597 ->stackVarToAsmOperand(Var)); | 597 ->stackVarToAsmOperand(Var)); |
| 598 } | 598 } |
| 599 } else if (const auto *Mem = llvm::dyn_cast< | 599 } else if (const auto *Mem = llvm::dyn_cast< |
| 600 typename InstX86Base<Machine>::Traits::X86OperandMem>( | 600 typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 601 Target)) { | 601 Target)) { |
| 602 assert(Mem->getSegmentRegister() == | 602 assert(Mem->getSegmentRegister() == |
| 603 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 603 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 604 Asm->call(Mem->toAsmAddress(Asm)); | 604 Asm->call(Mem->toAsmAddress(Asm, Func->getTarget())); |
| 605 } else if (const auto *CR = llvm::dyn_cast<ConstantRelocatable>(Target)) { | 605 } else if (const auto *CR = llvm::dyn_cast<ConstantRelocatable>(Target)) { |
| 606 assert(CR->getOffset() == 0 && "We only support calling a function"); | 606 assert(CR->getOffset() == 0 && "We only support calling a function"); |
| 607 Asm->call(CR); | 607 Asm->call(CR); |
| 608 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Target)) { | 608 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Target)) { |
| 609 Asm->call(Immediate(Imm->getValue())); | 609 Asm->call(Immediate(Imm->getValue())); |
| 610 } else { | 610 } else { |
| 611 llvm_unreachable("Unexpected operand type"); | 611 llvm_unreachable("Unexpected operand type"); |
| 612 } | 612 } |
| 613 Func->getTarget()->resetStackAdjustment(); | 613 Func->getTarget()->resetStackAdjustment(); |
| 614 } | 614 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 662 } else { | 662 } else { |
| 663 typename InstX86Base<Machine>::Traits::Address StackAddr( | 663 typename InstX86Base<Machine>::Traits::Address StackAddr( |
| 664 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 664 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 665 Func->getTarget()) | 665 Func->getTarget()) |
| 666 ->stackVarToAsmOperand(Var)); | 666 ->stackVarToAsmOperand(Var)); |
| 667 (Asm->*(Emitter.Addr))(Ty, StackAddr); | 667 (Asm->*(Emitter.Addr))(Ty, StackAddr); |
| 668 } | 668 } |
| 669 } else if (const auto *Mem = llvm::dyn_cast< | 669 } else if (const auto *Mem = llvm::dyn_cast< |
| 670 typename InstX86Base<Machine>::Traits::X86OperandMem>(Op)) { | 670 typename InstX86Base<Machine>::Traits::X86OperandMem>(Op)) { |
| 671 Mem->emitSegmentOverride(Asm); | 671 Mem->emitSegmentOverride(Asm); |
| 672 (Asm->*(Emitter.Addr))(Ty, Mem->toAsmAddress(Asm)); | 672 (Asm->*(Emitter.Addr))(Ty, Mem->toAsmAddress(Asm, Func->getTarget())); |
| 673 } else { | 673 } else { |
| 674 llvm_unreachable("Unexpected operand type"); | 674 llvm_unreachable("Unexpected operand type"); |
| 675 } | 675 } |
| 676 } | 676 } |
| 677 | 677 |
| 678 template <class Machine, bool VarCanBeByte, bool SrcCanBeByte> | 678 template <class Machine, bool VarCanBeByte, bool SrcCanBeByte> |
| 679 void emitIASRegOpTyGPR( | 679 void emitIASRegOpTyGPR( |
| 680 const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, | 680 const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, |
| 681 const typename InstX86Base<Machine>::Traits::Assembler::GPREmitterRegOp | 681 const typename InstX86Base<Machine>::Traits::Assembler::GPREmitterRegOp |
| 682 &Emitter) { | 682 &Emitter) { |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 699 } else { | 699 } else { |
| 700 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = | 700 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
| 701 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 701 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 702 Func->getTarget()) | 702 Func->getTarget()) |
| 703 ->stackVarToAsmOperand(SrcVar); | 703 ->stackVarToAsmOperand(SrcVar); |
| 704 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, SrcStackAddr); | 704 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, SrcStackAddr); |
| 705 } | 705 } |
| 706 } else if (const auto *Mem = llvm::dyn_cast< | 706 } else if (const auto *Mem = llvm::dyn_cast< |
| 707 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 707 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 708 Mem->emitSegmentOverride(Asm); | 708 Mem->emitSegmentOverride(Asm); |
| 709 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, Mem->toAsmAddress(Asm)); | 709 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, |
| 710 Mem->toAsmAddress(Asm, Func->getTarget())); | |
| 710 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src)) { | 711 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src)) { |
| 711 (Asm->*(Emitter.GPRImm))(Ty, VarReg, Immediate(Imm->getValue())); | 712 (Asm->*(Emitter.GPRImm))(Ty, VarReg, Immediate(Imm->getValue())); |
| 712 } else if (const auto *Reloc = llvm::dyn_cast<ConstantRelocatable>(Src)) { | 713 } else if (const auto *Reloc = llvm::dyn_cast<ConstantRelocatable>(Src)) { |
| 713 AssemblerFixup *Fixup = | 714 AssemblerFixup *Fixup = |
| 714 Asm->createFixup(InstX86Base<Machine>::Traits::RelFixup, Reloc); | 715 Asm->createFixup(InstX86Base<Machine>::Traits::RelFixup, Reloc); |
| 715 (Asm->*(Emitter.GPRImm))(Ty, VarReg, Immediate(Reloc->getOffset(), Fixup)); | 716 (Asm->*(Emitter.GPRImm))(Ty, VarReg, Immediate(Reloc->getOffset(), Fixup)); |
| 716 } else if (const auto *Split = llvm::dyn_cast< | 717 } else if (const auto *Split = llvm::dyn_cast< |
| 717 typename InstX86Base<Machine>::Traits::VariableSplit>(Src)) { | 718 typename InstX86Base<Machine>::Traits::VariableSplit>(Src)) { |
| 718 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, Split->toAsmAddress(Func)); | 719 (Asm->*(Emitter.GPRAddr))(Ty, VarReg, Split->toAsmAddress(Func)); |
| 719 } else { | 720 } else { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 757 typename InstX86Base<Machine>::Traits::Address StackAddr( | 758 typename InstX86Base<Machine>::Traits::Address StackAddr( |
| 758 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 759 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 759 Func->getTarget()) | 760 Func->getTarget()) |
| 760 ->stackVarToAsmOperand(Op0Var)); | 761 ->stackVarToAsmOperand(Op0Var)); |
| 761 emitIASAddrOpTyGPR<Machine>(Func, Ty, StackAddr, Op1, Emitter); | 762 emitIASAddrOpTyGPR<Machine>(Func, Ty, StackAddr, Op1, Emitter); |
| 762 } else if (const auto *Op0Mem = llvm::dyn_cast< | 763 } else if (const auto *Op0Mem = llvm::dyn_cast< |
| 763 typename InstX86Base<Machine>::Traits::X86OperandMem>(Op0)) { | 764 typename InstX86Base<Machine>::Traits::X86OperandMem>(Op0)) { |
| 764 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 765 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 765 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 766 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 766 Op0Mem->emitSegmentOverride(Asm); | 767 Op0Mem->emitSegmentOverride(Asm); |
| 767 emitIASAddrOpTyGPR<Machine>(Func, Ty, Op0Mem->toAsmAddress(Asm), Op1, | 768 emitIASAddrOpTyGPR<Machine>( |
| 768 Emitter); | 769 Func, Ty, Op0Mem->toAsmAddress(Asm, Func->getTarget()), Op1, Emitter); |
| 769 } else if (const auto *Split = llvm::dyn_cast< | 770 } else if (const auto *Split = llvm::dyn_cast< |
| 770 typename InstX86Base<Machine>::Traits::VariableSplit>(Op0)) { | 771 typename InstX86Base<Machine>::Traits::VariableSplit>(Op0)) { |
| 771 emitIASAddrOpTyGPR<Machine>(Func, Ty, Split->toAsmAddress(Func), Op1, | 772 emitIASAddrOpTyGPR<Machine>(Func, Ty, Split->toAsmAddress(Func), Op1, |
| 772 Emitter); | 773 Emitter); |
| 773 } else { | 774 } else { |
| 774 llvm_unreachable("Unexpected operand type"); | 775 llvm_unreachable("Unexpected operand type"); |
| 775 } | 776 } |
| 776 } | 777 } |
| 777 | 778 |
| 778 template <class Machine> | 779 template <class Machine> |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 849 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = | 850 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
| 850 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 851 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 851 Func->getTarget()) | 852 Func->getTarget()) |
| 852 ->stackVarToAsmOperand(SrcVar); | 853 ->stackVarToAsmOperand(SrcVar); |
| 853 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); | 854 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); |
| 854 } | 855 } |
| 855 } else if (const auto *Mem = llvm::dyn_cast< | 856 } else if (const auto *Mem = llvm::dyn_cast< |
| 856 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 857 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 857 assert(Mem->getSegmentRegister() == | 858 assert(Mem->getSegmentRegister() == |
| 858 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 859 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 859 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, Mem->toAsmAddress(Asm)); | 860 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, |
| 861 Mem->toAsmAddress(Asm, Func->getTarget())); | |
| 860 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src)) { | 862 } else if (const auto *Imm = llvm::dyn_cast<ConstantInteger32>(Src)) { |
| 861 (Asm->*(Emitter.XmmImm))(Ty, VarReg, Immediate(Imm->getValue())); | 863 (Asm->*(Emitter.XmmImm))(Ty, VarReg, Immediate(Imm->getValue())); |
| 862 } else { | 864 } else { |
| 863 llvm_unreachable("Unexpected operand type"); | 865 llvm_unreachable("Unexpected operand type"); |
| 864 } | 866 } |
| 865 } | 867 } |
| 866 | 868 |
| 867 template <class Machine> | 869 template <class Machine> |
| 868 void emitIASRegOpTyXMM( | 870 void emitIASRegOpTyXMM( |
| 869 const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, | 871 const Cfg *Func, Type Ty, const Variable *Var, const Operand *Src, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 883 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = | 885 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
| 884 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 886 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 885 Func->getTarget()) | 887 Func->getTarget()) |
| 886 ->stackVarToAsmOperand(SrcVar); | 888 ->stackVarToAsmOperand(SrcVar); |
| 887 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); | 889 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, SrcStackAddr); |
| 888 } | 890 } |
| 889 } else if (const auto *Mem = llvm::dyn_cast< | 891 } else if (const auto *Mem = llvm::dyn_cast< |
| 890 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 892 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 891 assert(Mem->getSegmentRegister() == | 893 assert(Mem->getSegmentRegister() == |
| 892 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 894 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 893 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, Mem->toAsmAddress(Asm)); | 895 (Asm->*(Emitter.XmmAddr))(Ty, VarReg, |
| 896 Mem->toAsmAddress(Asm, Func->getTarget())); | |
| 894 } else if (const auto *Imm = llvm::dyn_cast<Constant>(Src)) { | 897 } else if (const auto *Imm = llvm::dyn_cast<Constant>(Src)) { |
| 895 (Asm->*(Emitter.XmmAddr))( | 898 (Asm->*(Emitter.XmmAddr))( |
| 896 Ty, VarReg, | 899 Ty, VarReg, |
| 897 InstX86Base<Machine>::Traits::Address::ofConstPool(Asm, Imm)); | 900 InstX86Base<Machine>::Traits::Address::ofConstPool(Asm, Imm)); |
| 898 } else { | 901 } else { |
| 899 llvm_unreachable("Unexpected operand type"); | 902 llvm_unreachable("Unexpected operand type"); |
| 900 } | 903 } |
| 901 } | 904 } |
| 902 | 905 |
| 903 template <class Machine, typename DReg_t, typename SReg_t, | 906 template <class Machine, typename DReg_t, typename SReg_t, |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 917 } else { | 920 } else { |
| 918 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = | 921 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
| 919 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 922 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 920 Func->getTarget()) | 923 Func->getTarget()) |
| 921 ->stackVarToAsmOperand(SrcVar); | 924 ->stackVarToAsmOperand(SrcVar); |
| 922 (Asm->*(Emitter.RegAddr))(DestTy, DestReg, SrcTy, SrcStackAddr); | 925 (Asm->*(Emitter.RegAddr))(DestTy, DestReg, SrcTy, SrcStackAddr); |
| 923 } | 926 } |
| 924 } else if (const auto *Mem = llvm::dyn_cast< | 927 } else if (const auto *Mem = llvm::dyn_cast< |
| 925 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 928 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 926 Mem->emitSegmentOverride(Asm); | 929 Mem->emitSegmentOverride(Asm); |
| 927 (Asm->*(Emitter.RegAddr))(DestTy, DestReg, SrcTy, Mem->toAsmAddress(Asm)); | 930 (Asm->*(Emitter.RegAddr))(DestTy, DestReg, SrcTy, |
| 931 Mem->toAsmAddress(Asm, Func->getTarget())); | |
| 928 } else { | 932 } else { |
| 929 llvm_unreachable("Unexpected operand type"); | 933 llvm_unreachable("Unexpected operand type"); |
| 930 } | 934 } |
| 931 } | 935 } |
| 932 | 936 |
| 933 template <class Machine, typename DReg_t, typename SReg_t, | 937 template <class Machine, typename DReg_t, typename SReg_t, |
| 934 DReg_t (*destEnc)(int32_t), SReg_t (*srcEnc)(int32_t)> | 938 DReg_t (*destEnc)(int32_t), SReg_t (*srcEnc)(int32_t)> |
| 935 void emitIASThreeOpImmOps( | 939 void emitIASThreeOpImmOps( |
| 936 const Cfg *Func, Type DispatchTy, const Variable *Dest, const Operand *Src0, | 940 const Cfg *Func, Type DispatchTy, const Variable *Dest, const Operand *Src0, |
| 937 const Operand *Src1, | 941 const Operand *Src1, |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 950 } else { | 954 } else { |
| 951 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = | 955 typename InstX86Base<Machine>::Traits::Address SrcStackAddr = |
| 952 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 956 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 953 Func->getTarget()) | 957 Func->getTarget()) |
| 954 ->stackVarToAsmOperand(SrcVar); | 958 ->stackVarToAsmOperand(SrcVar); |
| 955 (Asm->*(Emitter.RegAddrImm))(DispatchTy, DestReg, SrcStackAddr, Imm); | 959 (Asm->*(Emitter.RegAddrImm))(DispatchTy, DestReg, SrcStackAddr, Imm); |
| 956 } | 960 } |
| 957 } else if (const auto *Mem = llvm::dyn_cast< | 961 } else if (const auto *Mem = llvm::dyn_cast< |
| 958 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src0)) { | 962 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src0)) { |
| 959 Mem->emitSegmentOverride(Asm); | 963 Mem->emitSegmentOverride(Asm); |
| 960 (Asm->*(Emitter.RegAddrImm))(DispatchTy, DestReg, Mem->toAsmAddress(Asm), | 964 (Asm->*(Emitter.RegAddrImm))( |
| 961 Imm); | 965 DispatchTy, DestReg, Mem->toAsmAddress(Asm, Func->getTarget()), Imm); |
| 962 } else { | 966 } else { |
| 963 llvm_unreachable("Unexpected operand type"); | 967 llvm_unreachable("Unexpected operand type"); |
| 964 } | 968 } |
| 965 } | 969 } |
| 966 | 970 |
| 967 template <class Machine> | 971 template <class Machine> |
| 968 void emitIASMovlikeXMM( | 972 void emitIASMovlikeXMM( |
| 969 const Cfg *Func, const Variable *Dest, const Operand *Src, | 973 const Cfg *Func, const Variable *Dest, const Operand *Src, |
| 970 const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterMovOps | 974 const typename InstX86Base<Machine>::Traits::Assembler::XmmEmitterMovOps |
| 971 Emitter) { | 975 Emitter) { |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 983 typename InstX86Base<Machine>::Traits::Address StackAddr( | 987 typename InstX86Base<Machine>::Traits::Address StackAddr( |
| 984 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering | 988 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering |
| 985 *>(Func->getTarget()) | 989 *>(Func->getTarget()) |
| 986 ->stackVarToAsmOperand(SrcVar)); | 990 ->stackVarToAsmOperand(SrcVar)); |
| 987 (Asm->*(Emitter.XmmAddr))(DestReg, StackAddr); | 991 (Asm->*(Emitter.XmmAddr))(DestReg, StackAddr); |
| 988 } | 992 } |
| 989 } else if (const auto *SrcMem = llvm::dyn_cast< | 993 } else if (const auto *SrcMem = llvm::dyn_cast< |
| 990 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 994 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 991 assert(SrcMem->getSegmentRegister() == | 995 assert(SrcMem->getSegmentRegister() == |
| 992 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 996 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 993 (Asm->*(Emitter.XmmAddr))(DestReg, SrcMem->toAsmAddress(Asm)); | 997 (Asm->*(Emitter.XmmAddr))(DestReg, |
| 998 SrcMem->toAsmAddress(Asm, Func->getTarget())); | |
| 994 } else { | 999 } else { |
| 995 llvm_unreachable("Unexpected operand type"); | 1000 llvm_unreachable("Unexpected operand type"); |
| 996 } | 1001 } |
| 997 } else { | 1002 } else { |
| 998 typename InstX86Base<Machine>::Traits::Address StackAddr( | 1003 typename InstX86Base<Machine>::Traits::Address StackAddr( |
| 999 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 1004 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 1000 Func->getTarget()) | 1005 Func->getTarget()) |
| 1001 ->stackVarToAsmOperand(Dest)); | 1006 ->stackVarToAsmOperand(Dest)); |
| 1002 // Src must be a register in this case. | 1007 // Src must be a register in this case. |
| 1003 const auto *SrcVar = llvm::cast<Variable>(Src); | 1008 const auto *SrcVar = llvm::cast<Variable>(Src); |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1618 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 1623 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 1619 Func->getTarget()) | 1624 Func->getTarget()) |
| 1620 ->stackVarToAsmOperand(SrcVar)); | 1625 ->stackVarToAsmOperand(SrcVar)); |
| 1621 } | 1626 } |
| 1622 } else if (const auto *Mem = llvm::dyn_cast< | 1627 } else if (const auto *Mem = llvm::dyn_cast< |
| 1623 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 1628 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 1624 assert(Mem->getSegmentRegister() == | 1629 assert(Mem->getSegmentRegister() == |
| 1625 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 1630 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 1626 Asm->cmov(SrcTy, Condition, InstX86Base<Machine>::Traits::getEncodedGPR( | 1631 Asm->cmov(SrcTy, Condition, InstX86Base<Machine>::Traits::getEncodedGPR( |
| 1627 this->getDest()->getRegNum()), | 1632 this->getDest()->getRegNum()), |
| 1628 Mem->toAsmAddress(Asm)); | 1633 Mem->toAsmAddress(Asm, Func->getTarget())); |
| 1629 } else { | 1634 } else { |
| 1630 llvm_unreachable("Unexpected operand type"); | 1635 llvm_unreachable("Unexpected operand type"); |
| 1631 } | 1636 } |
| 1632 } | 1637 } |
| 1633 | 1638 |
| 1634 template <class Machine> | 1639 template <class Machine> |
| 1635 void InstX86Cmov<Machine>::dump(const Cfg *Func) const { | 1640 void InstX86Cmov<Machine>::dump(const Cfg *Func) const { |
| 1636 if (!BuildDefs::dump()) | 1641 if (!BuildDefs::dump()) |
| 1637 return; | 1642 return; |
| 1638 Ostream &Str = Func->getContext()->getStrDump(); | 1643 Ostream &Str = Func->getContext()->getStrDump(); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1723 assert(this->getSrcSize() == 3); | 1728 assert(this->getSrcSize() == 3); |
| 1724 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 1729 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 1725 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 1730 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 1726 Type Ty = this->getSrc(0)->getType(); | 1731 Type Ty = this->getSrc(0)->getType(); |
| 1727 const auto Mem = | 1732 const auto Mem = |
| 1728 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 1733 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 1729 this->getSrc(0)); | 1734 this->getSrc(0)); |
| 1730 assert(Mem->getSegmentRegister() == | 1735 assert(Mem->getSegmentRegister() == |
| 1731 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 1736 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 1732 const typename InstX86Base<Machine>::Traits::Address Addr = | 1737 const typename InstX86Base<Machine>::Traits::Address Addr = |
| 1733 Mem->toAsmAddress(Asm); | 1738 Mem->toAsmAddress(Asm, Func->getTarget()); |
| 1734 const auto *VarReg = llvm::cast<Variable>(this->getSrc(2)); | 1739 const auto *VarReg = llvm::cast<Variable>(this->getSrc(2)); |
| 1735 assert(VarReg->hasReg()); | 1740 assert(VarReg->hasReg()); |
| 1736 const typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister Reg = | 1741 const typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister Reg = |
| 1737 InstX86Base<Machine>::Traits::getEncodedGPR(VarReg->getRegNum()); | 1742 InstX86Base<Machine>::Traits::getEncodedGPR(VarReg->getRegNum()); |
| 1738 Asm->cmpxchg(Ty, Addr, Reg, this->Locked); | 1743 Asm->cmpxchg(Ty, Addr, Reg, this->Locked); |
| 1739 } | 1744 } |
| 1740 | 1745 |
| 1741 template <class Machine> | 1746 template <class Machine> |
| 1742 void InstX86Cmpxchg<Machine>::dump(const Cfg *Func) const { | 1747 void InstX86Cmpxchg<Machine>::dump(const Cfg *Func) const { |
| 1743 if (!BuildDefs::dump()) | 1748 if (!BuildDefs::dump()) |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1767 void InstX86Cmpxchg8b<Machine>::emitIAS(const Cfg *Func) const { | 1772 void InstX86Cmpxchg8b<Machine>::emitIAS(const Cfg *Func) const { |
| 1768 assert(this->getSrcSize() == 5); | 1773 assert(this->getSrcSize() == 5); |
| 1769 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 1774 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 1770 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 1775 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 1771 const auto Mem = | 1776 const auto Mem = |
| 1772 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 1777 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 1773 this->getSrc(0)); | 1778 this->getSrc(0)); |
| 1774 assert(Mem->getSegmentRegister() == | 1779 assert(Mem->getSegmentRegister() == |
| 1775 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 1780 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 1776 const typename InstX86Base<Machine>::Traits::Address Addr = | 1781 const typename InstX86Base<Machine>::Traits::Address Addr = |
| 1777 Mem->toAsmAddress(Asm); | 1782 Mem->toAsmAddress(Asm, Func->getTarget()); |
| 1778 Asm->cmpxchg8b(Addr, this->Locked); | 1783 Asm->cmpxchg8b(Addr, this->Locked); |
| 1779 } | 1784 } |
| 1780 | 1785 |
| 1781 template <class Machine> | 1786 template <class Machine> |
| 1782 void InstX86Cmpxchg8b<Machine>::dump(const Cfg *Func) const { | 1787 void InstX86Cmpxchg8b<Machine>::dump(const Cfg *Func) const { |
| 1783 if (!BuildDefs::dump()) | 1788 if (!BuildDefs::dump()) |
| 1784 return; | 1789 return; |
| 1785 Ostream &Str = Func->getContext()->getStrDump(); | 1790 Ostream &Str = Func->getContext()->getStrDump(); |
| 1786 if (this->Locked) { | 1791 if (this->Locked) { |
| 1787 Str << "lock "; | 1792 Str << "lock "; |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2120 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 2125 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 2121 Func->getTarget()) | 2126 Func->getTarget()) |
| 2122 ->stackVarToAsmOperand(DestVar)); | 2127 ->stackVarToAsmOperand(DestVar)); |
| 2123 Asm->movss(DestTy, StackAddr, SrcReg); | 2128 Asm->movss(DestTy, StackAddr, SrcReg); |
| 2124 } else { | 2129 } else { |
| 2125 const auto DestMem = | 2130 const auto DestMem = |
| 2126 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 2131 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 2127 Dest); | 2132 Dest); |
| 2128 assert(DestMem->getSegmentRegister() == | 2133 assert(DestMem->getSegmentRegister() == |
| 2129 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 2134 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 2130 Asm->movss(DestTy, DestMem->toAsmAddress(Asm), SrcReg); | 2135 Asm->movss(DestTy, DestMem->toAsmAddress(Asm, Func->getTarget()), SrcReg); |
| 2131 } | 2136 } |
| 2132 return; | 2137 return; |
| 2133 } else { | 2138 } else { |
| 2134 assert(isScalarIntegerType(DestTy)); | 2139 assert(isScalarIntegerType(DestTy)); |
| 2135 static const typename InstX86Base< | 2140 static const typename InstX86Base< |
| 2136 Machine>::Traits::Assembler::GPREmitterAddrOp GPRAddrEmitter = { | 2141 Machine>::Traits::Assembler::GPREmitterAddrOp GPRAddrEmitter = { |
| 2137 &InstX86Base<Machine>::Traits::Assembler::mov, | 2142 &InstX86Base<Machine>::Traits::Assembler::mov, |
| 2138 &InstX86Base<Machine>::Traits::Assembler::mov}; | 2143 &InstX86Base<Machine>::Traits::Assembler::mov}; |
| 2139 emitIASAsAddrOpTyGPR<Machine>(Func, DestTy, Dest, Src, GPRAddrEmitter); | 2144 emitIASAsAddrOpTyGPR<Machine>(Func, DestTy, Dest, Src, GPRAddrEmitter); |
| 2140 } | 2145 } |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 2169 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 2174 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 2170 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 2175 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 2171 assert(this->getSrcSize() == 2); | 2176 assert(this->getSrcSize() == 2); |
| 2172 const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0)); | 2177 const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0)); |
| 2173 const auto DestMem = | 2178 const auto DestMem = |
| 2174 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 2179 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 2175 this->getSrc(1)); | 2180 this->getSrc(1)); |
| 2176 assert(DestMem->getSegmentRegister() == | 2181 assert(DestMem->getSegmentRegister() == |
| 2177 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 2182 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 2178 assert(SrcVar->hasReg()); | 2183 assert(SrcVar->hasReg()); |
| 2179 Asm->movups(DestMem->toAsmAddress(Asm), | 2184 Asm->movups(DestMem->toAsmAddress(Asm, Func->getTarget()), |
| 2180 InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); | 2185 InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); |
| 2181 } | 2186 } |
| 2182 | 2187 |
| 2183 template <class Machine> | 2188 template <class Machine> |
| 2184 void InstX86StoreP<Machine>::dump(const Cfg *Func) const { | 2189 void InstX86StoreP<Machine>::dump(const Cfg *Func) const { |
| 2185 if (!BuildDefs::dump()) | 2190 if (!BuildDefs::dump()) |
| 2186 return; | 2191 return; |
| 2187 Ostream &Str = Func->getContext()->getStrDump(); | 2192 Ostream &Str = Func->getContext()->getStrDump(); |
| 2188 Str << "storep." << this->getSrc(0)->getType() << " "; | 2193 Str << "storep." << this->getSrc(0)->getType() << " "; |
| 2189 this->getSrc(1)->dump(Func); | 2194 this->getSrc(1)->dump(Func); |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 2211 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 2216 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 2212 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 2217 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 2213 assert(this->getSrcSize() == 2); | 2218 assert(this->getSrcSize() == 2); |
| 2214 const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0)); | 2219 const auto *SrcVar = llvm::cast<Variable>(this->getSrc(0)); |
| 2215 const auto DestMem = | 2220 const auto DestMem = |
| 2216 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 2221 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 2217 this->getSrc(1)); | 2222 this->getSrc(1)); |
| 2218 assert(DestMem->getSegmentRegister() == | 2223 assert(DestMem->getSegmentRegister() == |
| 2219 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 2224 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 2220 assert(SrcVar->hasReg()); | 2225 assert(SrcVar->hasReg()); |
| 2221 Asm->movq(DestMem->toAsmAddress(Asm), | 2226 Asm->movq(DestMem->toAsmAddress(Asm, Func->getTarget()), |
| 2222 InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); | 2227 InstX86Base<Machine>::Traits::getEncodedXmm(SrcVar->getRegNum())); |
| 2223 } | 2228 } |
| 2224 | 2229 |
| 2225 template <class Machine> | 2230 template <class Machine> |
| 2226 void InstX86StoreQ<Machine>::dump(const Cfg *Func) const { | 2231 void InstX86StoreQ<Machine>::dump(const Cfg *Func) const { |
| 2227 if (!BuildDefs::dump()) | 2232 if (!BuildDefs::dump()) |
| 2228 return; | 2233 return; |
| 2229 Ostream &Str = Func->getContext()->getStrDump(); | 2234 Ostream &Str = Func->getContext()->getStrDump(); |
| 2230 Str << "storeq." << this->getSrc(0)->getType() << " "; | 2235 Str << "storeq." << this->getSrc(0)->getType() << " "; |
| 2231 this->getSrc(1)->dump(Func); | 2236 this->getSrc(1)->dump(Func); |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2618 typename InstX86Base<Machine>::Traits::Address StackAddr( | 2623 typename InstX86Base<Machine>::Traits::Address StackAddr( |
| 2619 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( | 2624 static_cast<typename InstX86Base<Machine>::Traits::TargetLowering *>( |
| 2620 Func->getTarget()) | 2625 Func->getTarget()) |
| 2621 ->stackVarToAsmOperand(Var)); | 2626 ->stackVarToAsmOperand(Var)); |
| 2622 Asm->fld(Ty, StackAddr); | 2627 Asm->fld(Ty, StackAddr); |
| 2623 } | 2628 } |
| 2624 } else if (const auto *Mem = llvm::dyn_cast< | 2629 } else if (const auto *Mem = llvm::dyn_cast< |
| 2625 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { | 2630 typename InstX86Base<Machine>::Traits::X86OperandMem>(Src)) { |
| 2626 assert(Mem->getSegmentRegister() == | 2631 assert(Mem->getSegmentRegister() == |
| 2627 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 2632 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 2628 Asm->fld(Ty, Mem->toAsmAddress(Asm)); | 2633 Asm->fld(Ty, Mem->toAsmAddress(Asm, Func->getTarget())); |
| 2629 } else if (const auto *Imm = llvm::dyn_cast<Constant>(Src)) { | 2634 } else if (const auto *Imm = llvm::dyn_cast<Constant>(Src)) { |
| 2630 Asm->fld(Ty, InstX86Base<Machine>::Traits::Address::ofConstPool(Asm, Imm)); | 2635 Asm->fld(Ty, InstX86Base<Machine>::Traits::Address::ofConstPool(Asm, Imm)); |
| 2631 } else { | 2636 } else { |
| 2632 llvm_unreachable("Unexpected operand type"); | 2637 llvm_unreachable("Unexpected operand type"); |
| 2633 } | 2638 } |
| 2634 } | 2639 } |
| 2635 | 2640 |
| 2636 template <class Machine> void InstX86Fld<Machine>::dump(const Cfg *Func) const { | 2641 template <class Machine> void InstX86Fld<Machine>::dump(const Cfg *Func) const { |
| 2637 if (!BuildDefs::dump()) | 2642 if (!BuildDefs::dump()) |
| 2638 return; | 2643 return; |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3142 assert(this->getSrcSize() == 2); | 3147 assert(this->getSrcSize() == 2); |
| 3143 typename InstX86Base<Machine>::Traits::Assembler *Asm = | 3148 typename InstX86Base<Machine>::Traits::Assembler *Asm = |
| 3144 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); | 3149 Func->getAssembler<typename InstX86Base<Machine>::Traits::Assembler>(); |
| 3145 Type Ty = this->getSrc(0)->getType(); | 3150 Type Ty = this->getSrc(0)->getType(); |
| 3146 const auto Mem = | 3151 const auto Mem = |
| 3147 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 3152 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 3148 this->getSrc(0)); | 3153 this->getSrc(0)); |
| 3149 assert(Mem->getSegmentRegister() == | 3154 assert(Mem->getSegmentRegister() == |
| 3150 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 3155 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 3151 const typename InstX86Base<Machine>::Traits::Address Addr = | 3156 const typename InstX86Base<Machine>::Traits::Address Addr = |
| 3152 Mem->toAsmAddress(Asm); | 3157 Mem->toAsmAddress(Asm, Func->getTarget()); |
| 3153 const auto *VarReg = llvm::cast<Variable>(this->getSrc(1)); | 3158 const auto *VarReg = llvm::cast<Variable>(this->getSrc(1)); |
| 3154 assert(VarReg->hasReg()); | 3159 assert(VarReg->hasReg()); |
| 3155 const typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister Reg = | 3160 const typename InstX86Base<Machine>::Traits::RegisterSet::GPRRegister Reg = |
| 3156 InstX86Base<Machine>::Traits::getEncodedGPR(VarReg->getRegNum()); | 3161 InstX86Base<Machine>::Traits::getEncodedGPR(VarReg->getRegNum()); |
| 3157 Asm->xadd(Ty, Addr, Reg, this->Locked); | 3162 Asm->xadd(Ty, Addr, Reg, this->Locked); |
| 3158 } | 3163 } |
| 3159 | 3164 |
| 3160 template <class Machine> | 3165 template <class Machine> |
| 3161 void InstX86Xadd<Machine>::dump(const Cfg *Func) const { | 3166 void InstX86Xadd<Machine>::dump(const Cfg *Func) const { |
| 3162 if (!BuildDefs::dump()) | 3167 if (!BuildDefs::dump()) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3199 Asm->xchg(Ty, Reg0, Reg1); | 3204 Asm->xchg(Ty, Reg0, Reg1); |
| 3200 return; | 3205 return; |
| 3201 } | 3206 } |
| 3202 | 3207 |
| 3203 const auto *Mem = | 3208 const auto *Mem = |
| 3204 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( | 3209 llvm::cast<typename InstX86Base<Machine>::Traits::X86OperandMem>( |
| 3205 this->getSrc(0)); | 3210 this->getSrc(0)); |
| 3206 assert(Mem->getSegmentRegister() == | 3211 assert(Mem->getSegmentRegister() == |
| 3207 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); | 3212 InstX86Base<Machine>::Traits::X86OperandMem::DefaultSegment); |
| 3208 const typename InstX86Base<Machine>::Traits::Address Addr = | 3213 const typename InstX86Base<Machine>::Traits::Address Addr = |
| 3209 Mem->toAsmAddress(Asm); | 3214 Mem->toAsmAddress(Asm, Func->getTarget()); |
| 3210 Asm->xchg(Ty, Addr, Reg1); | 3215 Asm->xchg(Ty, Addr, Reg1); |
| 3211 } | 3216 } |
| 3212 | 3217 |
| 3213 template <class Machine> | 3218 template <class Machine> |
| 3214 void InstX86Xchg<Machine>::dump(const Cfg *Func) const { | 3219 void InstX86Xchg<Machine>::dump(const Cfg *Func) const { |
| 3215 if (!BuildDefs::dump()) | 3220 if (!BuildDefs::dump()) |
| 3216 return; | 3221 return; |
| 3217 Ostream &Str = Func->getContext()->getStrDump(); | 3222 Ostream &Str = Func->getContext()->getStrDump(); |
| 3218 Type Ty = this->getSrc(0)->getType(); | 3223 Type Ty = this->getSrc(0)->getType(); |
| 3219 Str << "xchg." << Ty << " "; | 3224 Str << "xchg." << Ty << " "; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3270 return; | 3275 return; |
| 3271 Ostream &Str = Func->getContext()->getStrDump(); | 3276 Ostream &Str = Func->getContext()->getStrDump(); |
| 3272 Str << "IACA_END"; | 3277 Str << "IACA_END"; |
| 3273 } | 3278 } |
| 3274 | 3279 |
| 3275 } // end of namespace X86Internal | 3280 } // end of namespace X86Internal |
| 3276 | 3281 |
| 3277 } // end of namespace Ice | 3282 } // end of namespace Ice |
| 3278 | 3283 |
| 3279 #endif // SUBZERO_SRC_ICEINSTX86BASEIMPL_H | 3284 #endif // SUBZERO_SRC_ICEINSTX86BASEIMPL_H |
| OLD | NEW |