summaryrefslogtreecommitdiff
path: root/pthread_support.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2022-10-14 20:41:28 +0300
committerIvan Maidanski <ivmai@mail.ru>2022-10-14 20:41:28 +0300
commite41f8a9b7a88fa198227e510b1b7292cfc08219a (patch)
tree7378dd8437bb7600f3dce66ae28db402543f91cf /pthread_support.c
parent151c88b8142ec025faaba76d2d34e7a1d178acc9 (diff)
downloadbdwgc-e41f8a9b7a88fa198227e510b1b7292cfc08219a.tar.gz
Use EXPECT() in checks of MAIN_THREAD bit
(refactoring) * darwin_stop_world.c [DARWIN_DONT_PARSE_STACK] (GC_stack_range_for): Expect (p->flags&MAIN_THREAD)==0. * pthread_stop_world.c (GC_push_all_stacks): Likewise. * pthread_support.c (GC_set_stackbottom, GC_get_my_stackbottom, GC_call_with_gc_active): Likewise. * pthread_support.c [E2K] (GC_get_my_stackbottom): Avoid code duplication (sb->reg_base=NULL).
Diffstat (limited to 'pthread_support.c')
-rw-r--r--pthread_support.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/pthread_support.c b/pthread_support.c
index bde4cfa3..62c9a2ff 100644
--- a/pthread_support.c
+++ b/pthread_support.c
@@ -1667,7 +1667,8 @@ GC_API void GC_CALL GC_set_stackbottom(void *gc_thread_handle,
GC_ASSERT((t -> flags & DO_BLOCKING) == 0
&& NULL == t -> traced_stack_sect); /* for now */
- if ((t -> flags & MAIN_THREAD) == 0) {
+ if (EXPECT((t -> flags & MAIN_THREAD) == 0, TRUE))
+ {
t -> stack_end = (ptr_t)sb->mem_base;
# ifdef IA64
t -> backing_store_end = (ptr_t)sb->reg_base;
@@ -1692,21 +1693,20 @@ GC_API void * GC_CALL GC_get_my_stackbottom(struct GC_stack_base *sb)
LOCK();
me = GC_lookup_thread(self);
/* The thread is assumed to be registered. */
- if ((me -> flags & MAIN_THREAD) == 0) {
- sb -> mem_base = me -> stack_end;
+ if (EXPECT((me -> flags & MAIN_THREAD) != 0, FALSE)) {
+ sb -> mem_base = GC_stackbottom;
# ifdef IA64
- sb -> reg_base = me -> backing_store_end;
-# elif defined(E2K)
- sb -> reg_base = NULL;
+ sb -> reg_base = GC_register_stackbottom;
# endif
} else {
- sb -> mem_base = GC_stackbottom;
+ sb -> mem_base = me -> stack_end;
# ifdef IA64
- sb -> reg_base = GC_register_stackbottom;
-# elif defined(E2K)
- sb -> reg_base = NULL;
+ sb -> reg_base = me -> backing_store_end;
# endif
}
+# ifdef E2K
+ sb -> reg_base = NULL;
+# endif
UNLOCK();
return (void *)me; /* gc_thread_handle */
}
@@ -1731,14 +1731,14 @@ GC_API void * GC_CALL GC_call_with_gc_active(GC_fn_type fn,
/* Adjust our stack bottom value (this could happen unless */
/* GC_get_stack_base() was used which returned GC_SUCCESS). */
- if ((me -> flags & MAIN_THREAD) == 0) {
- GC_ASSERT(me -> stack_end != NULL);
- if ((word)me->stack_end HOTTER_THAN (word)(&stacksect))
- me -> stack_end = (ptr_t)(&stacksect);
- } else {
+ if (EXPECT((me -> flags & MAIN_THREAD) != 0, FALSE)) {
/* The original stack. */
if ((word)GC_stackbottom HOTTER_THAN (word)(&stacksect))
GC_stackbottom = (ptr_t)COVERT_DATAFLOW(&stacksect);
+ } else {
+ GC_ASSERT(me -> stack_end != NULL);
+ if ((word)(me -> stack_end) HOTTER_THAN (word)(&stacksect))
+ me -> stack_end = (ptr_t)(&stacksect);
}
if ((me -> flags & DO_BLOCKING) == 0) {