diff options
author | Andy Wingo <wingo@igalia.com> | 2019-04-04 11:08:54 +0200 |
---|---|---|
committer | Andy Wingo <wingo@igalia.com> | 2019-04-04 11:08:54 +0200 |
commit | bbfb03ac300c9c389319c0e4351b308b0ecb1c94 (patch) | |
tree | cd66943acb203c97d58e7a3e36f63f12b44fcd61 | |
parent | 0903a018121e18de06fae12301e1a03775848ba5 (diff) | |
download | guile-bbfb03ac300c9c389319c0e4351b308b0ecb1c94.tar.gz |
Fix implementation of jit_{gpr,fpr}_is_callee_save
-rw-r--r-- | lightening.h | 15 | ||||
-rw-r--r-- | lightening/lightening.c | 12 | ||||
-rw-r--r-- | tests/qdivr.c | 4 | ||||
-rw-r--r-- | tests/qdivr_u.c | 4 | ||||
-rw-r--r-- | tests/qmulr.c | 4 | ||||
-rw-r--r-- | tests/qmulr_u.c | 4 |
6 files changed, 23 insertions, 20 deletions
diff --git a/lightening.h b/lightening.h index cb838c5ed..ba56513f6 100644 --- a/lightening.h +++ b/lightening.h @@ -122,18 +122,6 @@ jit_same_fprs (jit_fpr_t a, jit_fpr_t b) return a.bits == b.bits; } -static inline jit_bool_t -jit_gpr_is_callee_save (jit_gpr_t reg) -{ - return jit_class(reg.bits) & jit_class_sav; -} - -static inline jit_bool_t -jit_fpr_is_callee_save (jit_fpr_t reg) -{ - return jit_class(reg.bits) & jit_class_sav; -} - typedef struct jit_state jit_state_t; enum jit_arg_loc { @@ -194,6 +182,9 @@ JIT_API jit_pointer_t jit_address(jit_state_t*); JIT_API void jit_patch_here(jit_state_t*, jit_reloc_t); JIT_API void jit_patch_there(jit_state_t*, jit_reloc_t, jit_pointer_t); +JIT_API jit_bool_t jit_gpr_is_callee_save (jit_state_t*, jit_gpr_t); +JIT_API jit_bool_t jit_fpr_is_callee_save (jit_state_t*, jit_fpr_t); + /* Note that all functions that take jit_arg_t args[] use the args as scratch space while shuffling values into position. */ JIT_API void jit_calli(jit_state_t *, jit_pointer_t f, diff --git a/lightening/lightening.c b/lightening/lightening.c index 11cc3735f..340987683 100644 --- a/lightening/lightening.c +++ b/lightening/lightening.c @@ -399,6 +399,18 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, jit_pointer_t addr) } } +jit_bool_t +jit_gpr_is_callee_save (jit_state_t *_jit, jit_gpr_t reg) +{ + return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav; +} + +jit_bool_t +jit_fpr_is_callee_save (jit_state_t *_jit, jit_fpr_t reg) +{ + return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav; +} + #if defined(__i386__) || defined(__x86_64__) # include "x86.c" #elif defined(__mips__) diff --git a/tests/qdivr.c b/tests/qdivr.c index 37871f375..d6e967c13 100644 --- a/tests/qdivr.c +++ b/tests/qdivr.c @@ -3,14 +3,14 @@ static void maybe_save(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_pushr(j, reg); } static void maybe_restore(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_popr(j, reg); } diff --git a/tests/qdivr_u.c b/tests/qdivr_u.c index 84f101f56..8b2f63ee3 100644 --- a/tests/qdivr_u.c +++ b/tests/qdivr_u.c @@ -3,14 +3,14 @@ static void maybe_save(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_pushr(j, reg); } static void maybe_restore(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_popr(j, reg); } diff --git a/tests/qmulr.c b/tests/qmulr.c index 7e3d4b0e8..a683cc4e0 100644 --- a/tests/qmulr.c +++ b/tests/qmulr.c @@ -3,14 +3,14 @@ static void maybe_save(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_pushr(j, reg); } static void maybe_restore(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_popr(j, reg); } diff --git a/tests/qmulr_u.c b/tests/qmulr_u.c index 6ac5cd057..e5e727788 100644 --- a/tests/qmulr_u.c +++ b/tests/qmulr_u.c @@ -3,14 +3,14 @@ static void maybe_save(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_pushr(j, reg); } static void maybe_restore(jit_state_t *j, jit_gpr_t reg) { - if (jit_class(reg.bits) & jit_class_sav) + if (jit_gpr_is_callee_save (j, reg)) jit_popr(j, reg); } |