nkeynes@358 | 1 | .section .text
|
nkeynes@358 | 2 | .include "sh4/inc.s"
|
nkeynes@358 | 3 | !
|
nkeynes@358 | 4 | ! Test MAC Rm,Rn operation
|
nkeynes@358 | 5 | !
|
nkeynes@358 | 6 | .global _test_mac
|
nkeynes@358 | 7 | _test_mac:
|
nkeynes@358 | 8 | start_test
|
nkeynes@358 | 9 |
|
nkeynes@358 | 10 | test_macl_1: ! Basic mac.l ops.
|
nkeynes@358 | 11 | add #1, r12
|
nkeynes@358 | 12 | clrmac
|
nkeynes@358 | 13 | clrs
|
nkeynes@358 | 14 | mov.l test_macl_1_inputs_k, r0
|
nkeynes@358 | 15 | mov.l test_macl_1_results_k, r6
|
nkeynes@358 | 16 | mov r0, r1
|
nkeynes@358 | 17 | mac.l @r0+, @r1+
|
nkeynes@358 | 18 | sts macl, r2
|
nkeynes@358 | 19 | sts mach, r3
|
nkeynes@358 | 20 | mov.l @r6+, r4
|
nkeynes@358 | 21 | cmp/eq r2, r4
|
nkeynes@358 | 22 | bf test_macl_1_fail
|
nkeynes@358 | 23 | xor r5, r5
|
nkeynes@358 | 24 | cmp/eq r3, r5
|
nkeynes@358 | 25 | bf test_macl_1_fail
|
nkeynes@358 | 26 | cmp/eq r0, r1
|
nkeynes@358 | 27 | bf test_macl_1_fail
|
nkeynes@358 | 28 | mov.l test_macl_1_inputs_k, r0
|
nkeynes@358 | 29 | cmp/eq r0, r1
|
nkeynes@358 | 30 | bt test_macl_1_fail
|
nkeynes@358 | 31 | add #-4, r1
|
nkeynes@358 | 32 | cmp/eq r0, r1
|
nkeynes@358 | 33 | bf test_macl_1_fail
|
nkeynes@358 | 34 |
|
nkeynes@358 | 35 | mac.l @r0+, @r0+
|
nkeynes@358 | 36 | sts macl, r2
|
nkeynes@358 | 37 | sts mach, r3
|
nkeynes@358 | 38 | mov.l @r6+, r4
|
nkeynes@358 | 39 | cmp/eq r2, r4
|
nkeynes@358 | 40 | bf test_macl_1_fail
|
nkeynes@358 | 41 | xor r5, r5
|
nkeynes@358 | 42 | cmp/eq r3, r5
|
nkeynes@358 | 43 | bf test_macl_1_fail
|
nkeynes@358 | 44 | add #8, r1
|
nkeynes@358 | 45 | cmp/eq r0, r1
|
nkeynes@358 | 46 | bf test_macl_1_fail
|
nkeynes@358 | 47 |
|
nkeynes@358 | 48 | mac.l @r0+, @r1+
|
nkeynes@358 | 49 | sts macl, r2
|
nkeynes@358 | 50 | sts mach, r3
|
nkeynes@358 | 51 | mov.l @r6+, r4
|
nkeynes@358 | 52 | cmp/eq r2, r4
|
nkeynes@358 | 53 | bf test_macl_1_fail
|
nkeynes@358 | 54 | mov.l @r6+, r5
|
nkeynes@358 | 55 | cmp/eq r3, r5
|
nkeynes@358 | 56 | bf test_macl_1_fail
|
nkeynes@358 | 57 | bra test_macl_2
|
nkeynes@358 | 58 | nop
|
nkeynes@358 | 59 | test_macl_1_fail:
|
nkeynes@358 | 60 | fail test_mac_str_k
|
nkeynes@358 | 61 | bra test_macl_2
|
nkeynes@358 | 62 | nop
|
nkeynes@358 | 63 | test_macl_1_inputs_k:
|
nkeynes@358 | 64 | .long test_macl_1_inputs
|
nkeynes@358 | 65 | test_macl_1_inputs:
|
nkeynes@358 | 66 | .long 0x00000010
|
nkeynes@358 | 67 | .long 0x00000021
|
nkeynes@358 | 68 | .long 0xF0000002
|
nkeynes@358 | 69 | test_macl_1_results_k:
|
nkeynes@358 | 70 | .long test_macl_1_results
|
nkeynes@358 | 71 | test_macl_1_results:
|
nkeynes@358 | 72 | .long 0x00000100
|
nkeynes@358 | 73 | .long 0x00000310
|
nkeynes@358 | 74 | .long 0xC0000314
|
nkeynes@358 | 75 | .long 0x00FFFFFF
|
nkeynes@358 | 76 |
|
nkeynes@358 | 77 | test_macl_2: ! Test saturation
|
nkeynes@358 | 78 | add #1, r12
|
nkeynes@358 | 79 | sets
|
nkeynes@358 | 80 | mova test_macl_2_results, r0
|
nkeynes@358 | 81 | mov r0, r3
|
nkeynes@358 | 82 | mova test_macl_2_inputs, r0
|
nkeynes@358 | 83 | mac.l @r0+, @r0+
|
nkeynes@358 | 84 | sts macl, r1
|
nkeynes@358 | 85 | mov.l @r3+, r2
|
nkeynes@358 | 86 | cmp/eq r1, r2
|
nkeynes@358 | 87 | bf test_macl_2_fail
|
nkeynes@358 | 88 | sts mach, r1
|
nkeynes@358 | 89 | mov.l @r3+, r2
|
nkeynes@358 | 90 | cmp/eq r1, r2
|
nkeynes@358 | 91 | bf test_macl_2_fail
|
nkeynes@358 | 92 | mov r0, r1
|
nkeynes@358 | 93 | mova test_macl_2_inputs, r0
|
nkeynes@358 | 94 | add #8, r0
|
nkeynes@358 | 95 | cmp/eq r0, r1
|
nkeynes@358 | 96 | bf test_macl_2_fail
|
nkeynes@358 | 97 |
|
nkeynes@358 | 98 | mac.l @r0+, @r0+
|
nkeynes@358 | 99 | sts macl, r1
|
nkeynes@358 | 100 | mov.l @r3+, r2
|
nkeynes@358 | 101 | cmp/eq r1, r2
|
nkeynes@358 | 102 | bf test_macl_2_fail
|
nkeynes@358 | 103 | sts mach, r1
|
nkeynes@358 | 104 | mov.l @r3+, r2
|
nkeynes@358 | 105 | cmp/eq r1, r2
|
nkeynes@358 | 106 | bt test_macw_1
|
nkeynes@358 | 107 |
|
nkeynes@358 | 108 | test_macl_2_fail:
|
nkeynes@358 | 109 | fail test_mac_str_k
|
nkeynes@358 | 110 | bra test_macw_1
|
nkeynes@358 | 111 | nop
|
nkeynes@358 | 112 | test_macl_2_inputs:
|
nkeynes@358 | 113 | .long 0x00000000
|
nkeynes@358 | 114 | .long 0x00000010
|
nkeynes@358 | 115 | .long 0x7FFFFFDB
|
nkeynes@358 | 116 | .long 0x800000EC
|
nkeynes@358 | 117 |
|
nkeynes@358 | 118 | test_macl_2_results:
|
nkeynes@358 | 119 | .long 0xFFFFFFFF
|
nkeynes@358 | 120 | .long 0x00007FFF
|
nkeynes@358 | 121 | .long 0x00000000
|
nkeynes@358 | 122 | .long 0xFFFF8000
|
nkeynes@358 | 123 |
|
nkeynes@358 | 124 | test_macw_1:
|
nkeynes@358 | 125 | add #1, r12
|
nkeynes@358 | 126 | clrs
|
nkeynes@358 | 127 | clrmac
|
nkeynes@358 | 128 |
|
nkeynes@358 | 129 | mova test_macw_1_results, r0
|
nkeynes@358 | 130 | mov r0, r4
|
nkeynes@358 | 131 | mova test_macw_1_inputs, r0
|
nkeynes@358 | 132 | mov r0, r1
|
nkeynes@358 | 133 | mac.w @r0+, @r1+
|
nkeynes@358 | 134 | sts macl, r2
|
nkeynes@358 | 135 | mov.l @r4+, r3
|
nkeynes@358 | 136 | cmp/eq r2, r3
|
nkeynes@358 | 137 | bf test_macw_1_fail
|
nkeynes@358 | 138 | sts mach, r2
|
nkeynes@358 | 139 | tst r2,r2
|
nkeynes@358 | 140 | bf test_macw_1_fail
|
nkeynes@358 | 141 | cmp/eq r0, r1
|
nkeynes@358 | 142 | bf test_macw_1_fail
|
nkeynes@358 | 143 | mova test_macw_1_inputs, r0
|
nkeynes@358 | 144 | add #-2, r1
|
nkeynes@358 | 145 | cmp/eq r0, r1
|
nkeynes@358 | 146 | bf test_macw_1_fail
|
nkeynes@358 | 147 |
|
nkeynes@358 | 148 | mac.w @r0+, @r0+
|
nkeynes@358 | 149 | sts macl, r2
|
nkeynes@358 | 150 | mov.l @r4+, r3
|
nkeynes@358 | 151 | cmp/eq r2, r3
|
nkeynes@358 | 152 | bf test_macw_1_fail
|
nkeynes@358 | 153 | sts mach, r2
|
nkeynes@358 | 154 | tst r2, r2
|
nkeynes@358 | 155 | bf test_macw_1_fail
|
nkeynes@358 | 156 | add #4, r1
|
nkeynes@358 | 157 | cmp/eq r0, r1
|
nkeynes@358 | 158 | bf test_macw_1_fail
|
nkeynes@358 | 159 |
|
nkeynes@358 | 160 | add #2, r1
|
nkeynes@358 | 161 | mac.w @r0+, @r1+
|
nkeynes@358 | 162 | sts macl, r2
|
nkeynes@358 | 163 | mov.l @r4+, r3
|
nkeynes@358 | 164 | cmp/eq r2, r3
|
nkeynes@358 | 165 | bf test_macw_1_fail
|
nkeynes@358 | 166 | sts mach, r2
|
nkeynes@358 | 167 | tst r2, r2
|
nkeynes@358 | 168 | bf test_macw_1_fail
|
nkeynes@358 | 169 | bra test_macw_2
|
nkeynes@358 | 170 | nop
|
nkeynes@358 | 171 |
|
nkeynes@358 | 172 | test_macw_1_fail:
|
nkeynes@358 | 173 | fail test_mac_str_k
|
nkeynes@358 | 174 | bra test_macw_2
|
nkeynes@358 | 175 | nop
|
nkeynes@358 | 176 | test_macw_1_inputs:
|
nkeynes@358 | 177 | .long 0x00210014
|
nkeynes@358 | 178 | .long 0x0002FFFF
|
nkeynes@358 | 179 | test_macw_1_results:
|
nkeynes@358 | 180 | .long 0x00000190
|
nkeynes@358 | 181 | .long 0x00000424
|
nkeynes@358 | 182 | .long 0x00000422
|
nkeynes@358 | 183 |
|
nkeynes@358 | 184 | test_macw_2:
|
nkeynes@358 | 185 | add #1, r12
|
nkeynes@358 | 186 | sets
|
nkeynes@358 | 187 | clrmac
|
nkeynes@358 | 188 | xor r0, r0
|
nkeynes@358 | 189 | not r0, r0
|
nkeynes@358 | 190 | lds r0, mach
|
nkeynes@358 | 191 |
|
nkeynes@358 | 192 | mova test_macw_2_results, r0
|
nkeynes@358 | 193 | mov r0, r3
|
nkeynes@358 | 194 | mova test_macw_2_inputs, r0
|
nkeynes@358 | 195 | mov #3, r6
|
nkeynes@358 | 196 | test_macw_2_loop:
|
nkeynes@358 | 197 | mac.w @r0+, @r0+
|
nkeynes@358 | 198 | sts macl, r1
|
nkeynes@358 | 199 | mov.l @r3+, r2
|
nkeynes@358 | 200 | cmp/eq r1, r2
|
nkeynes@358 | 201 | bf test_macw_2_fail
|
nkeynes@358 | 202 | sts mach, r1
|
nkeynes@358 | 203 | mov.l @r3+, r2
|
nkeynes@358 | 204 | cmp/eq r1, r2
|
nkeynes@358 | 205 | bf test_macw_2_fail
|
nkeynes@358 | 206 | dt r6
|
nkeynes@358 | 207 | bf test_macw_2_loop
|
nkeynes@358 | 208 |
|
nkeynes@358 | 209 | clrmac
|
nkeynes@358 | 210 | mov #3, r6
|
nkeynes@358 | 211 | test_macw_2_loop_2:
|
nkeynes@358 | 212 | mac.w @r0+, @r0+
|
nkeynes@358 | 213 | sts macl, r1
|
nkeynes@358 | 214 | mov.l @r3+, r2
|
nkeynes@358 | 215 | cmp/eq r1, r2
|
nkeynes@358 | 216 | bf test_macw_2_fail
|
nkeynes@358 | 217 | sts mach, r1
|
nkeynes@358 | 218 | mov.l @r3+, r2
|
nkeynes@358 | 219 | cmp/eq r1, r2
|
nkeynes@358 | 220 | bf test_macw_2_fail
|
nkeynes@358 | 221 | dt r6
|
nkeynes@358 | 222 | bf test_macw_2_loop_2
|
nkeynes@358 | 223 | bra test_mac_end
|
nkeynes@358 | 224 | nop
|
nkeynes@358 | 225 |
|
nkeynes@358 | 226 | test_macw_2_fail:
|
nkeynes@358 | 227 | fail test_mac_str_k
|
nkeynes@358 | 228 | bra test_mac_end
|
nkeynes@358 | 229 | nop
|
nkeynes@358 | 230 | test_macw_2_inputs:
|
nkeynes@358 | 231 | .long 0x7FFE7FFF
|
nkeynes@358 | 232 | .long 0x7FFF7FFD
|
nkeynes@358 | 233 | .long 0x7FFB7FFC
|
nkeynes@358 | 234 | .long 0x80007FF1
|
nkeynes@358 | 235 | .long 0x7FF28003
|
nkeynes@358 | 236 | .long 0x80047FF5
|
nkeynes@358 | 237 | test_macw_2_results:
|
nkeynes@358 | 238 | .long 0x3FFE8002
|
nkeynes@358 | 239 | .long 0xFFFFFFFF
|
nkeynes@358 | 240 | .long 0x7FFC8005
|
nkeynes@358 | 241 | .long 0xFFFFFFFF
|
nkeynes@358 | 242 | .long 0x7FFFFFFF
|
nkeynes@358 | 243 | .long 0x00000001
|
nkeynes@358 | 244 | .long 0xC0078000
|
nkeynes@358 | 245 | .long 0x00000000
|
nkeynes@358 | 246 | .long 0x800FFFD6
|
nkeynes@358 | 247 | .long 0x00000000
|
nkeynes@358 | 248 | .long 0x80000000
|
nkeynes@358 | 249 | .long 0x00000001
|
nkeynes@358 | 250 |
|
nkeynes@358 | 251 | test_mac_end:
|
nkeynes@358 | 252 | end_test test_mac_str_k
|
nkeynes@358 | 253 |
|
nkeynes@358 | 254 | test_mac_data_end:
|
nkeynes@358 | 255 | .align 4
|
nkeynes@358 | 256 | test_mac_data_end_k:
|
nkeynes@358 | 257 | .long test_mac_data_end
|
nkeynes@358 | 258 | test_mac_str_k:
|
nkeynes@358 | 259 | .long test_mac_str
|
nkeynes@358 | 260 | test_mac_str:
|
nkeynes@358 | 261 | .string "MAC"
|
nkeynes@358 | 262 | |