wingo pushed a commit to branch wip-whippet
in repository guile.

commit 5fdb14cc5ea14c0dc031e9dc020bc3b3470bfa34
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Mon Jan 13 16:44:12 2025 +0100

    Remove "ABORTED" atomic forwarding state
    
    It was not distinguishable from "NOT_FORWARDED".
---
 api/gc-forwarding.h             | 3 +--
 benchmarks/simple-gc-embedder.h | 9 +++++----
 src/copy-space.h                | 1 -
 src/nofl-space.h                | 5 ++---
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/api/gc-forwarding.h b/api/gc-forwarding.h
index b598e47a1..25aca3011 100644
--- a/api/gc-forwarding.h
+++ b/api/gc-forwarding.h
@@ -8,8 +8,7 @@ enum gc_forwarding_state {
   GC_FORWARDING_STATE_FORWARDED,
   GC_FORWARDING_STATE_BUSY,
   GC_FORWARDING_STATE_ACQUIRED,
-  GC_FORWARDING_STATE_NOT_FORWARDED,
-  GC_FORWARDING_STATE_ABORTED
+  GC_FORWARDING_STATE_NOT_FORWARDED
 };
 
 struct gc_atomic_forward {
diff --git a/benchmarks/simple-gc-embedder.h b/benchmarks/simple-gc-embedder.h
index d8ad3f0ad..904d2c740 100644
--- a/benchmarks/simple-gc-embedder.h
+++ b/benchmarks/simple-gc-embedder.h
@@ -122,9 +122,10 @@ gc_atomic_forward_retry_busy(struct gc_atomic_forward 
*fwd) {
                                        memory_order_acquire);
   if (tag == gcobj_busy)
     return 0;
-  if (tag & gcobj_not_forwarded_bit)
-    fwd->state = GC_FORWARDING_STATE_ABORTED;
-  else {
+  if (tag & gcobj_not_forwarded_bit) {
+    fwd->state = GC_FORWARDING_STATE_NOT_FORWARDED;
+    fwd->data = tag;
+  } else {
     fwd->state = GC_FORWARDING_STATE_FORWARDED;
     fwd->data = tag;
   }
@@ -149,7 +150,7 @@ static inline void
 gc_atomic_forward_abort(struct gc_atomic_forward *fwd) {
   GC_ASSERT(fwd->state == GC_FORWARDING_STATE_ACQUIRED);
   atomic_store_explicit(tag_word(fwd->ref), fwd->data, memory_order_release);
-  fwd->state = GC_FORWARDING_STATE_ABORTED;
+  fwd->state = GC_FORWARDING_STATE_NOT_FORWARDED;
 }
 
 static inline size_t
diff --git a/src/copy-space.h b/src/copy-space.h
index e95ec0322..b866d0ff6 100644
--- a/src/copy-space.h
+++ b/src/copy-space.h
@@ -599,7 +599,6 @@ copy_space_forward_atomic(struct copy_space *space, struct 
gc_edge edge,
 
   switch (fwd.state) {
   case GC_FORWARDING_STATE_NOT_FORWARDED:
-  case GC_FORWARDING_STATE_ABORTED:
   default:
     // Impossible.
     GC_CRASH();
diff --git a/src/nofl-space.h b/src/nofl-space.h
index d29b3a9bd..05759a033 100644
--- a/src/nofl-space.h
+++ b/src/nofl-space.h
@@ -1497,7 +1497,6 @@ nofl_space_evacuate(struct nofl_space *space, uint8_t 
*metadata, uint8_t byte,
 
   switch (fwd.state) {
   case GC_FORWARDING_STATE_NOT_FORWARDED:
-  case GC_FORWARDING_STATE_ABORTED:
   default:
     // Impossible.
     GC_CRASH();
@@ -1552,7 +1551,7 @@ nofl_space_evacuate(struct nofl_space *space, uint8_t 
*metadata, uint8_t byte,
         break;
       yield_for_spin(spin_count);
     }
-    if (fwd.state == GC_FORWARDING_STATE_ABORTED)
+    if (fwd.state == GC_FORWARDING_STATE_NOT_FORWARDED)
       // Remove evacuation aborted; remote will mark and enqueue.
       return 0;
     ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED);
@@ -1599,7 +1598,7 @@ nofl_space_forward_if_evacuated(struct nofl_space *space,
         break;
       yield_for_spin(spin_count);
     }
-    if (fwd.state == GC_FORWARDING_STATE_ABORTED)
+    if (fwd.state == GC_FORWARDING_STATE_NOT_FORWARDED)
       // Remote evacuation aborted; remote will mark and enqueue.
       return 1;
     ASSERT(fwd.state == GC_FORWARDING_STATE_FORWARDED);

Reply via email to