* [PATCH v3 0/3] Add support for divde[.] and divdeu[.] instruction emulation
@ 2020-01-20 6:54 Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 1/3] powerpc ppc-opcode: add divde and divdeu opcodes Balamuruhan S
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Balamuruhan S @ 2020-01-20 6:54 UTC (permalink / raw)
To: mpe
Cc: ravi.bangoria, Balamuruhan S, paulus, sandipan, naveen.n.rao,
linuxppc-dev
Hi All,
This patchset adds support to emulate divde, divde., divdeu and divdeu.
instructions and testcases for it.
Changes in v3:
-------------
* Fix suggestion from Sandipan to remove `PPC_INST_DIVDE_DOT` and
`PPC_INST_DIVDEU_DOT` opcode macros defined in ppc-opcode.h, reuse
`PPC_INST_DIVDE` and `PPC_INST_DIVDEU` in test_emulate_step.c to derive
them respectively.
Changes in v2:
-------------
* Fix review comments from Paul to make divde_dot and divdeu_dot simple
by using divde and divdeu, then goto `arith_done` instead of
`compute_done`.
* Include `Reviewed-by` tag from Sandipan Das.
* Rebase with recent mpe's merge tree.
I would request for your review and suggestions for making it better.
Boot Log:
--------
:: ::
:: ::
[ 2.777518] emulate_step_test: divde : RA = LONG_MIN, RB = LONG_MIN PASS
[ 2.777882] emulate_step_test: divde : RA = 1L, RB = 0 PASS
[ 2.778432] emulate_step_test: divde : RA = LONG_MIN, RB = LONG_MAX PASS
[ 2.778880] emulate_step_test: divde. : RA = LONG_MIN, RB = LONG_MIN PASS
[ 2.780172] emulate_step_test: divde. : RA = 1L, RB = 0 PASS
[ 2.780582] emulate_step_test: divde. : RA = LONG_MIN, RB = LONG_MAX PASS
[ 2.780983] emulate_step_test: divdeu : RA = LONG_MIN, RB = LONG_MIN PASS
[ 2.781276] emulate_step_test: divdeu : RA = 1L, RB = 0 PASS
[ 2.781579] emulate_step_test: divdeu : RA = LONG_MIN, RB = LONG_MAX PASS
[ 2.781820] emulate_step_test: divdeu : RA = LONG_MAX - 1, RB = LONG_MAX PASS
[ 2.782056] emulate_step_test: divdeu : RA = LONG_MIN + 1, RB = LONG_MIN PASS
[ 2.782296] emulate_step_test: divdeu. : RA = LONG_MIN, RB = LONG_MIN PASS
[ 2.782556] emulate_step_test: divdeu. : RA = 1L, RB = 0 PASS
[ 2.783502] emulate_step_test: divdeu. : RA = LONG_MIN, RB = LONG_MAX PASS
[ 2.783748] emulate_step_test: divdeu. : RA = LONG_MAX - 1, RB = LONG_MAX PASS
[ 2.783973] emulate_step_test: divdeu. : RA = LONG_MIN + 1, RB = LONG_MIN PASS
[ 2.789617] registered taskstats version 1
[ 2.794779] printk: console [netcon0] enabled
[ 2.794931] netconsole: network logging started
[ 2.795327] hctosys: unable to open rtc device (rtc0)
[ 2.953449] Freeing unused kernel memory: 5120K
[ 2.953639] This architecture does not have kernel memory protection.
[ 2.953918] Run /init as init process
[ 3.173573] mount (54) used greatest stack depth: 12576 bytes left
[ 3.252465] mount (55) used greatest stack depth: 12544 bytes left
Welcome to Buildroot
buildroot login:
Balamuruhan S (3):
powerpc ppc-opcode: add divde and divdeu opcodes
powerpc sstep: add support for divde[.] and divdeu[.] instructions
powerpc test_emulate_step: add testcases for divde[.] and divdeu[.]
instructions
arch/powerpc/include/asm/ppc-opcode.h | 8 ++
arch/powerpc/lib/sstep.c | 13 ++-
arch/powerpc/lib/test_emulate_step.c | 164 ++++++++++++++++++++++++++++++++++
3 files changed, 184 insertions(+), 1 deletion(-)
base-commit: 20862247a368dbb75d6e97d82345999adaacf3cc
--
2.14.5
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/3] powerpc ppc-opcode: add divde and divdeu opcodes
2020-01-20 6:54 [PATCH v3 0/3] Add support for divde[.] and divdeu[.] instruction emulation Balamuruhan S
@ 2020-01-20 6:54 ` Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 2/3] powerpc sstep: add support for divde[.] and divdeu[.] instructions Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 3/3] powerpc test_emulate_step: add testcases " Balamuruhan S
2 siblings, 0 replies; 6+ messages in thread
From: Balamuruhan S @ 2020-01-20 6:54 UTC (permalink / raw)
To: mpe
Cc: ravi.bangoria, Balamuruhan S, paulus, sandipan, naveen.n.rao,
linuxppc-dev
include instruction opcodes for divde and divdeu as macros.
Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
---
arch/powerpc/include/asm/ppc-opcode.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
index c1df75edde44..9c9a604f30a6 100644
--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -339,6 +339,8 @@
#define PPC_INST_DIVWU 0x7c000396
#define PPC_INST_DIVD 0x7c0003d2
#define PPC_INST_DIVDU 0x7c000392
+#define PPC_INST_DIVDE 0x7c000352
+#define PPC_INST_DIVDEU 0x7c000312
#define PPC_INST_RLWINM 0x54000000
#define PPC_INST_RLWINM_DOT 0x54000001
#define PPC_INST_RLWIMI 0x50000000
@@ -439,6 +441,12 @@
__PPC_RA(a) | __PPC_RB(b))
#define PPC_DCBZL(a, b) stringify_in_c(.long PPC_INST_DCBZL | \
__PPC_RA(a) | __PPC_RB(b))
+#define PPC_DIVDE(t, a, b) stringify_in_c(.long PPC_INST_DIVDE | \
+ ___PPC_RT(t) | ___PPC_RA(a) | \
+ ___PPC_RB(b))
+#define PPC_DIVDEU(t, a, b) stringify_in_c(.long PPC_INST_DIVDEU | \
+ ___PPC_RT(t) | ___PPC_RA(a) | \
+ ___PPC_RB(b))
#define PPC_LQARX(t, a, b, eh) stringify_in_c(.long PPC_INST_LQARX | \
___PPC_RT(t) | ___PPC_RA(a) | \
___PPC_RB(b) | __PPC_EH(eh))
--
2.14.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/3] powerpc sstep: add support for divde[.] and divdeu[.] instructions
2020-01-20 6:54 [PATCH v3 0/3] Add support for divde[.] and divdeu[.] instruction emulation Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 1/3] powerpc ppc-opcode: add divde and divdeu opcodes Balamuruhan S
@ 2020-01-20 6:54 ` Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 3/3] powerpc test_emulate_step: add testcases " Balamuruhan S
2 siblings, 0 replies; 6+ messages in thread
From: Balamuruhan S @ 2020-01-20 6:54 UTC (permalink / raw)
To: mpe
Cc: ravi.bangoria, Balamuruhan S, paulus, sandipan, naveen.n.rao,
linuxppc-dev
This patch adds emulation support for divde, divdeu instructions,
* Divide Doubleword Extended (divde[.])
* Divide Doubleword Extended Unsigned (divdeu[.])
Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
---
arch/powerpc/lib/sstep.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index c077acb983a1..2cac71a71878 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -1736,7 +1736,18 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
op->val = (int) regs->gpr[ra] /
(int) regs->gpr[rb];
goto arith_done;
-
+#ifdef __powerpc64__
+ case 425: /* divde[.] */
+ asm volatile(PPC_DIVDE(%0, %1, %2) :
+ "=r" (op->val) : "r" (regs->gpr[ra]),
+ "r" (regs->gpr[rb]));
+ goto arith_done;
+ case 393: /* divdeu[.] */
+ asm volatile(PPC_DIVDEU(%0, %1, %2) :
+ "=r" (op->val) : "r" (regs->gpr[ra]),
+ "r" (regs->gpr[rb]));
+ goto arith_done;
+#endif
case 755: /* darn */
if (!cpu_has_feature(CPU_FTR_ARCH_300))
return -1;
--
2.14.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/3] powerpc test_emulate_step: add testcases for divde[.] and divdeu[.] instructions
2020-01-20 6:54 [PATCH v3 0/3] Add support for divde[.] and divdeu[.] instruction emulation Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 1/3] powerpc ppc-opcode: add divde and divdeu opcodes Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 2/3] powerpc sstep: add support for divde[.] and divdeu[.] instructions Balamuruhan S
@ 2020-01-20 6:54 ` Balamuruhan S
2020-04-01 10:56 ` Naveen N. Rao
2 siblings, 1 reply; 6+ messages in thread
From: Balamuruhan S @ 2020-01-20 6:54 UTC (permalink / raw)
To: mpe
Cc: ravi.bangoria, Balamuruhan S, paulus, sandipan, naveen.n.rao,
linuxppc-dev
add testcases for divde, divde., divdeu, divdeu. emulated
instructions to cover few scenarios,
* with same dividend and divisor to have undefine RT
for divdeu[.]
* with divide by zero to have undefine RT for both
divde[.] and divdeu[.]
* with negative dividend to cover -|divisor| < r <= 0 if
the dividend is negative for divde[.]
* normal case with proper dividend and divisor for both
divde[.] and divdeu[.]
Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
---
arch/powerpc/lib/test_emulate_step.c | 164 +++++++++++++++++++++++++++++++++++
1 file changed, 164 insertions(+)
diff --git a/arch/powerpc/lib/test_emulate_step.c b/arch/powerpc/lib/test_emulate_step.c
index 42347067739c..ffeb9b68a31d 100644
--- a/arch/powerpc/lib/test_emulate_step.c
+++ b/arch/powerpc/lib/test_emulate_step.c
@@ -53,6 +53,14 @@
___PPC_RA(a) | ___PPC_RB(b))
#define TEST_ADDC_DOT(t, a, b) (PPC_INST_ADDC | ___PPC_RT(t) | \
___PPC_RA(a) | ___PPC_RB(b) | 0x1)
+#define TEST_DIVDE(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
+ ___PPC_RA(a) | ___PPC_RB(b))
+#define TEST_DIVDE_DOT(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
+ ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
+#define TEST_DIVDEU(t, a, b) (PPC_INST_DIVDEU | ___PPC_RT(t) | \
+ ___PPC_RA(a) | ___PPC_RB(b))
+#define TEST_DIVDEU_DOT(t, a, b)(PPC_INST_DIVDEU | ___PPC_RT(t) | \
+ ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
#define MAX_SUBTESTS 16
@@ -837,6 +845,162 @@ static struct compute_test compute_tests[] = {
}
}
}
+ },
+ {
+ .mnemonic = "divde",
+ .subtests = {
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MIN",
+ .instr = TEST_DIVDE(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MIN,
+ }
+ },
+ {
+ .descr = "RA = 1L, RB = 0",
+ .instr = TEST_DIVDE(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = 1L,
+ .gpr[22] = 0,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MAX",
+ .instr = TEST_DIVDE(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MAX,
+ }
+ }
+ }
+ },
+ {
+ .mnemonic = "divde.",
+ .subtests = {
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MIN",
+ .instr = TEST_DIVDE_DOT(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MIN,
+ }
+ },
+ {
+ .descr = "RA = 1L, RB = 0",
+ .instr = TEST_DIVDE_DOT(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = 1L,
+ .gpr[22] = 0,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MAX",
+ .instr = TEST_DIVDE_DOT(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MAX,
+ }
+ }
+ }
+ },
+ {
+ .mnemonic = "divdeu",
+ .subtests = {
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MIN",
+ .instr = TEST_DIVDEU(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MIN,
+ }
+ },
+ {
+ .descr = "RA = 1L, RB = 0",
+ .instr = TEST_DIVDEU(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = 1L,
+ .gpr[22] = 0,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MAX",
+ .instr = TEST_DIVDEU(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MAX,
+ }
+ },
+ {
+ .descr = "RA = LONG_MAX - 1, RB = LONG_MAX",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MAX - 1,
+ .gpr[22] = LONG_MAX,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN + 1, RB = LONG_MIN",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = LONG_MIN + 1,
+ .gpr[22] = LONG_MIN,
+ }
+ }
+ }
+ },
+ {
+ .mnemonic = "divdeu.",
+ .subtests = {
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MIN",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MIN,
+ }
+ },
+ {
+ .descr = "RA = 1L, RB = 0",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = 1L,
+ .gpr[22] = 0,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN, RB = LONG_MAX",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MIN,
+ .gpr[22] = LONG_MAX,
+ }
+ },
+ {
+ .descr = "RA = LONG_MAX - 1, RB = LONG_MAX",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .regs = {
+ .gpr[21] = LONG_MAX - 1,
+ .gpr[22] = LONG_MAX,
+ }
+ },
+ {
+ .descr = "RA = LONG_MIN + 1, RB = LONG_MIN",
+ .instr = TEST_DIVDEU_DOT(20, 21, 22),
+ .flags = IGNORE_GPR(20),
+ .regs = {
+ .gpr[21] = LONG_MIN + 1,
+ .gpr[22] = LONG_MIN,
+ }
+ }
+ }
}
};
--
2.14.5
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 3/3] powerpc test_emulate_step: add testcases for divde[.] and divdeu[.] instructions
2020-01-20 6:54 ` [PATCH v3 3/3] powerpc test_emulate_step: add testcases " Balamuruhan S
@ 2020-04-01 10:56 ` Naveen N. Rao
2020-04-01 11:21 ` Balamuruhan S
0 siblings, 1 reply; 6+ messages in thread
From: Naveen N. Rao @ 2020-04-01 10:56 UTC (permalink / raw)
To: Balamuruhan S, mpe; +Cc: paulus, linuxppc-dev, sandipan, ravi.bangoria
Balamuruhan S wrote:
> add testcases for divde, divde., divdeu, divdeu. emulated
> instructions to cover few scenarios,
> * with same dividend and divisor to have undefine RT
> for divdeu[.]
> * with divide by zero to have undefine RT for both
> divde[.] and divdeu[.]
> * with negative dividend to cover -|divisor| < r <= 0 if
> the dividend is negative for divde[.]
> * normal case with proper dividend and divisor for both
> divde[.] and divdeu[.]
>
> Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
> Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
> ---
> arch/powerpc/lib/test_emulate_step.c | 164 +++++++++++++++++++++++++++++++++++
> 1 file changed, 164 insertions(+)
>
> diff --git a/arch/powerpc/lib/test_emulate_step.c b/arch/powerpc/lib/test_emulate_step.c
> index 42347067739c..ffeb9b68a31d 100644
> --- a/arch/powerpc/lib/test_emulate_step.c
> +++ b/arch/powerpc/lib/test_emulate_step.c
> @@ -53,6 +53,14 @@
> ___PPC_RA(a) | ___PPC_RB(b))
> #define TEST_ADDC_DOT(t, a, b) (PPC_INST_ADDC | ___PPC_RT(t) | \
> ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
> +#define TEST_DIVDE(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
> + ___PPC_RA(a) | ___PPC_RB(b))
> +#define TEST_DIVDE_DOT(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
> + ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
> +#define TEST_DIVDEU(t, a, b) (PPC_INST_DIVDEU | ___PPC_RT(t) | \
> + ___PPC_RA(a) | ___PPC_RB(b))
> +#define TEST_DIVDEU_DOT(t, a, b)(PPC_INST_DIVDEU | ___PPC_RT(t) | \
> + ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
>
> #define MAX_SUBTESTS 16
>
> @@ -837,6 +845,162 @@ static struct compute_test compute_tests[] = {
> }
> }
> }
> + },
> + {
> + .mnemonic = "divde",
> + .subtests = {
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> + .instr = TEST_DIVDE(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MIN,
> + }
> + },
> + {
> + .descr = "RA = 1L, RB = 0",
> + .instr = TEST_DIVDE(20, 21, 22),
> + .flags = IGNORE_GPR(20),
> + .regs = {
> + .gpr[21] = 1L,
> + .gpr[22] = 0,
> + }
> + },
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> + .instr = TEST_DIVDE(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MAX,
> + }
> + }
> + }
> + },
> + {
> + .mnemonic = "divde.",
> + .subtests = {
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> + .instr = TEST_DIVDE_DOT(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MIN,
> + }
> + },
> + {
> + .descr = "RA = 1L, RB = 0",
> + .instr = TEST_DIVDE_DOT(20, 21, 22),
> + .flags = IGNORE_GPR(20),
> + .regs = {
> + .gpr[21] = 1L,
> + .gpr[22] = 0,
> + }
> + },
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> + .instr = TEST_DIVDE_DOT(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MAX,
> + }
> + }
> + }
> + },
> + {
> + .mnemonic = "divdeu",
> + .subtests = {
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> + .instr = TEST_DIVDEU(20, 21, 22),
> + .flags = IGNORE_GPR(20),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MIN,
> + }
> + },
> + {
> + .descr = "RA = 1L, RB = 0",
> + .instr = TEST_DIVDEU(20, 21, 22),
> + .flags = IGNORE_GPR(20),
> + .regs = {
> + .gpr[21] = 1L,
> + .gpr[22] = 0,
> + }
> + },
> + {
> + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> + .instr = TEST_DIVDEU(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MIN,
> + .gpr[22] = LONG_MAX,
> + }
> + },
> + {
> + .descr = "RA = LONG_MAX - 1, RB = LONG_MAX",
> + .instr = TEST_DIVDEU_DOT(20, 21, 22),
> + .regs = {
> + .gpr[21] = LONG_MAX - 1,
> + .gpr[22] = LONG_MAX,
> + }
> + },
> + {
> + .descr = "RA = LONG_MIN + 1, RB = LONG_MIN",
> + .instr = TEST_DIVDEU_DOT(20, 21, 22),
I think you meant to use TEST_DIVDEU here ^^^^^ and in the test before,
rather than TEST_DIVDEU_DOT.
Apart from them, for this series:
Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
- Naveen
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 3/3] powerpc test_emulate_step: add testcases for divde[.] and divdeu[.] instructions
2020-04-01 10:56 ` Naveen N. Rao
@ 2020-04-01 11:21 ` Balamuruhan S
0 siblings, 0 replies; 6+ messages in thread
From: Balamuruhan S @ 2020-04-01 11:21 UTC (permalink / raw)
To: Naveen N. Rao, mpe; +Cc: paulus, linuxppc-dev, sandipan, ravi.bangoria
On Wed, 2020-04-01 at 16:26 +0530, Naveen N. Rao wrote:
> Balamuruhan S wrote:
> > add testcases for divde, divde., divdeu, divdeu. emulated
> > instructions to cover few scenarios,
> > * with same dividend and divisor to have undefine RT
> > for divdeu[.]
> > * with divide by zero to have undefine RT for both
> > divde[.] and divdeu[.]
> > * with negative dividend to cover -|divisor| < r <= 0 if
> > the dividend is negative for divde[.]
> > * normal case with proper dividend and divisor for both
> > divde[.] and divdeu[.]
> >
> > Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
> > Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
> > ---
> > arch/powerpc/lib/test_emulate_step.c | 164
> > +++++++++++++++++++++++++++++++++++
> > 1 file changed, 164 insertions(+)
> >
> > diff --git a/arch/powerpc/lib/test_emulate_step.c
> > b/arch/powerpc/lib/test_emulate_step.c
> > index 42347067739c..ffeb9b68a31d 100644
> > --- a/arch/powerpc/lib/test_emulate_step.c
> > +++ b/arch/powerpc/lib/test_emulate_step.c
> > @@ -53,6 +53,14 @@
> > ___PPC_RA(a) | ___PPC_RB(b))
> > #define TEST_ADDC_DOT(t, a, b) (PPC_INST_ADDC | ___PPC_RT(t) |
> > \
> > ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
> > +#define TEST_DIVDE(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
> > + ___PPC_RA(a) | ___PPC_RB(b))
> > +#define TEST_DIVDE_DOT(t, a, b) (PPC_INST_DIVDE | ___PPC_RT(t) | \
> > + ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
> > +#define TEST_DIVDEU(t, a, b) (PPC_INST_DIVDEU | ___PPC_RT(t) | \
> > + ___PPC_RA(a) | ___PPC_RB(b))
> > +#define TEST_DIVDEU_DOT(t, a, b)(PPC_INST_DIVDEU | ___PPC_RT(t) | \
> > + ___PPC_RA(a) | ___PPC_RB(b) | 0x1)
> >
> > #define MAX_SUBTESTS 16
> >
> > @@ -837,6 +845,162 @@ static struct compute_test compute_tests[] = {
> > }
> > }
> > }
> > + },
> > + {
> > + .mnemonic = "divde",
> > + .subtests = {
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> > + .instr = TEST_DIVDE(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MIN,
> > + }
> > + },
> > + {
> > + .descr = "RA = 1L, RB = 0",
> > + .instr = TEST_DIVDE(20, 21, 22),
> > + .flags = IGNORE_GPR(20),
> > + .regs = {
> > + .gpr[21] = 1L,
> > + .gpr[22] = 0,
> > + }
> > + },
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> > + .instr = TEST_DIVDE(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MAX,
> > + }
> > + }
> > + }
> > + },
> > + {
> > + .mnemonic = "divde.",
> > + .subtests = {
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> > + .instr = TEST_DIVDE_DOT(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MIN,
> > + }
> > + },
> > + {
> > + .descr = "RA = 1L, RB = 0",
> > + .instr = TEST_DIVDE_DOT(20, 21, 22),
> > + .flags = IGNORE_GPR(20),
> > + .regs = {
> > + .gpr[21] = 1L,
> > + .gpr[22] = 0,
> > + }
> > + },
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> > + .instr = TEST_DIVDE_DOT(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MAX,
> > + }
> > + }
> > + }
> > + },
> > + {
> > + .mnemonic = "divdeu",
> > + .subtests = {
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MIN",
> > + .instr = TEST_DIVDEU(20, 21, 22),
> > + .flags = IGNORE_GPR(20),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MIN,
> > + }
> > + },
> > + {
> > + .descr = "RA = 1L, RB = 0",
> > + .instr = TEST_DIVDEU(20, 21, 22),
> > + .flags = IGNORE_GPR(20),
> > + .regs = {
> > + .gpr[21] = 1L,
> > + .gpr[22] = 0,
> > + }
> > + },
> > + {
> > + .descr = "RA = LONG_MIN, RB = LONG_MAX",
> > + .instr = TEST_DIVDEU(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MIN,
> > + .gpr[22] = LONG_MAX,
> > + }
> > + },
> > + {
> > + .descr = "RA = LONG_MAX - 1, RB = LONG_MAX",
> > + .instr = TEST_DIVDEU_DOT(20, 21, 22),
> > + .regs = {
> > + .gpr[21] = LONG_MAX - 1,
> > + .gpr[22] = LONG_MAX,
> > + }
> > + },
> > + {
> > + .descr = "RA = LONG_MIN + 1, RB = LONG_MIN",
> > + .instr = TEST_DIVDEU_DOT(20, 21, 22),
>
> I think you meant to use TEST_DIVDEU here ^^^^^ and in the test before,
> rather than TEST_DIVDEU_DOT.
yes indeed, I will fix it in my next version.
>
> Apart from them, for this series:
> Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thank you Naveen for reviewing.
-- Bala
>
>
> - Naveen
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-04-01 11:26 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-20 6:54 [PATCH v3 0/3] Add support for divde[.] and divdeu[.] instruction emulation Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 1/3] powerpc ppc-opcode: add divde and divdeu opcodes Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 2/3] powerpc sstep: add support for divde[.] and divdeu[.] instructions Balamuruhan S
2020-01-20 6:54 ` [PATCH v3 3/3] powerpc test_emulate_step: add testcases " Balamuruhan S
2020-04-01 10:56 ` Naveen N. Rao
2020-04-01 11:21 ` Balamuruhan S
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).