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