mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-30 00:40:20 +02:00
Add new test cases to exercise memory load/store.
* check/ldstr.ok, check/ldstr.tst, check/ldsti.ok, check/ldsti.tst, check/ldstxr.ok, check/ldstxr.tst, check/ldstxi.ok, check/ldstxi.tst: New test case files exercising a very large amount of register combinations to verify load/store implementation. * check/Makefile.am: Update for new test cases. * lib/jit_x86-cpu.c: Correct wrong argument order when computing REX prefix for {ld,st}r_T codes;
This commit is contained in:
parent
aa7c8230c1
commit
f59fceb75d
11 changed files with 1141 additions and 10 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2012-12-05 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* check/ldstr.ok, check/ldstr.tst, check/ldsti.ok,
|
||||
check/ldsti.tst, check/ldstxr.ok, check/ldstxr.tst,
|
||||
check/ldstxi.ok, check/ldstxi.tst:
|
||||
New test case files exercising a very large amount of
|
||||
register combinations to verify load/store implementation.
|
||||
|
||||
* check/Makefile.am: Update for new test cases.
|
||||
|
||||
* lib/jit_x86-cpu.c: Correct wrong argument order when
|
||||
computing REX prefix for {ld,st}r_T codes;
|
||||
|
||||
2012-12-04 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips
|
||||
|
|
|
@ -32,10 +32,14 @@ EXTRA_DIST = \
|
|||
divi.tst divi.ok \
|
||||
fib.tst fib.ok \
|
||||
rpn.tst rpn.ok \
|
||||
ldstr.tst ldstr.ok \
|
||||
ldsti.tst ldsti.ok \
|
||||
ldstxi.tst ldstxi.ok \
|
||||
ldstxr.tst ldstxr.ok \
|
||||
check.sh run-test \
|
||||
all.tst
|
||||
|
||||
TESTS = 3to2 add allocai bp divi fib rpn
|
||||
TESTS = 3to2 add allocai bp divi fib rpn ldstr ldsti ldstxi ldstxr
|
||||
|
||||
CLEANFILES = $(TESTS)
|
||||
|
||||
|
|
1
check/ldsti.ok
Normal file
1
check/ldsti.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
241
check/ldsti.tst
Normal file
241
check/ldsti.tst
Normal file
|
@ -0,0 +1,241 @@
|
|||
#if __WORDSIZE == 64
|
||||
# define L0 0x8000000000000001
|
||||
# define LL0 L0
|
||||
# define LC0 0xffffffffffffff81
|
||||
# define LS0 0xffffffffffff8001
|
||||
# define LI0 0xffffffff80000001
|
||||
# define L1 0x8000000000000000
|
||||
# define LL1 L1
|
||||
# define LC1 0xffffffffffffff80
|
||||
# define LS1 0xffffffffffff8000
|
||||
# define LI1 0xffffffff80000000
|
||||
# define L2 0x7fffffffffffffff
|
||||
# define LL2 L2
|
||||
# define LC2 0x000000000000007f
|
||||
# define LS2 0x0000000000007fff
|
||||
# define LI2 0x000000007fffffff
|
||||
# define L3 0xffffffffffffffff
|
||||
# define LL3 L3
|
||||
# define LC3 0xffffffffffffffff
|
||||
# define LS3 0xffffffffffffffff
|
||||
# define LI3 0xffffffffffffffff
|
||||
#endif
|
||||
#define I0 0x80000001
|
||||
#define II0 I0
|
||||
#define IC0 0xffffff81
|
||||
#define IS0 0xffff8001
|
||||
#define I1 0x80000000
|
||||
#define II1 I1
|
||||
#define IC1 0xffffff80
|
||||
#define IS1 0xffff8000
|
||||
#define I2 0x7fffffff
|
||||
#define II2 I2
|
||||
#define IC2 0x0000007f
|
||||
#define IS2 0x00007fff
|
||||
#define I3 0xffffffff
|
||||
#define II3 I3
|
||||
#define IC3 0xffffffff
|
||||
#define IS3 0xffffffff
|
||||
#define S0 0x8001
|
||||
#define S1 0x8000
|
||||
#define S2 0x7fff
|
||||
#define S3 0xffff
|
||||
#define C0 0x81
|
||||
#define C1 0x80
|
||||
#define C2 0x7f
|
||||
#define C3 0xff
|
||||
#define F0 0.25
|
||||
#define F1 0.75
|
||||
#define F2 -0.25
|
||||
#define F3 -0.75
|
||||
#define D0 0.25
|
||||
#define D1 0.75
|
||||
#define D2 -0.25
|
||||
#define D3 -0.75
|
||||
|
||||
.data 512
|
||||
ok:
|
||||
.c "ok\n"
|
||||
t0:
|
||||
c0:
|
||||
.c 0
|
||||
uc0:
|
||||
.c 0
|
||||
s0:
|
||||
.s 0
|
||||
us0:
|
||||
.s 0
|
||||
.align 4
|
||||
i0:
|
||||
.i 0
|
||||
#if __WORDSIZE == 64
|
||||
ui0:
|
||||
.i 0
|
||||
.align 8
|
||||
l0:
|
||||
.l 0
|
||||
#endif
|
||||
f0:
|
||||
.f 0
|
||||
.align 8
|
||||
d0:
|
||||
.d 0
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define LDSTL(N, R0) \
|
||||
sti_i ui0 %R0 \
|
||||
movi %R0 L##N \
|
||||
sti_l l0 %R0
|
||||
|
||||
# define SI(C, N, x, X, R0) \
|
||||
ldi_##x %R0 x##0 \
|
||||
beqi L##x##C %R0 L##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0) \
|
||||
UI(C, N, i, I, R0) \
|
||||
SI(C, N, l, L, R0)
|
||||
#else
|
||||
# define LDSTL(C, R0)
|
||||
# define SI(C, N, x, X, R0) \
|
||||
ldi_##x %R0 x##0 \
|
||||
beqi L##x##C %R0 I##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0)
|
||||
|
||||
#endif
|
||||
|
||||
#define UI(C, N, x, X, R0) \
|
||||
ldi_u##x %R0 u##x##0 \
|
||||
beqi Lu##x##C %R0 X##N \
|
||||
calli @abort \
|
||||
Lu##x##C:
|
||||
|
||||
#define FF(C, N, x, X, F0) \
|
||||
ldi_##x %F0 x##0 \
|
||||
beqi_##x L##x##C %F0 X##N \
|
||||
L##x##C:
|
||||
|
||||
#define LDST1(X, N, R0, F0) \
|
||||
movi %R0 C##N \
|
||||
sti_c c0 %R0 \
|
||||
sti_c uc0 %R0 \
|
||||
movi %R0 S##N \
|
||||
sti_s s0 %R0 \
|
||||
sti_s us0 %R0 \
|
||||
movi %R0 I##N \
|
||||
sti_i i0 %R0 \
|
||||
LDSTL(N, R0) \
|
||||
movi_f %F0 F##N \
|
||||
sti_f f0 %F0 \
|
||||
movi_d %F0 D##N \
|
||||
sti_d d0 %F0 \
|
||||
SI(X, N, c, C, R0) \
|
||||
UI(X, N, c, C, R0) \
|
||||
SI(X, N, s, S, R0) \
|
||||
UI(X, N, s, S, R0) \
|
||||
SI(X, N, i, I, R0) \
|
||||
LDRL(X, N, R0) \
|
||||
FF(X, N, f, F, F0) \
|
||||
FF(X, N, d, D, F0)
|
||||
|
||||
#define LDST0(R0, F0) \
|
||||
LDST1(0_##R0##_##F0, 0, R0, F0) \
|
||||
LDST1(1_##R0##_##F0, 1, R0, F0) \
|
||||
LDST1(2_##R0##_##F0, 2, R0, F0) \
|
||||
LDST1(3_##R0##_##F0, 3, R0, F0)
|
||||
|
||||
#define LDST(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5) \
|
||||
LDST0(V0, F0) \
|
||||
LDST0(V1, F1) \
|
||||
LDST0(V2, F3) \
|
||||
LDST0(R0, F4) \
|
||||
LDST0(R1, F5) \
|
||||
LDST0(R2, F0)
|
||||
|
||||
.code
|
||||
jmpi main
|
||||
|
||||
main:
|
||||
prolog
|
||||
|
||||
/* Simple test to simplify validating encodings before
|
||||
* brute force tests */
|
||||
movi %r1 0x81
|
||||
sti_c c0 %r1
|
||||
sti_c uc0 %r1
|
||||
movi %r1 0x8001
|
||||
sti_s s0 %r1
|
||||
sti_s us0 %r1
|
||||
movi %r1 0x80000001
|
||||
sti_i i0 %r1
|
||||
#if __WORDSIZE == 64
|
||||
sti_i ui0 %r1
|
||||
movi %r1 0x8000000000000001
|
||||
sti_l l0 %r1
|
||||
#endif
|
||||
movi_f %f0 0.5
|
||||
sti_f f0 %f0
|
||||
movi_d %f0 0.25
|
||||
sti_d d0 %f0
|
||||
ldi_c %r1 c0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Lc %r1 0xffffff81
|
||||
#else
|
||||
beqi Lc %r1 0xffffffffffffff81
|
||||
#endif
|
||||
calli @abort
|
||||
Lc:
|
||||
ldi_uc %r1 uc0
|
||||
beqi Luc %r1 0x81
|
||||
calli @abort
|
||||
Luc:
|
||||
ldi_s %r1 s0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Ls %r1 0xffff8001
|
||||
#else
|
||||
beqi Ls %r1 0xffffffffffff8001
|
||||
#endif
|
||||
calli @abort
|
||||
Ls:
|
||||
ldi_us %r1 us0
|
||||
beqi Lus %r1 0x8001
|
||||
calli @abort
|
||||
Lus:
|
||||
ldi_i %r1 i0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Li %r1 0x80000001
|
||||
#else
|
||||
beqi Li %r1 0xffffffff80000001
|
||||
#endif
|
||||
calli @abort
|
||||
Li:
|
||||
#if __WORDSIZE == 64
|
||||
ldi_ui %r1 ui0
|
||||
beqi Lui %r1 0x80000001
|
||||
calli @abort
|
||||
Lui:
|
||||
ldi_l %r1 l0
|
||||
beqi Ll %r1 0x8000000000000001
|
||||
calli @abort
|
||||
Ll:
|
||||
#endif
|
||||
ldi_f %f0 f0
|
||||
beqi_f Lf %f0 0.5
|
||||
calli @abort
|
||||
Lf:
|
||||
ldi_d %f0 d0
|
||||
beqi_d Ld %f0 0.25
|
||||
calli @abort
|
||||
Ld:
|
||||
|
||||
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
|
||||
// just to know did not abort
|
||||
prepare 1
|
||||
pushargi ok
|
||||
finishi @printf
|
||||
ret
|
||||
epilog
|
1
check/ldstr.ok
Normal file
1
check/ldstr.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
290
check/ldstr.tst
Normal file
290
check/ldstr.tst
Normal file
|
@ -0,0 +1,290 @@
|
|||
#if __WORDSIZE == 64
|
||||
# define L0 0x8000000000000001
|
||||
# define LL0 L0
|
||||
# define LC0 0xffffffffffffff81
|
||||
# define LS0 0xffffffffffff8001
|
||||
# define LI0 0xffffffff80000001
|
||||
# define L1 0x8000000000000000
|
||||
# define LL1 L1
|
||||
# define LC1 0xffffffffffffff80
|
||||
# define LS1 0xffffffffffff8000
|
||||
# define LI1 0xffffffff80000000
|
||||
# define L2 0x7fffffffffffffff
|
||||
# define LL2 L2
|
||||
# define LC2 0x000000000000007f
|
||||
# define LS2 0x0000000000007fff
|
||||
# define LI2 0x000000007fffffff
|
||||
# define L3 0xffffffffffffffff
|
||||
# define LL3 L3
|
||||
# define LC3 0xffffffffffffffff
|
||||
# define LS3 0xffffffffffffffff
|
||||
# define LI3 0xffffffffffffffff
|
||||
#endif
|
||||
#define I0 0x80000001
|
||||
#define II0 I0
|
||||
#define IC0 0xffffff81
|
||||
#define IS0 0xffff8001
|
||||
#define I1 0x80000000
|
||||
#define II1 I1
|
||||
#define IC1 0xffffff80
|
||||
#define IS1 0xffff8000
|
||||
#define I2 0x7fffffff
|
||||
#define II2 I2
|
||||
#define IC2 0x0000007f
|
||||
#define IS2 0x00007fff
|
||||
#define I3 0xffffffff
|
||||
#define II3 I3
|
||||
#define IC3 0xffffffff
|
||||
#define IS3 0xffffffff
|
||||
#define S0 0x8001
|
||||
#define S1 0x8000
|
||||
#define S2 0x7fff
|
||||
#define S3 0xffff
|
||||
#define C0 0x81
|
||||
#define C1 0x80
|
||||
#define C2 0x7f
|
||||
#define C3 0xff
|
||||
#define F0 0.25
|
||||
#define F1 0.75
|
||||
#define F2 -0.25
|
||||
#define F3 -0.75
|
||||
#define D0 0.25
|
||||
#define D1 0.75
|
||||
#define D2 -0.25
|
||||
#define D3 -0.75
|
||||
|
||||
.data 512
|
||||
ok:
|
||||
.c "ok\n"
|
||||
t0:
|
||||
c0:
|
||||
.c 0
|
||||
uc0:
|
||||
.c 0
|
||||
s0:
|
||||
.s 0
|
||||
us0:
|
||||
.s 0
|
||||
.align 4
|
||||
i0:
|
||||
.i 0
|
||||
#if __WORDSIZE == 64
|
||||
ui0:
|
||||
.i 0
|
||||
.align 8
|
||||
l0:
|
||||
.l 0
|
||||
#endif
|
||||
f0:
|
||||
.f 0
|
||||
.align 8
|
||||
d0:
|
||||
.d 0
|
||||
|
||||
. $($offc = c0 - t0)
|
||||
. $($offuc = uc0 - t0)
|
||||
. $($offs = s0 - t0)
|
||||
. $($offus = us0 - t0)
|
||||
. $($offi = i0 - t0)
|
||||
#if __WORDSIZE == 64
|
||||
. $($offui = ui0 - t0)
|
||||
. $($offl = l0 - t0)
|
||||
#endif
|
||||
. $($offf = f0 - t0)
|
||||
. $($offd = d0 - t0)
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define LDSTL(N, R0, R1) \
|
||||
movi %R0 $(t0 + $offui) \
|
||||
str_i %R0 %R1 \
|
||||
movi %R0 $(t0 + $offl) \
|
||||
movi %R1 L##N \
|
||||
str_l %R0 %R1
|
||||
|
||||
# define SI(C, N, x, X, R0, R1) \
|
||||
movi %R0 $(t0 + $off##x) \
|
||||
ldr_##x %R1 %R0 \
|
||||
beqi L##x##C %R1 L##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1) \
|
||||
UI(C, N, i, I, R0, R1) \
|
||||
SI(C, N, l, L, R0, R1)
|
||||
#else
|
||||
# define LDSTL(C, R0, R1)
|
||||
# define SI(C, N, x, X, R0, R1) \
|
||||
movi %R0 $(t0 + $off##x) \
|
||||
ldr_##x %R1 %R0 \
|
||||
beqi L##x##C %R1 I##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1)
|
||||
|
||||
#endif
|
||||
|
||||
#define UI(C, N, x, X, R0, R1) \
|
||||
movi %R0 $(t0 + $offu##x) \
|
||||
ldr_u##x %R1 %R0 \
|
||||
beqi Lu##x##C %R1 X##N \
|
||||
calli @abort \
|
||||
Lu##x##C:
|
||||
|
||||
#define FF(C, N, x, X, R0, F0) \
|
||||
movi %R0 $(t0 + $off##x) \
|
||||
ldr_##x %F0 %R0 \
|
||||
beqi_##x L##x##C %F0 X##N \
|
||||
L##x##C:
|
||||
|
||||
#define LDST1(X, N, R0, R1, F0) \
|
||||
movi %R0 $(t0 + $offc) \
|
||||
movi %R1 C##N \
|
||||
str_c %R0 %R1 \
|
||||
movi %R0 $(t0 + $offuc) \
|
||||
str_c %R0 %R1 \
|
||||
movi %R0 $(t0 + $offs) \
|
||||
movi %R1 S##N \
|
||||
str_s %R0 %R1 \
|
||||
movi %R0 $(t0 + $offus) \
|
||||
str_s %R0 %R1 \
|
||||
movi %R0 $(t0 + $offi) \
|
||||
movi %R1 I##N \
|
||||
str_i %R0 %R1 \
|
||||
LDSTL(N, R0, R1) \
|
||||
movi %R0 $(t0 + $offf) \
|
||||
movi_f %F0 F##N \
|
||||
str_f %R0 %F0 \
|
||||
movi %R0 $(t0 + $offd) \
|
||||
movi_d %F0 D##N \
|
||||
str_d %R0 %F0 \
|
||||
SI(X, N, c, C, R0, R1) \
|
||||
UI(X, N, c, C, R0, R1) \
|
||||
SI(X, N, s, S, R0, R1) \
|
||||
UI(X, N, s, S, R0, R1) \
|
||||
SI(X, N, i, I, R0, R1) \
|
||||
LDRL(X, N, R0, R1) \
|
||||
FF(X, N, f, F, R0, F0) \
|
||||
FF(X, N, d, D, R0, F0)
|
||||
|
||||
#define LDST0(R0, R1, F0) \
|
||||
LDST1(0_##R0##_##R1##_##F0, 0, R0, R1, F0) \
|
||||
LDST1(1_##R0##_##R1##_##F0, 1, R0, R1, F0) \
|
||||
LDST1(2_##R0##_##R1##_##F0, 2, R0, R1, F0) \
|
||||
LDST1(3_##R0##_##R1##_##F0, 3, R0, R1, F0)
|
||||
|
||||
#define LDST(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5) \
|
||||
LDST0(V0, V1, F0) \
|
||||
LDST0(V0, V2, F1) \
|
||||
LDST0(V0, R0, F3) \
|
||||
LDST0(V0, R1, F4) \
|
||||
LDST0(V0, R2, F5) \
|
||||
LDST0(V1, V2, F0) \
|
||||
LDST0(V1, R0, F1) \
|
||||
LDST0(V1, R1, F2) \
|
||||
LDST0(V1, R2, F3) \
|
||||
LDST0(V2, R0, F4) \
|
||||
LDST0(V2, R1, F5) \
|
||||
LDST0(V2, R2, F0)
|
||||
|
||||
.code
|
||||
jmpi main
|
||||
|
||||
main:
|
||||
prolog
|
||||
|
||||
/* Simple test to simplify validating encodings before
|
||||
* brute force tests */
|
||||
movi %r0 $(t0 + $offc)
|
||||
movi %r1 0x81
|
||||
str_c %r0 %r1
|
||||
movi %r0 $(t0 + $offuc)
|
||||
str_c %r0 %r1
|
||||
movi %r0 $(t0 + $offs)
|
||||
movi %r1 0x8001
|
||||
str_s %r0 %r1
|
||||
movi %r0 $(t0 + $offus)
|
||||
str_s %r0 %r1
|
||||
movi %r0 $(t0 + $offi)
|
||||
movi %r1 0x80000001
|
||||
str_i %r0 %r1
|
||||
#if __WORDSIZE == 64
|
||||
movi %r0 $(t0 + $offui)
|
||||
str_i %r0 %r1
|
||||
movi %r0 $(t0 + $offl)
|
||||
movi %r1 0x8000000000000001
|
||||
str_l %r0 %r1
|
||||
#endif
|
||||
movi %r0 $(t0 + $offf)
|
||||
movi_f %f0 0.5
|
||||
str_f %r0 %f0
|
||||
movi %r0 $(t0 + $offd)
|
||||
movi_d %f0 0.25
|
||||
str_d %r0 %f0
|
||||
movi %r0 $(t0 + $offc)
|
||||
ldr_c %r1 %r0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Lc %r1 0xffffff81
|
||||
#else
|
||||
beqi Lc %r1 0xffffffffffffff81
|
||||
#endif
|
||||
calli @abort
|
||||
Lc:
|
||||
movi %r0 $(t0 + $offuc)
|
||||
ldr_uc %r1 %r0
|
||||
beqi Luc %r1 0x81
|
||||
calli @abort
|
||||
Luc:
|
||||
movi %r0 $(t0 + $offs)
|
||||
ldr_s %r1 %r0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Ls %r1 0xffff8001
|
||||
#else
|
||||
beqi Ls %r1 0xffffffffffff8001
|
||||
#endif
|
||||
calli @abort
|
||||
Ls:
|
||||
movi %r0 $(t0 + $offus)
|
||||
ldr_us %r1 %r0
|
||||
beqi Lus %r1 0x8001
|
||||
calli @abort
|
||||
Lus:
|
||||
movi %r0 $(t0 + $offi)
|
||||
ldr_i %r1 %r0
|
||||
#if __WORDSIZE == 32
|
||||
beqi Li %r1 0x80000001
|
||||
#else
|
||||
beqi Li %r1 0xffffffff80000001
|
||||
#endif
|
||||
calli @abort
|
||||
Li:
|
||||
#if __WORDSIZE == 64
|
||||
movi %r0 $(t0 + $offui)
|
||||
ldr_ui %r1 %r0
|
||||
beqi Lui %r1 0x80000001
|
||||
calli @abort
|
||||
Lui:
|
||||
movi %r0 $(t0 + $offl)
|
||||
ldr_l %r1 %r0
|
||||
beqi Ll %r1 0x8000000000000001
|
||||
calli @abort
|
||||
Ll:
|
||||
#endif
|
||||
movi %r0 $(t0 + $offf)
|
||||
ldr_f %f0 %r0
|
||||
beqi_f Lf %f0 0.5
|
||||
calli @abort
|
||||
Lf:
|
||||
movi %r0 $(t0 + $offd)
|
||||
ldr_d %f0 %r0
|
||||
beqi_d Ld %f0 0.25
|
||||
calli @abort
|
||||
Ld:
|
||||
|
||||
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
|
||||
// just to know did not abort
|
||||
prepare 1
|
||||
pushargi ok
|
||||
finishi @printf
|
||||
ret
|
||||
epilog
|
1
check/ldstxi.ok
Normal file
1
check/ldstxi.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
261
check/ldstxi.tst
Normal file
261
check/ldstxi.tst
Normal file
|
@ -0,0 +1,261 @@
|
|||
#if __WORDSIZE == 64
|
||||
# define L0 0x8000000000000001
|
||||
# define LL0 L0
|
||||
# define LC0 0xffffffffffffff81
|
||||
# define LS0 0xffffffffffff8001
|
||||
# define LI0 0xffffffff80000001
|
||||
# define L1 0x8000000000000000
|
||||
# define LL1 L1
|
||||
# define LC1 0xffffffffffffff80
|
||||
# define LS1 0xffffffffffff8000
|
||||
# define LI1 0xffffffff80000000
|
||||
# define L2 0x7fffffffffffffff
|
||||
# define LL2 L2
|
||||
# define LC2 0x000000000000007f
|
||||
# define LS2 0x0000000000007fff
|
||||
# define LI2 0x000000007fffffff
|
||||
# define L3 0xffffffffffffffff
|
||||
# define LL3 L3
|
||||
# define LC3 0xffffffffffffffff
|
||||
# define LS3 0xffffffffffffffff
|
||||
# define LI3 0xffffffffffffffff
|
||||
#endif
|
||||
#define I0 0x80000001
|
||||
#define II0 I0
|
||||
#define IC0 0xffffff81
|
||||
#define IS0 0xffff8001
|
||||
#define I1 0x80000000
|
||||
#define II1 I1
|
||||
#define IC1 0xffffff80
|
||||
#define IS1 0xffff8000
|
||||
#define I2 0x7fffffff
|
||||
#define II2 I2
|
||||
#define IC2 0x0000007f
|
||||
#define IS2 0x00007fff
|
||||
#define I3 0xffffffff
|
||||
#define II3 I3
|
||||
#define IC3 0xffffffff
|
||||
#define IS3 0xffffffff
|
||||
#define S0 0x8001
|
||||
#define S1 0x8000
|
||||
#define S2 0x7fff
|
||||
#define S3 0xffff
|
||||
#define C0 0x81
|
||||
#define C1 0x80
|
||||
#define C2 0x7f
|
||||
#define C3 0xff
|
||||
#define F0 0.25
|
||||
#define F1 0.75
|
||||
#define F2 -0.25
|
||||
#define F3 -0.75
|
||||
#define D0 0.25
|
||||
#define D1 0.75
|
||||
#define D2 -0.25
|
||||
#define D3 -0.75
|
||||
|
||||
.data 512
|
||||
ok:
|
||||
.c "ok\n"
|
||||
t0:
|
||||
c0:
|
||||
.c 0
|
||||
uc0:
|
||||
.c 0
|
||||
s0:
|
||||
.s 0
|
||||
us0:
|
||||
.s 0
|
||||
.align 4
|
||||
i0:
|
||||
.i 0
|
||||
#if __WORDSIZE == 64
|
||||
ui0:
|
||||
.i 0
|
||||
.align 8
|
||||
l0:
|
||||
.l 0
|
||||
#endif
|
||||
f0:
|
||||
.f 0
|
||||
.align 8
|
||||
d0:
|
||||
.d 0
|
||||
|
||||
. $($offc = c0 - t0)
|
||||
. $($offuc = uc0 - t0)
|
||||
. $($offs = s0 - t0)
|
||||
. $($offus = us0 - t0)
|
||||
. $($offi = i0 - t0)
|
||||
#if __WORDSIZE == 64
|
||||
. $($offui = ui0 - t0)
|
||||
. $($offl = l0 - t0)
|
||||
#endif
|
||||
. $($offf = f0 - t0)
|
||||
. $($offd = d0 - t0)
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define LDSTL(N, R0, R1) \
|
||||
stxi_i $offui %R0 %R1 \
|
||||
movi %R1 L##N \
|
||||
stxi_l $offl %R0 %R1
|
||||
|
||||
# define SI(C, N, x, X, R0, R1) \
|
||||
ldxi_##x %R1 %R0 $off##x \
|
||||
beqi L##x##C %R1 L##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1) \
|
||||
UI(C, N, i, I, R0, R1) \
|
||||
SI(C, N, l, L, R0, R1)
|
||||
#else
|
||||
# define LDSTL(C, R0, R1)
|
||||
# define SI(C, N, x, X, R0, R1) \
|
||||
ldxi_##x $off##x %R1 %R0 \
|
||||
beqi L##x##C %R1 I##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1)
|
||||
|
||||
#endif
|
||||
|
||||
#define UI(C, N, x, X, R0, R1) \
|
||||
ldxi_u##x %R1 %R0 $offu##x \
|
||||
beqi Lu##x##C %R1 X##N \
|
||||
calli @abort \
|
||||
Lu##x##C:
|
||||
|
||||
#define FF(C, N, x, X, R0, F0) \
|
||||
ldxi_##x %F0 %R0 $off##x \
|
||||
beqi_##x L##x##C %F0 X##N \
|
||||
L##x##C:
|
||||
|
||||
#define LDST1(X, N, R0, R1, F0) \
|
||||
movi %R0 t0 \
|
||||
movi %R1 C##N \
|
||||
stxi_c $offc %R0 %R1 \
|
||||
stxi_c $offuc %R0 %R1 \
|
||||
movi %R1 S##N \
|
||||
stxi_s $offs %R0 %R1 \
|
||||
stxi_s $offus %R0 %R1 \
|
||||
movi %R1 I##N \
|
||||
stxi_i $offi %R0 %R1 \
|
||||
LDSTL(N, R0, R1) \
|
||||
movi_f %F0 F##N \
|
||||
stxi_f $offf %R0 %F0 \
|
||||
movi_d %F0 D##N \
|
||||
stxi_d $offd %R0 %F0 \
|
||||
SI(X, N, c, C, R0, R1) \
|
||||
UI(X, N, c, C, R0, R1) \
|
||||
SI(X, N, s, S, R0, R1) \
|
||||
UI(X, N, s, S, R0, R1) \
|
||||
SI(X, N, i, I, R0, R1) \
|
||||
LDRL(X, N, R0, R1) \
|
||||
FF(X, N, f, F, R0, F0) \
|
||||
FF(X, N, d, D, R0, F0)
|
||||
|
||||
#define LDST0(R0, R1, F0) \
|
||||
LDST1(0_##R0##_##R1##_##F0, 0, R0, R1, F0) \
|
||||
LDST1(1_##R0##_##R1##_##F0, 1, R0, R1, F0) \
|
||||
LDST1(2_##R0##_##R1##_##F0, 2, R0, R1, F0) \
|
||||
LDST1(3_##R0##_##R1##_##F0, 3, R0, R1, F0)
|
||||
|
||||
#define LDST(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5) \
|
||||
LDST0(V0, V1, F0) \
|
||||
LDST0(V0, V2, F1) \
|
||||
LDST0(V0, R0, F3) \
|
||||
LDST0(V0, R1, F4) \
|
||||
LDST0(V0, R2, F5) \
|
||||
LDST0(V1, V2, F0) \
|
||||
LDST0(V1, R0, F1) \
|
||||
LDST0(V1, R1, F2) \
|
||||
LDST0(V1, R2, F3) \
|
||||
LDST0(V2, R0, F4) \
|
||||
LDST0(V2, R1, F5) \
|
||||
LDST0(V2, R2, F0)
|
||||
|
||||
.code
|
||||
jmpi main
|
||||
|
||||
main:
|
||||
prolog
|
||||
|
||||
/* Simple test to simplify validating encodings before
|
||||
* brute force tests */
|
||||
movi %r0 t0
|
||||
movi %r1 0x81
|
||||
stxi_c $offc %r0 %r1
|
||||
stxi_c $offuc %r0 %r1
|
||||
movi %r1 0x8001
|
||||
stxi_s $offs %r0 %r1
|
||||
stxi_s $offus %r0 %r1
|
||||
movi %r1 0x80000001
|
||||
stxi_i $offi %r0 %r1
|
||||
#if __WORDSIZE == 64
|
||||
stxi_i $offui %r0 %r1
|
||||
movi %r1 0x8000000000000001
|
||||
stxi_l $offl %r0 %r1
|
||||
#endif
|
||||
movi_f %f0 0.5
|
||||
stxi_f $offf %r0 %f0
|
||||
movi_d %f0 0.25
|
||||
stxi_d $offd %r0 %f0
|
||||
ldxi_c %r1 %r0 $offc
|
||||
#if __WORDSIZE == 32
|
||||
beqi Lc %r1 0xffffff81
|
||||
#else
|
||||
beqi Lc %r1 0xffffffffffffff81
|
||||
#endif
|
||||
calli @abort
|
||||
Lc:
|
||||
ldxi_uc %r1 %r0 $offuc
|
||||
beqi Luc %r1 0x81
|
||||
calli @abort
|
||||
Luc:
|
||||
ldxi_s %r1 %r0 $offs
|
||||
#if __WORDSIZE == 32
|
||||
beqi Ls %r1 0xffff8001
|
||||
#else
|
||||
beqi Ls %r1 0xffffffffffff8001
|
||||
#endif
|
||||
calli @abort
|
||||
Ls:
|
||||
ldxi_us %r1 %r0 $offus
|
||||
beqi Lus %r1 0x8001
|
||||
calli @abort
|
||||
Lus:
|
||||
ldxi_i %r1 %r0 $offi
|
||||
#if __WORDSIZE == 32
|
||||
beqi Li %r1 0x80000001
|
||||
#else
|
||||
beqi Li %r1 0xffffffff80000001
|
||||
#endif
|
||||
calli @abort
|
||||
Li:
|
||||
#if __WORDSIZE == 64
|
||||
ldxi_ui %r1 %r0 $offui
|
||||
beqi Lui %r1 0x80000001
|
||||
calli @abort
|
||||
Lui:
|
||||
ldxi_l %r1 %r0 $offl
|
||||
beqi Ll %r1 0x8000000000000001
|
||||
calli @abort
|
||||
Ll:
|
||||
#endif
|
||||
ldxi_f %f0 %r0 $offf
|
||||
beqi_f Lf %f0 0.5
|
||||
calli @abort
|
||||
Lf:
|
||||
ldxi_d %f0 %r0 $offd
|
||||
beqi_d Ld %f0 0.25
|
||||
calli @abort
|
||||
Ld:
|
||||
|
||||
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
|
||||
// just to know did not abort
|
||||
prepare 1
|
||||
pushargi ok
|
||||
finishi @printf
|
||||
ret
|
||||
epilog
|
1
check/ldstxr.ok
Normal file
1
check/ldstxr.ok
Normal file
|
@ -0,0 +1 @@
|
|||
ok
|
318
check/ldstxr.tst
Normal file
318
check/ldstxr.tst
Normal file
|
@ -0,0 +1,318 @@
|
|||
#if __WORDSIZE == 64
|
||||
# define L0 0x8000000000000001
|
||||
# define LL0 L0
|
||||
# define LC0 0xffffffffffffff81
|
||||
# define LS0 0xffffffffffff8001
|
||||
# define LI0 0xffffffff80000001
|
||||
# define L1 0x8000000000000000
|
||||
# define LL1 L1
|
||||
# define LC1 0xffffffffffffff80
|
||||
# define LS1 0xffffffffffff8000
|
||||
# define LI1 0xffffffff80000000
|
||||
# define L2 0x7fffffffffffffff
|
||||
# define LL2 L2
|
||||
# define LC2 0x000000000000007f
|
||||
# define LS2 0x0000000000007fff
|
||||
# define LI2 0x000000007fffffff
|
||||
# define L3 0xffffffffffffffff
|
||||
# define LL3 L3
|
||||
# define LC3 0xffffffffffffffff
|
||||
# define LS3 0xffffffffffffffff
|
||||
# define LI3 0xffffffffffffffff
|
||||
#endif
|
||||
#define I0 0x80000001
|
||||
#define II0 I0
|
||||
#define IC0 0xffffff81
|
||||
#define IS0 0xffff8001
|
||||
#define I1 0x80000000
|
||||
#define II1 I1
|
||||
#define IC1 0xffffff80
|
||||
#define IS1 0xffff8000
|
||||
#define I2 0x7fffffff
|
||||
#define II2 I2
|
||||
#define IC2 0x0000007f
|
||||
#define IS2 0x00007fff
|
||||
#define I3 0xffffffff
|
||||
#define II3 I3
|
||||
#define IC3 0xffffffff
|
||||
#define IS3 0xffffffff
|
||||
#define S0 0x8001
|
||||
#define S1 0x8000
|
||||
#define S2 0x7fff
|
||||
#define S3 0xffff
|
||||
#define C0 0x81
|
||||
#define C1 0x80
|
||||
#define C2 0x7f
|
||||
#define C3 0xff
|
||||
#define F0 0.25
|
||||
#define F1 0.75
|
||||
#define F2 -0.25
|
||||
#define F3 -0.75
|
||||
#define D0 0.25
|
||||
#define D1 0.75
|
||||
#define D2 -0.25
|
||||
#define D3 -0.75
|
||||
|
||||
.data 512
|
||||
ok:
|
||||
.c "ok\n"
|
||||
t0:
|
||||
c0:
|
||||
.c 0
|
||||
uc0:
|
||||
.c 0
|
||||
s0:
|
||||
.s 0
|
||||
us0:
|
||||
.s 0
|
||||
.align 4
|
||||
i0:
|
||||
.i 0
|
||||
#if __WORDSIZE == 64
|
||||
ui0:
|
||||
.i 0
|
||||
.align 8
|
||||
l0:
|
||||
.l 0
|
||||
#endif
|
||||
f0:
|
||||
.f 0
|
||||
.align 8
|
||||
d0:
|
||||
.d 0
|
||||
|
||||
. $($offc = c0 - t0)
|
||||
. $($offuc = uc0 - t0)
|
||||
. $($offs = s0 - t0)
|
||||
. $($offus = us0 - t0)
|
||||
. $($offi = i0 - t0)
|
||||
#if __WORDSIZE == 64
|
||||
. $($offui = ui0 - t0)
|
||||
. $($offl = l0 - t0)
|
||||
#endif
|
||||
. $($offf = f0 - t0)
|
||||
. $($offd = d0 - t0)
|
||||
|
||||
#if __WORDSIZE == 64
|
||||
# define LDSTL(N, R0, R1, R2) \
|
||||
movi %R2 $offui \
|
||||
stxr_i %R2 %R0 %R1 \
|
||||
movi %R1 L##N \
|
||||
movi %R2 $offl \
|
||||
stxr_l %R2 %R0 %R1
|
||||
|
||||
# define SI(C, N, x, X, R0, R1, R2) \
|
||||
movi %R2 $off##x \
|
||||
ldxr_##x %R1 %R0 %R2 \
|
||||
beqi L##x##C %R1 L##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1, R2) \
|
||||
UI(C, N, i, I, R0, R1, R2) \
|
||||
SI(C, N, l, L, R0, R1, R2)
|
||||
#else
|
||||
# define LDSTL(C, R0, R1, R2)
|
||||
# define SI(C, N, x, X, R0, R1, R2) \
|
||||
movi %R2 $off##x \
|
||||
ldxr_##x %R2 %R1 %R0 \
|
||||
beqi L##x##C %R1 I##X##N \
|
||||
calli @abort \
|
||||
L##x##C:
|
||||
|
||||
# define LDRL(C, N, R0, R1, R2)
|
||||
|
||||
#endif
|
||||
|
||||
#define UI(C, N, x, X, R0, R1, R2) \
|
||||
movi %R2 $offu##x \
|
||||
ldxr_u##x %R1 %R0 %R2 \
|
||||
beqi Lu##x##C %R1 X##N \
|
||||
calli @abort \
|
||||
Lu##x##C:
|
||||
|
||||
#define FF(C, N, x, X, R0, R1, F0) \
|
||||
movi %R1 $off##x \
|
||||
ldxr_##x %F0 %R0 %R1 \
|
||||
beqi_##x L##x##C %F0 X##N \
|
||||
L##x##C:
|
||||
|
||||
#define LDST1(X, N, R0, R1, R2, F0) \
|
||||
movi %R0 t0 \
|
||||
movi %R1 C##N \
|
||||
movi %R2 $offc \
|
||||
stxr_c %R2 %R0 %R1 \
|
||||
movi %R2 $offuc \
|
||||
stxr_c %R2 %R0 %R1 \
|
||||
movi %R1 S##N \
|
||||
movi %R2 $offs \
|
||||
stxr_s %R2 %R0 %R1 \
|
||||
movi %R2 $offus \
|
||||
stxr_s %R2 %R0 %R1 \
|
||||
movi %R1 I##N \
|
||||
movi %R2 $offi \
|
||||
stxr_i %R2 %R0 %R1 \
|
||||
LDSTL(N, R0, R1, R2) \
|
||||
movi_f %F0 F##N \
|
||||
movi %R2 $offf \
|
||||
stxr_f %R2 %R0 %F0 \
|
||||
movi_d %F0 D##N \
|
||||
movi %R2 $offd \
|
||||
stxr_d %R2 %R0 %F0 \
|
||||
SI(X, N, c, C, R0, R1, R2) \
|
||||
UI(X, N, c, C, R0, R1, R2) \
|
||||
SI(X, N, s, S, R0, R1, R2) \
|
||||
UI(X, N, s, S, R0, R1, R2) \
|
||||
SI(X, N, i, I, R0, R1, R2) \
|
||||
LDRL(X, N, R0, R1, R2) \
|
||||
FF(X, N, f, F, R0, R1, F0) \
|
||||
FF(X, N, d, D, R0, R1, F0)
|
||||
|
||||
#define LDST0(R0, R1, R2, F0) \
|
||||
LDST1(0_##R0##_##R1##_##R2##_##F0, 0, R0, R1, R2, F0) \
|
||||
LDST1(1_##R0##_##R1##_##R2##_##F0, 1, R0, R1, R2, F0) \
|
||||
LDST1(2_##R0##_##R1##_##R2##_##F0, 2, R0, R1, R2, F0) \
|
||||
LDST1(3_##R0##_##R1##_##R2##_##F0, 3, R0, R1, R2, F0)
|
||||
|
||||
#define LDST(V0, V1, V2, R0, R1, R2, F0, F1, F2, F3, F4, F5) \
|
||||
LDST0(V0, V1, R0, F0) \
|
||||
LDST0(V0, V1, R1, F1) \
|
||||
LDST0(V0, V1, R2, F2) \
|
||||
LDST0(V0, V2, R0, F3) \
|
||||
LDST0(V0, V2, R1, F4) \
|
||||
LDST0(V0, V2, R2, F5) \
|
||||
LDST0(V0, R0, V1, F0) \
|
||||
LDST0(V0, R0, V2, F1) \
|
||||
LDST0(V0, R0, R1, F2) \
|
||||
LDST0(V0, R0, R2, F3) \
|
||||
LDST0(V0, R0, V1, F4) \
|
||||
LDST0(V0, R1, V1, F5) \
|
||||
LDST0(V0, R1, V2, F0) \
|
||||
LDST0(V0, R1, R0, F1) \
|
||||
LDST0(V0, R1, R2, F2) \
|
||||
LDST0(V0, V1, V2, F3) \
|
||||
LDST0(V0, R1, R0, F4) \
|
||||
LDST0(V0, R1, R2, F5) \
|
||||
LDST0(R0, V1, V0, F0) \
|
||||
LDST0(R0, V1, R1, F1) \
|
||||
LDST0(R0, V1, R2, F2) \
|
||||
LDST0(R0, V2, V0, F3) \
|
||||
LDST0(R0, V2, R1, F4) \
|
||||
LDST0(R0, V2, R2, F5) \
|
||||
LDST0(R0, V0, V1, F0) \
|
||||
LDST0(R0, V0, V2, F1) \
|
||||
LDST0(R0, V0, R1, F2) \
|
||||
LDST0(R0, V0, R2, F3) \
|
||||
LDST0(R0, V0, V1, F4) \
|
||||
LDST0(R0, R1, V1, F5) \
|
||||
LDST0(R0, R1, V2, F0) \
|
||||
LDST0(R0, R1, V0, F1) \
|
||||
LDST0(R0, R1, R2, F2) \
|
||||
LDST0(R0, V1, V2, F3) \
|
||||
LDST0(R0, R1, V0, F4) \
|
||||
LDST0(R0, R1, R2, F5)
|
||||
|
||||
.code
|
||||
jmpi main
|
||||
|
||||
main:
|
||||
prolog
|
||||
|
||||
#if 0
|
||||
/* Simple test to simplify validating encodings before
|
||||
* brute force tests */
|
||||
movi %r0 t0
|
||||
movi %r1 0x81
|
||||
movi %r2 $offc
|
||||
stxr_c %r2 %r0 %r1
|
||||
movi %r2 $offuc
|
||||
stxr_c %r2 %r0 %r1
|
||||
movi %r1 0x8001
|
||||
movi %r2 $offs
|
||||
stxr_s %r2 %r0 %r1
|
||||
movi %r2 $offus
|
||||
stxr_s %r2 %r0 %r1
|
||||
movi %r1 0x80000001
|
||||
movi %r2 $offi
|
||||
stxr_i %r2 %r0 %r1
|
||||
#if __WORDSIZE == 64
|
||||
movi %r2 $offui
|
||||
stxr_i %r2 %r0 %r1
|
||||
movi %r1 0x8000000000000001
|
||||
movi %r2 $offl
|
||||
stxr_l %r2 %r0 %r1
|
||||
#endif
|
||||
movi_f %f0 0.5
|
||||
movi %r2 $offf
|
||||
stxr_f %r2 %r0 %f0
|
||||
movi_d %f0 0.25
|
||||
movi %r2 $offd
|
||||
stxr_d %r2 %r0 %f0
|
||||
movi %r2 $offc
|
||||
ldxr_c %r1 %r0 %r2
|
||||
#if __WORDSIZE == 32
|
||||
beqi Lc %r1 0xffffff81
|
||||
#else
|
||||
beqi Lc %r1 0xffffffffffffff81
|
||||
#endif
|
||||
calli @abort
|
||||
Lc:
|
||||
movi %r2 $offuc
|
||||
ldxr_uc %r1 %r0 %r2
|
||||
beqi Luc %r1 0x81
|
||||
calli @abort
|
||||
Luc:
|
||||
movi %r2 $offs
|
||||
ldxr_s %r1 %r0 %r2
|
||||
#if __WORDSIZE == 32
|
||||
beqi Ls %r1 0xffff8001
|
||||
#else
|
||||
beqi Ls %r1 0xffffffffffff8001
|
||||
#endif
|
||||
calli @abort
|
||||
Ls:
|
||||
movi %r2 $offus
|
||||
ldxr_us %r1 %r0 %r2
|
||||
beqi Lus %r1 0x8001
|
||||
calli @abort
|
||||
Lus:
|
||||
movi %r2 $offi
|
||||
ldxr_i %r1 %r0 %r2
|
||||
#if __WORDSIZE == 32
|
||||
beqi Li %r1 0x80000001
|
||||
#else
|
||||
beqi Li %r1 0xffffffff80000001
|
||||
#endif
|
||||
calli @abort
|
||||
Li:
|
||||
#if __WORDSIZE == 64
|
||||
movi %r2 $offui
|
||||
ldxr_ui %r1 %r0 %r2
|
||||
beqi Lui %r1 0x80000001
|
||||
calli @abort
|
||||
Lui:
|
||||
movi %r2 $offl
|
||||
ldxr_l %r1 %r0 %r2
|
||||
beqi Ll %r1 0x8000000000000001
|
||||
calli @abort
|
||||
Ll:
|
||||
#endif
|
||||
movi %r2 $offf
|
||||
ldxr_f %f0 %r0 %r2
|
||||
beqi_f Lf %f0 0.5
|
||||
calli @abort
|
||||
Lf:
|
||||
movi %r2 $offd
|
||||
ldxr_d %f0 %r0 %r2
|
||||
beqi_d Ld %f0 0.25
|
||||
calli @abort
|
||||
Ld:
|
||||
#endif
|
||||
|
||||
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
|
||||
// just to know did not abort
|
||||
prepare 1
|
||||
pushargi ok
|
||||
finishi @printf
|
||||
ret
|
||||
epilog
|
|
@ -1965,7 +1965,7 @@ _ldr_uc(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
rex(0, 1, r0, _NOREG, r1);
|
||||
ic(0x0f);
|
||||
ic(0xbe);
|
||||
ic(0xb6);
|
||||
rx(r0, 0, r1, _NOREG, _SCL1);
|
||||
}
|
||||
|
||||
|
@ -2324,7 +2324,7 @@ _str_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
|||
{
|
||||
jit_int32_t reg;
|
||||
if (reg8_p(r1)) {
|
||||
rex(0, 0, r1, r0, _NOREG);
|
||||
rex(0, 0, r1, _NOREG, r0);
|
||||
ic(0x88);
|
||||
rx(r1, 0, r0, _NOREG, _SCL1);
|
||||
}
|
||||
|
@ -2367,7 +2367,7 @@ static void
|
|||
_str_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||
{
|
||||
ic(0x66);
|
||||
rex(0, 0, r1, r0, _NOREG);
|
||||
rex(0, 0, r1, _NOREG, r0);
|
||||
ic(0x89);
|
||||
rx(r1, 0, r0, _NOREG, _SCL1);
|
||||
}
|
||||
|
@ -2393,7 +2393,7 @@ _sti_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
|||
static void
|
||||
_str_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||
{
|
||||
rex(0, 0, r1, r0, _NOREG);
|
||||
rex(0, 0, r1, _NOREG, r0);
|
||||
ic(0x89);
|
||||
rx(r1, 0, r0, _NOREG, _SCL1);
|
||||
}
|
||||
|
@ -2419,7 +2419,7 @@ _sti_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
|||
static void
|
||||
_str_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||
{
|
||||
rex(0, 1, r1, r0, _NOREG);
|
||||
rex(0, 1, r1, _NOREG, r0);
|
||||
ic(0x89);
|
||||
rx(r1, 0, r0, _NOREG, _SCL1);
|
||||
}
|
||||
|
@ -2447,7 +2447,7 @@ _stxr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
|||
{
|
||||
jit_int32_t reg;
|
||||
if (reg8_p(r2)) {
|
||||
rex(0, 0, r2, r0, r1);
|
||||
rex(0, 0, r2, r1, r0);
|
||||
ic(0x88);
|
||||
rx(r2, 0, r0, r1, _SCL1);
|
||||
}
|
||||
|
@ -2490,7 +2490,7 @@ static void
|
|||
_stxr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
ic(0x66);
|
||||
rex(0, 0, r2, r0, r1);
|
||||
rex(0, 0, r2, r1, r0);
|
||||
ic(0x89);
|
||||
rx(r2, 0, r0, r1, _SCL1);
|
||||
}
|
||||
|
@ -2516,7 +2516,7 @@ _stxi_s(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
static void
|
||||
_stxr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
rex(0, 0, r2, r0, r1);
|
||||
rex(0, 0, r2, r1, r0);
|
||||
ic(0x89);
|
||||
rx(r2, 0, r0, r1, _SCL1);
|
||||
}
|
||||
|
@ -2542,7 +2542,7 @@ _stxi_i(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
|||
static void
|
||||
_stxr_l(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||
{
|
||||
rex(0, 1, r2, r0, r1);
|
||||
rex(0, 1, r2, r1, r0);
|
||||
ic(0x89);
|
||||
rx(r2, 0, r0, r1, _SCL1);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue