Chromium Code Reviews| Index: src/a64/lithium-codegen-a64.cc |
| diff --git a/src/a64/lithium-codegen-a64.cc b/src/a64/lithium-codegen-a64.cc |
| index 40ef5c6f124501e42e5c4c05735718a84eaa2627..63f540636a28fd6ae1a18821837c05eac6fa1a3b 100644 |
| --- a/src/a64/lithium-codegen-a64.cc |
| +++ b/src/a64/lithium-codegen-a64.cc |
| @@ -1505,7 +1505,7 @@ void LCodeGen::DoAllocate(LAllocate* instr) { |
| int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); |
| __ Allocate(size, result, temp1, temp2, deferred->entry(), flags); |
| } else { |
| - Register size = ToRegister(instr->size()); |
| + Register size = ToRegister32(instr->size()); |
|
jochen (gone - plz use gerrit)
2014/02/17 16:17:27
I have to extend this to X() as well
|
| __ Allocate(size, result, temp1, temp2, deferred->entry(), flags); |
| } |
| @@ -1516,7 +1516,7 @@ void LCodeGen::DoAllocate(LAllocate* instr) { |
| int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); |
| __ Mov(temp1, size - kPointerSize); |
| } else { |
| - __ Sub(temp1, ToRegister(instr->size()), kPointerSize); |
| + __ Sub(temp1, ToRegister32(instr->size()), kPointerSize); |
|
m.m.capewell
2014/02/17 15:48:44
I'm surprised that this builds, as temp1 is X and
jochen (gone - plz use gerrit)
2014/02/17 16:17:27
size has to be at leat 2*kPointerSize, otherwise t
|
| } |
| __ Sub(result, result, kHeapObjectTag); |
| @@ -1545,7 +1545,8 @@ void LCodeGen::DoDeferredAllocate(LAllocate* instr) { |
| if (instr->size()->IsConstantOperand()) { |
| __ Mov(size, Operand(ToSmi(LConstantOperand::cast(instr->size())))); |
| } else { |
| - __ SmiTag(size, ToRegister(instr->size())); |
| + __ Mov(x10, ToRegister32(instr->size())); |
| + __ SmiTag(size, x10); |
|
m.m.capewell
2014/02/17 15:48:44
I don't think you need a mov here. You can call th
jochen (gone - plz use gerrit)
2014/02/17 16:17:27
Because the shift will kill the upper 32bits anywa
|
| } |
| int flags = AllocateDoubleAlignFlag::encode( |
| instr->hydrogen()->MustAllocateDoubleAligned()); |