Home | History | Annotate | Download | only in bfin
      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 
    291