]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Merge branch 'master' into v2.1
authorMike Pall <mike>
Mon, 19 Aug 2024 14:22:55 +0000 (16:22 +0200)
committerMike Pall <mike>
Mon, 19 Aug 2024 14:22:55 +0000 (16:22 +0200)
1  2 
src/lj_asm_mips.h
src/lj_gc.c
src/lj_load.c

index 5b83e34d0d96b522e39646b73bc7914038f1c6e2,3adb62f4351fa53e2eb0664a779fdb66d72eefe9..2f64f491ef39493661d6ffe2ef69e8ef0deefecb
@@@ -455,30 -397,9 +455,30 @@@ static void asm_retf(ASMState *as, IRIn
    emit_setgl(as, base, jit_base);
    emit_addptr(as, base, -8*delta);
    asm_guard(as, MIPSI_BNE, RID_TMP,
 -          ra_allock(as, i32ptr(pc), rset_exclude(RSET_GPR, base)));
 -  emit_tsi(as, MIPSI_LW, RID_TMP, base, LJ_BE ? -8 : -4);
 +          ra_allock(as, igcptr(pc), rset_exclude(RSET_GPR, base)));
-   emit_tsi(as, MIPSI_AL, RID_TMP, base, -8);
++  emit_tsi(as, MIPSI_AL, RID_TMP, base, (LJ_BE || LJ_FR2) ? -8 : -4);
 +}
 +
 +/* -- Buffer operations --------------------------------------------------- */
 +
 +#if LJ_HASBUFFER
 +static void asm_bufhdr_write(ASMState *as, Reg sb)
 +{
 +  Reg tmp = ra_scratch(as, rset_exclude(RSET_GPR, sb));
 +  IRIns irgc;
 +  irgc.ot = IRT(0, IRT_PGC);  /* GC type. */
 +  emit_storeofs(as, &irgc, RID_TMP, sb, offsetof(SBuf, L));
 +  if ((as->flags & JIT_F_MIPSXXR2)) {
 +    emit_tsml(as, LJ_64 ? MIPSI_DINS : MIPSI_INS, RID_TMP, tmp,
 +            lj_fls(SBUF_MASK_FLAG), 0);
 +  } else {
 +    emit_dst(as, MIPSI_OR, RID_TMP, RID_TMP, tmp);
 +    emit_tsi(as, MIPSI_ANDI, tmp, tmp, SBUF_MASK_FLAG);
 +  }
 +  emit_getgl(as, RID_TMP, cur_L);
 +  emit_loadofs(as, &irgc, tmp, sb, offsetof(SBuf, L));
  }
 +#endif
  
  /* -- Type conversions ---------------------------------------------------- */
  
diff --cc src/lj_gc.c
index 9cabdef0ff71a8ea27e14db1d433a17e2da3a94a,25374d032c063f1dbe4afb0e31791ec188b3638a..69e787065a2bcba3d0d6da42568906a4e51c4f24
@@@ -608,9 -568,8 +608,8 @@@ void lj_gc_freeall(global_State *g
    /* Free everything, except super-fixed objects (the main thread). */
    g->gc.currentwhite = LJ_GC_WHITES | LJ_GC_SFIXED;
    gc_fullsweep(g, &g->gc.root);
-   strmask = g->str.mask;
-   for (i = 0; i <= strmask; i++)  /* Free all string hash chains. */
 -  for (i = g->strmask; i != ~(MSize)0; i--)  /* Free all string hash chains. */
 -    gc_fullsweep(g, &g->strhash[i]);
++  for (i = g->str.mask; i != ~(MSize)0; i--)  /* Free all string hash chains. */
 +    gc_sweepstr(g, &g->str.tab[i]);
  }
  
  /* -- Collector ----------------------------------------------------------- */
diff --cc src/lj_load.c
Simple merge