Incorrect ARM assembly in MacroAssembler::TestJSArrayForAllocationSiteInfo
Restored test code in allocation-site-info.js that was failing on ARM because of this bug. BUG= Review URL: https://codereview.chromium.org/12045017 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13462 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
2c070e2300
commit
90d0f18007
@ -3888,11 +3888,13 @@ void MacroAssembler::TestJSArrayForAllocationSiteInfo(
|
||||
ExternalReference::new_space_start(isolate());
|
||||
ExternalReference new_space_allocation_top =
|
||||
ExternalReference::new_space_allocation_top_address(isolate());
|
||||
ldr(scratch_reg, FieldMemOperand(receiver_reg,
|
||||
JSArray::kSize + AllocationSiteInfo::kSize - kHeapObjectTag));
|
||||
add(scratch_reg, receiver_reg,
|
||||
Operand(JSArray::kSize + AllocationSiteInfo::kSize - kHeapObjectTag));
|
||||
cmp(scratch_reg, Operand(new_space_start));
|
||||
b(lt, &no_info_available);
|
||||
cmp(scratch_reg, Operand(new_space_allocation_top));
|
||||
mov(ip, Operand(new_space_allocation_top));
|
||||
ldr(ip, MemOperand(ip));
|
||||
cmp(scratch_reg, ip);
|
||||
b(gt, &no_info_available);
|
||||
ldr(scratch_reg, MemOperand(scratch_reg, -AllocationSiteInfo::kSize));
|
||||
cmp(scratch_reg,
|
||||
|
@ -75,40 +75,52 @@ function assertKind(expected, obj, name_opt) {
|
||||
}
|
||||
|
||||
if (support_smi_only_arrays) {
|
||||
function fastliteralcase(value) {
|
||||
var literal = [1, 2, 3];
|
||||
literal[0] = value;
|
||||
return literal;
|
||||
}
|
||||
function fastliteralcase(literal, value) {
|
||||
// var literal = [1, 2, 3];
|
||||
literal[0] = value;
|
||||
return literal;
|
||||
}
|
||||
|
||||
// Case: [1,2,3] as allocation site
|
||||
obj = fastliteralcase(1);
|
||||
assertKind(elements_kind.fast_smi_only, obj);
|
||||
obj = fastliteralcase(1.5);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
obj = fastliteralcase(2);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
function get_standard_literal() {
|
||||
var literal = [1, 2, 3];
|
||||
return literal;
|
||||
}
|
||||
|
||||
// Verify that we will not pretransition the double->fast path.
|
||||
obj = fastliteralcase("elliot");
|
||||
assertKind(elements_kind.fast, obj);
|
||||
// Case: [1,2,3] as allocation site
|
||||
obj = fastliteralcase(get_standard_literal(), 1);
|
||||
assertKind(elements_kind.fast_smi_only, obj);
|
||||
obj = fastliteralcase(get_standard_literal(), 1.5);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
obj = fastliteralcase(get_standard_literal(), 2);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
|
||||
// This fails until we turn off optimistic transitions to the
|
||||
// most general elements kind seen on keyed stores. It's a goal
|
||||
// to turn it off, but for now we need it.
|
||||
// obj = fastliteralcase(3);
|
||||
// assertKind(elements_kind.fast_double, obj);
|
||||
obj = fastliteralcase([5, 3, 2], 1.5);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
obj = fastliteralcase([3, 6, 2], 1.5);
|
||||
assertKind(elements_kind.fast_double, obj);
|
||||
obj = fastliteralcase([2, 6, 3], 2);
|
||||
assertKind(elements_kind.fast_smi_only, obj);
|
||||
|
||||
function fastliteralcase_smifast(value) {
|
||||
var literal = [1, 2, 3, 4];
|
||||
literal[0] = value;
|
||||
return literal;
|
||||
}
|
||||
// Verify that we will not pretransition the double->fast path.
|
||||
obj = fastliteralcase(get_standard_literal(), "elliot");
|
||||
assertKind(elements_kind.fast, obj);
|
||||
|
||||
obj = fastliteralcase_smifast(1);
|
||||
assertKind(elements_kind.fast_smi_only, obj);
|
||||
obj = fastliteralcase_smifast("carter");
|
||||
assertKind(elements_kind.fast, obj);
|
||||
obj = fastliteralcase_smifast(2);
|
||||
assertKind(elements_kind.fast, obj);
|
||||
}
|
||||
// This fails until we turn off optimistic transitions to the
|
||||
// most general elements kind seen on keyed stores. It's a goal
|
||||
// to turn it off, but for now we need it.
|
||||
// obj = fastliteralcase(3);
|
||||
// assertKind(elements_kind.fast_double, obj);
|
||||
|
||||
function fastliteralcase_smifast(value) {
|
||||
var literal = [1, 2, 3, 4];
|
||||
literal[0] = value;
|
||||
return literal;
|
||||
}
|
||||
|
||||
obj = fastliteralcase_smifast(1);
|
||||
assertKind(elements_kind.fast_smi_only, obj);
|
||||
obj = fastliteralcase_smifast("carter");
|
||||
assertKind(elements_kind.fast, obj);
|
||||
obj = fastliteralcase_smifast(2);
|
||||
assertKind(elements_kind.fast, obj);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user