Index: src/compiler/x87/code-generator-x87.cc |
diff --git a/src/compiler/x87/code-generator-x87.cc b/src/compiler/x87/code-generator-x87.cc |
index 596b7ab775343b251f55e1014dfce84ddcbe78e0..c0a6303dd8bb9d9fe2a072d10b6dc26d7fa842de 100644 |
--- a/src/compiler/x87/code-generator-x87.cc |
+++ b/src/compiler/x87/code-generator-x87.cc |
@@ -1069,6 +1069,28 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
} |
break; |
} |
+ case kX87BitcastFI: { |
+ __ fstp(0); |
+ __ mov(i.OutputRegister(), MemOperand(esp, 0)); |
+ __ lea(esp, Operand(esp, kFloatSize)); |
+ break; |
+ } |
+ case kX87BitcastIF: { |
+ if (instr->InputAt(0)->IsRegister()) { |
+ __ lea(esp, Operand(esp, -kFloatSize)); |
+ __ mov(MemOperand(esp, 0), i.InputRegister(0)); |
+ __ fstp(0); |
+ __ fld_s(MemOperand(esp, 0)); |
+ __ lea(esp, Operand(esp, kFloatSize)); |
+ } else { |
+ __ lea(esp, Operand(esp, -kDoubleSize)); |
+ __ mov(MemOperand(esp, 0), i.InputRegister(0)); |
+ __ fstp(0); |
+ __ fld_d(MemOperand(esp, 0)); |
+ __ lea(esp, Operand(esp, kDoubleSize)); |
+ } |
+ break; |
+ } |
case kX87Lea: { |
AddressingMode mode = AddressingModeField::decode(instr->opcode()); |
// Shorten "leal" to "addl", "subl" or "shll" if the register allocation |