diff --git a/arm64-gen.c b/arm64-gen.c index feff7415..2854176b 100644 --- a/arm64-gen.c +++ b/arm64-gen.c @@ -497,8 +497,11 @@ ST_FUNC void load(int r, SValue *sv) } if (svr == (VT_CONST | VT_LVAL)) { - arm64_sym(30, sv->sym, // use x30 for address - arm64_check_offset(0, arm64_type_size(svtt), sv->c.i)); + if (sv->sym) + arm64_sym(30, sv->sym, // use x30 for address + arm64_check_offset(0, arm64_type_size(svtt), sv->c.i)); + else + arm64_movimm (30, sv->c.i); if (IS_FREG(r)) arm64_ldrv(arm64_type_size(svtt), fltr(r), 30, arm64_check_offset(1, arm64_type_size(svtt), sv->c.i)); @@ -612,8 +615,11 @@ ST_FUNC void store(int r, SValue *sv) } if (svr == (VT_CONST | VT_LVAL)) { - arm64_sym(30, sv->sym, // use x30 for address - arm64_check_offset(0, arm64_type_size(svtt), sv->c.i)); + if (sv->sym) + arm64_sym(30, sv->sym, // use x30 for address + arm64_check_offset(0, arm64_type_size(svtt), sv->c.i)); + else + arm64_movimm (30, sv->c.i); if (IS_FREG(r)) arm64_strv(arm64_type_size(svtt), fltr(r), 30, arm64_check_offset(1, arm64_type_size(svtt), sv->c.i));