nkeynes@357 | 1 | .section .text
|
nkeynes@357 | 2 | .include "sh4/inc.s"
|
nkeynes@357 | 3 | !
|
nkeynes@357 | 4 | ! Test ftrc
|
nkeynes@357 | 5 |
|
nkeynes@357 | 6 | .global _test_ftrc
|
nkeynes@357 | 7 | _test_ftrc:
|
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_ftrc_1: ! Load 1.0 single precision
|
nkeynes@357 | 14 | add #1, r12
|
nkeynes@357 | 15 | mov.l test_ftrc_1_input, r0
|
nkeynes@357 | 16 | lds r0, fpul
|
nkeynes@357 | 17 | fsts fpul, fr0
|
nkeynes@357 | 18 | ftrc fr0, fpul
|
nkeynes@357 | 19 | sts fpul, r0
|
nkeynes@357 | 20 | mov.l test_ftrc_1_result, r1
|
nkeynes@357 | 21 | cmp/eq r0,r1
|
nkeynes@357 | 22 | bt test_ftrc_2
|
nkeynes@357 | 23 | test_ftrc_1_fail:
|
nkeynes@357 | 24 | fail test_ftrc_str_k
|
nkeynes@357 | 25 | bra test_ftrc_2
|
nkeynes@357 | 26 | nop
|
nkeynes@357 | 27 |
|
nkeynes@357 | 28 | .align 4
|
nkeynes@357 | 29 | test_ftrc_1_input:
|
nkeynes@357 | 30 | .long 0x3F800000
|
nkeynes@357 | 31 | test_ftrc_1_result:
|
nkeynes@357 | 32 | .long 0x00000001
|
nkeynes@357 | 33 |
|
nkeynes@357 | 34 | test_ftrc_2: ! Load -1.0 double precision
|
nkeynes@357 | 35 | add #1, r12
|
nkeynes@357 | 36 | setpr
|
nkeynes@357 | 37 | mov.l test_ftrc_2_input_a, r0
|
nkeynes@357 | 38 | lds r0, fpul
|
nkeynes@357 | 39 | fsts fpul, fr0
|
nkeynes@357 | 40 | mov.l test_ftrc_2_input_b, r0
|
nkeynes@357 | 41 | lds r0, fpul
|
nkeynes@357 | 42 | fsts fpul, fr1
|
nkeynes@357 | 43 | ftrc fr0, fpul
|
nkeynes@357 | 44 | sts fpul, r0
|
nkeynes@357 | 45 | mov.l test_ftrc_2_result, r1
|
nkeynes@357 | 46 | cmp/eq r0,r1
|
nkeynes@357 | 47 | bt test_ftrc_3
|
nkeynes@357 | 48 | test_ftrc_2_fail:
|
nkeynes@357 | 49 | fail test_ftrc_str_k
|
nkeynes@357 | 50 | bra test_ftrc_3
|
nkeynes@357 | 51 | nop
|
nkeynes@357 | 52 |
|
nkeynes@357 | 53 | test_ftrc_2_input_a:
|
nkeynes@357 | 54 | .long 0xBFF00000
|
nkeynes@357 | 55 | test_ftrc_2_input_b:
|
nkeynes@357 | 56 | .long 0x00000000
|
nkeynes@357 | 57 | test_ftrc_2_result:
|
nkeynes@357 | 58 | .long 0xFFFFFFFF
|
nkeynes@357 | 59 |
|
nkeynes@357 | 60 | test_ftrc_3: ! pr=0, sz=1
|
nkeynes@357 | 61 | add #1, r12
|
nkeynes@357 | 62 | clrpr
|
nkeynes@357 | 63 | mov.l test_ftrc_3_input, r0
|
nkeynes@357 | 64 | lds r0, fpul
|
nkeynes@357 | 65 | fsts fpul, fr0
|
nkeynes@357 | 66 | fschg
|
nkeynes@357 | 67 | ftrc fr0, fpul
|
nkeynes@357 | 68 | sts fpul, r0
|
nkeynes@357 | 69 | mov.l test_ftrc_3_result, r1
|
nkeynes@357 | 70 | cmp/eq r0, r1
|
nkeynes@357 | 71 | bt test_ftrc_4
|
nkeynes@357 | 72 | test_ftrc_3_fail:
|
nkeynes@357 | 73 | fail test_ftrc_str_k
|
nkeynes@357 | 74 | bra test_ftrc_4
|
nkeynes@357 | 75 | nop
|
nkeynes@357 | 76 |
|
nkeynes@357 | 77 | test_ftrc_3_input:
|
nkeynes@357 | 78 | .long 0xCE4CCCCD
|
nkeynes@357 | 79 | test_ftrc_3_result:
|
nkeynes@357 | 80 | .long 0xCCCCCCC0
|
nkeynes@357 | 81 |
|
nkeynes@357 | 82 | test_ftrc_4: ! pr=1, sz=1
|
nkeynes@357 | 83 | add #1, r12
|
nkeynes@357 | 84 | fldi0 fr0
|
nkeynes@357 | 85 | fldi1 fr1
|
nkeynes@357 | 86 | setpr
|
nkeynes@357 | 87 | mov.l test_ftrc_4_input_a, r0
|
nkeynes@357 | 88 | lds r0, fpul
|
nkeynes@357 | 89 | fsts fpul, fr0
|
nkeynes@357 | 90 | mov.l test_ftrc_4_input_b, r0
|
nkeynes@357 | 91 | lds r0, fpul
|
nkeynes@357 | 92 | fsts fpul, fr1
|
nkeynes@357 | 93 | ftrc fr0, fpul
|
nkeynes@357 | 94 | sts fpul, r0
|
nkeynes@357 | 95 | mov.l test_ftrc_4_result, r1
|
nkeynes@357 | 96 | cmp/eq r0,r1
|
nkeynes@357 | 97 | bt test_ftrc_5
|
nkeynes@357 | 98 | test_ftrc_4_fail:
|
nkeynes@357 | 99 | fail test_ftrc_str_k
|
nkeynes@357 | 100 | bra test_ftrc_5
|
nkeynes@357 | 101 | nop
|
nkeynes@357 | 102 |
|
nkeynes@357 | 103 | test_ftrc_4_input_a:
|
nkeynes@358 | 104 | .long 0x40FFFF11
|
nkeynes@357 | 105 | test_ftrc_4_input_b:
|
nkeynes@358 | 106 | .long 0x11111111
|
nkeynes@357 | 107 | test_ftrc_4_result:
|
nkeynes@358 | 108 | .long 0x0001FFF1
|
nkeynes@357 | 109 |
|
nkeynes@357 | 110 |
|
nkeynes@357 | 111 | test_ftrc_5: ! test w/ max +int, sz=0, pr=0, fr=1
|
nkeynes@357 | 112 | add #1, r12
|
nkeynes@357 | 113 | xor r0,r0
|
nkeynes@357 | 114 | lds r0, fpscr
|
nkeynes@357 | 115 | fldi0 fr0
|
nkeynes@357 | 116 | fldi0 fr1
|
nkeynes@357 | 117 | frchg
|
nkeynes@357 | 118 | fldi0 fr0
|
nkeynes@357 | 119 | fldi0 fr1
|
nkeynes@357 | 120 | mov.l test_ftrc_5_input, r0
|
nkeynes@357 | 121 | lds r0, fpul
|
nkeynes@357 | 122 | fsts fpul, fr0
|
nkeynes@357 | 123 | ftrc fr0, fpul
|
nkeynes@357 | 124 | sts fpul, r0
|
nkeynes@357 | 125 | mov.l test_ftrc_5_result, r1
|
nkeynes@357 | 126 | cmp/eq r0, r1
|
nkeynes@357 | 127 | bf test_ftrc_5_fail
|
nkeynes@357 | 128 | flds fr1, fpul
|
nkeynes@357 | 129 | sts fpul, r0
|
nkeynes@357 | 130 | tst r0, r0
|
nkeynes@357 | 131 | bf test_ftrc_5_fail
|
nkeynes@357 | 132 | lds r0, fpscr
|
nkeynes@357 | 133 | flds fr0, fpul
|
nkeynes@357 | 134 | sts fpul, r0
|
nkeynes@357 | 135 | tst r0, r0
|
nkeynes@357 | 136 | bt test_ftrc_6
|
nkeynes@357 | 137 | test_ftrc_5_fail:
|
nkeynes@357 | 138 | fail test_ftrc_str_k
|
nkeynes@357 | 139 | bra test_ftrc_6
|
nkeynes@357 | 140 | nop
|
nkeynes@357 | 141 |
|
nkeynes@357 | 142 | test_ftrc_5_input:
|
nkeynes@357 | 143 | .long 0x4F000000
|
nkeynes@357 | 144 | test_ftrc_5_result:
|
nkeynes@357 | 145 | .long 0x7FFFFFFF
|
nkeynes@357 | 146 |
|
nkeynes@357 | 147 | test_ftrc_6: ! Test max -int
|
nkeynes@357 | 148 | add #1, r12
|
nkeynes@357 | 149 | mov.l test_ftrc_6_input, r0
|
nkeynes@357 | 150 | lds r0, fpul
|
nkeynes@357 | 151 | fsts fpul, fr5
|
nkeynes@357 | 152 | ftrc fr5, fpul
|
nkeynes@357 | 153 | sts fpul, r2
|
nkeynes@357 | 154 | mov.l test_ftrc_6_result, r1
|
nkeynes@357 | 155 | cmp/eq r1, r2
|
nkeynes@357 | 156 | bt test_ftrc_7
|
nkeynes@357 | 157 |
|
nkeynes@357 | 158 | test_ftrc_6_fail:
|
nkeynes@357 | 159 | fail test_ftrc_str_k
|
nkeynes@357 | 160 | bra test_ftrc_7
|
nkeynes@357 | 161 | nop
|
nkeynes@357 | 162 |
|
nkeynes@357 | 163 | test_ftrc_6_input:
|
nkeynes@357 | 164 | .long 0xCF000000
|
nkeynes@357 | 165 | test_ftrc_6_result:
|
nkeynes@357 | 166 | .long 0x80000000
|
nkeynes@357 | 167 |
|
nkeynes@357 | 168 | test_ftrc_7: ! Test >max +int
|
nkeynes@357 | 169 | add #1, r12
|
nkeynes@357 | 170 | mov.l test_ftrc_7_input, r0
|
nkeynes@357 | 171 | lds r0, fpul
|
nkeynes@357 | 172 | fsts fpul, fr7
|
nkeynes@357 | 173 | ftrc fr7, fpul
|
nkeynes@357 | 174 | sts fpul, r2
|
nkeynes@357 | 175 | mov.l test_ftrc_7_result, r1
|
nkeynes@357 | 176 | cmp/eq r1, r2
|
nkeynes@357 | 177 | bt test_ftrc_8
|
nkeynes@357 | 178 | test_ftrc_7_fail:
|
nkeynes@357 | 179 | fail test_ftrc_str_k
|
nkeynes@358 | 180 | bra test_ftrc_8
|
nkeynes@357 | 181 | nop
|
nkeynes@357 | 182 |
|
nkeynes@357 | 183 | test_ftrc_7_input:
|
nkeynes@357 | 184 | .long 0x7E111111
|
nkeynes@357 | 185 | test_ftrc_7_result:
|
nkeynes@357 | 186 | .long 0x7FFFFFFF
|
nkeynes@357 | 187 |
|
nkeynes@357 | 188 | test_ftrc_8: ! test < min -int
|
nkeynes@357 | 189 | add #1, r12
|
nkeynes@357 | 190 | mov.l test_ftrc_8_input, r0
|
nkeynes@357 | 191 | lds r0, fpul
|
nkeynes@357 | 192 | fsts fpul, fr9
|
nkeynes@357 | 193 | ftrc fr9, fpul
|
nkeynes@357 | 194 | sts fpul, r2
|
nkeynes@357 | 195 | mov.l test_ftrc_8_result, r1
|
nkeynes@357 | 196 | cmp/eq r1, r2
|
nkeynes@358 | 197 | bt test_ftrc_9
|
nkeynes@357 | 198 | test_ftrc_8_fail:
|
nkeynes@357 | 199 | fail test_ftrc_str_k
|
nkeynes@358 | 200 | bra test_ftrc_9
|
nkeynes@357 | 201 | nop
|
nkeynes@357 | 202 |
|
nkeynes@357 | 203 | test_ftrc_8_input:
|
nkeynes@357 | 204 | .long 0xFE111111
|
nkeynes@357 | 205 | test_ftrc_8_result:
|
nkeynes@357 | 206 | .long 0x80000000
|
nkeynes@357 | 207 |
|
nkeynes@358 | 208 | test_ftrc_9: ! Test >max +int pr=1
|
nkeynes@358 | 209 | add #1, r12
|
nkeynes@358 | 210 | setpr
|
nkeynes@358 | 211 | mov.l test_ftrc_9_input_a, r0
|
nkeynes@358 | 212 | lds r0, fpul
|
nkeynes@358 | 213 | fsts fpul, fr6
|
nkeynes@358 | 214 | mov.l test_ftrc_9_input_b, r0
|
nkeynes@358 | 215 | lds r0, fpul
|
nkeynes@358 | 216 | fsts fpul, fr7
|
nkeynes@358 | 217 | ftrc fr6, fpul
|
nkeynes@358 | 218 | sts fpul, r2
|
nkeynes@358 | 219 | mov.l test_ftrc_9_result, r1
|
nkeynes@358 | 220 | cmp/eq r1, r2
|
nkeynes@358 | 221 | bt test_ftrc_10
|
nkeynes@358 | 222 | test_ftrc_9_fail:
|
nkeynes@358 | 223 | fail test_ftrc_str_k
|
nkeynes@358 | 224 | bra test_ftrc_10
|
nkeynes@358 | 225 | nop
|
nkeynes@357 | 226 |
|
nkeynes@358 | 227 | test_ftrc_9_input_a:
|
nkeynes@358 | 228 | .long 0x41DFFFFF
|
nkeynes@358 | 229 | test_ftrc_9_input_b:
|
nkeynes@358 | 230 | .long 0xFFC00000
|
nkeynes@358 | 231 | test_ftrc_9_result:
|
nkeynes@358 | 232 | .long 0x7FFFFFFF
|
nkeynes@358 | 233 |
|
nkeynes@358 | 234 | test_ftrc_10: ! test < min -int
|
nkeynes@358 | 235 | add #1, r12
|
nkeynes@358 | 236 | mov.l test_ftrc_10_input_a, r0
|
nkeynes@358 | 237 | lds r0, fpul
|
nkeynes@358 | 238 | fsts fpul, fr8
|
nkeynes@358 | 239 | mov.l test_ftrc_10_input_b, r0
|
nkeynes@358 | 240 | lds r0, fpul
|
nkeynes@358 | 241 | fsts fpul, fr9
|
nkeynes@358 | 242 | ftrc fr8, fpul
|
nkeynes@358 | 243 | sts fpul, r2
|
nkeynes@358 | 244 | mov.l test_ftrc_10_result, r1
|
nkeynes@358 | 245 | cmp/eq r1, r2
|
nkeynes@358 | 246 | bt test_ftrc_11
|
nkeynes@358 | 247 | test_ftrc_10_fail:
|
nkeynes@358 | 248 | fail test_ftrc_str_k
|
nkeynes@358 | 249 | bra test_ftrc_11
|
nkeynes@358 | 250 | nop
|
nkeynes@358 | 251 |
|
nkeynes@358 | 252 | test_ftrc_10_input_a:
|
nkeynes@358 | 253 | .long 0xFE111111
|
nkeynes@358 | 254 | test_ftrc_10_input_b:
|
nkeynes@358 | 255 | .long 0x11111111
|
nkeynes@358 | 256 | test_ftrc_10_result:
|
nkeynes@358 | 257 | .long 0x80000000
|
nkeynes@358 | 258 |
|
nkeynes@358 | 259 | test_ftrc_11: ! test undefined instruction, pr=1
|
nkeynes@741 | 260 | bra test_ftrc_12
|
nkeynes@358 | 261 | add #1, r12
|
nkeynes@358 | 262 | mov.l test_ftrc_11_input_a, r0
|
nkeynes@358 | 263 | lds r0, fpul
|
nkeynes@358 | 264 | fsts fpul, fr0
|
nkeynes@358 | 265 | mov.l test_ftrc_11_input_b, r1
|
nkeynes@358 | 266 | lds r1, fpul
|
nkeynes@358 | 267 | fsts fpul, fr1
|
nkeynes@358 | 268 | mov.l test_ftrc_11_input_c, r0
|
nkeynes@358 | 269 | lds r0, fpul
|
nkeynes@358 | 270 | fsts fpul, fr2
|
nkeynes@358 | 271 | xor r0, r0
|
nkeynes@358 | 272 | not r0, r0
|
nkeynes@358 | 273 | lds r0, fpul
|
nkeynes@358 | 274 | ftrc fr1, fpul
|
nkeynes@358 | 275 | sts fpul, r1
|
nkeynes@358 | 276 | mov.l test_ftrc_11_result, r2
|
nkeynes@358 | 277 | cmp/eq r1, r2
|
nkeynes@393 | 278 | bt test_ftrc_12
|
nkeynes@358 | 279 | test_ftrc_11_fail:
|
nkeynes@358 | 280 | fail test_ftrc_str_k
|
nkeynes@393 | 281 | bra test_ftrc_12
|
nkeynes@358 | 282 | nop
|
nkeynes@358 | 283 | test_ftrc_11_input_a:
|
nkeynes@358 | 284 | .long 0x40FFFF11
|
nkeynes@358 | 285 | test_ftrc_11_input_b:
|
nkeynes@358 | 286 | .long 0x11111111
|
nkeynes@358 | 287 | test_ftrc_11_input_c:
|
nkeynes@358 | 288 | .long 0x42FFFF11
|
nkeynes@358 | 289 | test_ftrc_11_result:
|
nkeynes@358 | 290 | .long 0x00000000
|
nkeynes@358 | 291 |
|
nkeynes@393 | 292 | test_ftrc_12: ! single precision numeric tests (rounding)
|
nkeynes@393 | 293 | mov.l r11, @-r15
|
nkeynes@393 | 294 | mov.l r10, @-r15
|
nkeynes@393 | 295 | mova test_ftrc_12_data, r0
|
nkeynes@393 | 296 | mov r0, r10
|
nkeynes@393 | 297 | mov #4, r11
|
nkeynes@393 | 298 | clrpr
|
nkeynes@393 | 299 | test_ftrc_12_loop:
|
nkeynes@393 | 300 | add #1, r12
|
nkeynes@393 | 301 | fmov @r10+, fr5
|
nkeynes@393 | 302 | ftrc fr5, fpul
|
nkeynes@393 | 303 | sts fpul, r4
|
nkeynes@393 | 304 | mov.l @r10+, r5
|
nkeynes@393 | 305 | cmp/eq r4, r5
|
nkeynes@393 | 306 | bt test_ftrc_12_ok
|
nkeynes@393 | 307 | fail test_ftrc_str_k
|
nkeynes@393 | 308 | test_ftrc_12_ok:
|
nkeynes@393 | 309 | dt r11
|
nkeynes@393 | 310 | bf test_ftrc_12_loop
|
nkeynes@393 | 311 | bra test_ftrc_end
|
nkeynes@393 | 312 | nop
|
nkeynes@393 | 313 | test_ftrc_12_data:
|
nkeynes@393 | 314 | .long 0x449a5314
|
nkeynes@393 | 315 | .long 0x000004D2
|
nkeynes@393 | 316 | .long 0xC5A9C785
|
nkeynes@393 | 317 | .long 0xFFFFEAC8
|
nkeynes@393 | 318 | .long 0x49098291
|
nkeynes@393 | 319 | .long 0x00089829
|
nkeynes@393 | 320 | .long 0xC2DA999A
|
nkeynes@393 | 321 | .long 0xFFFFFF93
|
nkeynes@393 | 322 |
|
nkeynes@357 | 323 | test_ftrc_end:
|
nkeynes@393 | 324 | mov.l @r15+, r10
|
nkeynes@393 | 325 | mov.l @r15+, r11
|
nkeynes@357 | 326 | end_test test_ftrc_str_k
|
nkeynes@357 | 327 |
|
nkeynes@357 | 328 | test_ftrc_str:
|
nkeynes@357 | 329 | .string "FTRC"
|
nkeynes@357 | 330 |
|
nkeynes@357 | 331 | .align 4
|
nkeynes@357 | 332 | test_ftrc_str_k:
|
nkeynes@357 | 333 | .long test_ftrc_str
|