nkeynes@357 | 1 | .section .text
|
nkeynes@357 | 2 | .include "sh4/inc.s"
|
nkeynes@357 | 3 | !
|
nkeynes@357 | 4 | ! Test float
|
nkeynes@357 | 5 |
|
nkeynes@357 | 6 | .global _test_float
|
nkeynes@357 | 7 | _test_float:
|
nkeynes@357 | 8 | start_test
|
nkeynes@357 | 9 |
|
nkeynes@357 | 10 | xor r0,r0
|
nkeynes@357 | 11 | lds r0, fpscr
|
nkeynes@357 | 12 |
|
nkeynes@357 | 13 | test_float_1: ! Load 1.0 single precision
|
nkeynes@357 | 14 | add #1, r12
|
nkeynes@357 | 15 | add #1, r0
|
nkeynes@357 | 16 | fldi0 fr0
|
nkeynes@357 | 17 | fldi0 fr1
|
nkeynes@357 | 18 | lds r0, fpul
|
nkeynes@357 | 19 | float fpul, fr0
|
nkeynes@357 | 20 | sts fpul, r1
|
nkeynes@357 | 21 | cmp/eq r0, r1
|
nkeynes@357 | 22 | bf test_float_1_fail
|
nkeynes@357 | 23 | flds fr0, fpul
|
nkeynes@357 | 24 | sts fpul, r0
|
nkeynes@357 | 25 | mov.l test_float_1_result, r1
|
nkeynes@357 | 26 | cmp/eq r0,r1
|
nkeynes@357 | 27 | bf test_float_1_fail
|
nkeynes@357 | 28 | flds fr1, fpul
|
nkeynes@357 | 29 | sts fpul, r0
|
nkeynes@357 | 30 | tst r0, r0
|
nkeynes@357 | 31 | bt test_float_2
|
nkeynes@357 | 32 | test_float_1_fail:
|
nkeynes@357 | 33 | fail test_float_str_k
|
nkeynes@357 | 34 | bra test_float_2
|
nkeynes@357 | 35 | nop
|
nkeynes@357 | 36 |
|
nkeynes@357 | 37 | .align 4
|
nkeynes@357 | 38 | test_float_1_result:
|
nkeynes@357 | 39 | .long 0x3F800000
|
nkeynes@357 | 40 |
|
nkeynes@357 | 41 | test_float_2: ! Load -1.0 double precision
|
nkeynes@357 | 42 | add #1, r12
|
nkeynes@357 | 43 | fldi0 fr0
|
nkeynes@357 | 44 | fldi1 fr1
|
nkeynes@357 | 45 | setpr
|
nkeynes@357 | 46 | xor r0,r0
|
nkeynes@357 | 47 | add #-1, r0
|
nkeynes@357 | 48 | lds r0, fpul
|
nkeynes@357 | 49 | float fpul, fr0
|
nkeynes@357 | 50 | sts fpul, r1
|
nkeynes@357 | 51 | cmp/eq r0, r1
|
nkeynes@357 | 52 | bf test_float_2_fail
|
nkeynes@357 | 53 | flds fr0, fpul
|
nkeynes@357 | 54 | sts fpul, r0
|
nkeynes@357 | 55 | flds fr1, fpul
|
nkeynes@357 | 56 | sts fpul, r2
|
nkeynes@357 | 57 | mov.l test_float_2_result_a, r1
|
nkeynes@357 | 58 | mov.l test_float_2_result_b, r3
|
nkeynes@357 | 59 | cmp/eq r0,r1
|
nkeynes@357 | 60 | bf test_float_2_fail
|
nkeynes@357 | 61 | cmp/eq r2,r3
|
nkeynes@357 | 62 | bt test_float_3
|
nkeynes@357 | 63 | test_float_2_fail:
|
nkeynes@357 | 64 | fail test_float_str_k
|
nkeynes@357 | 65 | bra test_float_3
|
nkeynes@357 | 66 | nop
|
nkeynes@357 | 67 |
|
nkeynes@357 | 68 | test_float_2_result_a:
|
nkeynes@357 | 69 | .long 0xBFF00000
|
nkeynes@357 | 70 | test_float_2_result_b:
|
nkeynes@357 | 71 | .long 0x00000000
|
nkeynes@357 | 72 |
|
nkeynes@357 | 73 | test_float_3: ! pr=0, sz=1
|
nkeynes@357 | 74 | add #1, r12
|
nkeynes@357 | 75 | clrpr
|
nkeynes@357 | 76 | fldi0 fr0
|
nkeynes@357 | 77 | fldi0 fr1
|
nkeynes@357 | 78 | fschg
|
nkeynes@357 | 79 | mov.l test_float_3_input, r0
|
nkeynes@357 | 80 | lds r0, fpul
|
nkeynes@357 | 81 | float fpul, fr0
|
nkeynes@357 | 82 | sts fpul, r1
|
nkeynes@357 | 83 | cmp/eq r0, r1
|
nkeynes@357 | 84 | bf test_float_3_fail
|
nkeynes@357 | 85 | flds fr0, fpul
|
nkeynes@357 | 86 | sts fpul, r0
|
nkeynes@357 | 87 | mov.l test_float_3_result, r1
|
nkeynes@357 | 88 | cmp/eq r0, r1
|
nkeynes@357 | 89 | bf test_float_3_fail
|
nkeynes@357 | 90 | flds fr1, fpul
|
nkeynes@357 | 91 | sts fpul, r0
|
nkeynes@357 | 92 | tst r0, r0
|
nkeynes@357 | 93 | bt test_float_4
|
nkeynes@357 | 94 | test_float_3_fail:
|
nkeynes@357 | 95 | fail test_float_str_k
|
nkeynes@357 | 96 | bra test_float_4
|
nkeynes@357 | 97 | nop
|
nkeynes@357 | 98 |
|
nkeynes@357 | 99 | test_float_3_input:
|
nkeynes@357 | 100 | .long 0xCCCCCCCC
|
nkeynes@357 | 101 | test_float_3_result:
|
nkeynes@357 | 102 | .long 0xCE4CCCCD
|
nkeynes@357 | 103 |
|
nkeynes@357 | 104 | test_float_4: ! pr=1, sz=1
|
nkeynes@357 | 105 | add #1, r12
|
nkeynes@357 | 106 | fldi0 fr0
|
nkeynes@357 | 107 | fldi1 fr1
|
nkeynes@357 | 108 | setpr
|
nkeynes@357 | 109 | mov.l test_float_4_input, r0
|
nkeynes@357 | 110 | lds r0, fpul
|
nkeynes@357 | 111 | float fpul, fr0
|
nkeynes@357 | 112 | sts fpul, r1
|
nkeynes@357 | 113 | cmp/eq r0, r1
|
nkeynes@357 | 114 | bf test_float_4_fail
|
nkeynes@357 | 115 | flds fr0, fpul
|
nkeynes@357 | 116 | sts fpul, r0
|
nkeynes@357 | 117 | flds fr1, fpul
|
nkeynes@357 | 118 | sts fpul, r2
|
nkeynes@357 | 119 | mov.l test_float_4_result_a, r1
|
nkeynes@357 | 120 | mov.l test_float_4_result_b, r3
|
nkeynes@357 | 121 | cmp/eq r0,r1
|
nkeynes@357 | 122 | bf test_float_4_fail
|
nkeynes@357 | 123 | cmp/eq r2,r3
|
nkeynes@357 | 124 | bt test_float_5
|
nkeynes@357 | 125 | test_float_4_fail:
|
nkeynes@357 | 126 | fail test_float_str_k
|
nkeynes@357 | 127 | bra test_float_5
|
nkeynes@357 | 128 | nop
|
nkeynes@357 | 129 |
|
nkeynes@357 | 130 | test_float_4_input:
|
nkeynes@357 | 131 | .long 0x7FFFFFFF
|
nkeynes@357 | 132 | test_float_4_result_a:
|
nkeynes@357 | 133 | .long 0x41DFFFFF
|
nkeynes@357 | 134 | test_float_4_result_b:
|
nkeynes@357 | 135 | .long 0xFFC00000
|
nkeynes@357 | 136 |
|
nkeynes@357 | 137 |
|
nkeynes@357 | 138 | test_float_5: ! test w/ max +int, sz=0, pr=0, fr=1
|
nkeynes@357 | 139 | add #1, r12
|
nkeynes@357 | 140 | xor r0,r0
|
nkeynes@357 | 141 | lds r0, fpscr
|
nkeynes@357 | 142 | fldi0 fr0
|
nkeynes@357 | 143 | fldi0 fr1
|
nkeynes@357 | 144 | frchg
|
nkeynes@357 | 145 | fldi0 fr0
|
nkeynes@357 | 146 | fldi0 fr1
|
nkeynes@357 | 147 | mov.l test_float_5_input, r0
|
nkeynes@357 | 148 | lds r0, fpul
|
nkeynes@357 | 149 | float fpul, fr0
|
nkeynes@357 | 150 | sts fpul, r1
|
nkeynes@357 | 151 | cmp/eq r0, r1
|
nkeynes@357 | 152 | bf test_float_5_fail
|
nkeynes@357 | 153 | flds fr0, fpul
|
nkeynes@357 | 154 | sts fpul, r0
|
nkeynes@357 | 155 | mov.l test_float_5_result, r1
|
nkeynes@357 | 156 | cmp/eq r0, r1
|
nkeynes@357 | 157 | bf test_float_5_fail
|
nkeynes@357 | 158 | flds fr1, fpul
|
nkeynes@357 | 159 | sts fpul, r0
|
nkeynes@357 | 160 | tst r0, r0
|
nkeynes@357 | 161 | bf test_float_5_fail
|
nkeynes@357 | 162 | lds r0, fpscr
|
nkeynes@357 | 163 | flds fr0, fpul
|
nkeynes@357 | 164 | sts fpul, r0
|
nkeynes@357 | 165 | tst r0, r0
|
nkeynes@357 | 166 | bt test_float_6
|
nkeynes@357 | 167 | test_float_5_fail:
|
nkeynes@357 | 168 | fail test_float_str_k
|
nkeynes@357 | 169 | bra test_float_6
|
nkeynes@357 | 170 | nop
|
nkeynes@357 | 171 |
|
nkeynes@357 | 172 | test_float_5_input:
|
nkeynes@357 | 173 | .long 0x7FFFFFFF
|
nkeynes@357 | 174 | test_float_5_result:
|
nkeynes@357 | 175 | .long 0x4F000000
|
nkeynes@357 | 176 |
|
nkeynes@357 | 177 | test_float_6: ! Test max -int
|
nkeynes@357 | 178 | add #1, r12
|
nkeynes@357 | 179 | mov.l test_float_6_input, r0
|
nkeynes@357 | 180 | lds r0, fpul
|
nkeynes@357 | 181 | float fpul, fr5
|
nkeynes@357 | 182 | sts fpul, r1
|
nkeynes@357 | 183 | cmp/eq r0, r1
|
nkeynes@357 | 184 | bf test_float_6_fail
|
nkeynes@357 | 185 | flds fr5, fpul
|
nkeynes@357 | 186 | sts fpul, r2
|
nkeynes@357 | 187 | mov.l test_float_6_result, r1
|
nkeynes@357 | 188 | cmp/eq r1, r2
|
nkeynes@358 | 189 | bt test_float_7
|
nkeynes@357 | 190 |
|
nkeynes@357 | 191 | test_float_6_fail:
|
nkeynes@357 | 192 | fail test_float_str_k
|
nkeynes@358 | 193 | bra test_float_7
|
nkeynes@357 | 194 | nop
|
nkeynes@357 | 195 |
|
nkeynes@357 | 196 | test_float_6_input:
|
nkeynes@357 | 197 | .long 0x80000000
|
nkeynes@357 | 198 | test_float_6_result:
|
nkeynes@357 | 199 | .long 0xCF000000
|
nkeynes@358 | 200 |
|
nkeynes@358 | 201 | test_float_7:
|
nkeynes@358 | 202 | add #1, r12
|
nkeynes@358 | 203 | fldi0 fr8
|
nkeynes@358 | 204 | fldi0 fr9
|
nkeynes@358 | 205 | fldi0 fr10
|
nkeynes@358 | 206 | frchg
|
nkeynes@358 | 207 | fldi0 fr8
|
nkeynes@358 | 208 | fldi0 fr9
|
nkeynes@358 | 209 | fldi0 fr10
|
nkeynes@358 | 210 | setpr
|
nkeynes@358 | 211 | mov.l test_float_7_input, r0
|
nkeynes@358 | 212 | lds r0, fpul
|
nkeynes@358 | 213 | float fpul, fr9
|
nkeynes@358 | 214 | sts fpul,r1
|
nkeynes@358 | 215 | cmp/eq r0,r1
|
nkeynes@358 | 216 | bf test_float_7_fail
|
nkeynes@358 | 217 | flds fr8, fpul
|
nkeynes@358 | 218 | sts fpul, r0
|
nkeynes@358 | 219 | tst r0, r0
|
nkeynes@358 | 220 | bf test_float_7_fail
|
nkeynes@358 | 221 | flds fr9, fpul
|
nkeynes@358 | 222 | sts fpul, r0
|
nkeynes@358 | 223 | mov.l test_float_7_output_a, r1
|
nkeynes@358 | 224 | cmp/eq r0, r1
|
nkeynes@358 | 225 | bf test_float_7_fail
|
nkeynes@358 | 226 | flds fr10, fpul
|
nkeynes@358 | 227 | sts fpul, r0
|
nkeynes@358 | 228 | tst r0, r0
|
nkeynes@358 | 229 | bf test_float_7_fail
|
nkeynes@358 | 230 | frchg
|
nkeynes@358 | 231 | flds fr8, fpul
|
nkeynes@358 | 232 | sts fpul, r0
|
nkeynes@358 | 233 | flds fr9, fpul
|
nkeynes@358 | 234 | sts fpul, r1
|
nkeynes@358 | 235 | flds fr10, fpul
|
nkeynes@358 | 236 | sts fpul, r2
|
nkeynes@358 | 237 | tst r0, r0
|
nkeynes@358 | 238 | bf test_float_7_fail
|
nkeynes@358 | 239 | tst r1, r1
|
nkeynes@358 | 240 | bf test_float_7_fail
|
nkeynes@358 | 241 | tst r2, r2
|
nkeynes@358 | 242 | bt test_float_end
|
nkeynes@358 | 243 | test_float_7_fail:
|
nkeynes@358 | 244 | fail test_float_str_k
|
nkeynes@358 | 245 | bra test_float_end
|
nkeynes@358 | 246 | nop
|
nkeynes@358 | 247 |
|
nkeynes@358 | 248 | test_float_7_input:
|
nkeynes@358 | 249 | .long 0x12345678
|
nkeynes@358 | 250 | test_float_7_output_a:
|
nkeynes@358 | 251 | .long 0x41B23456
|
nkeynes@358 | 252 | test_float_7_output_b:
|
nkeynes@358 | 253 | .long 0x78000000
|
nkeynes@358 | 254 | printf_k:
|
nkeynes@358 | 255 | .long _printf
|
nkeynes@357 | 256 |
|
nkeynes@357 | 257 | test_float_end:
|
nkeynes@357 | 258 | end_test test_float_str_k
|
nkeynes@357 | 259 |
|
nkeynes@357 | 260 | test_float_str:
|
nkeynes@357 | 261 | .string "FLOAT"
|
nkeynes@358 | 262 | .align 4
|
nkeynes@358 | 263 | printf_fmt:
|
nkeynes@358 | 264 | .string "%08X %08X\n"
|
nkeynes@357 | 265 |
|
nkeynes@357 | 266 | .align 4
|
nkeynes@357 | 267 | test_float_str_k:
|
nkeynes@358 | 268 | .long test_float_str
|