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