boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

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)) {