Index: src/x64/code-stubs-x64.cc |
=================================================================== |
--- src/x64/code-stubs-x64.cc (revision 7711) |
+++ src/x64/code-stubs-x64.cc (working copy) |
@@ -1736,91 +1736,6 @@ |
} |
-void GenericUnaryOpStub::Generate(MacroAssembler* masm) { |
- Label slow, done; |
- |
- if (op_ == Token::SUB) { |
- if (include_smi_code_) { |
- // Check whether the value is a smi. |
- Label try_float; |
- __ JumpIfNotSmi(rax, &try_float); |
- if (negative_zero_ == kIgnoreNegativeZero) { |
- __ SmiCompare(rax, Smi::FromInt(0)); |
- __ j(equal, &done); |
- } |
- __ SmiNeg(rax, rax, &done); |
- __ jmp(&slow); // zero, if not handled above, and Smi::kMinValue. |
- |
- // Try floating point case. |
- __ bind(&try_float); |
- } else if (FLAG_debug_code) { |
- __ AbortIfSmi(rax); |
- } |
- |
- __ CompareRoot(FieldOperand(rax, HeapObject::kMapOffset), |
- Heap::kHeapNumberMapRootIndex); |
- __ j(not_equal, &slow); |
- // Operand is a float, negate its value by flipping sign bit. |
- __ movq(rdx, FieldOperand(rax, HeapNumber::kValueOffset)); |
- __ Set(kScratchRegister, 0x01); |
- __ shl(kScratchRegister, Immediate(63)); |
- __ xor_(rdx, kScratchRegister); // Flip sign. |
- // rdx is value to store. |
- if (overwrite_ == UNARY_OVERWRITE) { |
- __ movq(FieldOperand(rax, HeapNumber::kValueOffset), rdx); |
- } else { |
- __ AllocateHeapNumber(rcx, rbx, &slow); |
- // rcx: allocated 'empty' number |
- __ movq(FieldOperand(rcx, HeapNumber::kValueOffset), rdx); |
- __ movq(rax, rcx); |
- } |
- } else if (op_ == Token::BIT_NOT) { |
- if (include_smi_code_) { |
- Label try_float; |
- __ JumpIfNotSmi(rax, &try_float); |
- __ SmiNot(rax, rax); |
- __ jmp(&done); |
- // Try floating point case. |
- __ bind(&try_float); |
- } else if (FLAG_debug_code) { |
- __ AbortIfSmi(rax); |
- } |
- |
- // Check if the operand is a heap number. |
- __ CompareRoot(FieldOperand(rax, HeapObject::kMapOffset), |
- Heap::kHeapNumberMapRootIndex); |
- __ j(not_equal, &slow); |
- |
- // Convert the heap number in rax to an untagged integer in rcx. |
- IntegerConvert(masm, rax, rax); |
- |
- // Do the bitwise operation and smi tag the result. |
- __ notl(rax); |
- __ Integer32ToSmi(rax, rax); |
- } |
- |
- // Return from the stub. |
- __ bind(&done); |
- __ StubReturn(1); |
- |
- // Handle the slow case by jumping to the JavaScript builtin. |
- __ bind(&slow); |
- __ pop(rcx); // pop return address |
- __ push(rax); |
- __ push(rcx); // push return address |
- switch (op_) { |
- case Token::SUB: |
- __ InvokeBuiltin(Builtins::UNARY_MINUS, JUMP_FUNCTION); |
- break; |
- case Token::BIT_NOT: |
- __ InvokeBuiltin(Builtins::BIT_NOT, JUMP_FUNCTION); |
- break; |
- default: |
- UNREACHABLE(); |
- } |
-} |
- |
- |
void MathPowStub::Generate(MacroAssembler* masm) { |
// Registers are used as follows: |
// rdx = base |