dsp_a7.s 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /* ALU test program.
  2. * Test instructions
  3. * r7 = +/- (r0,r1);
  4. * r7 = -/+ (r0,r1);
  5. * r7 = -/- (r0,r1);
  6. */
  7. # mach: bfin
  8. .include "testutils.inc"
  9. start
  10. // test subtraction
  11. R0.L = 0x000f;
  12. R0.H = 0x0010;
  13. R1.L = 0x000f;
  14. R1.H = 0x0010;
  15. R7 = 0;
  16. ASTAT = R7;
  17. R7 = R0 +|- R1;
  18. DBGA ( R7.L , 0x0000 );
  19. DBGA ( R7.H , 0x0020 );
  20. CC = AZ; R7 = CC; DBGA ( R7.L , 0x1 );
  21. CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
  22. CC = V; R7 = CC; DBGA ( R7.L , 0x0 );
  23. CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 );
  24. // test overflow negative on subtraction
  25. R0.L = 0x8000;
  26. R0.H = 0x0010;
  27. R1.L = 0x0001;
  28. R1.H = 0x0010;
  29. R7 = 0;
  30. ASTAT = R7;
  31. R7 = R0 +|- R1;
  32. DBGA ( R7.L , 0x7fff );
  33. DBGA ( R7.H , 0x0020 );
  34. CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
  35. CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
  36. CC = V; R7 = CC; DBGA ( R7.L , 0x1 );
  37. CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 );
  38. // test saturate negative on subtraction +/-
  39. R0.L = 0x8000;
  40. R0.H = 0x0010;
  41. R1.L = 0x0001;
  42. R1.H = 0x0010;
  43. R7 = 0;
  44. ASTAT = R7;
  45. R7 = R0 +|- R1 (S);
  46. DBGA ( R7.L , 0x8000 );
  47. DBGA ( R7.H , 0x0020 );
  48. CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
  49. CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
  50. CC = V; R7 = CC; DBGA ( R7.L , 0x1 );
  51. CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 );
  52. // test saturate negative on subtraction -/+
  53. R0.L = 0x8000;
  54. R0.H = 0x8000;
  55. R1.L = 0x0001;
  56. R1.H = 0x0001;
  57. R7 = 0;
  58. ASTAT = R7;
  59. R7 = R0 -|+ R1 (S);
  60. DBGA ( R7.L , 0x8001 );
  61. DBGA ( R7.H , 0x8000 );
  62. CC = AZ; R5 = CC; DBGA ( R5.L , 0x0 );
  63. CC = AN; R5 = CC; DBGA ( R5.L , 0x1 );
  64. CC = V; R5 = CC; DBGA ( R5.L , 0x1 );
  65. CC = AC0; R5 = CC; DBGA ( R5.L , 0x0 );
  66. // test saturate negative on subtraction -/-
  67. R0.L = 0x8000;
  68. R0.H = 0x8000;
  69. R1.L = 0x0001;
  70. R1.H = 0x0001;
  71. R7 = 0;
  72. ASTAT = R7;
  73. R7 = R0 -|- R1 (S);
  74. DBGA ( R7.L , 0x8000 );
  75. DBGA ( R7.H , 0x8000 );
  76. CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
  77. CC = AN; R7 = CC; DBGA ( R7.L , 0x1 );
  78. CC = V; R7 = CC; DBGA ( R7.L , 0x1 );
  79. CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 );
  80. // test saturate positive on subtraction -/+
  81. R0.L = 0x7fff;
  82. R0.H = 0x7fff;
  83. R1.L = 0xffff;
  84. R1.H = 0xffff;
  85. R7 = 0;
  86. ASTAT = R7;
  87. R7 = R0 -|+ R1 (S);
  88. DBGA ( R7.L , 0x7ffe );
  89. DBGA ( R7.H , 0x7fff );
  90. CC = AZ; R7 = CC; DBGA ( R7.L , 0x0 );
  91. CC = AN; R7 = CC; DBGA ( R7.L , 0x0 );
  92. CC = V; R7 = CC; DBGA ( R7.L , 0x1 );
  93. CC = AC0; R7 = CC; DBGA ( R7.L , 0x1 );
  94. pass