mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 03:27:44 +00:00
Fix bad register use in GC sweep pass.
This commit is contained in:
parent
968ec14527
commit
dd2716f56c
@ -839,12 +839,16 @@ let gc_glue
|
|||||||
(codefix exit_jmp_fix)); (* if nonzero *)
|
(codefix exit_jmp_fix)); (* if nonzero *)
|
||||||
mov (rc ecx) (* Load GC ctrl word *)
|
mov (rc ecx) (* Load GC ctrl word *)
|
||||||
(c (edx_n Abi.exterior_gc_slot_field_ctrl));
|
(c (edx_n Abi.exterior_gc_slot_field_ctrl));
|
||||||
|
mov (rc eax) (ro ecx);
|
||||||
band (* Clear in-memory mark. *)
|
band (rc eax) (immi 1L); (* Extract mark to eax. *)
|
||||||
(edx_n Abi.exterior_gc_slot_field_ctrl)
|
band (* Clear mark in ecx. *)
|
||||||
|
(rc ecx)
|
||||||
(immi 0xfffffffffffffffeL);
|
(immi 0xfffffffffffffffeL);
|
||||||
band (rc ecx) (immi 1L); (* Check in-reg mark. *)
|
mov
|
||||||
emit (Il.cmp (ro edx) (immi 0L));
|
((edx_n Abi.exterior_gc_slot_field_ctrl)) (* Write-back cleared. *)
|
||||||
|
(ro ecx);
|
||||||
|
|
||||||
|
emit (Il.cmp (ro eax) (immi 0L));
|
||||||
emit
|
emit
|
||||||
(Il.jmp Il.JNE
|
(Il.jmp Il.JNE
|
||||||
(codefix skip_jmp_fix)); (* if unmarked (garbage) *)
|
(codefix skip_jmp_fix)); (* if unmarked (garbage) *)
|
||||||
|
Loading…
Reference in New Issue
Block a user