aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm_arm64.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lj_asm_arm64.h b/src/lj_asm_arm64.h
index 34960d7c..1d5cca4f 100644
--- a/src/lj_asm_arm64.h
+++ b/src/lj_asm_arm64.h
@@ -1289,8 +1289,9 @@ static void asm_tbar(ASMState *as, IRIns *ir)
1289 Reg link = ra_scratch(as, rset_exclude(RSET_GPR, tab)); 1289 Reg link = ra_scratch(as, rset_exclude(RSET_GPR, tab));
1290 Reg mark = RID_TMP; 1290 Reg mark = RID_TMP;
1291 MCLabel l_end = emit_label(as); 1291 MCLabel l_end = emit_label(as);
1292 emit_lso(as, A64I_STRx, link, tab, (int32_t)offsetof(GCtab, gclist));
1293 emit_lso(as, A64I_STRB, mark, tab, (int32_t)offsetof(GCtab, marked)); 1292 emit_lso(as, A64I_STRB, mark, tab, (int32_t)offsetof(GCtab, marked));
1293 /* Keep STRx in the middle to avoid LDP/STP fusion with surrounding code. */
1294 emit_lso(as, A64I_STRx, link, tab, (int32_t)offsetof(GCtab, gclist));
1294 emit_setgl(as, tab, gc.grayagain); 1295 emit_setgl(as, tab, gc.grayagain);
1295 emit_dn(as, A64I_ANDw^emit_isk13(~LJ_GC_BLACK, 0), mark, mark); 1296 emit_dn(as, A64I_ANDw^emit_isk13(~LJ_GC_BLACK, 0), mark, mark);
1296 emit_getgl(as, link, gc.grayagain); 1297 emit_getgl(as, link, gc.grayagain);