1 2 .EXTERN MY_LABEL2; 3 .section .text; 4 5 // 6 //14 VECTOR OPERATIONS 7 // 8 9 //Dreg_hi = Dreg_lo = SIGN ( Dreg_hi ) * Dreg_hi + SIGN ( Dreg_lo ) * Dreg_lo ; /* (b) */ 10 11 r7.h=r7.l=sign(r2.h)*r3.h+sign(r2.l)*r3.l ; 12 r0.h=r0.l=sign(r1.h)*r2.h+sign(r1.l)*r2.l ; 13 r3.h=r3.l=sign(r4.h)*r5.h+sign(r4.l)*r5.l ; 14 r6.h=r6.l=sign(r7.h)*r0.h+sign(r7.l)*r0.l ; 15 r1.h=r1.l=sign(r2.h)*r3.h+sign(r2.l)*r3.l ; 16 r4.h=r4.l=sign(r5.h)*r6.h+sign(r5.l)*r6.l ; 17 r7.h=r7.l=sign(r0.h)*r1.h+sign(r0.l)*r1.l ; 18 r2.h=r2.l=sign(r3.h)*r4.h+sign(r3.l)*r4.l ; 19 20 //Dual 16-Bit Operation 21 //Dreg = VIT_MAX ( Dreg , Dreg ) (ASL) ; /* shift history bits left (b) */ 22 //Dreg = VIT_MAX ( Dreg , Dreg ) (ASR) ; /* shift history bits right (b) */ 23 //Single 16-Bit Operation 24 //Dreg_lo = VIT_MAX ( Dreg ) (ASL) ; /* shift history bits left (b) */ 25 //Dreg_lo = VIT_MAX ( Dreg ) (ASR) ; /* shift history bits right (b) */ 26 r5 = vit_max(r3, r2)(asl) ; /* shift left, dual operation */ 27 r7 = vit_max (r1, r0) (asr) ; /* shift right, dual operation */ 28 29 r0 = vit_max(r1, r2)(asl) ; /* shift left, dual operation */ 30 r3 = vit_max (r4, r5) (asr) ; /* shift right, dual operation */ 31 r6 = vit_max(r7, r0)(asl) ; /* shift left, dual operation */ 32 r1 = vit_max (r2, r3) (asr) ; /* shift right, dual operation */ 33 r4 = vit_max(r5, r6)(asl) ; /* shift left, dual operation */ 34 r7 = vit_max (r0, r1) (asr) ; /* shift right, dual operation */ 35 r2 = vit_max(r3, r4)(asl) ; /* shift left, dual operation */ 36 r5 = vit_max (r6, r7) (asr) ; /* shift right, dual operation */ 37 38 39 r3.l = vit_max (r1)(asl) ; /* shift left, single operation */ 40 r3.l = vit_max (r1)(asr) ; /* shift right, single operation */ 41 42 r0.l = vit_max (r1)(asl) ; /* shift left, single operation */ 43 r2.l = vit_max (r3)(asr) ; /* shift right, single operation */ 44 r4.l = vit_max (r5)(asl) ; /* shift left, single operation */ 45 r6.l = vit_max (r7)(asr) ; /* shift right, single operation */ 46 r1.l = vit_max (r2)(asl) ; /* shift left, single operation */ 47 r3.l = vit_max (r4)(asr) ; /* shift right, single operation */ 48 r5.l = vit_max (r6)(asl) ; /* shift left, single operation */ 49 r7.l = vit_max (r0)(asr) ; /* shift right, single operation */ 50 51 //Dreg = ABS Dreg (V) ; /* (b) */ 52 r3 = abs r1 (v) ; 53 54 r0 = abs r0 (v) ; 55 r0 = abs r1 (v) ; 56 r2 = abs r3 (v) ; 57 r4 = abs r5 (v) ; 58 r6 = abs r7 (v) ; 59 r1 = abs r0 (v) ; 60 r3 = abs r2 (v) ; 61 r5 = abs r4 (v) ; 62 r7 = abs r6 (v) ; 63 64 //Dual 16-Bit Operations 65 //Dreg = Dreg +|+ Dreg (opt_mode_0) ; /* add | add (b) */ 66 r5=r3 +|+ r4 ; /* dual 16-bit operations, add|add */ 67 68 r0=r1 +|+ r2 ; 69 r3=r4 +|+ r5 ; 70 r6=r7 +|+ r0 ; 71 r1=r2 +|+ r3 ; 72 r4=r3 +|+ r5 ; 73 r6=r3 +|+ r7 ; 74 75 r0=r1 +|+ r2 (S); 76 r3=r4 +|+ r5 (S); 77 r6=r7 +|+ r0 (S); 78 r1=r2 +|+ r3 (S); 79 r4=r3 +|+ r5 (S); 80 r6=r3 +|+ r7 (S); 81 82 r0=r1 +|+ r2 (CO); 83 r3=r4 +|+ r5 (CO); 84 r6=r7 +|+ r0 (CO) ; 85 r1=r2 +|+ r3 (CO); 86 r4=r3 +|+ r5 (CO); 87 r6=r3 +|+ r7 (CO); 88 89 r0=r1 +|+ r2 (SCO); 90 r3=r4 +|+ r5 (SCO); 91 r6=r7 +|+ r0 (SCO); 92 r1=r2 +|+ r3 (SCO); 93 r4=r3 +|+ r5 (SCO); 94 r6=r3 +|+ r7 (SCO); 95 96 //Dreg = Dreg |+ Dreg (opt_mode_0) ; /* subtract | add (b) */ 97 r6=r0 -|+ r1(s) ; /* same as above, subtract|add with saturation */ 98 99 r0=r1 -|+ r2 ; 100 r3=r4 -|+ r5 ; 101 r6=r7 -|+ r0 ; 102 r1=r2 -|+ r3 ; 103 r4=r3 -|+ r5 ; 104 r6=r3 -|+ r7 ; 105 106 r0=r1 -|+ r2 (S); 107 r3=r4 -|+ r5 (S); 108 r6=r7 -|+ r0 (S); 109 r1=r2 -|+ r3 (S); 110 r4=r3 -|+ r5 (S); 111 r6=r3 -|+ r7 (S); 112 113 r0=r1 -|+ r2 (CO); 114 r3=r4 -|+ r5 (CO); 115 r6=r7 -|+ r0 (CO) ; 116 r1=r2 -|+ r3 (CO); 117 r4=r3 -|+ r5 (CO); 118 r6=r3 -|+ r7 (CO); 119 120 r0=r1 -|+ r2 (SCO); 121 r3=r4 -|+ r5 (SCO); 122 r6=r7 -|+ r0 (SCO); 123 r1=r2 -|+ r3 (SCO); 124 r4=r3 -|+ r5 (SCO); 125 r6=r3 -|+ r7 (SCO); 126 127 128 //Dreg = Dreg +| Dreg (opt_mode_0) ; /* add | subtract (b) */ 129 r0=r2 +|- r1(co) ; /* add|subtract with half-word results crossed over in the destination register */ 130 131 r0=r1 +|- r2 ; 132 r3=r4 +|- r5 ; 133 r6=r7 +|- r0 ; 134 r1=r2 +|- r3 ; 135 r4=r3 +|- r5 ; 136 r6=r3 +|- r7 ; 137 138 r0=r1 +|- r2 (S); 139 r3=r4 +|- r5 (S); 140 r6=r7 +|- r0 (S); 141 r1=r2 +|- r3 (S); 142 r4=r3 +|- r5 (S); 143 r6=r3 +|- r7 (S); 144 145 r0=r1 +|- r2 (CO); 146 r3=r4 +|- r5 (CO); 147 r6=r7 +|- r0 (CO) ; 148 r1=r2 +|- r3 (CO); 149 r4=r3 +|- r5 (CO); 150 r6=r3 +|- r7 (CO); 151 152 r0=r1 +|- r2 (SCO); 153 r3=r4 +|- r5 (SCO); 154 r6=r7 +|- r0 (SCO); 155 r1=r2 +|- r3 (SCO); 156 r4=r3 +|- r5 (SCO); 157 r6=r3 +|- r7 (SCO); 158 159 //Dreg = Dreg | Dreg (opt_mode_0) ; /* subtract | subtract (b) */ 160 r7=r3 -|- r6(sco) ; /* subtract|subtract with saturation and half-word results crossed over in the destination register */ 161 162 r0=r1 -|- r2 ; 163 r3=r4 -|- r5 ; 164 r6=r7 -|- r0 ; 165 r1=r2 -|- r3 ; 166 r4=r3 -|- r5 ; 167 r6=r3 -|- r7 ; 168 169 r0=r1 -|- r2 (S); 170 r3=r4 -|- r5 (S); 171 r6=r7 -|- r0 (S); 172 r1=r2 -|- r3 (S); 173 r4=r3 -|- r5 (S); 174 r6=r3 -|- r7 (S); 175 176 r0=r1 -|- r2 (CO); 177 r3=r4 -|- r5 (CO); 178 r6=r7 -|- r0 (CO) ; 179 r1=r2 -|- r3 (CO); 180 r4=r3 -|- r5 (CO); 181 r6=r3 -|- r7 (CO); 182 183 r0=r1 -|- r2 (SCO); 184 r3=r4 -|- r5 (SCO); 185 r6=r7 -|- r0 (SCO); 186 r1=r2 -|- r3 (SCO); 187 r4=r3 -|- r5 (SCO); 188 r6=r3 -|- r7 (SCO); 189 190 //Quad 16-Bit Operations 191 //Dreg = Dreg +|+ Dreg, Dreg = Dreg | Dreg (opt_mode_0,opt_mode_2) ; /* add | add, subtract | subtract; the set of source registers must be the same for each operation (b) */ 192 r5=r3 +|+ r4, r7=r3-|-r4 ; /* quad 16-bit operations, add|add, subtract|subtract */ 193 194 r0=r1 +|+ r2, r7=r1 -|- r2; 195 r3=r4 +|+ r5, r6=r4 -|- r5; 196 r6=r7 +|+ r0, r5=r7 -|- r0; 197 r1=r2 +|+ r3, r4=r2 -|- r3; 198 r4=r3 +|+ r5, r3=r3 -|- r5; 199 r6=r3 +|+ r7, r2=r3 -|- r7; 200 201 r0=r1 +|+ r2, r7=r1 -|- r2(S); 202 r3=r4 +|+ r5, r6=r4 -|- r5(S); 203 r6=r7 +|+ r0, r5=r7 -|- r0(S); 204 r1=r2 +|+ r3, r4=r2 -|- r3(S); 205 r4=r3 +|+ r5, r3=r3 -|- r5(S); 206 r6=r3 +|+ r7, r2=r3 -|- r7(S); 207 208 209 r0=r1 +|+ r2, r7=r1 -|- r2(CO); 210 r3=r4 +|+ r5, r6=r4 -|- r5(CO); 211 r6=r7 +|+ r0, r5=r7 -|- r0(CO); 212 r1=r2 +|+ r3, r4=r2 -|- r3(CO); 213 r4=r3 +|+ r5, r3=r3 -|- r5(CO); 214 r6=r3 +|+ r7, r2=r3 -|- r7(CO); 215 216 217 r0=r1 +|+ r2, r7=r1 -|- r2(SCO); 218 r3=r4 +|+ r5, r6=r4 -|- r5(SCO); 219 r6=r7 +|+ r0, r5=r7 -|- r0(SCO); 220 r1=r2 +|+ r3, r4=r2 -|- r3(SCO); 221 r4=r3 +|+ r5, r3=r3 -|- r5(SCO); 222 r6=r3 +|+ r7, r2=r3 -|- r7(SCO); 223 224 r0=r1 +|+ r2, r7=r1 -|- r2(ASR); 225 r3=r4 +|+ r5, r6=r4 -|- r5(ASR); 226 r6=r7 +|+ r0, r5=r7 -|- r0(ASR); 227 r1=r2 +|+ r3, r4=r2 -|- r3(ASR); 228 r4=r3 +|+ r5, r3=r3 -|- r5(ASR); 229 r6=r3 +|+ r7, r2=r3 -|- r7(ASR); 230 231 232 r0=r1 +|+ r2, r7=r1 -|- r2(ASL); 233 r3=r4 +|+ r5, r6=r4 -|- r5(ASL); 234 r6=r7 +|+ r0, r5=r7 -|- r0(ASL); 235 r1=r2 +|+ r3, r4=r2 -|- r3(ASL); 236 r4=r3 +|+ r5, r3=r3 -|- r5(ASL); 237 r6=r3 +|+ r7, r2=r3 -|- r7(ASL); 238 239 240 r0=r1 +|+ r2, r7=r1 -|- r2(S,ASR); 241 r3=r4 +|+ r5, r6=r4 -|- r5(S,ASR); 242 r6=r7 +|+ r0, r5=r7 -|- r0(S,ASR); 243 r1=r2 +|+ r3, r4=r2 -|- r3(S,ASR); 244 r4=r3 +|+ r5, r3=r3 -|- r5(S,ASR); 245 r6=r3 +|+ r7, r2=r3 -|- r7(S,ASR); 246 247 248 r0=r1 +|+ r2, r7=r1 -|- r2(CO,ASR); 249 r3=r4 +|+ r5, r6=r4 -|- r5(CO,ASR); 250 r6=r7 +|+ r0, r5=r7 -|- r0(CO,ASR); 251 r1=r2 +|+ r3, r4=r2 -|- r3(CO,ASR); 252 r4=r3 +|+ r5, r3=r3 -|- r5(CO,ASR); 253 r6=r3 +|+ r7, r2=r3 -|- r7(CO,ASR); 254 255 256 r0=r1 +|+ r2, r7=r1 -|- r2(SCO,ASR); 257 r3=r4 +|+ r5, r6=r4 -|- r5(SCO,ASR); 258 r6=r7 +|+ r0, r5=r7 -|- r0(SCO,ASR); 259 r1=r2 +|+ r3, r4=r2 -|- r3(SCO,ASR); 260 r4=r3 +|+ r5, r3=r3 -|- r5(SCO,ASR); 261 r6=r3 +|+ r7, r2=r3 -|- r7(SCO,ASR); 262 263 r0=r1 +|+ r2, r7=r1 -|- r2(S,ASL); 264 r3=r4 +|+ r5, r6=r4 -|- r5(S,ASL); 265 r6=r7 +|+ r0, r5=r7 -|- r0(S,ASL); 266 r1=r2 +|+ r3, r4=r2 -|- r3(S,ASL); 267 r4=r3 +|+ r5, r3=r3 -|- r5(S,ASL); 268 r6=r3 +|+ r7, r2=r3 -|- r7(S,ASL); 269 270 271 r0=r1 +|+ r2, r7=r1 -|- r2(CO,ASL); 272 r3=r4 +|+ r5, r6=r4 -|- r5(CO,ASL); 273 r6=r7 +|+ r0, r5=r7 -|- r0(CO,ASL); 274 r1=r2 +|+ r3, r4=r2 -|- r3(CO,ASL); 275 r4=r3 +|+ r5, r3=r3 -|- r5(CO,ASL); 276 r6=r3 +|+ r7, r2=r3 -|- r7(CO,ASL); 277 278 279 r0=r1 +|+ r2, r7=r1 -|- r2(SCO,ASL); 280 r3=r4 +|+ r5, r6=r4 -|- r5(SCO,ASL); 281 r6=r7 +|+ r0, r5=r7 -|- r0(SCO,ASL); 282 r1=r2 +|+ r3, r4=r2 -|- r3(SCO,ASL); 283 r4=r3 +|+ r5, r3=r3 -|- r5(SCO,ASL); 284 r6=r3 +|+ r7, r2=r3 -|- r7(SCO,ASL); 285 286 287 //Dreg = Dreg +| Dreg, Dreg = Dreg |+ Dreg (opt_mode_0,opt_mode_2) ; /* add | subtract, subtract | add; the set of source registers must be the same for each operation (b) */ 288 r5=r3 +|- r4, r7=r3 -|+ r4 ; /* quad 16-bit operations, add|subtract, subtract|add */ 289 290 r0=r1 +|- r2, r7=r1 -|+ r2; 291 r3=r4 +|- r5, r6=r4 -|+ r5; 292 r6=r7 +|- r0, r5=r7 -|+ r0; 293 r1=r2 +|- r3, r4=r2 -|+ r3; 294 r4=r3 +|- r5, r3=r3 -|+ r5; 295 r6=r3 +|- r7, r2=r3 -|+ r7; 296 297 r0=r1 +|- r2, r7=r1 -|+ r2(S); 298 r3=r4 +|- r5, r6=r4 -|+ r5(S); 299 r6=r7 +|- r0, r5=r7 -|+ r0(S); 300 r1=r2 +|- r3, r4=r2 -|+ r3(S); 301 r4=r3 +|- r5, r3=r3 -|+ r5(S); 302 r6=r3 +|- r7, r2=r3 -|+ r7(S); 303 304 305 r0=r1 +|- r2, r7=r1 -|+ r2(CO); 306 r3=r4 +|- r5, r6=r4 -|+ r5(CO); 307 r6=r7 +|- r0, r5=r7 -|+ r0(CO); 308 r1=r2 +|- r3, r4=r2 -|+ r3(CO); 309 r4=r3 +|- r5, r3=r3 -|+ r5(CO); 310 r6=r3 +|- r7, r2=r3 -|+ r7(CO); 311 312 313 r0=r1 +|- r2, r7=r1 -|+ r2(SCO); 314 r3=r4 +|- r5, r6=r4 -|+ r5(SCO); 315 r6=r7 +|- r0, r5=r7 -|+ r0(SCO); 316 r1=r2 +|- r3, r4=r2 -|+ r3(SCO); 317 r4=r3 +|- r5, r3=r3 -|+ r5(SCO); 318 r6=r3 +|- r7, r2=r3 -|+ r7(SCO); 319 320 r0=r1 +|- r2, r7=r1 -|+ r2(ASR); 321 r3=r4 +|- r5, r6=r4 -|+ r5(ASR); 322 r6=r7 +|- r0, r5=r7 -|+ r0(ASR); 323 r1=r2 +|- r3, r4=r2 -|+ r3(ASR); 324 r4=r3 +|- r5, r3=r3 -|+ r5(ASR); 325 r6=r3 +|- r7, r2=r3 -|+ r7(ASR); 326 327 328 r0=r1 +|- r2, r7=r1 -|+ r2(ASL); 329 r3=r4 +|- r5, r6=r4 -|+ r5(ASL); 330 r6=r7 +|- r0, r5=r7 -|+ r0(ASL); 331 r1=r2 +|- r3, r4=r2 -|+ r3(ASL); 332 r4=r3 +|- r5, r3=r3 -|+ r5(ASL); 333 r6=r3 +|- r7, r2=r3 -|+ r7(ASL); 334 335 336 r0=r1 +|- r2, r7=r1 -|+ r2(S,ASR); 337 r3=r4 +|- r5, r6=r4 -|+ r5(S,ASR); 338 r6=r7 +|- r0, r5=r7 -|+ r0(S,ASR); 339 r1=r2 +|- r3, r4=r2 -|+ r3(S,ASR); 340 r4=r3 +|- r5, r3=r3 -|+ r5(S,ASR); 341 r6=r3 +|- r7, r2=r3 -|+ r7(S,ASR); 342 343 344 r0=r1 +|- r2, r7=r1 -|+ r2(CO,ASR); 345 r3=r4 +|- r5, r6=r4 -|+ r5(CO,ASR); 346 r6=r7 +|- r0, r5=r7 -|+ r0(CO,ASR); 347 r1=r2 +|- r3, r4=r2 -|+ r3(CO,ASR); 348 r4=r3 +|- r5, r3=r3 -|+ r5(CO,ASR); 349 r6=r3 +|- r7, r2=r3 -|+ r7(CO,ASR); 350 351 352 r0=r1 +|- r2, r7=r1 -|+ r2(SCO,ASR); 353 r3=r4 +|- r5, r6=r4 -|+ r5(SCO,ASR); 354 r6=r7 +|- r0, r5=r7 -|+ r0(SCO,ASR); 355 r1=r2 +|- r3, r4=r2 -|+ r3(SCO,ASR); 356 r4=r3 +|- r5, r3=r3 -|+ r5(SCO,ASR); 357 r6=r3 +|- r7, r2=r3 -|+ r7(SCO,ASR); 358 359 r0=r1 +|- r2, r7=r1 -|+ r2(S,ASL); 360 r3=r4 +|- r5, r6=r4 -|+ r5(S,ASL); 361 r6=r7 +|- r0, r5=r7 -|+ r0(S,ASL); 362 r1=r2 +|- r3, r4=r2 -|+ r3(S,ASL); 363 r4=r3 +|- r5, r3=r3 -|+ r5(S,ASL); 364 r6=r3 +|- r7, r2=r3 -|+ r7(S,ASL); 365 366 367 r0=r1 +|- r2, r7=r1 -|+ r2(CO,ASL); 368 r3=r4 +|- r5, r6=r4 -|+ r5(CO,ASL); 369 r6=r7 +|- r0, r5=r7 -|+ r0(CO,ASL); 370 r1=r2 +|- r3, r4=r2 -|+ r3(CO,ASL); 371 r4=r3 +|- r5, r3=r3 -|+ r5(CO,ASL); 372 r6=r3 +|- r7, r2=r3 -|+ r7(CO,ASL); 373 374 375 r0=r1 +|- r2, r7=r1 -|+ r2(SCO,ASL); 376 r3=r4 +|- r5, r6=r4 -|+ r5(SCO,ASL); 377 r6=r7 +|- r0, r5=r7 -|+ r0(SCO,ASL); 378 r1=r2 +|- r3, r4=r2 -|+ r3(SCO,ASL); 379 r4=r3 +|- r5, r3=r3 -|+ r5(SCO,ASL); 380 r6=r3 +|- r7, r2=r3 -|+ r7(SCO,ASL); 381 382 383 384 //Dual 32-Bit Operations 385 //Dreg = Dreg + Dreg, Dreg = Dreg - Dreg (opt_mode_1) ; /* add, subtract; the set of source registers must be the same for each operation (b) */ 386 r2=r0+r1, r3=r0-r1 ; /* 32-bit operations */ 387 388 r7=r0+r1, r0=r0-r1 ; /* 32-bit operations */ 389 r6=r1+r2, r1=r1-r2 ; /* 32-bit operations */ 390 r5=r2+r3, r2=r2-r3 ; /* 32-bit operations */ 391 r4=r3+r4, r3=r3-r4 ; /* 32-bit operations */ 392 r3=r4+r5, r4=r4-r5 ; /* 32-bit operations */ 393 r2=r5+r6, r5=r5-r6 ; /* 32-bit operations */ 394 r1=r6+r7, r6=r6-r7 ; /* 32-bit operations */ 395 r0=r7+r0, r7=r7-r0 ; /* 32-bit operations */ 396 397 r2=r0+r1, r3=r0-r1(s) ; /* dual 32-bit operations with saturation */ 398 r7=r0+r1, r0=r0-r1 (s); /* 32-bit operations */ 399 r6=r1+r2, r1=r1-r2 (s); /* 32-bit operations */ 400 r5=r2+r3, r2=r2-r3 (s); /* 32-bit operations */ 401 r4=r3+r4, r3=r3-r4(s) ; /* 32-bit operations */ 402 r3=r4+r5, r4=r4-r5 (s); /* 32-bit operations */ 403 r2=r5+r6, r5=r5-r6 (s); /* 32-bit operations */ 404 r1=r6+r7, r6=r6-r7 (s); /* 32-bit operations */ 405 r0=r7+r0, r7=r7-r0 (s); /* 32-bit operations */ 406 407 408 409 //Dual 40-Bit Accumulator Operations 410 //Dreg = A1 + A0, Dreg = A1 - A0 (opt_mode_1) ; /* add, subtract Accumulators; subtract A0 from A1 (b) */ 411 r0=a1+a0, r1=a1-a0 ; 412 r2=a1+a0, r3=a1-a0 ; 413 r4=a1+a0, r5=a1-a0 ; 414 r6=a1+a0, r7=a1-a0 ; 415 r1=a1+a0, r0=a1-a0 ; 416 r3=a1+a0, r2=a1-a0 ; 417 r5=a1+a0, r4=a1-a0 ; 418 419 r0=a1+a0, r1=a1-a0 (s); 420 r2=a1+a0, r3=a1-a0 (s); 421 r4=a1+a0, r5=a1-a0 (s); 422 r6=a1+a0, r7=a1-a0 (s); 423 r1=a1+a0, r0=a1-a0 (s); 424 r3=a1+a0, r2=a1-a0 (s); 425 r5=a1+a0, r4=a1-a0 (s); 426 427 //Dreg = A0 + A1, Dreg = A0 - A1 (opt_mode_1) ; /* add, subtract Accumulators; subtract A1 from A0 (b) */ 428 r4=a0+a1, r6=a0-a1(s); 429 430 r0=a0+a1, r1=a0-a1 ; 431 r2=a0+a1, r3=a0-a1 ; 432 r4=a0+a1, r5=a0-a1 ; 433 r6=a0+a1, r7=a0-a1 ; 434 r1=a0+a1, r0=a0-a1 ; 435 r3=a0+a1, r2=a0-a1 ; 436 r5=a0+a1, r4=a0-a1 ; 437 438 r0=a0+a1, r1=a0-a1 (s); 439 r2=a0+a1, r3=a0-a1 (s); 440 r4=a0+a1, r5=a0-a1 (s); 441 r6=a0+a1, r7=a0-a1 (s); 442 r1=a0+a1, r0=a0-a1 (s); 443 r3=a0+a1, r2=a0-a1 (s); 444 r5=a0+a1, r4=a0-a1 (s); 445 446 //Constant Shift Magnitude 447 //Dreg = Dreg >>> uimm4 (V) ; /* arithmetic shift right, immediate (b) */ 448 R0 = R0 >>> 5(V); 449 450 R0 = R1 >>> 5(V); 451 R2 = R3 >>> 5(V); 452 R4 = R5 >>> 5(V); 453 R6 = R7 >>> 5(V); 454 R1 = R0 >>> 5(V); 455 R3 = R2 >>> 5(V); 456 R5 = R4 >>> 5(V); 457 R7 = R6 >>> 5(V); 458 459 460 //Dreg = Dreg << uimm4 (V,S) ; /* arithmetic shift left, immediate with saturation (b) */ 461 462 R0 = R1 << 5(V,S); 463 R2 = R3 << 5(V,S); 464 R4 = R5 << 5(V,S); 465 R6 = R7 << 5(V,S); 466 R1 = R0 << 5(V,S); 467 R3 = R2 << 5(V,S); 468 R5 = R4 << 5(V,S); 469 R7 = R6 << 5(V,S); 470 471 //Registered Shift Magnitude 472 //Dreg = ASHIFT Dreg BY Dreg_lo (V) ; /* arithmetic shift (b) */ 473 r2=ashift r7 by r5.l (v) ; 474 475 R0 = ASHIFT R1 BY R2.L (V); 476 R3 = ASHIFT R4 BY R5.L (V); 477 R6 = ASHIFT R7 BY R0.L (V); 478 R1 = ASHIFT R2 BY R3.L (V); 479 R4 = ASHIFT R5 BY R6.L (V); 480 R7 = ASHIFT R0 BY R1.L (V); 481 R2 = ASHIFT R3 BY R4.L (V); 482 R5 = ASHIFT R6 BY R7.L (V); 483 484 485 //Dreg = ASHIFT Dreg BY Dreg_lo (V, S) ; /* arithmetic shift with saturation (b) */ 486 R0 = ASHIFT R1 BY R2.L (V,S); 487 R3 = ASHIFT R4 BY R5.L (V,S); 488 R6 = ASHIFT R7 BY R0.L (V,S); 489 R1 = ASHIFT R2 BY R3.L (V,S); 490 R4 = ASHIFT R5 BY R6.L (V,S); 491 R7 = ASHIFT R0 BY R1.L (V,S); 492 R2 = ASHIFT R3 BY R4.L (V,S); 493 R5 = ASHIFT R6 BY R7.L (V,S); 494 495 //Constant Shift Magnitude 496 //Dreg = Dreg >> uimm4 (V) ; /* logical shift right, immediate (b) */ 497 R0 = R1 >> 5(V); 498 R2 = R3 >> 5(V); 499 R4 = R5 >> 5(V); 500 R6 = R7 >> 5(V); 501 R1 = R0 >> 5(V); 502 R3 = R2 >> 5(V); 503 R5 = R4 >> 5(V); 504 R7 = R6 >> 5(V); 505 506 //Dreg = Dreg << uimm4 (V) ; /* logical shift left, immediate (b) */ 507 R0 = R1 << 5(V); 508 R2 = R3 << 5(V); 509 R4 = R5 << 5(V); 510 R6 = R7 << 5(V); 511 R1 = R0 << 5(V); 512 R3 = R2 << 5(V); 513 R5 = R4 << 5(V); 514 R7 = R6 << 5(V); 515 516 517 //Registered Shift Magnitude 518 //Dreg = LSHIFT Dreg BY Dreg_lo (V) ; /* logical shift (b) */ 519 520 R0 = LSHIFT R1 BY R2.L (V); 521 R3 = LSHIFT R4 BY R5.L (V); 522 R6 = LSHIFT R7 BY R0.L (V); 523 R1 = LSHIFT R2 BY R3.L (V); 524 R4 = LSHIFT R5 BY R6.L (V); 525 R7 = LSHIFT R0 BY R1.L (V); 526 R2 = LSHIFT R3 BY R4.L (V); 527 R5 = LSHIFT R6 BY R7.L (V); 528 529 //Dreg = MAX ( Dreg , Dreg ) (V) ; /* dual 16-bit operations (b) */ 530 r7 = max (r1, r0) (v) ; 531 532 R0 = MAX (R1, R2) (V); 533 R3 = MAX (R4, R5) (V); 534 R6 = MAX (R7, R0) (V); 535 R1 = MAX (R2, R3) (V); 536 R4 = MAX (R5, R6) (V); 537 R7 = MAX (R0, R1) (V); 538 R2 = MAX (R3, R4) (V); 539 R5 = MAX (R6, R7) (V); 540 541 //Dreg = MIN ( Dreg , Dreg ) (V) ; /* dual 16-bit operation (b) */ 542 R0 = MIN (R1, R2) (V); 543 R3 = MIN (R4, R5) (V); 544 R6 = MIN (R7, R0) (V); 545 R1 = MIN (R2, R3) (V); 546 R4 = MIN (R5, R6) (V); 547 R7 = MIN (R0, R1) (V); 548 R2 = MIN (R3, R4) (V); 549 R5 = MIN (R6, R7) (V); 550 551 r2.h=r7.l*r6.h, r2.l=r7.h*r6.h ; 552 /* simultaneous MAC0 and MAC1 execution, 16-bit results. Both 553 results are signed fractions. */ 554 r4.l=r1.l*r0.l, r4.h=r1.h*r0.h ; 555 /* same as above. MAC order is arbitrary. */ 556 r0.h=r3.h*r2.l (m), r0.l=r3.l*r2.l ; 557 558 a1=r2.l*r3.h, a0=r2.h*r3.h ; 559 /* both multiply signed fractions into separate Accumulators */ 560 a0=r1.l*r0.l, a1+=r1.h*r0.h ; 561 /* same as above, but sum result into A1. MAC order is arbitrary. 562 */ 563 a1+=r3.h*r3.l, a0-=r3.h*r3.h ; 564 /* sum product into A1, subtract product from A0 */ 565 a1=r3.h*r2.l (m), a0+=r3.l*r2.l ; 566 /* MAC1 multiplies a signed fraction in r3.h by an unsigned fraction 567 in r2.l. MAC0 multiplies two signed fractions. */ 568 a1=r7.h*r4.h (m), a0+=r7.l*r4.l (fu) ; 569 /* MAC1 multiplies signed fraction by unsigned fraction. MAC0 570 multiplies and accumulates two unsigned fractions. */ 571 a1+=r3.h*r2.h, a0=r3.l*r2.l (is) ; 572 /* both MACs perform signed integer multiplication */ 573 a1=r6.h*r7.h, a0+=r6.l*r7.l (w32) ; 574 /* both MACs multiply signed fractions, sign extended, and saturate 575 both Accumulators at bit 31 */ 576 r2.h=(a1=r7.l*r6.h), r2.l=(a0=r7.h*r6.h) ; /* simultaneous MAC0 577 and MAC1 execution, both are signed fractions, both products load 578 into the Accumulators,MAC1 into half-word registers. */ 579 r4.l=(a0=r1.l*r0.l), r4.h=(a1+=r1.h*r0.h) ; /* same as above, 580 but sum result into A1. ; MAC order is arbitrary. */ 581 r7.h=(a1+=r6.h*r5.l), r7.l=(a0=r6.h*r5.h) ; /* sum into A1, 582 subtract into A0 */ 583 r0.h=(a1=r7.h*r4.l) (m), r0.l=(a0+=r7.l*r4.l) ; /* MAC1 multiplies 584 a signed fraction by an unsigned fraction. MAC0 multiplies 585 two signed fractions. */ 586 r5.h=(a1=r3.h*r2.h) (m), r5.l=(a0+=r3.l*r2.l) (fu) ; /* MAC1 587 multiplies signed fraction by unsigned fraction. MAC0 multiplies 588 two unsigned fractions. */ 589 r0.h=(a1+=r3.h*r2.h), r0.l=(a0=r3.l*r2.l) (is) ; /* both MACs 590 perform signed integer multiplication. */ 591 r5.h=(a1=r2.h*r1.h), a0+=r2.l*r1.l ; /* both MACs multiply 592 signed fractions. MAC0 does not copy the accum result. */ 593 r3.h=(a1=r2.h*r1.h) (m), a0=r2.l*r1.l ; /* MAC1 multiplies 594 signed fraction by unsigned fraction and uses all 40 bits of A1. 595 MAC0 multiplies two signed fractions. */ 596 r3.h=a1, r3.l=(a0+=r0.l*r1.l) (s2rnd) ; /* MAC1 copies Accumulator 597 to register half. MAC0 multiplies signed fractions. Both 598 scale the result and round on the way to the destination register. 599 */ 600 r0.l=(a0+=r7.l*r6.l), r0.h=(a1+=r7.h*r6.h) (iss2) ; /* both 601 MACs process signed integer the way to the destination half-registers. 602 */ 603 r3=(a1=r6.h*r7.h), r2=(a0=r6.l*r7.l) ; /* simultaneous MAC0 and 604 MAC1 execution, both are signed fractions, both products load 605 into the Accumulators */ 606 r4=(a0=r6.l*r7.l), r5=(a1+=r6.h*r7.h) ; /* same as above, but 607 sum result into A1. MAC order is arbitrary. */ 608 r7=(a1+=r3.h*r5.h), r6=(a0-=r3.l*r5.l) ; /* sum into A1, subtract 609 into A0 */ 610 r1=(a1=r7.l*r4.l) (m), r0=(a0+=r7.h*r4.h) ; /* MAC1 multiplies 611 a signed fraction by an unsigned fraction. MAC0 multiplies two 612 signed fractions. */ 613 r5=(a1=r3.h*r7.h) (m), r4=(a0+=r3.l*r7.l) (fu) ; /* MAC1 multiplies 614 signed fraction by unsigned fraction. MAC0 multiplies two 615 unsigned fractions. */ 616 r1=(a1+=r3.h*r2.h), r0=(a0=r3.l*r2.l) (is) ; /* both MACs perform 617 signed integer multiplication */ 618 r5=(a1-=r6.h*r7.h), a0+=r6.l*r7.l ; /* both MACs multiply 619 signed fractions. MAC0 does not copy the accum result */ 620 r3=(a1=r6.h*r7.h) (m), a0-=r6.l*r7.l ; /* MAC1 multiplies 621 signed fraction by unsigned fraction and uses all 40 bits of A1. 622 MAC0 multiplies two signed fractions. */ 623 r3=a1, r2=(a0+=r0.l*r1.l) (s2rnd) ; /* MAC1 moves Accumulator 624 to register. MAC0 multiplies signed fractions. Both scale the 625 result and round on the way to the destination register. */ 626 r0=(a0+=r7.l*r6.l), r1=(a1+=r7.h*r6.h) (iss2) ; /* both MACs 627 process signed integer operands and scale the result on the way 628 to the destination registers. */ 629 630 r5 =-r3 (v) ; /* R5.H becomes the negative of R3.H and R5.L 631 becomes the negative of R3.L If r3 = 0x0004 7FFF the result is r5 632 = 0xFFFC 8001 */ 633 634 r3=pack(r4.l, r5.l) ; /* pack low / low half-words */ 635 r1=pack(r6.l, r4.h) ; /* pack low / high half-words */ 636 r0=pack(r2.h, r4.l) ; /* pack high / low half-words */ 637 r5=pack(r7.h, r2.h) ; /* pack high / high half-words */ 638 639 (r1,r0) = SEARCH R2 (LE) || R2=[P0++]; 640 /* search for the last minimum in all but the 641 last element of the array */ 642 (r1,r0) = SEARCH R2 (LE); 643 644 saa (r1:0, r3:2) || r0=[i0++] || r2=[i1++] ; 645 saa (r1:0, r3:2)(r) || r1=[i0++] || r3=[i1++] ; 646 mnop || r1 = [i0++] || r3 = [i1++] ; 647 r7.h=r7.l=sign(r2.h)*r3.h + sign(r2.l)*r3.l || i0+=m3 || r0=[i0] 648 ; 649 650 /* Add/subtract two vector values while incrementing an Ireg and 651 loading a data register. */ 652 R2 = R2 +|+ R4, R4 = R2 -|- R4 (ASR) || I0 += M0 (BREV) || R1 = [I0] ; 653 /* Multiply and accumulate to Accumulator while loading a data 654 register and storing a data register using an Ireg pointer. */ 655 A1=R2.L*R1.L, A0=R2.H*R1.H || R2.H=W[I2++] || [I3++]=R3 ; 656 /* Multiply and accumulate while loading two data registers. One 657 load uses an Ireg pointer. */ 658 A1+=R0.L*R2.H,A0+=R0.L*R2.L || R2.L=W[I2++] || R0=[I1--] ; 659 R3.H=(A1+=R0.L*R1.H), R3.L=(A0+=R0.L*R1.L) || R0=[P0++] || R1=[I0] ; 660 /* Pack two vector values while storing a data register using an 661 Ireg pointer and loading another data register. */ 662 R1=PACK(R1.H,R0.H) || [I0++]=R0 || R2.L=W[I2++] ; 663 664 /* Multiply-Accumulate to a Data register while incrementing an 665 Ireg. */ 666 r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 ; 667 /* which the assembler expands into: 668 r6=(a0+=r3.h*r2.h)(fu) || i2-=m0 || nop ; */ 669 670 /* Test for ensure (m) is not thown away. */ 671 r0.l=r3.l*r2.l, r0.h=r3.h*r2.l (m) ; 672 R2 = R7.L * R0.L, R3 = R7.L * R0.H (m); 673 R2 = (A0 = R7.L * R0.L), R3 = ( A1 = R7.L * R0.H) (m); 674 675 /* Both scalar instructions must share the same mode option. */ 676 R0.H = (A1 = R4.L * R3.L), A0 = R4.H * R3.L (T); 677 R0.H = (A1 = R4.L * R3.L) (M), A0 = R4.H * R3.L (T); 678 A0 = R4.H * R3.L, R0.H = (A1 = R4.L * R3.L) (T); 679 A0 = R4.H * R3.L, R0.H = (A1 = R4.L * R3.L) (T,M); 680 A1 += R7.H * R4.H, R0.L = (A0 = R7.L * R4.H) (T); 681