Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index fa7d08cf848bf0c5b4fca17981a7fe2d272038b1..78a8def1049ca59cdb4dd6e57300eb55e49e0d45 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -29,10 +29,10 @@ |
#if defined(V8_TARGET_ARCH_IA32) |
-#include "code-stubs.h" |
#include "bootstrapper.h" |
-#include "jsregexp.h" |
+#include "code-stubs.h" |
#include "isolate.h" |
+#include "jsregexp.h" |
#include "regexp-macro-assembler.h" |
namespace v8 { |
@@ -331,14 +331,6 @@ class FloatingPointHelper : public AllStatic { |
// Takes the operands in edx and eax and loads them as integers in eax |
// and ecx. |
- static void LoadAsIntegers(MacroAssembler* masm, |
- TypeInfo type_info, |
- bool use_sse3, |
- Label* operand_conversion_failure); |
- static void LoadNumbersAsIntegers(MacroAssembler* masm, |
- TypeInfo type_info, |
- bool use_sse3, |
- Label* operand_conversion_failure); |
static void LoadUnknownsAsIntegers(MacroAssembler* masm, |
bool use_sse3, |
Label* operand_conversion_failure); |
@@ -380,34 +372,24 @@ class FloatingPointHelper : public AllStatic { |
// trashed registers. |
static void IntegerConvert(MacroAssembler* masm, |
Register source, |
- TypeInfo type_info, |
bool use_sse3, |
Label* conversion_failure) { |
ASSERT(!source.is(ecx) && !source.is(edi) && !source.is(ebx)); |
Label done, right_exponent, normal_exponent; |
Register scratch = ebx; |
Register scratch2 = edi; |
- if (type_info.IsInteger32() && CpuFeatures::IsSupported(SSE2)) { |
- CpuFeatures::Scope scope(SSE2); |
- __ cvttsd2si(ecx, FieldOperand(source, HeapNumber::kValueOffset)); |
- return; |
- } |
- if (!type_info.IsInteger32() || !use_sse3) { |
- // Get exponent word. |
- __ mov(scratch, FieldOperand(source, HeapNumber::kExponentOffset)); |
- // Get exponent alone in scratch2. |
- __ mov(scratch2, scratch); |
- __ and_(scratch2, HeapNumber::kExponentMask); |
- } |
+ // Get exponent word. |
+ __ mov(scratch, FieldOperand(source, HeapNumber::kExponentOffset)); |
+ // Get exponent alone in scratch2. |
+ __ mov(scratch2, scratch); |
+ __ and_(scratch2, HeapNumber::kExponentMask); |
if (use_sse3) { |
CpuFeatures::Scope scope(SSE3); |
- if (!type_info.IsInteger32()) { |
- // Check whether the exponent is too big for a 64 bit signed integer. |
- static const uint32_t kTooBigExponent = |
- (HeapNumber::kExponentBias + 63) << HeapNumber::kExponentShift; |
- __ cmp(Operand(scratch2), Immediate(kTooBigExponent)); |
- __ j(greater_equal, conversion_failure); |
- } |
+ // Check whether the exponent is too big for a 64 bit signed integer. |
+ static const uint32_t kTooBigExponent = |
+ (HeapNumber::kExponentBias + 63) << HeapNumber::kExponentShift; |
+ __ cmp(Operand(scratch2), Immediate(kTooBigExponent)); |
+ __ j(greater_equal, conversion_failure); |
// Load x87 register with heap number. |
__ fld_d(FieldOperand(source, HeapNumber::kValueOffset)); |
// Reserve space for 64 bit answer. |
@@ -747,8 +729,7 @@ void TypeRecordingUnaryOpStub::GenerateHeapNumberCodeBitNot( |
__ j(not_equal, slow); |
// Convert the heap number in eax to an untagged integer in ecx. |
- IntegerConvert(masm, eax, TypeInfo::Unknown(), CpuFeatures::IsSupported(SSE3), |
- slow); |
+ IntegerConvert(masm, eax, CpuFeatures::IsSupported(SSE3), slow); |
// Do the bitwise operation and check if the result fits in a smi. |
Label try_float; |
@@ -2407,58 +2388,6 @@ void TranscendentalCacheStub::GenerateOperation(MacroAssembler* masm) { |
// Input: edx, eax are the left and right objects of a bit op. |
// Output: eax, ecx are left and right integers for a bit op. |
-void FloatingPointHelper::LoadNumbersAsIntegers(MacroAssembler* masm, |
- TypeInfo type_info, |
- bool use_sse3, |
- Label* conversion_failure) { |
- // Check float operands. |
- Label arg1_is_object, check_undefined_arg1; |
- Label arg2_is_object, check_undefined_arg2; |
- Label load_arg2, done; |
- |
- if (!type_info.IsDouble()) { |
- if (!type_info.IsSmi()) { |
- __ test(edx, Immediate(kSmiTagMask)); |
- __ j(not_zero, &arg1_is_object); |
- } else { |
- if (FLAG_debug_code) __ AbortIfNotSmi(edx); |
- } |
- __ SmiUntag(edx); |
- __ jmp(&load_arg2); |
- } |
- |
- __ bind(&arg1_is_object); |
- |
- // Get the untagged integer version of the edx heap number in ecx. |
- IntegerConvert(masm, edx, type_info, use_sse3, conversion_failure); |
- __ mov(edx, ecx); |
- |
- // Here edx has the untagged integer, eax has a Smi or a heap number. |
- __ bind(&load_arg2); |
- if (!type_info.IsDouble()) { |
- // Test if arg2 is a Smi. |
- if (!type_info.IsSmi()) { |
- __ test(eax, Immediate(kSmiTagMask)); |
- __ j(not_zero, &arg2_is_object); |
- } else { |
- if (FLAG_debug_code) __ AbortIfNotSmi(eax); |
- } |
- __ SmiUntag(eax); |
- __ mov(ecx, eax); |
- __ jmp(&done); |
- } |
- |
- __ bind(&arg2_is_object); |
- |
- // Get the untagged integer version of the eax heap number in ecx. |
- IntegerConvert(masm, eax, type_info, use_sse3, conversion_failure); |
- __ bind(&done); |
- __ mov(eax, edx); |
-} |
- |
- |
-// Input: edx, eax are the left and right objects of a bit op. |
-// Output: eax, ecx are left and right integers for a bit op. |
void FloatingPointHelper::LoadUnknownsAsIntegers(MacroAssembler* masm, |
bool use_sse3, |
Label* conversion_failure) { |
@@ -2488,11 +2417,7 @@ void FloatingPointHelper::LoadUnknownsAsIntegers(MacroAssembler* masm, |
__ j(not_equal, &check_undefined_arg1); |
// Get the untagged integer version of the edx heap number in ecx. |
- IntegerConvert(masm, |
- edx, |
- TypeInfo::Unknown(), |
- use_sse3, |
- conversion_failure); |
+ IntegerConvert(masm, edx, use_sse3, conversion_failure); |
__ mov(edx, ecx); |
// Here edx has the untagged integer, eax has a Smi or a heap number. |
@@ -2519,28 +2444,12 @@ void FloatingPointHelper::LoadUnknownsAsIntegers(MacroAssembler* masm, |
__ j(not_equal, &check_undefined_arg2); |
// Get the untagged integer version of the eax heap number in ecx. |
- IntegerConvert(masm, |
- eax, |
- TypeInfo::Unknown(), |
- use_sse3, |
- conversion_failure); |
+ IntegerConvert(masm, eax, use_sse3, conversion_failure); |
__ bind(&done); |
__ mov(eax, edx); |
} |
-void FloatingPointHelper::LoadAsIntegers(MacroAssembler* masm, |
- TypeInfo type_info, |
- bool use_sse3, |
- Label* conversion_failure) { |
- if (type_info.IsNumber()) { |
- LoadNumbersAsIntegers(masm, type_info, use_sse3, conversion_failure); |
- } else { |
- LoadUnknownsAsIntegers(masm, use_sse3, conversion_failure); |
- } |
-} |
- |
- |
void FloatingPointHelper::CheckLoadedIntegersWereInt32(MacroAssembler* masm, |
bool use_sse3, |
Label* not_int32) { |