Index: src/x64/codegen-x64.cc |
=================================================================== |
--- src/x64/codegen-x64.cc (revision 3505) |
+++ src/x64/codegen-x64.cc (working copy) |
@@ -3979,72 +3979,6 @@ |
} |
-void CodeGenerator::GenerateFastMathOp(MathOp op, ZoneList<Expression*>* args) { |
- JumpTarget done; |
- JumpTarget call_runtime; |
- ASSERT(args->length() == 1); |
- |
- // Load number and duplicate it. |
- Load(args->at(0)); |
- frame_->Dup(); |
- |
- // Get the number into an unaliased register and load it onto the |
- // floating point stack still leaving one copy on the frame. |
- Result number = frame_->Pop(); |
- number.ToRegister(); |
- frame_->Spill(number.reg()); |
- FloatingPointHelper::LoadFloatOperand(masm_, number.reg()); |
- number.Unuse(); |
- |
- // Perform the operation on the number. |
- switch (op) { |
- case SIN: |
- __ fsin(); |
- break; |
- case COS: |
- __ fcos(); |
- break; |
- } |
- |
- // Go slow case if argument to operation is out of range. |
- Result eax_reg = allocator()->Allocate(rax); |
- ASSERT(eax_reg.is_valid()); |
- __ fnstsw_ax(); |
- __ testl(rax, Immediate(0x0400)); // Bit 10 is condition flag C2. |
- eax_reg.Unuse(); |
- call_runtime.Branch(not_zero); |
- |
- // Allocate heap number for result if possible. |
- Result scratch = allocator()->Allocate(); |
- Result heap_number = allocator()->Allocate(); |
- __ AllocateHeapNumber(heap_number.reg(), |
- scratch.reg(), |
- call_runtime.entry_label()); |
- scratch.Unuse(); |
- |
- // Store the result in the allocated heap number. |
- __ fstp_d(FieldOperand(heap_number.reg(), HeapNumber::kValueOffset)); |
- // Replace the extra copy of the argument with the result. |
- frame_->SetElementAt(0, &heap_number); |
- done.Jump(); |
- |
- call_runtime.Bind(); |
- // Free ST(0) which was not popped before calling into the runtime. |
- __ ffree(0); |
- Result answer; |
- switch (op) { |
- case SIN: |
- answer = frame_->CallRuntime(Runtime::kMath_sin, 1); |
- break; |
- case COS: |
- answer = frame_->CallRuntime(Runtime::kMath_cos, 1); |
- break; |
- } |
- frame_->Push(&answer); |
- done.Bind(); |
-} |
- |
- |
void CodeGenerator::GenerateStringAdd(ZoneList<Expression*>* args) { |
ASSERT_EQ(2, args->length()); |