diff --git a/selfhost/backend/emit_fence_ir.ludic b/selfhost/backend/emit_fence_ir.ludic index 983eecb5..2aedbe25 100644 --- a/selfhost/backend/emit_fence_ir.ludic +++ b/selfhost/backend/emit_fence_ir.ludic @@ -659,6 +659,10 @@ function emit_fence_table() -> void { emith(" %dbit = select i1 %isdecl, i64 549755813888, i64 0\n") emith(" %v = or i64 %v0, %dbit\n") emith(" store i64 %v, ptr %ev\n") + emith(" %dl = load i64, ptr @lp_dlive\n") + emith(" %dadd = select i1 %isdecl, i64 %n, i64 0\n") + emith(" %dl1 = add i64 %dl, %dadd\n") + emith(" store i64 %dl1, ptr @lp_dlive\n") emith(" %tn = load i64, ptr @lp_tabn\n") emith(" %tn1 = add i64 %tn, 1\n") emith(" store i64 %tn1, ptr @lp_tabn\n") @@ -973,7 +977,11 @@ function emit_fence_control() -> void { emith(" %sl = load i64, ptr @lp_slive\n") emith(" %pr = load i64, ptr @lp_pre\n") emith(" %sp = load i64, ptr @lp_spre\n") - emith(" %a = sub i64 %lv, %sl\n") + emith(" %a0 = sub i64 %lv, %sl\n") + emith(" %dlk = load i64, ptr @lp_dlive\n") + emith(" %sdl = load i64, ptr @lp_sdlive\n") + emith(" %ddk = sub i64 %dlk, %sdl\n") + emith(" %a = sub i64 %a0, %ddk\n") emith(" %b = sub i64 %pr, %sp\n") emith(" %k = sub i64 %a, %b\n") emith(" call void @lp_funlock()\n") @@ -1735,7 +1743,11 @@ function emit_fence_frame() -> void { emith(" %ml = load i64, ptr @lp_mlive\n") emith(" %pr = load i64, ptr @lp_pre\n") emith(" %mp = load i64, ptr @lp_mpre\n") - emith(" %a = sub i64 %lv, %ml\n") + emith(" %a0 = sub i64 %lv, %ml\n") + emith(" %dln = load i64, ptr @lp_dlive\n") + emith(" %dlmk = load i64, ptr @lp_mdlive\n") + emith(" %dd = sub i64 %dln, %dlmk\n") + emith(" %a = sub i64 %a0, %dd\n") emith(" %b = sub i64 %pr, %mp\n") emith(" %kept = sub i64 %a, %b\n") emith(" %bad = icmp sgt i64 %kept, 0\n") diff --git a/selfhost/ludicc.seed.ll b/selfhost/ludicc.seed.ll index faf65e68..2939d61f 100644 --- a/selfhost/ludicc.seed.ll +++ b/selfhost/ludicc.seed.ll @@ -25278,6 +25278,10 @@ put: %dbit = select i1 %isdecl, i64 549755813888, i64 0 %v = or i64 %v0, %dbit store i64 %v, ptr %ev + %dl = load i64, ptr @lp_dlive + %dadd = select i1 %isdecl, i64 %n, i64 0 + %dl1 = add i64 %dl, %dadd + store i64 %dl1, ptr @lp_dlive %tn = load i64, ptr @lp_tabn %tn1 = add i64 %tn, 1 store i64 %tn1, ptr @lp_tabn @@ -25590,7 +25594,11 @@ read: %sl = load i64, ptr @lp_slive %pr = load i64, ptr @lp_pre %sp = load i64, ptr @lp_spre - %a = sub i64 %lv, %sl + %a0 = sub i64 %lv, %sl + %dlk = load i64, ptr @lp_dlive + %sdl = load i64, ptr @lp_sdlive + %ddk = sub i64 %dlk, %sdl + %a = sub i64 %a0, %ddk %b = sub i64 %pr, %sp %k = sub i64 %a, %b call void @lp_funlock() @@ -26348,7 +26356,11 @@ weigh: %ml = load i64, ptr @lp_mlive %pr = load i64, ptr @lp_pre %mp = load i64, ptr @lp_mpre - %a = sub i64 %lv, %ml + %a0 = sub i64 %lv, %ml + %dln = load i64, ptr @lp_dlive + %dlmk = load i64, ptr @lp_mdlive + %dd = sub i64 %dln, %dlmk + %a = sub i64 %a0, %dd %b = sub i64 %pr, %mp %kept = sub i64 %a, %b %bad = icmp sgt i64 %kept, 0 @@ -210895,7 +210907,7 @@ ret: ret void } -define void @fn_emit_fs_dir() { +define void @fn_emit_fs_normalize() { entry: call void @fn_emith(ptr @.str13320) call void @fn_emith(ptr @.str13321) diff --git a/selfhost/ludicc.win.seed.ll b/selfhost/ludicc.win.seed.ll index 13c28af2..ca6a732f 100644 --- a/selfhost/ludicc.win.seed.ll +++ b/selfhost/ludicc.win.seed.ll @@ -213982,7 +213982,7 @@ ret: ret void } -define void @fn_emit_fs_dir() { +define void @fn_emit_fs_normalize() { entry: call void @fn_emith(ptr @.str13525) call void @fn_emith(ptr @.str13526)