From 7b2e1c9427c2a1a4edef6ffa0cc6aa4ca2cfa753 Mon Sep 17 00:00:00 2001 From: Matthew Avery Date: Mon, 16 Jul 2018 12:23:53 -0400 Subject: [PATCH] remove goobledigoobs. Compilers will always try to optimize this out. --- Stackless/core/slp_transfer.c | 11 ++--------- Stackless/core/stacklesseval.c | 6 ++---- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/Stackless/core/slp_transfer.c b/Stackless/core/slp_transfer.c index b0d050bbb47f98..23b82687e49bc0 100644 --- a/Stackless/core/slp_transfer.c +++ b/Stackless/core/slp_transfer.c @@ -81,7 +81,6 @@ extern int slp_switch(void); #endif /* a write only variable used to prevent overly optimisation */ -intptr_t *global_goobledigoobs; static int climb_stack_and_transfer(PyCStackObject **cstprev, PyCStackObject *cst, PyTaskletObject *prev) @@ -96,15 +95,9 @@ climb_stack_and_transfer(PyCStackObject **cstprev, PyCStackObject *cst, intptr_t probe; register ptrdiff_t needed = &probe - ts->st.cstack_base; /* in rare cases, the need might have vanished due to the recursion */ - register intptr_t *goobledigoobs; if (needed > 0) { - goobledigoobs = alloca(needed * sizeof(intptr_t)); - if (goobledigoobs == NULL) - return -1; - /* hinder the compiler to optimise away - goobledigoobs and the alloca call. - This happens with gcc 4.7.x and -O2 */ - global_goobledigoobs = goobledigoobs; + void* stack_ptr_tmp = alloca(needed * sizeof(intptr_t)); + __asm__ volatile("" : : "g"(stack_ptr_tmp) : "memory"); } return slp_transfer(cstprev, cst, prev); } diff --git a/Stackless/core/stacklesseval.c b/Stackless/core/stacklesseval.c index d8d042b503a237..4647e29344858e 100644 --- a/Stackless/core/stacklesseval.c +++ b/Stackless/core/stacklesseval.c @@ -281,11 +281,9 @@ climb_stack_and_eval_frame(PyFrameObject *f) intptr_t probe; ptrdiff_t needed = &probe - ts->st.cstack_base; /* in rare cases, the need might have vanished due to the recursion */ - intptr_t *goobledigoobs; if (needed > 0) { - goobledigoobs = alloca(needed * sizeof(intptr_t)); - if (goobledigoobs == NULL) - return NULL; + void* stack_ptr_tmp = alloca(needed * sizeof(intptr_t)); + __asm__ volatile("" : : "g"(stack_ptr_tmp) : "memory"); } return slp_eval_frame(f); }