[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/3] ppc64: add 64bit branch tests
From: |
Kimplul |
Subject: |
[PATCH 1/3] ppc64: add 64bit branch tests |
Date: |
Sun, 28 Aug 2022 22:30:56 +0300 |
Signed-off-by: Kimplul <kimi.h.kuparinen@gmail.com>
---
check/branch.tst | 381 +++++++++++++++++++++++++++++++----------------
1 file changed, 249 insertions(+), 132 deletions(-)
diff --git a/check/branch.tst b/check/branch.tst
index 2252dff..21cb4ff 100644
--- a/check/branch.tst
+++ b/check/branch.tst
@@ -15,76 +15,119 @@ ok:
.c "ok\n"
. $($NaN = 0.0 / 0.0)
-#define BOP(N, Ls, Rs, Lu, Ru, R0, R1) \
+#define BOP(l, N, Ls, Rs, Lu, Ru, R0, R1) \
movi %R0 Ls \
movi %R1 Rs \
- b##N##r N##r_##R0##_##R1 %R0 %R1 \
+ b##N##r l##N##r_##R0##_##R1 %R0 %R1 \
calli @abort \
-N##r_##R0##_##R1: \
- b##N##i N##i_##R0##_##R1 %R0 Rs \
+l##N##r_##R0##_##R1: \
+ b##N##i l##N##i_##R0##_##R1 %R0 Rs \
calli @abort \
-N##i_##R0##_##R1: \
+l##N##i_##R0##_##R1: \
movi %R0 Lu \
movi %R1 Ru \
- b##N##r_u N##r_u_##R0##_##R1 %R0 %R1 \
+ b##N##r_u l##N##r_u_##R0##_##R1 %R0 %R1 \
calli @abort \
-N##r_u_##R0##_##R1: \
- b##N##i_u N##i_u_##R0##_##R1 %R0 Ru \
+l##N##r_u_##R0##_##R1: \
+ b##N##i_u l##N##i_u_##R0##_##R1 %R0 Ru \
calli @abort \
-N##i_u_##R0##_##R1: \
+l##N##i_u_##R0##_##R1: \
movi %R0 Ls \
movi %R1 Rs \
N##r %R0 %R0 %R1 \
- beqi _##N##r_##R0##_##R1 %R0 1 \
+ beqi l##_##N##r_##R0##_##R1 %R0 1 \
calli @abort \
-_##N##r_##R0##_##R1: \
+l##_##N##r_##R0##_##R1: \
movi %R0 Ls \
N##i %R1 %R0 Rs \
- beqi _##N##i_##R0##_##R1 %R1 1 \
+ beqi l##_##N##i_##R0##_##R1 %R1 1 \
calli @abort \
-_##N##i_##R0##_##R1: \
+l##_##N##i_##R0##_##R1: \
movi %R0 Lu \
movi %R1 Ru \
N##r_u %R0 %R0 %R1 \
- beqi _##N##r_u_##R0##_##R1 %R0 1 \
+ beqi l##_##N##r_u_##R0##_##R1 %R0 1 \
calli @abort \
-_##N##r_u_##R0##_##R1: \
+l##_##N##r_u_##R0##_##R1: \
movi %R0 Lu \
N##i_u %R1 %R0 Ru \
- beqi _##N##i_u_##R0##_##R1 %R1 1 \
+ beqi l##_##N##i_u_##R0##_##R1 %R1 1 \
calli @abort \
-_##N##i_u_##R0##_##R1:
+l##_##N##i_u_##R0##_##R1:
-#define EB(N, L, R, R0, R1) \
+#define EB(l, N, L, R, R0, R1) \
movi %R0 L \
movi %R1 R \
- b##N##r N##r_##R0##_##R1 %R0 %R1 \
+ b##N##r l##N##r_##R0##_##R1 %R0 %R1 \
calli @abort \
-N##r_##R0##_##R1: \
- b##N##i N##i_##R0##_##R1 %R0 R \
+l##N##r_##R0##_##R1: \
+ b##N##i l##N##i_##R0##_##R1 %R0 R \
calli @abort \
-N##i_##R0##_##R1: \
+l##N##i_##R0##_##R1: \
movi %R0 L \
movi %R1 R \
N##r %R0 %R0 %R1 \
- beqi _##N##r_##R0##_##R1 %R0 1 \
+ beqi l##_##N##r_##R0##_##R1 %R0 1 \
calli @abort \
-_##N##r_##R0##_##R1: \
+l##_##N##r_##R0##_##R1: \
movi %R0 L \
N##i %R1 %R0 R \
- beqi _##N##i_##R0##_##R1 %R1 1 \
+ beqi l##_##N##i_##R0##_##R1 %R1 1 \
calli @abort \
-_##N##i_##R0##_##R1:
+l##_##N##i_##R0##_##R1:
+
+#define NEB(l, N, L, R, R0, R1) \
+ movi %R0 L \
+ movi %R1 R \
+ b##N##r l##N##r_##R0##_##R1##_err %R0 %R1 \
+ jmpi l##N##r_##R0##_##R1##_ok \
+l##N##r_##R0##_##R1##_err: \
+ calli @abort \
+l##N##r_##R0##_##R1##_ok: \
+ b##N##i l##N##i_##R0##_##R1##_err %R0 R \
+ jmpi l##N##i_##R0##_##R1##_ok \
+l##N##i_##R0##_##R1##_err: \
+ calli @abort \
+l##N##i_##R0##_##R1##_ok: \
+ movi %R0 L \
+ movi %R1 R \
+ N##r %R0 %R0 %R1 \
+ beqi l##_##N##r_##R0##_##R1##_err %R0 1 \
+ jmpi l##_##N##r_##R0##_##R1##_ok \
+l##_##N##r_##R0##_##R1##_err: \
+ calli @abort \
+l##_##N##r_##R0##_##R1##_ok: \
+ movi %R0 L \
+ N##i %R1 %R0 R \
+ beqi l##_##N##i_##R0##_##R1##_err %R1 1 \
+ jmpi l##_##N##i_##R0##_##R1##_ok \
+l##_##N##i_##R0##_##R1##_err: \
+ calli @abort \
+l##_##N##i_##R0##_##R1##_ok:
-#define XEB(N, L, R, R0, R1) \
+#define XEB(l, N, L, R, R0, R1) \
movi %R0 L \
movi %R1 R \
- b##N##r N##r_##R0##_##R1 %R0 %R1 \
+ b##N##r l##N##r_##R0##_##R1 %R0 %R1 \
calli @abort \
-N##r_##R0##_##R1: \
- b##N##i N##i_##R0##_##R1 %R0 R \
+l##N##r_##R0##_##R1: \
+ b##N##i l##N##i_##R0##_##R1 %R0 R \
calli @abort \
-N##i_##R0##_##R1:
+l##N##i_##R0##_##R1:
+
+#define NXEB(l, N, L, R, R0, R1) \
+ movi %R0 L \
+ movi %R1 R \
+ b##N##r l##N##r_##R0##_##R1##_err %R0 %R1 \
+ jmpi l##N##r_##R0##_##R1##_ok \
+l##N##r_##R0##_##R1##_err: \
+ calli @abort \
+l##N##r_##R0##_##R1##_ok: \
+ b##N##i l##N##i_##R0##_##R1##_err %R0 R \
+ jmpi l##N##i_##R0##_##R1##_ok \
+l##N##i_##R0##_##R1##_err: \
+ calli @abort \
+l##N##i_##R0##_##R1##_ok:
#define XBOP(N, Ls, Rs, Lu, Ru, R0, R1) \
movi %R0 Ls \
@@ -106,102 +149,165 @@ N##r_u_##R0##_##R1: \
calli @abort \
N##i_u_##R0##_##R1:
-#define BOPI(N, Ls, Rs, Lu, Ru) \
- BOP(N, Ls, Rs, Lu, Ru, v0, v1) \
- BOP(N, Ls, Rs, Lu, Ru, v0, v2) \
- BOP(N, Ls, Rs, Lu, Ru, v0, r0) \
- BOP(N, Ls, Rs, Lu, Ru, v0, r1) \
- BOP(N, Ls, Rs, Lu, Ru, v0, r2) \
- BOP(N, Ls, Rs, Lu, Ru, v1, v0) \
- BOP(N, Ls, Rs, Lu, Ru, v1, v2) \
- BOP(N, Ls, Rs, Lu, Ru, v1, r0) \
- BOP(N, Ls, Rs, Lu, Ru, v1, r1) \
- BOP(N, Ls, Rs, Lu, Ru, v1, r2) \
- BOP(N, Ls, Rs, Lu, Ru, v2, v0) \
- BOP(N, Ls, Rs, Lu, Ru, v2, v1) \
- BOP(N, Ls, Rs, Lu, Ru, v2, r0) \
- BOP(N, Ls, Rs, Lu, Ru, v2, r1) \
- BOP(N, Ls, Rs, Lu, Ru, v2, r2) \
- BOP(N, Ls, Rs, Lu, Ru, r0, v0) \
- BOP(N, Ls, Rs, Lu, Ru, r0, v1) \
- BOP(N, Ls, Rs, Lu, Ru, r0, v2) \
- BOP(N, Ls, Rs, Lu, Ru, r0, r1) \
- BOP(N, Ls, Rs, Lu, Ru, r0, r2) \
- BOP(N, Ls, Rs, Lu, Ru, r1, v0) \
- BOP(N, Ls, Rs, Lu, Ru, r1, v1) \
- BOP(N, Ls, Rs, Lu, Ru, r1, v2) \
- BOP(N, Ls, Rs, Lu, Ru, r1, r0) \
- BOP(N, Ls, Rs, Lu, Ru, r1, r2) \
- BOP(N, Ls, Rs, Lu, Ru, r2, v0) \
- BOP(N, Ls, Rs, Lu, Ru, r2, v1) \
- BOP(N, Ls, Rs, Lu, Ru, r2, v2) \
- BOP(N, Ls, Rs, Lu, Ru, r2, r0) \
- BOP(N, Ls, Rs, Lu, Ru, r2, r1)
+#define BOPI(l, N, Ls, Rs, Lu, Ru) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v0, v1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v0, v2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v0, r0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v0, r1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v0, r2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v1, v0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v1, v2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v1, r0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v1, r1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v1, r2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v2, v0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v2, v1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v2, r0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v2, r1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, v2, r2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r0, v0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r0, v1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r0, v2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r0, r1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r0, r2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r1, v0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r1, v1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r1, v2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r1, r0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r1, r2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r2, v0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r2, v1) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r2, v2) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r2, r0) \
+ BOP(l, N, Ls, Rs, Lu, Ru, r2, r1)
+
+#define EBI(l, N, L, R) \
+ EB(l, N, L, R, v0, v1) \
+ EB(l, N, L, R, v0, v2) \
+ EB(l, N, L, R, v0, r0) \
+ EB(l, N, L, R, v0, r1) \
+ EB(l, N, L, R, v0, r2) \
+ EB(l, N, L, R, v1, v0) \
+ EB(l, N, L, R, v1, v2) \
+ EB(l, N, L, R, v1, r0) \
+ EB(l, N, L, R, v1, r1) \
+ EB(l, N, L, R, v1, r2) \
+ EB(l, N, L, R, v2, v0) \
+ EB(l, N, L, R, v2, v1) \
+ EB(l, N, L, R, v2, r0) \
+ EB(l, N, L, R, v2, r1) \
+ EB(l, N, L, R, v2, r2) \
+ EB(l, N, L, R, r0, v0) \
+ EB(l, N, L, R, r0, v1) \
+ EB(l, N, L, R, r0, v2) \
+ EB(l, N, L, R, r0, r1) \
+ EB(l, N, L, R, r0, r2) \
+ EB(l, N, L, R, r1, v0) \
+ EB(l, N, L, R, r1, v1) \
+ EB(l, N, L, R, r1, v2) \
+ EB(l, N, L, R, r1, r0) \
+ EB(l, N, L, R, r1, r2) \
+ EB(l, N, L, R, r2, v0) \
+ EB(l, N, L, R, r2, v1) \
+ EB(l, N, L, R, r2, v2) \
+ EB(l, N, L, R, r2, r0) \
+ EB(l, N, L, R, r2, r1)
-#define EBI(N, L, R) \
- EB(N, L, R, v0, v1) \
- EB(N, L, R, v0, v2) \
- EB(N, L, R, v0, r0) \
- EB(N, L, R, v0, r1) \
- EB(N, L, R, v0, r2) \
- EB(N, L, R, v1, v0) \
- EB(N, L, R, v1, v2) \
- EB(N, L, R, v1, r0) \
- EB(N, L, R, v1, r1) \
- EB(N, L, R, v1, r2) \
- EB(N, L, R, v2, v0) \
- EB(N, L, R, v2, v1) \
- EB(N, L, R, v2, r0) \
- EB(N, L, R, v2, r1) \
- EB(N, L, R, v2, r2) \
- EB(N, L, R, r0, v0) \
- EB(N, L, R, r0, v1) \
- EB(N, L, R, r0, v2) \
- EB(N, L, R, r0, r1) \
- EB(N, L, R, r0, r2) \
- EB(N, L, R, r1, v0) \
- EB(N, L, R, r1, v1) \
- EB(N, L, R, r1, v2) \
- EB(N, L, R, r1, r0) \
- EB(N, L, R, r1, r2) \
- EB(N, L, R, r2, v0) \
- EB(N, L, R, r2, v1) \
- EB(N, L, R, r2, v2) \
- EB(N, L, R, r2, r0) \
- EB(N, L, R, r2, r1)
+#define NEBI(l, N, L, R) \
+ NEB(l, N, L, R, v0, v1) \
+ NEB(l, N, L, R, v0, v2) \
+ NEB(l, N, L, R, v0, r0) \
+ NEB(l, N, L, R, v0, r1) \
+ NEB(l, N, L, R, v0, r2) \
+ NEB(l, N, L, R, v1, v0) \
+ NEB(l, N, L, R, v1, v2) \
+ NEB(l, N, L, R, v1, r0) \
+ NEB(l, N, L, R, v1, r1) \
+ NEB(l, N, L, R, v1, r2) \
+ NEB(l, N, L, R, v2, v0) \
+ NEB(l, N, L, R, v2, v1) \
+ NEB(l, N, L, R, v2, r0) \
+ NEB(l, N, L, R, v2, r1) \
+ NEB(l, N, L, R, v2, r2) \
+ NEB(l, N, L, R, r0, v0) \
+ NEB(l, N, L, R, r0, v1) \
+ NEB(l, N, L, R, r0, v2) \
+ NEB(l, N, L, R, r0, r1) \
+ NEB(l, N, L, R, r0, r2) \
+ NEB(l, N, L, R, r1, v0) \
+ NEB(l, N, L, R, r1, v1) \
+ NEB(l, N, L, R, r1, v2) \
+ NEB(l, N, L, R, r1, r0) \
+ NEB(l, N, L, R, r1, r2) \
+ NEB(l, N, L, R, r2, v0) \
+ NEB(l, N, L, R, r2, v1) \
+ NEB(l, N, L, R, r2, v2) \
+ NEB(l, N, L, R, r2, r0) \
+ NEB(l, N, L, R, r2, r1)
+#define NXEBI(l, N, L, R) \
+ NXEB(l, N, L, R, v0, v1) \
+ NXEB(l, N, L, R, v0, v2) \
+ NXEB(l, N, L, R, v0, r0) \
+ NXEB(l, N, L, R, v0, r1) \
+ NXEB(l, N, L, R, v0, r2) \
+ NXEB(l, N, L, R, v1, v0) \
+ NXEB(l, N, L, R, v1, v2) \
+ NXEB(l, N, L, R, v1, r0) \
+ NXEB(l, N, L, R, v1, r1) \
+ NXEB(l, N, L, R, v1, r2) \
+ NXEB(l, N, L, R, v2, v0) \
+ NXEB(l, N, L, R, v2, v1) \
+ NXEB(l, N, L, R, v2, r0) \
+ NXEB(l, N, L, R, v2, r1) \
+ NXEB(l, N, L, R, v2, r2) \
+ NXEB(l, N, L, R, r0, v0) \
+ NXEB(l, N, L, R, r0, v1) \
+ NXEB(l, N, L, R, r0, v2) \
+ NXEB(l, N, L, R, r0, r1) \
+ NXEB(l, N, L, R, r0, r2) \
+ NXEB(l, N, L, R, r1, v0) \
+ NXEB(l, N, L, R, r1, v1) \
+ NXEB(l, N, L, R, r1, v2) \
+ NXEB(l, N, L, R, r1, r0) \
+ NXEB(l, N, L, R, r1, r2) \
+ NXEB(l, N, L, R, r2, v0) \
+ NXEB(l, N, L, R, r2, v1) \
+ NXEB(l, N, L, R, r2, v2) \
+ NXEB(l, N, L, R, r2, r0) \
+ NXEB(l, N, L, R, r2, r1)
-#define XEBI(N, L, R) \
- XEB(N, L, R, v0, v1) \
- XEB(N, L, R, v0, v2) \
- XEB(N, L, R, v0, r0) \
- XEB(N, L, R, v0, r1) \
- XEB(N, L, R, v0, r2) \
- XEB(N, L, R, v1, v0) \
- XEB(N, L, R, v1, v2) \
- XEB(N, L, R, v1, r0) \
- XEB(N, L, R, v1, r1) \
- XEB(N, L, R, v1, r2) \
- XEB(N, L, R, v2, v0) \
- XEB(N, L, R, v2, v1) \
- XEB(N, L, R, v2, r0) \
- XEB(N, L, R, v2, r1) \
- XEB(N, L, R, v2, r2) \
- XEB(N, L, R, r0, v0) \
- XEB(N, L, R, r0, v1) \
- XEB(N, L, R, r0, v2) \
- XEB(N, L, R, r0, r1) \
- XEB(N, L, R, r0, r2) \
- XEB(N, L, R, r1, v0) \
- XEB(N, L, R, r1, v1) \
- XEB(N, L, R, r1, v2) \
- XEB(N, L, R, r1, r0) \
- XEB(N, L, R, r1, r2) \
- XEB(N, L, R, r2, v0) \
- XEB(N, L, R, r2, v1) \
- XEB(N, L, R, r2, v2) \
- XEB(N, L, R, r2, r0) \
- XEB(N, L, R, r2, r1)
+#define XEBI(l, N, L, R) \
+ XEB(l, N, L, R, v0, v1) \
+ XEB(l, N, L, R, v0, v2) \
+ XEB(l, N, L, R, v0, r0) \
+ XEB(l, N, L, R, v0, r1) \
+ XEB(l, N, L, R, v0, r2) \
+ XEB(l, N, L, R, v1, v0) \
+ XEB(l, N, L, R, v1, v2) \
+ XEB(l, N, L, R, v1, r0) \
+ XEB(l, N, L, R, v1, r1) \
+ XEB(l, N, L, R, v1, r2) \
+ XEB(l, N, L, R, v2, v0) \
+ XEB(l, N, L, R, v2, v1) \
+ XEB(l, N, L, R, v2, r0) \
+ XEB(l, N, L, R, v2, r1) \
+ XEB(l, N, L, R, v2, r2) \
+ XEB(l, N, L, R, r0, v0) \
+ XEB(l, N, L, R, r0, v1) \
+ XEB(l, N, L, R, r0, v2) \
+ XEB(l, N, L, R, r0, r1) \
+ XEB(l, N, L, R, r0, r2) \
+ XEB(l, N, L, R, r1, v0) \
+ XEB(l, N, L, R, r1, v1) \
+ XEB(l, N, L, R, r1, v2) \
+ XEB(l, N, L, R, r1, r0) \
+ XEB(l, N, L, R, r1, r2) \
+ XEB(l, N, L, R, r2, v0) \
+ XEB(l, N, L, R, r2, v1) \
+ XEB(l, N, L, R, r2, v2) \
+ XEB(l, N, L, R, r2, r0) \
+ XEB(l, N, L, R, r2, r1)
#define XBOPI(N, Ls, Rs, Lu, Ru) \
XBOP(N, Ls, Rs, Lu, Ru, v0, v1) \
@@ -500,14 +606,25 @@ xner_f_f0_f1:
calli @abort
xnei_f_f0_f1:
- BOPI(lt, -1, 1, 1, -1)
- BOPI(le, -1, -1, 1, 1)
- EBI(eq, 32, 32)
- BOPI(ge, -2, -2, 2, 2)
- BOPI(gt, 2, -2, -2, 2)
- EBI(ne, 3, -3)
- XEBI(ms, 1, 3)
- XEBI(mc, 1, 2)
+ BOPI(lt, lt, -1, 1, 1, -1)
+ BOPI(le, le, -1, -1, 1, 1)
+ EBI(eq, eq, 32, 32)
+ BOPI(ge, ge, -2, -2, 2, 2)
+ BOPI(gt, gt, 2, -2, -2, 2)
+ EBI(ne, ne, 3, -3)
+ XEBI(ms, ms, 1, 3)
+ XEBI(mc, mc, 1, 2)
+#if __WORDSIZE == 64
+ // check that all bits are checked in comparisons, not just lowest 32
+ BOPI(lt64, lt, 0xff00000000000001, 1, 0xef00000000000000,
0xff00000000000000)
+ BOPI(le64, le, 0xff00000000000002, 1, 0xef00000000000001,
0xff00000000000000)
+ BOPI(gt64, gt, 1, 0xff00000000000000, 0xff00000000000000,
0xef00000000000000)
+ BOPI(ge64, ge, 1, 0xff00000000000000, 0xff00000000000000,
0xef00000000000001)
+ NEBI(eq64, eq, 0xef00000000, 0xff00000000)
+ EBI(ne64, ne, 0xef00000000, 0xff00000000)
+ XEBI(ms64, ms, 0xff00000000, 0xff00000000)
+ NXEBI(mc64, mc, 0xff00000000, 0xff00000000)
+#endif
XBOPI(oadd, I7f, 1, Iff, 1)
XBOPI(xadd, I80, 1, I7f, 1)
XBOPI(osub, I80, 1, 0, 1)
--
2.35.1