diff options
Diffstat (limited to 'lib/Target/X86/X86FloatingPoint.cpp')
-rw-r--r-- | lib/Target/X86/X86FloatingPoint.cpp | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/lib/Target/X86/X86FloatingPoint.cpp b/lib/Target/X86/X86FloatingPoint.cpp index c293a32d01..e481406d11 100644 --- a/lib/Target/X86/X86FloatingPoint.cpp +++ b/lib/Target/X86/X86FloatingPoint.cpp @@ -326,53 +326,79 @@ static int Lookup(const TableEntry *Table, unsigned N, unsigned Opcode) { static const TableEntry OpcodeTable[] = { { X86::ABS_Fp32 , X86::ABS_F }, { X86::ABS_Fp64 , X86::ABS_F }, + { X86::ABS_Fp80 , X86::ABS_F }, { X86::ADD_Fp32m , X86::ADD_F32m }, { X86::ADD_Fp64m , X86::ADD_F64m }, { X86::ADD_Fp64m32 , X86::ADD_F32m }, + { X86::ADD_Fp80m32 , X86::ADD_F32m }, + { X86::ADD_Fp80m64 , X86::ADD_F64m }, { X86::ADD_FpI16m32 , X86::ADD_FI16m }, { X86::ADD_FpI16m64 , X86::ADD_FI16m }, + { X86::ADD_FpI16m80 , X86::ADD_FI16m }, { X86::ADD_FpI32m32 , X86::ADD_FI32m }, { X86::ADD_FpI32m64 , X86::ADD_FI32m }, + { X86::ADD_FpI32m80 , X86::ADD_FI32m }, { X86::CHS_Fp32 , X86::CHS_F }, { X86::CHS_Fp64 , X86::CHS_F }, + { X86::CHS_Fp80 , X86::CHS_F }, { X86::CMOVBE_Fp32 , X86::CMOVBE_F }, { X86::CMOVBE_Fp64 , X86::CMOVBE_F }, + { X86::CMOVBE_Fp80 , X86::CMOVBE_F }, { X86::CMOVB_Fp32 , X86::CMOVB_F }, { X86::CMOVB_Fp64 , X86::CMOVB_F }, + { X86::CMOVB_Fp80 , X86::CMOVB_F }, { X86::CMOVE_Fp32 , X86::CMOVE_F }, { X86::CMOVE_Fp64 , X86::CMOVE_F }, + { X86::CMOVE_Fp80 , X86::CMOVE_F }, { X86::CMOVNBE_Fp32 , X86::CMOVNBE_F }, { X86::CMOVNBE_Fp64 , X86::CMOVNBE_F }, + { X86::CMOVNBE_Fp80 , X86::CMOVNBE_F }, { X86::CMOVNB_Fp32 , X86::CMOVNB_F }, { X86::CMOVNB_Fp64 , X86::CMOVNB_F }, + { X86::CMOVNB_Fp80 , X86::CMOVNB_F }, { X86::CMOVNE_Fp32 , X86::CMOVNE_F }, { X86::CMOVNE_Fp64 , X86::CMOVNE_F }, + { X86::CMOVNE_Fp80 , X86::CMOVNE_F }, { X86::CMOVNP_Fp32 , X86::CMOVNP_F }, { X86::CMOVNP_Fp64 , X86::CMOVNP_F }, + { X86::CMOVNP_Fp80 , X86::CMOVNP_F }, { X86::CMOVP_Fp32 , X86::CMOVP_F }, { X86::CMOVP_Fp64 , X86::CMOVP_F }, + { X86::CMOVP_Fp80 , X86::CMOVP_F }, { X86::COS_Fp32 , X86::COS_F }, { X86::COS_Fp64 , X86::COS_F }, + { X86::COS_Fp80 , X86::COS_F }, { X86::DIVR_Fp32m , X86::DIVR_F32m }, { X86::DIVR_Fp64m , X86::DIVR_F64m }, { X86::DIVR_Fp64m32 , X86::DIVR_F32m }, + { X86::DIVR_Fp80m32 , X86::DIVR_F32m }, + { X86::DIVR_Fp80m64 , X86::DIVR_F64m }, { X86::DIVR_FpI16m32, X86::DIVR_FI16m}, { X86::DIVR_FpI16m64, X86::DIVR_FI16m}, + { X86::DIVR_FpI16m80, X86::DIVR_FI16m}, { X86::DIVR_FpI32m32, X86::DIVR_FI32m}, { X86::DIVR_FpI32m64, X86::DIVR_FI32m}, + { X86::DIVR_FpI32m80, X86::DIVR_FI32m}, { X86::DIV_Fp32m , X86::DIV_F32m }, { X86::DIV_Fp64m , X86::DIV_F64m }, { X86::DIV_Fp64m32 , X86::DIV_F32m }, + { X86::DIV_Fp80m32 , X86::DIV_F32m }, + { X86::DIV_Fp80m64 , X86::DIV_F64m }, { X86::DIV_FpI16m32 , X86::DIV_FI16m }, { X86::DIV_FpI16m64 , X86::DIV_FI16m }, + { X86::DIV_FpI16m80 , X86::DIV_FI16m }, { X86::DIV_FpI32m32 , X86::DIV_FI32m }, { X86::DIV_FpI32m64 , X86::DIV_FI32m }, + { X86::DIV_FpI32m80 , X86::DIV_FI32m }, { X86::ILD_Fp16m32 , X86::ILD_F16m }, { X86::ILD_Fp16m64 , X86::ILD_F16m }, + { X86::ILD_Fp16m80 , X86::ILD_F16m }, { X86::ILD_Fp32m32 , X86::ILD_F32m }, { X86::ILD_Fp32m64 , X86::ILD_F32m }, + { X86::ILD_Fp32m80 , X86::ILD_F32m }, { X86::ILD_Fp64m32 , X86::ILD_F64m }, { X86::ILD_Fp64m64 , X86::ILD_F64m }, + { X86::ILD_Fp64m80 , X86::ILD_F64m }, { X86::ISTT_Fp16m32 , X86::ISTT_FP16m}, { X86::ISTT_Fp16m64 , X86::ISTT_FP16m}, { X86::ISTT_Fp32m32 , X86::ISTT_FP32m}, @@ -381,50 +407,76 @@ static const TableEntry OpcodeTable[] = { { X86::ISTT_Fp64m64 , X86::ISTT_FP64m}, { X86::IST_Fp16m32 , X86::IST_F16m }, { X86::IST_Fp16m64 , X86::IST_F16m }, + { X86::IST_Fp16m80 , X86::IST_F16m }, { X86::IST_Fp32m32 , X86::IST_F32m }, { X86::IST_Fp32m64 , X86::IST_F32m }, + { X86::IST_Fp32m80 , X86::IST_F32m }, { X86::IST_Fp64m32 , X86::IST_FP64m }, { X86::IST_Fp64m64 , X86::IST_FP64m }, + { X86::IST_Fp64m80 , X86::IST_FP64m }, { X86::LD_Fp032 , X86::LD_F0 }, { X86::LD_Fp064 , X86::LD_F0 }, + { X86::LD_Fp080 , X86::LD_F0 }, { X86::LD_Fp132 , X86::LD_F1 }, { X86::LD_Fp164 , X86::LD_F1 }, + { X86::LD_Fp180 , X86::LD_F1 }, { X86::LD_Fp32m , X86::LD_F32m }, { X86::LD_Fp64m , X86::LD_F64m }, + { X86::LD_Fp80m , X86::LD_F80m }, { X86::MUL_Fp32m , X86::MUL_F32m }, { X86::MUL_Fp64m , X86::MUL_F64m }, { X86::MUL_Fp64m32 , X86::MUL_F32m }, + { X86::MUL_Fp80m32 , X86::MUL_F32m }, + { X86::MUL_Fp80m64 , X86::MUL_F64m }, { X86::MUL_FpI16m32 , X86::MUL_FI16m }, { X86::MUL_FpI16m64 , X86::MUL_FI16m }, + { X86::MUL_FpI16m80 , X86::MUL_FI16m }, { X86::MUL_FpI32m32 , X86::MUL_FI32m }, { X86::MUL_FpI32m64 , X86::MUL_FI32m }, + { X86::MUL_FpI32m80 , X86::MUL_FI32m }, { X86::SIN_Fp32 , X86::SIN_F }, { X86::SIN_Fp64 , X86::SIN_F }, + { X86::SIN_Fp80 , X86::SIN_F }, { X86::SQRT_Fp32 , X86::SQRT_F }, { X86::SQRT_Fp64 , X86::SQRT_F }, + { X86::SQRT_Fp80 , X86::SQRT_F }, { X86::ST_Fp32m , X86::ST_F32m }, { X86::ST_Fp64m , X86::ST_F64m }, { X86::ST_Fp64m32 , X86::ST_F32m }, + { X86::ST_Fp80m32 , X86::ST_F32m }, + { X86::ST_Fp80m64 , X86::ST_F64m }, + { X86::ST_FpP80m , X86::ST_FP80m }, { X86::SUBR_Fp32m , X86::SUBR_F32m }, { X86::SUBR_Fp64m , X86::SUBR_F64m }, { X86::SUBR_Fp64m32 , X86::SUBR_F32m }, + { X86::SUBR_Fp80m32 , X86::SUBR_F32m }, + { X86::SUBR_Fp80m64 , X86::SUBR_F64m }, { X86::SUBR_FpI16m32, X86::SUBR_FI16m}, { X86::SUBR_FpI16m64, X86::SUBR_FI16m}, + { X86::SUBR_FpI16m80, X86::SUBR_FI16m}, { X86::SUBR_FpI32m32, X86::SUBR_FI32m}, { X86::SUBR_FpI32m64, X86::SUBR_FI32m}, + { X86::SUBR_FpI32m80, X86::SUBR_FI32m}, { X86::SUB_Fp32m , X86::SUB_F32m }, { X86::SUB_Fp64m , X86::SUB_F64m }, { X86::SUB_Fp64m32 , X86::SUB_F32m }, + { X86::SUB_Fp80m32 , X86::SUB_F32m }, + { X86::SUB_Fp80m64 , X86::SUB_F64m }, { X86::SUB_FpI16m32 , X86::SUB_FI16m }, { X86::SUB_FpI16m64 , X86::SUB_FI16m }, + { X86::SUB_FpI16m80 , X86::SUB_FI16m }, { X86::SUB_FpI32m32 , X86::SUB_FI32m }, { X86::SUB_FpI32m64 , X86::SUB_FI32m }, + { X86::SUB_FpI32m80 , X86::SUB_FI32m }, { X86::TST_Fp32 , X86::TST_F }, { X86::TST_Fp64 , X86::TST_F }, + { X86::TST_Fp80 , X86::TST_F }, { X86::UCOM_FpIr32 , X86::UCOM_FIr }, { X86::UCOM_FpIr64 , X86::UCOM_FIr }, + { X86::UCOM_FpIr80 , X86::UCOM_FIr }, { X86::UCOM_Fpr32 , X86::UCOM_Fr }, { X86::UCOM_Fpr64 , X86::UCOM_Fr }, + { X86::UCOM_Fpr80 , X86::UCOM_Fr }, }; static unsigned getConcreteOpcode(unsigned Opcode) { @@ -563,7 +615,8 @@ void FPS::handleOneArgFP(MachineBasicBlock::iterator &I) { MI->getOpcode() == X86::IST_Fp64m64 || MI->getOpcode() == X86::ISTT_Fp16m64 || MI->getOpcode() == X86::ISTT_Fp32m64 || - MI->getOpcode() == X86::ISTT_Fp64m64)) { + MI->getOpcode() == X86::ISTT_Fp64m64 || + MI->getOpcode() == X86::ST_FpP80m)) { duplicateToTop(Reg, 7 /*temp register*/, I); } else { moveToTop(Reg, I); // Move to the top of the stack... @@ -856,7 +909,12 @@ void FPS::handleSpecialFP(MachineBasicBlock::iterator &I) { case X86::MOV_Fp3232: case X86::MOV_Fp3264: case X86::MOV_Fp6432: - case X86::MOV_Fp6464: { + case X86::MOV_Fp6464: + case X86::MOV_Fp3280: + case X86::MOV_Fp6480: + case X86::MOV_Fp8032: + case X86::MOV_Fp8064: + case X86::MOV_Fp8080: { unsigned SrcReg = getFPReg(MI->getOperand(1)); unsigned DestReg = getFPReg(MI->getOperand(0)); |