aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>1998-11-05 09:42:05 +0000
committerAndrew Cagney <cagney@redhat.com>1998-11-05 09:42:05 +0000
commitdd0f610960df9101a17aaab80682457d9c27aced (patch)
tree96da632c81d4f3e833edc6b16f326b294f0f8bbc /sim/testsuite
parent8de434bf89b6c5fbb4aed0a201d182f3637852c3 (diff)
downloadgdb-dd0f610960df9101a17aaab80682457d9c27aced.zip
gdb-dd0f610960df9101a17aaab80682457d9c27aced.tar.gz
gdb-dd0f610960df9101a17aaab80682457d9c27aced.tar.bz2
PR 16522
Fix RSQRT.S instruction, add test case.
Diffstat (limited to 'sim/testsuite')
-rw-r--r--sim/testsuite/mips64r5900-elf/ChangeLog4
-rw-r--r--sim/testsuite/mips64r5900-elf/f-rsqrt.s179
2 files changed, 183 insertions, 0 deletions
diff --git a/sim/testsuite/mips64r5900-elf/ChangeLog b/sim/testsuite/mips64r5900-elf/ChangeLog
index c9c920b..1c9111e 100644
--- a/sim/testsuite/mips64r5900-elf/ChangeLog
+++ b/sim/testsuite/mips64r5900-elf/ChangeLog
@@ -1,3 +1,7 @@
+Thu Nov 5 20:22:21 1998 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * f-rsqrt.s: Add tests for 0/sqrt(0) etc.
+
Thu Oct 29 12:07:06 1998 Frank Ch. Eigler <fche@cygnus.com>
* t-psrlvw.s (test_psrlvw): Add test for sign-extension in insn.
diff --git a/sim/testsuite/mips64r5900-elf/f-rsqrt.s b/sim/testsuite/mips64r5900-elf/f-rsqrt.s
new file mode 100644
index 0000000..feb3454
--- /dev/null
+++ b/sim/testsuite/mips64r5900-elf/f-rsqrt.s
@@ -0,0 +1,179 @@
+.include "t-macros.i"
+
+ start
+
+ ### $f3 = $f2 / sqrt ($f1)
+
+test_rsqrt:
+ loadfp $f1 4.0
+ loadfp $f2 1.0
+ rsqrt.s $f3, $f2, $f1
+ checkfp 0 $f3 0.5
+
+ ################
+
+
+## +1.0 / sqrt (+0.0)
+## -> 0x7fffffff (+Max) D+SD
+test_rsqrt_1:
+ clearfcsr
+ loadfp $f1, +1.0
+ loadfp $f2, +0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0x7fffffff
+
+
+## -1.0 / sqrt (+0.0)
+## -> 0xffffffff (-Max) D+SD
+test_rsqrt_2:
+ clearfcsr
+ loadfp $f1, -1.0
+ loadfp $f2, +0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0xffffffff
+
+
+## 0 / sqrt (-0)
+##and 0 / sqrt (0)
+## ->0x7fffffff I + SI
+test_rsqrt_3a:
+ clearfcsr
+ loadfp $f1, +0.0
+ loadfp $f2, -0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0x7fffffff
+
+test_rsqrt_3b:
+ clearfcsr
+ loadfp $f1, +0.0
+ loadfp $f2, +0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0x7fffffff
+
+
+## Correctly:
+## (-0) / sqrt (-0)
+## ->FFFFFFFF (I + SI)
+test_rsqrt_4a:
+ clearfcsr
+ loadfp $f1, -0.0
+ loadfp $f2, -0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0xffffffff
+
+test_rsqrt_4b:
+ clearfcsr
+ loadfp $f1, -0.0
+ loadfp $f2, +0.0
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0xffffffff
+
+
+## (max) / sqrt (min*2) -> no O+SO
+##
+test_rsqrt_5aa:
+ clearfcsr
+ loadfpx $f1, 0x7fffffff
+ loadfpx $f2, 0x00800001
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00000001 $f3 0x7fffffff
+
+test_rsqrt_5ab:
+ clearfcsr
+ loadfpx $f1, 0x7fffffff
+ loadfpx $f2, 0x80800001
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0x7fffffff
+
+test_rsqrt_5ba:
+ clearfcsr
+ loadfpx $f1, 0xffffffff
+ loadfpx $f2, 0x00800001
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00000001 $f3 0xffffffff
+
+test_rsqrt_5bb:
+ clearfcsr
+ loadfpx $f1, 0xffffffff
+ loadfpx $f2, 0x80800001
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0xffffffff
+
+
+## (max) / sqrt (min*2) -> no U+SU
+##
+test_rsqrt_6aa:
+ clearfcsr
+ loadfpx $f1, 0x00800001
+ loadfpx $f2, 0x7fffffff
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00000001 $f3 0x00000000
+
+test_rsqrt_6ab:
+ clearfcsr
+ loadfpx $f1, 0x00800001
+ loadfpx $f2, 0xffffffff
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0x00000000
+
+test_rsqrt_6ba:
+ clearfcsr
+ loadfpx $f1, 0x80800001
+ loadfpx $f2, 0x7fffffff
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00000001 $f3 0x80000000
+
+test_rsqrt_6bb:
+ clearfcsr
+ loadfpx $f1, 0x80800001
+ loadfpx $f2, 0xffffffff
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020041 $f3 0x80000000
+
+
+## Correctly:
+## (max/min) / sqrt ([+-]0)
+## ->MAX/MIN (D + SD)
+test_rsqrt_7aa:
+ clearfcsr
+ loadfpx $f1, 0x7fffffff
+ loadfpx $f2, 0x00000000
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0x7fffffff
+
+test_rsqrt_7ab:
+ clearfcsr
+ loadfpx $f1, 0x7fffffff
+ loadfpx $f2, 0x80000000
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0x7fffffff
+
+test_rsqrt_7ba:
+ clearfcsr
+ loadfpx $f1, 0xffffffff
+ loadfpx $f2, 0x00000000
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0xffffffff
+
+test_rsqrt_7bb:
+ clearfcsr
+ loadfpx $f1, 0xffffffff
+ loadfpx $f2, 0x80000000
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00010021 $f3 0xffffffff
+
+
+## Like max/sqrt but check that bits are set/cleared
+##
+test_rsqrt_9aa:
+ clearfcsr
+ loadfpx $f1, 0x7fffffff
+ loadfpx $f2, 0x00000000
+ rsqrt.s $f3, $f1, $f2
+ loadfpx $f1, 0x00800001
+ loadfpx $f2, 0xffffffff
+ rsqrt.s $f3, $f1, $f2
+ checkfpx 1 0x00020061 $f3 0x00000000
+
+
+ exit0