Chromium Code Reviews| Index: src/arm/macro-assembler-arm.cc |
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
| index 61b59edf868c08b11cd80ef246550d679f2df753..ec964280072cfcd3e32b80449670e450536506b0 100644 |
| --- a/src/arm/macro-assembler-arm.cc |
| +++ b/src/arm/macro-assembler-arm.cc |
| @@ -707,8 +707,10 @@ void MacroAssembler::PopFixedFrame(Register marker_reg) { |
| // Push and pop all registers that can hold pointers. |
| void MacroAssembler::PushSafepointRegisters() { |
| - // Safepoints expect a block of contiguous register values starting with r0: |
| - DCHECK(((1 << kNumSafepointSavedRegisters) - 1) == kSafepointSavedRegisters); |
| + // Safepoints expect a block of contiguous register values starting with r0. |
| + // except when FLAG_enable_embedded_constant_pool, which omits pp. |
| + DCHECK(FLAG_enable_embedded_constant_pool || |
| + ((1 << kNumSafepointSavedRegisters) - 1) == kSafepointSavedRegisters); |
|
rmcilroy
2015/06/09 14:14:43
Please add a DCHECK here for what is expected when
MTBrandyberry
2015/06/09 14:19:07
OK
|
| // Safepoints expect a block of kNumSafepointRegisters values on the |
| // stack, so adjust the stack for unsaved registers. |
| const int num_unsaved = kNumSafepointRegisters - kNumSafepointSavedRegisters; |
| @@ -738,6 +740,10 @@ void MacroAssembler::LoadFromSafepointRegisterSlot(Register dst, Register src) { |
| int MacroAssembler::SafepointRegisterStackIndex(int reg_code) { |
| // The registers are pushed starting with the highest encoding, |
| // which means that lowest encodings are closest to the stack pointer. |
| + if (FLAG_enable_embedded_constant_pool && reg_code > pp.code()) { |
| + // RegList omits pp. |
| + reg_code -= 1; |
| + } |
| DCHECK(reg_code >= 0 && reg_code < kNumSafepointRegisters); |
| return reg_code; |
| } |