Remove stub call in non-VFP3 code path of external array load.
KeyedLoadStubCompiler::GenerateLoadExternalArray is tail-calling a stub, which it is not allowed to, because its major key is higher than InstanceOf. Instead of changing the major key I decided to provide an inline implementation. TEST=test-api/ExternalArrays with --noenable-vfp3 R=danno@chromium.org Review URL: http://codereview.chromium.org/7060007 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8002 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
70d5e6d582
commit
b082e6cc73
@ -538,6 +538,8 @@ void FloatingPointHelper::ConvertIntToDouble(MacroAssembler* masm,
|
||||
Register scratch2,
|
||||
SwVfpRegister single_scratch) {
|
||||
ASSERT(!int_scratch.is(scratch2));
|
||||
ASSERT(!int_scratch.is(dst1));
|
||||
ASSERT(!int_scratch.is(dst2));
|
||||
|
||||
Label done;
|
||||
|
||||
|
@ -3577,8 +3577,21 @@ void KeyedLoadStubCompiler::GenerateLoadExternalArray(
|
||||
__ vstr(d0, r3, HeapNumber::kValueOffset);
|
||||
__ Ret();
|
||||
} else {
|
||||
WriteInt32ToHeapNumberStub stub(value, r0, r3);
|
||||
__ TailCallStub(&stub);
|
||||
Register dst1 = r1;
|
||||
Register dst2 = r3;
|
||||
FloatingPointHelper::Destination dest =
|
||||
FloatingPointHelper::kCoreRegisters;
|
||||
FloatingPointHelper::ConvertIntToDouble(masm,
|
||||
value,
|
||||
dest,
|
||||
d0,
|
||||
dst1,
|
||||
dst2,
|
||||
r9,
|
||||
s0);
|
||||
__ str(dst1, FieldMemOperand(r0, HeapNumber::kMantissaOffset));
|
||||
__ str(dst2, FieldMemOperand(r0, HeapNumber::kExponentOffset));
|
||||
__ Ret();
|
||||
}
|
||||
} else if (array_type == kExternalUnsignedIntArray) {
|
||||
// The test is different for unsigned int values. Since we need
|
||||
|
Loading…
Reference in New Issue
Block a user