lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_ppc-cpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/jit_ppc-cpu.c')
-rw-r--r--lib/jit_ppc-cpu.c 73
1 files changed, 2 insertions, 71 deletions
diff --git a/lib/jit_ppc-cpu.c b/lib/jit_ppc-cpu.c
index 67874c6..031f95d 100644
--- a/lib/jit_ppc-cpu.c
+++ b/lib/jit_ppc-cpu.c
@@ -533,8 +533,6 @@ static void _casx(jit_state_t *_jit,jit_int32_t,jit_int32_t,
#define casi(r0, i0, r1, r2) casx(r0, _NOREG, r1, r2, i0)
# define negr(r0,r1) NEG(r0,r1)
# define comr(r0,r1) NOT(r0,r1)
-# define bitswap(r0, r1) _bitswap(_jit, r0, r1)
-static void _bitswap(jit_state_t*, jit_int32_t, jit_int32_t);
# define clor(r0, r1) _clor(_jit, r0, r1)
static void _clor(jit_state_t*, jit_int32_t, jit_int32_t);
# if __WORDSIZE == 32
@@ -1220,73 +1218,6 @@ _casx(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1,
jit_unget_reg(r1_reg);
}
-/* http://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel */
-/*
-unsigned int v; // 32-bit word to reverse bit order
-
-// swap odd and even bits
-v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);
-// swap consecutive pairs
-v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2);
-// swap nibbles ...
-v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4);
-// swap bytes
-v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8);
-// swap 2-byte long pairs
-v = ( v >> 16 ) | ( v << 16);
- */
-static void
-_bitswap(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
-{
- jit_int32_t t0, t1, t2, t3, t4;
- movr(r0, r1);
- t0 = jit_get_reg(jit_class_gpr);
- t1 = jit_get_reg(jit_class_gpr);
- t2 = jit_get_reg(jit_class_gpr);
- movi(rn(t0), __WORDSIZE == 32 ? 0x55555555L : 0x5555555555555555L);
- rshi_u(rn(t1), r0, 1); /* t1 = v >> 1 */
- andr(rn(t1), rn(t1), rn(t0)); /* t1 &= t0 */
- andr(rn(t2), r0, rn(t0)); /* t2 = v & t0*/
- lshi(rn(t2), rn(t2), 1); /* t2 <<= 1 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
- movi(rn(t0), __WORDSIZE == 32 ? 0x33333333L : 0x3333333333333333L);
- rshi_u(rn(t1), r0, 2); /* t1 = v >> 2 */
- andr(rn(t1), rn(t1), rn(t0)); /* t1 &= t0 */
- andr(rn(t2), r0, rn(t0)); /* t2 = v & t0*/
- lshi(rn(t2), rn(t2), 2); /* t2 <<= 2 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
- movi(rn(t0), __WORDSIZE == 32 ? 0x0f0f0f0fL : 0x0f0f0f0f0f0f0f0fL);
- rshi_u(rn(t1), r0, 4); /* t1 = v >> 4 */
- andr(rn(t1), rn(t1), rn(t0)); /* t1 &= t0 */
- andr(rn(t2), r0, rn(t0)); /* t2 = v & t0*/
- lshi(rn(t2), rn(t2), 4); /* t2 <<= 4 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
- movi(rn(t0), __WORDSIZE == 32 ? 0x00ff00ffL : 0x00ff00ff00ff00ffL);
- rshi_u(rn(t1), r0, 8); /* t1 = v >> 8 */
- andr(rn(t1), rn(t1), rn(t0)); /* t1 &= t0 */
- andr(rn(t2), r0, rn(t0)); /* t2 = v & t0*/
- lshi(rn(t2), rn(t2), 8); /* t2 <<= 8 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
-# if __WORDSIZE == 32
- rshi_u(rn(t1), r0, 16); /* t1 = v >> 16 */
- lshi(rn(t2), r0, 16); /* t2 = v << 16 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
-# else
- movi(rn(t0), 0x0000ffff0000ffffL);
- rshi_u(rn(t1), r0, 16); /* t1 = v >> 16 */
- andr(rn(t1), rn(t1), rn(t0)); /* t1 &= t0 */
- andr(rn(t2), r0, rn(t0)); /* t2 = v & t0*/
- lshi(rn(t2), rn(t2), 16); /* t2 <<= 16 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
- rshi_u(rn(t1), r0, 32); /* t1 = v >> 32 */
- lshi(rn(t2), r0, 32); /* t2 = v << 32 */
- orr(r0, rn(t1), rn(t2)); /* v = t1 | t2 */
-# endif
- jit_unget_reg(t2);
- jit_unget_reg(t1);
- jit_unget_reg(t0);
-}
-
static void
_clor(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
@@ -1297,14 +1228,14 @@ _clor(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
static void
_ctor(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
- bitswap(r0, r1);
+ fallback_bitswap(r0, r1);
clor(r0, r0);
}
static void
_ctzr(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
{
- bitswap(r0, r1);
+ fallback_bitswap(r0, r1);
clzr(r0, r0);
}
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月18日 17:36:51 +0000

AltStyle によって変換されたページ (->オリジナル) /