diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-03-31 10:07:48 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-03-31 10:07:48 -0700 |
commit | 6631983dd1a7e82d14a27e9be856b65e58f19393 (patch) | |
tree | d6dc070ab69dd4724fd95f5e43e7b2aa96e24630 /deps/v8/src/arm | |
parent | c8ee19a618c77539b9eeba6ab57ab6be03ddd163 (diff) | |
download | node-new-6631983dd1a7e82d14a27e9be856b65e58f19393.tar.gz |
Upgrade V8 to 3.1.8.8
Diffstat (limited to 'deps/v8/src/arm')
-rw-r--r-- | deps/v8/src/arm/code-stubs-arm.cc | 40 | ||||
-rw-r--r-- | deps/v8/src/arm/code-stubs-arm.h | 1 |
2 files changed, 39 insertions, 2 deletions
diff --git a/deps/v8/src/arm/code-stubs-arm.cc b/deps/v8/src/arm/code-stubs-arm.cc index 62eb3e6b8e..84ef53d4dc 100644 --- a/deps/v8/src/arm/code-stubs-arm.cc +++ b/deps/v8/src/arm/code-stubs-arm.cc @@ -2856,6 +2856,9 @@ void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) { case TRBinaryOpIC::HEAP_NUMBER: GenerateHeapNumberStub(masm); break; + case TRBinaryOpIC::ODDBALL: + GenerateOddballStub(masm); + break; case TRBinaryOpIC::STRING: GenerateStringStub(masm); break; @@ -3572,10 +3575,43 @@ void TypeRecordingBinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) { } +void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) { + Label call_runtime; + + if (op_ == Token::ADD) { + // Handle string addition here, because it is the only operation + // that does not do a ToNumber conversion on the operands. + GenerateAddStrings(masm); + } + + // Convert oddball arguments to numbers. + Label check, done; + __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); + __ cmp(r1, ip); + __ b(ne, &check); + if (Token::IsBitOp(op_)) { + __ mov(r1, Operand(Smi::FromInt(0))); + } else { + __ LoadRoot(r1, Heap::kNanValueRootIndex); + } + __ jmp(&done); + __ bind(&check); + __ LoadRoot(ip, Heap::kUndefinedValueRootIndex); + __ cmp(r0, ip); + __ b(ne, &done); + if (Token::IsBitOp(op_)) { + __ mov(r0, Operand(Smi::FromInt(0))); + } else { + __ LoadRoot(r0, Heap::kNanValueRootIndex); + } + __ bind(&done); + + GenerateHeapNumberStub(masm); +} + + void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) { Label not_numbers, call_runtime; - ASSERT(operands_type_ == TRBinaryOpIC::HEAP_NUMBER); - GenerateFPOperation(masm, false, ¬_numbers, &call_runtime); __ bind(¬_numbers); diff --git a/deps/v8/src/arm/code-stubs-arm.h b/deps/v8/src/arm/code-stubs-arm.h index 0e707f41c8..e0d05a3b8d 100644 --- a/deps/v8/src/arm/code-stubs-arm.h +++ b/deps/v8/src/arm/code-stubs-arm.h @@ -302,6 +302,7 @@ class TypeRecordingBinaryOpStub: public CodeStub { void GenerateSmiStub(MacroAssembler* masm); void GenerateInt32Stub(MacroAssembler* masm); void GenerateHeapNumberStub(MacroAssembler* masm); + void GenerateOddballStub(MacroAssembler* masm); void GenerateStringStub(MacroAssembler* masm); void GenerateGenericStub(MacroAssembler* masm); void GenerateAddStrings(MacroAssembler* masm); |