1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
# sh testcase for fipr $fvm, $fvn
# mach: sh
# as(sh): -defsym sim_cpu=0
.include "testutils.inc"
start
initv0:
set_grs_a5a5
set_fprs_a5a5
# Load 1 into fr0.
fldi1 fr0
# Load 2 into fr1.
fldi1 fr1
fadd fr1, fr1
# Load 4 into fr2.
fldi1 fr2
fadd fr2, fr2
fadd fr2, fr2
# Load 8 into fr3.
fmov fr2, fr3
fadd fr2, fr3
initv8:
fldi1 fr8
fldi0 fr9
fldi1 fr10
fldi0 fr11
fipr fv0, fv8
test1:
# Result will be in fr11.
assert_fpreg_i 1, fr0
assert_fpreg_i 2, fr1
assert_fpreg_i 4, fr2
assert_fpreg_i 8, fr3
assert_fpreg_x 0xa5a5a5a5, fr4
assert_fpreg_x 0xa5a5a5a5, fr5
assert_fpreg_x 0xa5a5a5a5, fr6
assert_fpreg_x 0xa5a5a5a5, fr7
assert_fpreg_i 1, fr8
assert_fpreg_i 0, fr9
assert_fpreg_i 1, fr10
assert_fpreg_i 5, fr11
assert_fpreg_x 0xa5a5a5a5, fr12
assert_fpreg_x 0xa5a5a5a5, fr13
assert_fpreg_x 0xa5a5a5a5, fr14
assert_fpreg_x 0xa5a5a5a5, fr15
test_grs_a5a5
test_infp:
# Test positive infinity
fldi0 fr11
mov.l infp, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be plus infinity
assert_fpreg_x 0x7f800000, fr11
test_infm:
# Test negitive infinity
fldi0 fr11
mov.l infm, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be plus infinity
assert_fpreg_x 0xff800000, fr11
test_qnanp:
# Test positive qnan
fldi0 fr11
mov.l qnanp, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be plus qnan (or greater)
flds fr11, fpul
sts fpul, r1
cmp/ge r0, r1
bt .L0
fail
.L0:
test_snanp:
# Test positive snan
fldi0 fr11
mov.l snanp, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be plus snan (or greater)
flds fr11, fpul
sts fpul, r1
cmp/ge r0, r1
bt .L1
fail
.L1:
.if 0
# Handling of nan and inf not implemented yet.
test_qnanm:
# Test negantive qnan
fldi0 fr11
mov.l qnanm, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be minus qnan (or less)
flds fr11, fpul
sts fpul, r1
cmp/ge r1, r0
bt .L2
fail
.L2:
test_snanm:
# Test negative snan
fldi0 fr11
mov.l snanm, r0
lds r0, fpul
fsts fpul, fr0
fipr fv0, fv8
# fr11 should be minus snan (or less)
flds fr11, fpul
sts fpul, r1
cmp/ge r1, r0
bt .L3
fail
.L3:
.endif
pass
exit 0
.align 2
qnanp: .long 0x7f800001
qnanm: .long 0xff800001
snanp: .long 0x7fc00000
snanm: .long 0xffc00000
infp: .long 0x7f800000
infm: .long 0xff800000
|