diff options
| author | Edmund Grimley Evans <Edmund.Grimley.Evans@gmail.com> | 2016-10-10 20:15:57 +0100 |
|---|---|---|
| committer | Edmund Grimley Evans <Edmund.Grimley.Evans@gmail.com> | 2016-10-10 20:15:57 +0100 |
| commit | 7dddd65b46085f70d3e60361087adfcefd45d062 (patch) | |
| tree | fd566414c255f14ce888629f6022fe79e9a51863 | |
| parent | 94d8d12c26de54d9ab14c34820967861352773ab (diff) | |
| download | tinycc-7dddd65b46085f70d3e60361087adfcefd45d062.tar.gz tinycc-7dddd65b46085f70d3e60361087adfcefd45d062.tar.bz2 | |
In gen_vla_sp_restore, use X30 rather than get_reg.
| -rw-r--r-- | arm64-gen.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arm64-gen.c b/arm64-gen.c index 8276451..f9f9581 100644 --- a/arm64-gen.c +++ b/arm64-gen.c @@ -1826,7 +1826,10 @@ ST_FUNC void gen_vla_sp_save(int addr) { } ST_FUNC void gen_vla_sp_restore(int addr) { - uint32_t r = intr(get_reg(RC_INT)); + // Use x30 because this function can be called when there + // is a live return value in x0 but there is nothing on + // the value stack to prevent get_reg from returning x0. + uint32_t r = 30; arm64_ldrx(0, 3, r, 29, addr); o(0x9100001f | r << 5); // mov sp,x(r) } |
