aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdmund Grimley Evans <Edmund.Grimley.Evans@gmail.com>2016-10-10 20:15:57 +0100
committerEdmund Grimley Evans <Edmund.Grimley.Evans@gmail.com>2016-10-10 20:15:57 +0100
commit7dddd65b46085f70d3e60361087adfcefd45d062 (patch)
treefd566414c255f14ce888629f6022fe79e9a51863
parent94d8d12c26de54d9ab14c34820967861352773ab (diff)
downloadtinycc-7dddd65b46085f70d3e60361087adfcefd45d062.tar.gz
tinycc-7dddd65b46085f70d3e60361087adfcefd45d062.tar.bz2
In gen_vla_sp_restore, use X30 rather than get_reg.
-rw-r--r--arm64-gen.c5
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)
}