| 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
|
|
|