author | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月17日 11:55:21 -0300 |
---|---|---|
committer | pcpa <paulo.cesar.pereira.de.andrade@gmail.com> | 2023年02月17日 11:55:21 -0300 |
commit | 2bcbc50e1cb795b9379a69e84374bf705ab12ef5 (patch) | |
tree | 33cc321cb0c8e2d9efebb7c5eff8f25713870bdb /lib | |
parent | 516dfc1743d4bce3a09c1594fc0adfc2ee5308a3 (diff) | |
download | lightning-2bcbc50e1cb795b9379a69e84374bf705ab12ef5.tar.gz |
-rw-r--r-- | lib/jit_ia64-cpu.c | 42 | ||||
-rw-r--r-- | lib/jit_ia64-sz.c | 4 | ||||
-rw-r--r-- | lib/jit_ia64.c | 6 | ||||
-rw-r--r-- | lib/jit_size.c | 2 |
diff --git a/lib/jit_ia64-cpu.c b/lib/jit_ia64-cpu.c index 35338a0..73a3b14 100644 --- a/lib/jit_ia64-cpu.c +++ b/lib/jit_ia64-cpu.c @@ -3524,41 +3524,43 @@ _bitswap(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) static void _clzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { -#if 0 /* FIXME Encoding is correct but gives SIGILL - - * binutils also does not disassemble it */ - CLZ(r0, r1); -#else - fallback_clz(r0, r1); -#endif + if (jit_cpu.clz) + CLZ(r0, r1); + else + fallback_clz(r0, r1); } static void _clor(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { -#if 0 - comr(r0, r1); - clzr(r0, r0); -#else - fallback_clo(r0, r1); -#endif + if (jit_cpu.clz) { + comr(r0, r1); + clzr(r0, r0); + } + else + fallback_clo(r0, r1); } static void _ctor(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { -#if 0 - bitswap(r0, r1); - clor(r0, r0); -#else - fallback_cto(r0, r1); -#endif + if (jit_cpu.clz) { + bitswap(r0, r1); + clor(r0, r0); + } + else + fallback_cto(r0, r1); } static void _ctzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1) { - bitswap(r0, r1); - clzr(r0, r0); + if (jit_cpu.clz) { + bitswap(r0, r1); + clzr(r0, r0); + } + else + fallback_ctz(r0, r1); } static void diff --git a/lib/jit_ia64-sz.c b/lib/jit_ia64-sz.c index d9c912a..e1d973c 100644 --- a/lib/jit_ia64-sz.c +++ b/lib/jit_ia64-sz.c @@ -1,5 +1,5 @@ #if __WORDSIZE == 64 -#define JIT_INSTR_MAX 896 +#define JIT_INSTR_MAX 608 0, /* data */ 0, /* live */ 48, /* align */ @@ -448,5 +448,5 @@ 608, /* clo */ 544, /* clz */ 608, /* cto */ - 896, /* ctz */ + 544, /* ctz */ #endif /* __WORDSIZE */ diff --git a/lib/jit_ia64.c b/lib/jit_ia64.c index 7ee1bd1..90915a2 100644 --- a/lib/jit_ia64.c +++ b/lib/jit_ia64.c @@ -58,6 +58,7 @@ extern void __clear_cache(void *, void *); /* * Initialization */ +jit_cpu_t jit_cpu; jit_register_t _rvs[] = { /* Always 0 */ { 0, "r0" }, @@ -239,6 +240,11 @@ jit_register_t _rvs[] = { void jit_get_cpu(void) { + jit_word_t clz = -1; + __asm__ volatile("tf.nz.unc p6,p7=32;(p6)mov %0=1;(p7)mov %0=0" + : "=r" (clz)); + assert(clz == 0 || clz == 1); + jit_cpu.clz = clz; } void diff --git a/lib/jit_size.c b/lib/jit_size.c index 2578277..e9a1491 100644 --- a/lib/jit_size.c +++ b/lib/jit_size.c @@ -28,7 +28,7 @@ */ static jit_int16_t _szs[jit_code_last_code] = { #if GET_JIT_SIZE -# define JIT_INSTR_MAX 512 +# define JIT_INSTR_MAX 1024 #else # if defined(__i386__) || defined(__x86_64__) # include "jit_x86-sz.c" |