aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/hipe/hipe_stack.h
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2014-10-24 18:23:47 +0200
committerSverker Eriksson <[email protected]>2014-10-24 18:23:47 +0200
commit1b50468c0389adbe51883f32a73c265ef0b7605d (patch)
tree2f35d6e7bac2a1a4ae14c56ca0b649eb4c7d43de /erts/emulator/hipe/hipe_stack.h
parent389b65126d2777cf61a7995e082b00ef7a0e7778 (diff)
parentda3073e8d3d26ec6c63979a22c913d7758eeed71 (diff)
downloadotp-1b50468c0389adbe51883f32a73c265ef0b7605d.tar.gz
otp-1b50468c0389adbe51883f32a73c265ef0b7605d.tar.bz2
otp-1b50468c0389adbe51883f32a73c265ef0b7605d.zip
Merge branch 'sverk/hipe-inline-reserve-trap-frame'
* sverk/hipe-inline-reserve-trap-frame: erts: Extend usage of ASM macro to avoid including asm macros in C code erts: Make hipe_{un}reserve_beam_trap_frame INLINE
Diffstat (limited to 'erts/emulator/hipe/hipe_stack.h')
-rw-r--r--erts/emulator/hipe/hipe_stack.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_stack.h b/erts/emulator/hipe/hipe_stack.h
index 66f9f04c73..4cfdb54dd8 100644
--- a/erts/emulator/hipe/hipe_stack.h
+++ b/erts/emulator/hipe/hipe_stack.h
@@ -108,12 +108,23 @@ extern int hipe_fill_stacktrace(Process*, int, Eterm**);
#if 0 && defined(HIPE_NSTACK_GROWS_UP)
#define hipe_nstack_start(p) ((p)->hipe.nstack)
#define hipe_nstack_used(p) ((p)->hipe.nsp - (p)->hipe.nstack)
+#define hipe_nstack_avail(p) ((p)->hipe.nstend - (p)->hipe.nsp)
#endif
#if defined(HIPE_NSTACK_GROWS_DOWN)
#define hipe_nstack_start(p) ((p)->hipe.nsp)
#define hipe_nstack_used(p) ((p)->hipe.nstend - (p)->hipe.nsp)
+#define hipe_nstack_avail(p) ((unsigned)((p)->hipe.nsp - (p)->hipe.nstack))
#endif
+/* ensure that at least nwords words are available on the native stack */
+static __inline__ void hipe_check_nstack(Process *p, unsigned nwords)
+{
+ extern void hipe_inc_nstack(Process *p);
+
+ while (hipe_nstack_avail(p) < nwords)
+ hipe_inc_nstack(p);
+}
+
/*
* GC support procedures
*/