wingo pushed a commit to branch lightning
in repository guile.
commit 6e75c0352db2c98d8bc82ab45d6e9ae59382851f
Author: pcpa <[email protected]>
Date: Wed Feb 19 14:38:14 2014 -0300
Rewrite jit_regset_scan1 for easier optimization.
* include/lightning/jit_aarch64.h, include/lightning/jit_arm.h,
include/lightning/jit_hppa.h, include/lightning/jit_ia64.h,
include/lightning/jit_mips.h, include/lightning/jit_ppc.h,
include/lightning/jit_s390x.h, include/lightning/jit_sparc.h,
include/lightning/jit_x86.h: Change jit_regset_t to an
unsigned type, to allow safe right shift.
* lib/lightning.c: Rewrite jit_regset_scan1 to allow easier
compiler optimization.
---
ChangeLog | 12 ++++++++++++
include/lightning/jit_aarch64.h | 2 +-
include/lightning/jit_arm.h | 2 +-
include/lightning/jit_hppa.h | 2 +-
include/lightning/jit_ia64.h | 8 ++++----
include/lightning/jit_mips.h | 2 +-
include/lightning/jit_ppc.h | 2 +-
include/lightning/jit_s390x.h | 2 +-
include/lightning/jit_sparc.h | 2 +-
include/lightning/jit_x86.h | 4 ++--
lib/lightning.c | 11 ++++++++---
11 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0a37f6f..81d3919 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2014-19-02 Paulo Andrade <[email protected]>
+
+ * include/lightning/jit_aarch64.h, include/lightning/jit_arm.h,
+ include/lightning/jit_hppa.h, include/lightning/jit_ia64.h,
+ include/lightning/jit_mips.h, include/lightning/jit_ppc.h,
+ include/lightning/jit_s390x.h, include/lightning/jit_sparc.h,
+ include/lightning/jit_x86.h: Change jit_regset_t to an
+ unsigned type, to allow safe right shift.
+
+ * lib/lightning.c: Rewrite jit_regset_scan1 to allow easier
+ compiler optimization.
+
2013-12-03 Paulo Andrade <[email protected]>
* lib/jit_x86-x87.c: Correct wrong optimization when
diff --git a/include/lightning/jit_aarch64.h b/include/lightning/jit_aarch64.h
index b42f709..8e6a7eb 100644
--- a/include/lightning/jit_aarch64.h
+++ b/include/lightning/jit_aarch64.h
@@ -90,6 +90,6 @@ typedef enum {
#define JIT_NOREG _NOREG
} jit_reg_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif /* _jit_aarch64_h */
diff --git a/include/lightning/jit_arm.h b/include/lightning/jit_arm.h
index 1db7593..c8d2b14 100644
--- a/include/lightning/jit_arm.h
+++ b/include/lightning/jit_arm.h
@@ -123,7 +123,7 @@ typedef struct {
jit_uint32_t ldrt_strt : 1;
} jit_cpu_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
/*
* Initialization
diff --git a/include/lightning/jit_hppa.h b/include/lightning/jit_hppa.h
index e7c5fe4..a24b2df 100644
--- a/include/lightning/jit_hppa.h
+++ b/include/lightning/jit_hppa.h
@@ -133,6 +133,6 @@ typedef enum {
_NOREG,
} jit_reg_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif /* _jit_hppa */
diff --git a/include/lightning/jit_ia64.h b/include/lightning/jit_ia64.h
index 29f4189..12c61ad 100644
--- a/include/lightning/jit_ia64.h
+++ b/include/lightning/jit_ia64.h
@@ -118,10 +118,10 @@ typedef enum {
} jit_reg_t;
typedef struct {
- jit_int64_t rl;
- jit_int64_t rh;
- jit_int64_t fl;
- jit_int64_t fh;
+ jit_uint64_t rl;
+ jit_uint64_t rh;
+ jit_uint64_t fl;
+ jit_uint64_t fh;
} jit_regset_t;
#endif /* _jit_ia64_h */
diff --git a/include/lightning/jit_mips.h b/include/lightning/jit_mips.h
index e361c22..54e57db 100644
--- a/include/lightning/jit_mips.h
+++ b/include/lightning/jit_mips.h
@@ -119,6 +119,6 @@ typedef enum {
_NOREG,
} jit_reg_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif /* _jit_mips_h */
diff --git a/include/lightning/jit_ppc.h b/include/lightning/jit_ppc.h
index 4daf9de..8021891 100644
--- a/include/lightning/jit_ppc.h
+++ b/include/lightning/jit_ppc.h
@@ -103,6 +103,6 @@ typedef enum {
#define JIT_NOREG _NOREG
} jit_reg_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif /* _jit_ppc_h */
diff --git a/include/lightning/jit_s390x.h b/include/lightning/jit_s390x.h
index 072e728..f84290c 100644
--- a/include/lightning/jit_s390x.h
+++ b/include/lightning/jit_s390x.h
@@ -67,6 +67,6 @@ typedef enum {
#define JIT_NOREG _NOREG
} jit_reg_t;
-typedef jit_int32_t jit_regset_t;
+typedef jit_uint32_t jit_regset_t;
#endif /* _jit_s390x_h */
diff --git a/include/lightning/jit_sparc.h b/include/lightning/jit_sparc.h
index 946d382..63c7d74 100644
--- a/include/lightning/jit_sparc.h
+++ b/include/lightning/jit_sparc.h
@@ -65,6 +65,6 @@ typedef enum {
_NOREG,
} jit_reg_t;
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif /* _jit_sparc_h */
diff --git a/include/lightning/jit_x86.h b/include/lightning/jit_x86.h
index 3166f71..5c85adb 100644
--- a/include/lightning/jit_x86.h
+++ b/include/lightning/jit_x86.h
@@ -139,9 +139,9 @@ typedef struct {
} jit_cpu_t;
#if __WORDSIZE == 32
-typedef jit_int32_t jit_regset_t;
+typedef jit_uint32_t jit_regset_t;
#else
-typedef jit_int64_t jit_regset_t;
+typedef jit_uint64_t jit_regset_t;
#endif
/*
diff --git a/lib/lightning.c b/lib/lightning.c
index ebc76c1..de93e9f 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -496,10 +496,15 @@ jit_regset_scan1(jit_regset_t *set, jit_int32_t offset)
unsigned long
jit_regset_scan1(jit_regset_t *set, jit_int32_t offset)
{
+ jit_regset_t mask;
assert(offset >= 0 && offset <= 63);
- for (; offset < 64; offset++) {
- if (*set & (1LL << offset))
- return (offset);
+ if ((mask = *set >> offset)) {
+ for (;;) {
+ if (mask & 1)
+ return (offset);
+ mask >>= 1;
+ ++offset;
+ }
}
return (ULONG_MAX);
}