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
|