summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@igalia.com>2019-04-04 11:08:54 +0200
committerAndy Wingo <wingo@igalia.com>2019-04-04 11:08:54 +0200
commitbbfb03ac300c9c389319c0e4351b308b0ecb1c94 (patch)
treecd66943acb203c97d58e7a3e36f63f12b44fcd61
parent0903a018121e18de06fae12301e1a03775848ba5 (diff)
downloadguile-bbfb03ac300c9c389319c0e4351b308b0ecb1c94.tar.gz
Fix implementation of jit_{gpr,fpr}_is_callee_save
-rw-r--r--lightening.h15
-rw-r--r--lightening/lightening.c12
-rw-r--r--tests/qdivr.c4
-rw-r--r--tests/qdivr_u.c4
-rw-r--r--tests/qmulr.c4
-rw-r--r--tests/qmulr_u.c4
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);
}