[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 3/3] tests/tcg/ppc64le: R=1 test for paddi
From: |
matheus . ferst |
Subject: |
[RFC PATCH 3/3] tests/tcg/ppc64le: R=1 test for paddi |
Date: |
Thu, 15 Apr 2021 18:41:38 -0300 |
From: Matheus Ferst <matheus.ferst@eldorado.org.br>
This test exercise the R=1 path of paddi implementation using the
extended mnemonic "pla".
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
---
tests/tcg/ppc64/Makefile.target | 3 ++-
tests/tcg/ppc64le/Makefile.target | 3 ++-
tests/tcg/ppc64le/pla.c | 26 ++++++++++++++++++++++++++
3 files changed, 30 insertions(+), 2 deletions(-)
create mode 100644 tests/tcg/ppc64le/pla.c
diff --git a/tests/tcg/ppc64/Makefile.target b/tests/tcg/ppc64/Makefile.target
index 6eccd2c06f..a6cd7a21b2 100644
--- a/tests/tcg/ppc64/Makefile.target
+++ b/tests/tcg/ppc64/Makefile.target
@@ -11,8 +11,9 @@ endif
bcdsub: CFLAGS += -mpower8-vector
ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_POWER10),)
-PPC64LE_TESTS += pli_33bits
+PPC64LE_TESTS += pli_33bits pla
endif
pli_33bits: CFLAGS += -mpower10
+pla: CFLAGS += -mpower10
TESTS += $(PPC64_TESTS)
diff --git a/tests/tcg/ppc64le/Makefile.target
b/tests/tcg/ppc64le/Makefile.target
index 2003eab2df..db92b2ec99 100644
--- a/tests/tcg/ppc64le/Makefile.target
+++ b/tests/tcg/ppc64le/Makefile.target
@@ -10,8 +10,9 @@ endif
bcdsub: CFLAGS += -mpower8-vector
ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_POWER10),)
-PPC64LE_TESTS += pli_33bits
+PPC64LE_TESTS += pli_33bits pla
endif
pli_33bits: CFLAGS += -mpower10
+pla: CFLAGS += -mpower10
TESTS += $(PPC64LE_TESTS)
diff --git a/tests/tcg/ppc64le/pla.c b/tests/tcg/ppc64le/pla.c
new file mode 100644
index 0000000000..4826579216
--- /dev/null
+++ b/tests/tcg/ppc64le/pla.c
@@ -0,0 +1,26 @@
+#include <assert.h>
+#include <unistd.h>
+#include <signal.h>
+
+int main(void)
+{
+ long unsigned int label, addr;
+ struct sigaction action;
+
+ action.sa_handler = _exit;
+ sigaction(SIGABRT, &action, NULL);
+
+ asm("insn:\n"
+ " lis %0, insn@highest\n"
+ " addi %0, %0, insn@higher\n"
+ " rldicr %0, %0, 32, 31\n"
+ " oris %0, %0, insn@h\n"
+ " ori %0, %0, insn@l\n"
+ " pla %1, %2\n"
+ : "=r" (label), "=r" (addr)
+ : "i" (-5 * 4)); /* number of instruction between label and pla */
+ assert(addr == label);
+
+ return 0;
+}
+
--
2.25.1