Chromium Code Reviews| Index: src/ia32/macro-assembler-ia32.cc |
| =================================================================== |
| --- src/ia32/macro-assembler-ia32.cc (revision 3400) |
| +++ src/ia32/macro-assembler-ia32.cc (working copy) |
| @@ -687,6 +687,11 @@ |
| void MacroAssembler::UpdateAllocationTopHelper(Register result_end, |
| Register scratch) { |
| +#ifdef DEBUG |
|
Mads Ager (chromium)
2009/12/04 07:33:12
Please use the flag debug_code, so that we only ge
Søren Thygesen Gjesse
2009/12/04 07:57:22
Done.
|
| + test(result_end, Immediate(kObjectAlignmentMask)); |
| + Check(zero, "Unaligned allocation in new space"); |
| +#endif |
| + |
| ExternalReference new_space_allocation_top = |
| ExternalReference::new_space_allocation_top_address(); |
| @@ -826,15 +831,18 @@ |
| Register scratch2, |
| Register scratch3, |
| Label* gc_required) { |
| - // Calculate the number of words needed for the number of characters in the |
| - // string |
| + // Calculate the number of bytes needed for the characters in the string while |
| + // observing object alignment. |
| + ASSERT((SeqTwoByteString::kHeaderSize & kObjectAlignmentMask) == 0); |
| mov(scratch1, length); |
| - add(Operand(scratch1), Immediate(1)); |
| - shr(scratch1, 1); |
| + ASSERT(kShortSize == 2); |
| + shl(scratch1, 1); |
| + add(Operand(scratch1), Immediate(kObjectAlignmentMask)); |
| + and_(Operand(scratch1), Immediate(~kObjectAlignmentMask)); |
| // Allocate two byte string in new space. |
| AllocateInNewSpace(SeqTwoByteString::kHeaderSize, |
| - times_4, |
| + times_1, |
| scratch1, |
| result, |
| scratch2, |
| @@ -857,15 +865,17 @@ |
| Register scratch2, |
| Register scratch3, |
| Label* gc_required) { |
| - // Calculate the number of words needed for the number of characters in the |
| - // string |
| + // Calculate the number of bytes needed for the characters in the string while |
| + // observing object alignment. |
| + ASSERT((SeqAsciiString::kHeaderSize & kObjectAlignmentMask) == 0); |
| mov(scratch1, length); |
| - add(Operand(scratch1), Immediate(3)); |
| - shr(scratch1, 2); |
| + ASSERT(kCharSize == 1); |
| + add(Operand(scratch1), Immediate(kObjectAlignmentMask)); |
| + and_(Operand(scratch1), Immediate(~kObjectAlignmentMask)); |
| // Allocate ascii string in new space. |
| AllocateInNewSpace(SeqAsciiString::kHeaderSize, |
| - times_4, |
| + times_1, |
| scratch1, |
| result, |
| scratch2, |
| @@ -1383,11 +1393,15 @@ |
| RecordComment(msg); |
| } |
| #endif |
| + // Disable stub call restrictions to always allow cals to abort. |
| + set_allow_stub_calls(true); |
| + |
| push(eax); |
| push(Immediate(p0)); |
| push(Immediate(reinterpret_cast<intptr_t>(Smi::FromInt(p1 - p0)))); |
| CallRuntime(Runtime::kAbort, 2); |
| // will not return here |
| + int3(); |
| } |