summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/sh64/compact/fdiv.cgs
diff options
context:
space:
mode:
Diffstat (limited to 'sim/testsuite/sim/sh64/compact/fdiv.cgs')
-rw-r--r--sim/testsuite/sim/sh64/compact/fdiv.cgs83
1 files changed, 83 insertions, 0 deletions
diff --git a/sim/testsuite/sim/sh64/compact/fdiv.cgs b/sim/testsuite/sim/sh64/compact/fdiv.cgs
new file mode 100644
index 00000000000..06d1e93a014
--- /dev/null
+++ b/sim/testsuite/sim/sh64/compact/fdiv.cgs
@@ -0,0 +1,83 @@
+# sh testcase for fdiv -*- Asm -*-
+# mach: all
+# as: -isa=shcompact
+# ld: -m shelf32
+
+ .include "compact/testutils.inc"
+
+ start
+ _clrpr
+
+ # 1.0 / 0.0 should be INF
+ # (and not crash the sim).
+ fldi0 fr0
+ fldi1 fr1
+ fdiv fr0, fr1
+
+ # 0.0 / 1.0 == 0.0.
+ fldi0 fr0
+ fldi1 fr1
+ fdiv fr1, fr0
+ fldi0 fr2
+ fcmp/eq fr0, fr2
+ bf wrong
+
+ # 2.0 / 1.0 == 2.0.
+ fldi1 fr1
+ fldi1 fr2
+ fadd fr2, fr2
+ fdiv fr1, fr2
+ # Load 2.0 into fr3.
+ fldi1 fr3
+ fadd fr3, fr3
+ fcmp/eq fr2, fr3
+ bf wrong
+
+ # (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
+ fldi1 fr1
+ fldi1 fr2
+ fadd fr2, fr2
+ fdiv fr2, fr1
+ # fr1 should contain 0.5.
+ fadd fr1, fr1
+ # Load 1.0 into fr3.
+ fldi1 fr3
+ # Compare fr1 with fr3.
+ fcmp/eq fr1, fr3
+ bf wrong
+
+ bra double
+ nop
+
+wrong:
+ fail
+
+double:
+ # double test
+ # (1.0 / 2.0) + (1.0 / 2.0) == 1.0.
+ fldi1 fr1
+ _s2d fr1, dr6
+ fldi1 fr2
+ fadd fr2, fr2
+ _s2d fr2, dr8
+ _setpr
+ fdiv dr8, dr6
+ # dr0 should contain 0.5.
+ # double it, expect 1.0.
+ fadd dr6, dr6
+ _clrpr
+foo:
+ # Load 1.0 into dr4.
+ fldi1 fr1
+ _s2d fr1, dr10
+ # Compare dr0 with dr10.
+ _setpr
+ fcmp/eq dr6, dr10
+ bf wrong2
+ _clrpr
+
+okay:
+ pass
+
+wrong2:
+ fail