arm64-load-const-lvalue.after (1010B)
1 if (svr == (VT_CONST | VT_LVAL | VT_SYM)) { 2 arm64_sym(30, sv->sym, svcul); // use x30 for address 3 if (IS_FREG(r)) 4 arm64_ldrv(arm64_type_size(svtt), fltr(r), 30, 0); 5 else 6 arm64_ldrx(!(svtt & VT_UNSIGNED), arm64_type_size(svtt), 7 intr(r), 30, 0); 8 return; 9 } 10 11 if (svr == (VT_CONST | VT_LVAL)) { 12 /* boot2: load via literal integer address (no VT_SYM). 13 * Mirror of the store-side patch (arm64-store-const-lvalue): 14 * stock arm64-gen.c handles VT_CONST|VT_LVAL only when VT_SYM 15 * is also set. Materialize the constant address in x30, then 16 * use the standard indirect-load path. */ 17 arm64_movimm(30, svcul); 18 if (IS_FREG(r)) 19 arm64_ldrv(arm64_type_size(svtt), fltr(r), 30, 0); 20 else 21 arm64_ldrx(!(svtt & VT_UNSIGNED), arm64_type_size(svtt), 22 intr(r), 30, 0); 23 return; 24 } 25 26 if (svr == (VT_CONST | VT_SYM)) {