diff options
author | Edward Nevill edward.nevill@linaro.org <Edward Nevill edward.nevill@linaro.org> | 2014-06-11 13:49:18 +0100 |
---|---|---|
committer | Edward Nevill edward.nevill@linaro.org <Edward Nevill edward.nevill@linaro.org> | 2014-06-11 13:49:18 +0100 |
commit | ac023bc0a894afeb1cf4b84656a796ff3a1ba831 (patch) | |
tree | 6506c27488da2aea80d1bf6f6c2f77953e2df79a | |
parent | 859e348c4675c0ffdcd7706c8f36875aafc867ac (diff) |
Fix C2 failure with frame sizes larger than 520
-rw-r--r-- | src/cpu/aarch64/vm/aarch64.ad | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/cpu/aarch64/vm/aarch64.ad b/src/cpu/aarch64/vm/aarch64.ad index 13c619a3e..45a5b17bd 100644 --- a/src/cpu/aarch64/vm/aarch64.ad +++ b/src/cpu/aarch64/vm/aarch64.ad @@ -990,13 +990,17 @@ void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { if (framesize == 0) { // Is this even possible? __ stp(rfp, lr, Address(__ pre(sp, -2 * wordSize))); - } else if (framesize < (1 << 12)) { + } else if (framesize < ((1 << 9) + 2 * wordSize)) { __ sub(sp, sp, framesize); __ stp(rfp, lr, Address(sp, framesize - 2 * wordSize)); } else { __ stp(rfp, lr, Address(__ pre(sp, -2 * wordSize))); - __ mov(rscratch1, framesize - 2 * wordSize); - __ sub(sp, sp, rscratch1); + if (framesize < ((1 << 12) + 2 * wordSize)) + __ sub(sp, sp, framesize - 2 * wordSize); + else { + __ mov(rscratch1, framesize - 2 * wordSize); + __ sub(sp, sp, rscratch1); + } } if (NotifySimulator) { @@ -1063,12 +1067,16 @@ void MachEpilogNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { if (framesize == 0) { __ ldp(rfp, lr, Address(__ post(sp, 2 * wordSize))); - } else if (framesize < (1 << 12)) { + } else if (framesize < ((1 << 9) + 2 * wordSize)) { __ ldp(rfp, lr, Address(sp, framesize - 2 * wordSize)); __ add(sp, sp, framesize); } else { - __ mov(rscratch1, framesize - 2 * wordSize); - __ add(sp, sp, rscratch1); + if (framesize < ((1 << 12) + 2 * wordSize)) + __ add(sp, sp, framesize - 2 * wordSize); + else { + __ mov(rscratch1, framesize - 2 * wordSize); + __ add(sp, sp, rscratch1); + } __ ldp(rfp, lr, Address(__ post(sp, 2 * wordSize))); } |