filename | test/sh4/addc.s |
changeset | 231:a9e61a96a885 |
prev | 226:0eeeb25447d3 |
author | nkeynes |
date | Fri Dec 02 18:18:04 2011 +1000 (12 years ago) |
permissions | -rw-r--r-- |
last change | SH4 shadow-mode tweaks - Fix exceptions generated by the translator to account for the excepting instruction(s) in the cycle counts. - Compare floating point regs bitwise rather than with FP comparisons (otherwise can fail due to nan != nan) - Dump the translated block when we abort with an inconsistency |
file | annotate | diff | log | raw |
nkeynes@226 | 1 | .section .text |
nkeynes@226 | 2 | .include "sh4/inc.s" |
nkeynes@226 | 3 | |
nkeynes@226 | 4 | .global _test_addc |
nkeynes@226 | 5 | _test_addc: |
nkeynes@226 | 6 | start_test |
nkeynes@226 | 7 | |
nkeynes@226 | 8 | test_addc_1: ! test adding 0+0 = 0 |
nkeynes@226 | 9 | clc |
nkeynes@226 | 10 | add #1, r12 |
nkeynes@226 | 11 | xor r0,r0 |
nkeynes@226 | 12 | xor r1,r1 |
nkeynes@226 | 13 | xor r2,r2 |
nkeynes@226 | 14 | addc r0,r1 |
nkeynes@226 | 15 | stc sr, r4 |
nkeynes@226 | 16 | cmp/eq r1, r2 |
nkeynes@226 | 17 | bt test_addc_1_b |
nkeynes@226 | 18 | fail test_addc_str_k |
nkeynes@226 | 19 | bra test_addc_2 |
nkeynes@226 | 20 | nop |
nkeynes@226 | 21 | test_addc_1_b: |
nkeynes@226 | 22 | ldc r4, sr |
nkeynes@226 | 23 | assert_t_clear test_addc_str_k |
nkeynes@226 | 24 | |
nkeynes@226 | 25 | test_addc_2: ! test 0+ constant 1 = 1 |
nkeynes@226 | 26 | add #1, r12 |
nkeynes@226 | 27 | clc |
nkeynes@226 | 28 | xor r0, r0 |
nkeynes@226 | 29 | xor r1, r1 |
nkeynes@226 | 30 | add #1, r0 |
nkeynes@226 | 31 | addc r0, r1 |
nkeynes@226 | 32 | stc sr, r4 |
nkeynes@226 | 33 | mov.l test_addc_2_result, r2 |
nkeynes@226 | 34 | cmp/eq r1, r2 |
nkeynes@226 | 35 | bt test_addc_2_b |
nkeynes@226 | 36 | fail test_addc_str_k |
nkeynes@226 | 37 | bra test_addc_3 |
nkeynes@226 | 38 | nop |
nkeynes@226 | 39 | test_addc_2_b: |
nkeynes@226 | 40 | ldc r4, sr |
nkeynes@226 | 41 | assert_t_clear test_addc_str_k |
nkeynes@226 | 42 | bra test_addc_3 |
nkeynes@226 | 43 | nop |
nkeynes@226 | 44 | |
nkeynes@226 | 45 | .align 4 |
nkeynes@226 | 46 | test_addc_2_result: |
nkeynes@226 | 47 | .long 0x00000001 |
nkeynes@226 | 48 | |
nkeynes@226 | 49 | test_addc_3: ! test 0 + constant -1 = -1 |
nkeynes@226 | 50 | add #1, r12 |
nkeynes@226 | 51 | clc |
nkeynes@226 | 52 | xor r0, r0 |
nkeynes@226 | 53 | xor r1, r1 |
nkeynes@226 | 54 | add #-1, r0 |
nkeynes@226 | 55 | addc r0, r1 |
nkeynes@226 | 56 | mov.l test_addc_3_result, r2 |
nkeynes@226 | 57 | stc sr, r3 |
nkeynes@226 | 58 | cmp/eq r1, r2 |
nkeynes@226 | 59 | bt test_addc_3_b |
nkeynes@226 | 60 | fail test_addc_str_k |
nkeynes@226 | 61 | bra test_addc_4 |
nkeynes@226 | 62 | nop |
nkeynes@226 | 63 | test_addc_3_b: |
nkeynes@226 | 64 | ldc r3, sr |
nkeynes@226 | 65 | assert_t_clear test_addc_str_k |
nkeynes@226 | 66 | bra test_addc_4 |
nkeynes@226 | 67 | nop |
nkeynes@226 | 68 | |
nkeynes@226 | 69 | .align 4 |
nkeynes@226 | 70 | test_addc_3_result: |
nkeynes@226 | 71 | .long 0xFFFFFFFF |
nkeynes@226 | 72 | |
nkeynes@226 | 73 | test_addc_4: ! test a+b = c w/ carry set |
nkeynes@226 | 74 | add #1, r12 |
nkeynes@226 | 75 | clc |
nkeynes@226 | 76 | mov.l test_addc_4_op1, r4 |
nkeynes@226 | 77 | mov.l test_addc_4_op2, r5 |
nkeynes@226 | 78 | mov.l test_addc_4_result, r0 |
nkeynes@226 | 79 | addc r4, r5 |
nkeynes@226 | 80 | stc sr, r1 |
nkeynes@226 | 81 | cmp/eq r5, r0 |
nkeynes@226 | 82 | bt test_addc_4_b |
nkeynes@226 | 83 | fail test_addc_str_k |
nkeynes@226 | 84 | bra test_addc_5 |
nkeynes@226 | 85 | nop |
nkeynes@226 | 86 | test_addc_4_b: |
nkeynes@226 | 87 | ldc r1, sr |
nkeynes@226 | 88 | assert_t_set test_addc_str_k |
nkeynes@226 | 89 | bra test_addc_5 |
nkeynes@226 | 90 | nop |
nkeynes@226 | 91 | |
nkeynes@226 | 92 | .align 4 |
nkeynes@226 | 93 | test_addc_4_op1: |
nkeynes@226 | 94 | .long 0x98765432 |
nkeynes@226 | 95 | test_addc_4_op2: |
nkeynes@226 | 96 | .long 0xA1234567 |
nkeynes@226 | 97 | test_addc_4_result: |
nkeynes@226 | 98 | .long 0x39999999 |
nkeynes@226 | 99 | |
nkeynes@226 | 100 | test_addc_5: ! test carry used and cleared |
nkeynes@226 | 101 | add #1, r12 |
nkeynes@231 | 102 | mov.l test_addc_5_op1, r4 |
nkeynes@231 | 103 | mov.l test_addc_5_op2, r5 |
nkeynes@231 | 104 | stc sr, r6 |
nkeynes@226 | 105 | xor r0,r0 |
nkeynes@226 | 106 | add #1, r0 |
nkeynes@231 | 107 | or r0,r6 |
nkeynes@231 | 108 | ldc r6, sr |
nkeynes@231 | 109 | addc r5,r4 |
nkeynes@226 | 110 | stc sr, r1 |
nkeynes@231 | 111 | mov.l test_addc_5_result, r7 |
nkeynes@231 | 112 | cmp/eq r7, r4 |
nkeynes@226 | 113 | bt test_addc_5_b |
nkeynes@226 | 114 | fail test_addc_str_k |
nkeynes@226 | 115 | bra test_addc_6 |
nkeynes@226 | 116 | nop |
nkeynes@226 | 117 | test_addc_5_b: |
nkeynes@226 | 118 | ldc r1, sr |
nkeynes@226 | 119 | assert_t_clear test_addc_str_k |
nkeynes@226 | 120 | bra test_addc_6 |
nkeynes@226 | 121 | nop |
nkeynes@226 | 122 | |
nkeynes@226 | 123 | test_addc_5_op1: |
nkeynes@226 | 124 | .long 0x11111111 |
nkeynes@226 | 125 | test_addc_5_op2: |
nkeynes@226 | 126 | .long 0x1000FFFF |
nkeynes@226 | 127 | test_addc_5_result: |
nkeynes@226 | 128 | .long 0x21121111 |
nkeynes@226 | 129 | |
nkeynes@226 | 130 | test_addc_6: ! test carry set on full rollover (ie n + 0xFFFFFFFF + carry ) |
nkeynes@226 | 131 | add #1, r12 |
nkeynes@226 | 132 | setc |
nkeynes@226 | 133 | mov.l test_addc_6_op1, r5 |
nkeynes@226 | 134 | mov.l test_addc_6_op2, r6 |
nkeynes@226 | 135 | addc r5, r6 |
nkeynes@226 | 136 | stc sr, r1 |
nkeynes@226 | 137 | cmp/eq r5, r6 |
nkeynes@226 | 138 | bt test_addc_6_b |
nkeynes@226 | 139 | fail test_addc_str_k |
nkeynes@226 | 140 | bra test_addc_7 |
nkeynes@226 | 141 | nop |
nkeynes@226 | 142 | test_addc_6_b: |
nkeynes@226 | 143 | ldc r1, sr |
nkeynes@226 | 144 | assert_t_set test_addc_str_k |
nkeynes@226 | 145 | bra test_addc_7 |
nkeynes@226 | 146 | nop |
nkeynes@226 | 147 | |
nkeynes@226 | 148 | test_addc_6_op1: |
nkeynes@226 | 149 | .long 0x12346789 |
nkeynes@226 | 150 | test_addc_6_op2: |
nkeynes@226 | 151 | .long 0xFFFFFFFF |
nkeynes@226 | 152 | |
nkeynes@226 | 153 | |
nkeynes@226 | 154 | test_addc_7: |
nkeynes@226 | 155 | add #1, r12 |
nkeynes@226 | 156 | clc |
nkeynes@226 | 157 | mov.l test_addc_7_op1, r5 |
nkeynes@226 | 158 | mov.l test_addc_7_op2, r6 |
nkeynes@226 | 159 | addc r5, r6 |
nkeynes@226 | 160 | stc sr, r1 |
nkeynes@226 | 161 | mov.l test_addc_7_result, r2 |
nkeynes@226 | 162 | cmp/eq r2, r6 |
nkeynes@226 | 163 | bt test_addc_7_b |
nkeynes@226 | 164 | fail test_addc_str_k |
nkeynes@226 | 165 | bra test_addc_8 |
nkeynes@226 | 166 | nop |
nkeynes@226 | 167 | test_addc_7_b: |
nkeynes@226 | 168 | ldc r1, sr |
nkeynes@226 | 169 | assert_t_set test_addc_str_k |
nkeynes@226 | 170 | bra test_addc_8 |
nkeynes@226 | 171 | nop |
nkeynes@226 | 172 | |
nkeynes@226 | 173 | test_addc_7_op1: |
nkeynes@226 | 174 | .long 0x98765432 |
nkeynes@226 | 175 | test_addc_7_op2: |
nkeynes@226 | 176 | .long 0xFFFFFFFF |
nkeynes@226 | 177 | test_addc_7_result: |
nkeynes@226 | 178 | .long 0x98765431 |
nkeynes@226 | 179 | |
nkeynes@226 | 180 | test_addc_8: |
nkeynes@226 | 181 | add #1, r12 |
nkeynes@226 | 182 | setc |
nkeynes@226 | 183 | xor r0,r0 |
nkeynes@226 | 184 | addc r0, r0 |
nkeynes@226 | 185 | stc sr, r3 |
nkeynes@226 | 186 | mov.l test_addc_8_result, r1 |
nkeynes@226 | 187 | cmp/eq r0, r1 |
nkeynes@226 | 188 | bt test_addc_8_b |
nkeynes@226 | 189 | fail test_addc_str_k |
nkeynes@226 | 190 | bra test_addc_9 |
nkeynes@226 | 191 | nop |
nkeynes@226 | 192 | test_addc_8_b: |
nkeynes@226 | 193 | ldc r3, sr |
nkeynes@226 | 194 | assert_t_clear test_addc_str_k |
nkeynes@226 | 195 | bra test_addc_9 |
nkeynes@226 | 196 | nop |
nkeynes@226 | 197 | |
nkeynes@226 | 198 | test_addc_8_result: |
nkeynes@226 | 199 | .long 0x00000001 |
nkeynes@226 | 200 | |
nkeynes@226 | 201 | test_addc_9: |
nkeynes@226 | 202 | test_addc_end: |
nkeynes@226 | 203 | end_test test_addc_str_k |
nkeynes@226 | 204 | |
nkeynes@226 | 205 | test_addc_str: |
nkeynes@226 | 206 | .string "ADDC" |
nkeynes@226 | 207 | |
nkeynes@226 | 208 | .align 4 |
nkeynes@226 | 209 | test_addc_str_k: |
nkeynes@226 | 210 | .long test_addc_str |
.