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:
mvstanton@chromium.org 2013-01-22 10:49:23 +00:00
parent 2c070e2300
commit 90d0f18007
2 changed files with 49 additions and 35 deletions

View File

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

View File

@ -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);
}