Commit | Line | Data |
---|---|---|
a9298102 JZ |
1 | |
2 | .EXTERN MY_LABEL2; | |
3 | .section .text; | |
4 | ||
5 | // | |
6 | //9 SHIFT/ROTATE OPERATIONS | |
7 | // | |
8 | ||
9 | //Preg = ( Preg + Preg ) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ | |
10 | P0 = (P0+P0)<<1; | |
11 | P0 = (P0+P1)<<1; | |
12 | P2 = (P2+P0)<<1; | |
13 | P1 = (P1+P2)<<1; | |
14 | ||
15 | //P0 = (P2+P0)<<1; | |
16 | ||
17 | //Preg = ( Preg + Preg ) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ | |
18 | P0 = (P0+P0)<<2; | |
19 | P0 = (P0+P1)<<2; | |
20 | P2 = (P2+P0)<<2; | |
21 | P1 = (P1+P2)<<2; | |
22 | ||
23 | //P0 = (P2+P0)<<2; | |
24 | ||
25 | //Dreg = (Dreg + Dreg) << 1 ; /* dest_reg = (dest_reg + src_reg) x 2 (a) */ | |
26 | R0 = (R0+R0)<<1; | |
27 | R0 = (R0+R1)<<1; | |
28 | R2 = (R2+R0)<<1; | |
29 | R1 = (R1+R2)<<1; | |
30 | ||
31 | //R0 = (R2+R0)<<1; | |
32 | ||
33 | ||
34 | //Dreg = (Dreg + Dreg) << 2 ; /* dest_reg = (dest_reg + src_reg) x 4 (a) */ | |
35 | R0 = (R0+R0)<<2; | |
36 | R0 = (R0+R1)<<2; | |
37 | R2 = (R2+R0)<<2; | |
38 | R1 = (R1+R2)<<2; | |
39 | ||
40 | //R0 = (R2+R0)<<2; | |
41 | ||
42 | //Preg = Preg + ( Preg << 1 ) ; /* adder_pntr + (src_pntr x 2) (a) */ | |
43 | P0 = P0 + (P0 << 1); | |
44 | P0 = P0 + (P1 << 1); | |
45 | P0 = P0 + (P2 << 1); | |
46 | P0 = P1 + (P2 << 1); | |
47 | P0 = P2 + (P3 << 1); | |
48 | P1 = P0 + (P0 << 1); | |
49 | P1 = P0 + (P1 << 1); | |
50 | P1 = P0 + (P2 << 1); | |
51 | P1 = P1 + (P2 << 1); | |
52 | P1 = P2 + (P3 << 1); | |
53 | ||
54 | //Preg = Preg + ( Preg << 2 ) ; /* adder_pntr + (src_pntr x 4) (a) */ | |
55 | P0 = P0 + (P0 << 2); | |
56 | P0 = P0 + (P1 << 2); | |
57 | P0 = P0 + (P2 << 2); | |
58 | P0 = P1 + (P2 << 2); | |
59 | P0 = P2 + (P3 << 2); | |
60 | P1 = P0 + (P0 << 2); | |
61 | P1 = P0 + (P1 << 2); | |
62 | P1 = P0 + (P2 << 2); | |
63 | P1 = P1 + (P2 << 2); | |
64 | P1 = P2 + (P3 << 2); | |
65 | ||
66 | //Dreg >>>= uimm5 ; /* arithmetic right shift (a) */ | |
67 | R0 >>>= 0; | |
68 | R0 >>>= 31; | |
69 | R0 >>>= 5; | |
70 | R5 >>>= 0; | |
71 | R5 >>>= 31; | |
72 | R5 >>>= 5; | |
73 | ||
74 | //Dreg <<= uimm5 ; /* logical left shift (a) */ | |
75 | R0 <<= 0; | |
76 | R0 <<= 31; | |
77 | R0 <<= 5; | |
78 | R5 <<= 0; | |
79 | R5 <<= 31; | |
80 | R5 <<= 5; | |
81 | //Dreg_lo_hi = Dreg_lo_hi >>> uimm4 ; /* arithmetic right shift (b) */ | |
82 | R0.L = R0.L >>> 0; | |
83 | R0.L = R0.L >>> 15; | |
84 | R0.L = R0.H >>> 0; | |
85 | R0.L = R0.H >>> 15; | |
86 | R0.H = R0.L >>> 0; | |
87 | R0.H = R0.L >>> 15; | |
88 | R0.H = R0.H >>> 0; | |
89 | R0.H = R0.H >>> 15; | |
90 | ||
91 | R0.L = R1.L >>> 0; | |
92 | R0.L = R1.L >>> 15; | |
93 | R0.L = R1.H >>> 0; | |
94 | R0.L = R1.H >>> 15; | |
95 | R0.H = R1.L >>> 0; | |
96 | R0.H = R1.L >>> 15; | |
97 | R0.H = R1.H >>> 0; | |
98 | R0.H = R1.H >>> 15; | |
99 | ||
100 | R0.L = R7.L >>> 0; | |
101 | R1.L = R6.L >>> 15; | |
102 | R2.L = R5.H >>> 0; | |
103 | R3.L = R4.H >>> 15; | |
104 | R4.H = R3.L >>> 0; | |
105 | R5.H = R2.L >>> 15; | |
106 | R6.H = R1.H >>> 0; | |
107 | R7.H = R0.H >>> 15; | |
108 | ||
109 | //Dreg_lo_hi = Dreg_lo_hi << uimm4 (S) ; /* arithmetic left shift (b) */ | |
110 | R0.L = R0.L << 0(S); | |
111 | R0.L = R0.L << 15(S); | |
112 | R0.L = R0.H << 0(S); | |
113 | R0.L = R0.H << 15(S); | |
114 | R0.H = R0.L << 0(S); | |
115 | R0.H = R0.L << 15(S); | |
116 | R0.H = R0.H << 0(S); | |
117 | R0.H = R0.H << 15(S); | |
118 | ||
119 | R0.L = R1.L << 0(S); | |
120 | R0.L = R1.L << 15(S); | |
121 | R0.L = R1.H << 0(S); | |
122 | R0.L = R1.H << 15(S); | |
123 | R0.H = R1.L << 0(S); | |
124 | R0.H = R1.L << 15(S); | |
125 | R0.H = R1.H << 0(S); | |
126 | R0.H = R1.H << 15(S); | |
127 | ||
128 | R0.L = R7.L << 0(S); | |
129 | R1.L = R6.L << 15(S); | |
130 | R2.L = R5.H << 0(S); | |
131 | R3.L = R4.H << 15(S); | |
132 | R4.H = R3.L << 0(S); | |
133 | R5.H = R2.L << 15(S); | |
134 | R6.H = R1.H << 0(S); | |
135 | R7.H = R0.H << 15(S); | |
136 | //Dreg = Dreg >>> uimm5 ; /* arithmetic right shift (b) */ | |
137 | R0 = R0 >>> 0; | |
138 | R0 = R0 >>> 31; | |
139 | R0 = R1 >>> 0; | |
140 | R0 = R1 >>> 31; | |
141 | R7 = R0 >>> 0; | |
142 | R6 = R1 >>> 31; | |
143 | R5 = R2 >>> 0; | |
144 | R4 = R3 >>> 31; | |
145 | R3 = R4 >>> 0; | |
146 | R2 = R5 >>> 31; | |
147 | R1 = R6 >>> 0; | |
148 | R0 = R7 >>> 31; | |
149 | ||
150 | //Dreg = Dreg << uimm5 (S) ; /* arithmetic left shift (b) */ | |
151 | R0 = R0 << 0(S); | |
152 | R0 = R0 << 31(S); | |
153 | R0 = R1 << 0(S); | |
154 | R0 = R1 << 31(S); | |
155 | R7 = R0 << 0(S); | |
156 | R6 = R1 << 31(S); | |
157 | R5 = R2 << 0(S); | |
158 | R4 = R3 << 31(S); | |
159 | R3 = R4 << 0(S); | |
160 | R2 = R5 << 31(S); | |
161 | R1 = R6 << 0(S); | |
162 | R0 = R7 << 31(S); | |
163 | //A0 = A0 >>> uimm5 ; /* arithmetic right shift (b) */ | |
164 | A0 = A0 >>> 0; | |
165 | A0 = A0 >>> 15; | |
166 | A0 = A0 >>> 31; | |
167 | ||
168 | //A0 = A0 << uimm5 ; /* logical left shift (b) */ | |
169 | A0 = A0 << 0; | |
170 | A0 = A0 << 15; | |
171 | A0 = A0 << 31; | |
172 | ||
173 | //A1 = A1 >>> uimm5 ; /* arithmetic right shift (b) */ | |
174 | A1 = A1 >>> 0; | |
175 | A1 = A1 >>> 15; | |
176 | A1 = A1 >>> 31; | |
177 | ||
178 | //A1 = A1 << uimm5 ; /* logical left shift (b) */ | |
179 | A1 = A1 << 0; | |
180 | A1 = A1 << 15; | |
181 | A1 = A1 << 31; | |
182 | ||
183 | //Dreg >>>= Dreg ; /* arithmetic right shift (a) */ | |
184 | R0 >>>= R0; | |
185 | R0 >>>= R1; | |
186 | R1 >>>= R0; | |
187 | R1 >>>= R7; | |
188 | ||
189 | //Dreg <<= Dreg ; /* logical left shift (a) */ | |
190 | R0 <<= R0; | |
191 | R0 <<= R1; | |
192 | R1 <<= R0; | |
193 | R1 <<= R7; | |
194 | ||
195 | //Dreg_lo_hi = ASHIFT Dreg_lo_hi BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ | |
196 | r3.l = ashift r0.h by r7.l ; /* shift, half-word */ | |
197 | r3.h = ashift r0.l by r7.l ; | |
198 | r3.h = ashift r0.h by r7.l ; | |
199 | r3.l = ashift r0.l by r7.l ; | |
200 | r3.l = ashift r0.h by r7.l(s) ; /* shift, half-word, saturated */ | |
201 | r3.h = ashift r0.l by r7.l(s) ; /* shift, half-word, saturated */ | |
202 | r3.h = ashift r0.h by r7.l(s) ; | |
203 | r3.l = ashift r0.l by r7.l (s) ; | |
204 | ||
205 | //Dreg = ASHIFT Dreg BY Dreg_lo (opt_sat) ; /* arithmetic right shift (b) */ | |
206 | r4 = ashift r2 by r7.l ; /* shift, word */ | |
207 | r4 = ashift r2 by r7.l (s) ; /* shift, word, saturated */ | |
208 | ||
209 | //A0 = ASHIFT A0 BY Dreg_lo ; /* arithmetic right shift (b)*/ | |
210 | A0 = ashift A0 by r7.l ; /* shift, Accumulator */ | |
211 | ||
212 | //A1 = ASHIFT A1 BY Dreg_lo ; /* arithmetic right shift (b)*/ | |
213 | A1 = ashift A1 by r7.l ; /* shift, Accumulator */ | |
214 | ||
215 | p3 = p2 >> 1 ; /* pointer right shift by 1 */ | |
216 | p3 = p3 >> 2 ; /* pointer right shift by 2 */ | |
217 | p4 = p5 << 1 ; /* pointer left shift by 1 */ | |
218 | p0 = p1 << 2 ; /* pointer left shift by 2 */ | |
219 | r3 >>= 17 ; /* data right shift */ | |
220 | r3 <<= 17 ; /* data left shift */ | |
221 | r3.l = r0.l >> 4 ; /* data right shift, half-word register */ | |
222 | r3.l = r0.h >> 4 ; /* same as above; half-word register combinations are arbitrary */ | |
223 | r3.h = r0.l << 12 ; /* data left shift, half-word register */ | |
224 | r3.h = r0.h << 14 ; /* same as above; half-word register combinations are arbitrary */ | |
225 | ||
226 | r3 = r6 >> 4 ; /* right shift, 32-bit word */ | |
227 | r3 = r6 << 4 ; /* left shift, 32-bit word */ | |
228 | ||
229 | a0 = a0 >> 7 ; /* Accumulator right shift */ | |
230 | a1 = a1 >> 25 ; /* Accumulator right shift */ | |
231 | a0 = a0 << 7 ; /* Accumulator left shift */ | |
232 | a1 = a1 << 14 ; /* Accumulator left shift */ | |
233 | ||
234 | r3 >>= r0 ; /* data right shift */ | |
235 | r3 <<= r1 ; /* data left shift */ | |
236 | ||
237 | r3.l = lshift r0.l by r2.l ; /* shift direction controlled by sign of R2.L */ | |
238 | r3.h = lshift r0.l by r2.l ; | |
239 | ||
240 | a0 = lshift a0 by r7.l ; | |
241 | a1 = lshift a1 by r7.l ; | |
242 | ||
243 | r4 = rot r1 by 31 ; /* rotate left */ | |
244 | r4 = rot r1 by -32 ; /* rotate right */ | |
245 | r4 = rot r1 by 5 ; /* rotate right */ | |
246 | ||
247 | a0 = rot a0 by 22 ; /* rotate Accumulator left */ | |
248 | a0 = rot a0 by -32 ; /* rotate Accumulator left */ | |
249 | a0 = rot a0 by 31 ; /* rotate Accumulator left */ | |
250 | ||
251 | a1 = rot a1 by -32 ; /* rotate Accumulator right */ | |
252 | a1 = rot a1 by 31 ; /* rotate Accumulator right */ | |
253 | a1 = rot a1 by 22 ; /* rotate Accumulator right */ | |
254 | ||
255 | r4 = rot r1 by r2.l ; | |
256 | a0 = rot a0 by r3.l ; | |
257 | a1 = rot a1 by r7.l ; | |
258 | ||
259 | r0.l = r1.l << 0; | |
260 | r0.l = r1.l << 1; | |
261 | r0.l = r1.l << 2; | |
262 | r0.l = r1.l << 4; | |
263 | r0.l = r1.l >> 0; | |
264 | r0.l = r1.l >> 1; | |
265 | r0.l = r1.l >> 2; | |
266 | r0.l = r1.l >> 4; | |
267 | r0.l = r1.l >>> 1; | |
268 | r0.l = r1.l >>> 2; | |
269 | r0.l = r1.l >>> 4; | |
270 | ||
271 | r0.l = r1.h << 0; | |
272 | r0.l = r1.h << 1; | |
273 | r0.l = r1.h << 2; | |
274 | r0.l = r1.h << 4; | |
275 | r0.l = r1.h >> 0; | |
276 | r0.l = r1.h >> 1; | |
277 | r0.l = r1.h >> 2; | |
278 | r0.l = r1.h >> 4; | |
279 | r0.l = r1.h >>> 1; | |
280 | r0.l = r1.h >>> 2; | |
281 | r0.l = r1.h >>> 4; | |
282 | ||
283 | r0.l = r1.h << 0 (S); | |
284 | r0.l = r1.h << 1 (S); | |
285 | r0.l = r1.h << 2 (S); | |
286 | r0.l = r1.h << 4 (S); | |
287 | r0.l = r1.h >>> 1 (S); | |
288 | r0.l = r1.h >>> 2 (S); | |
289 | r0.l = r1.h >>> 4 (S); | |
290 |