vecadd.s 882 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # mach: bfin
  2. .include "testutils.inc"
  3. start
  4. // create two short vectors v_a, v_b
  5. // where each element of v_a is the index
  6. // where each element of v_b is 128-index
  7. R2 = 0;
  8. loadsym P0, v_a;
  9. loadsym P1, v_b;
  10. P2 = 0;
  11. R3 = 128 (X);
  12. R0 = 0;
  13. R1 = 128 (X);
  14. L$1:
  15. W [ P0 ++ ] = R0;
  16. W [ P1 ++ ] = R1;
  17. R0 += 1;
  18. R1 += -1;
  19. CC = R0 < R3;
  20. IF CC JUMP L$1 (BP);
  21. loadsym P0, v_a;
  22. loadsym P1, v_b;
  23. CALL vecadd;
  24. loadsym P0, v_c;
  25. R2 = 0;
  26. R3 = 128 (X);
  27. L$3:
  28. R0 = W [ P0 ++ ] (X);
  29. DBGA ( R0.L , 128 );
  30. R2 += 1;
  31. CC = R2 < R3;
  32. IF CC JUMP L$3;
  33. _DBG R6;
  34. pass
  35. vecadd:
  36. loadsym I0, v_a;
  37. loadsym I1, v_b;
  38. loadsym I2, v_c;
  39. P5 = 128 (X);
  40. LSETUP ( L$2 , L$2end ) LC0 = P5 >> 1;
  41. R0 = [ I0 ++ ];
  42. R1 = [ I1 ++ ];
  43. L$2:
  44. R2 = R0 +|+ R1 || R0 = [ I0 ++ ] || R1 = [ I1 ++ ];
  45. L$2end:
  46. [ I2 ++ ] = R2;
  47. RTS;
  48. .data
  49. v_a:
  50. .space (512);
  51. v_b:
  52. .space (512);
  53. v_c:
  54. .space (512);