c_brcc_kills_dhits.s 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //Original:/testcases/core/c_brcc_kills_dhits/c_brcc_kills_dhits.dsp
  2. // Spec Reference: brcc kills data cache hits
  3. # mach: bfin
  4. .include "testutils.inc"
  5. start
  6. imm32 r0, 0x00000000;
  7. imm32 r1, 0x00000001;
  8. imm32 r2, 0x00000002;
  9. imm32 r3, 0x00000003;
  10. imm32 r4, 0x00000004;
  11. imm32 r5, 0x00000005;
  12. imm32 r6, 0x00000006;
  13. imm32 r7, 0x00000007;
  14. imm32 p1, 0x00000011;
  15. imm32 p2, 0x00000012;
  16. .ifndef BFIN_HOST
  17. imm32 p3, 0x00000013;
  18. .endif
  19. imm32 p4, 0x00000014;
  20. loadsym P5, DATA0;
  21. loadsym I0, DATA1;
  22. begin:
  23. ASTAT = R0; // clear CC
  24. IF !CC JUMP LABEL1; // (bp);
  25. CC = R4 < R5; // CC FLAG killed
  26. R1 = 21;
  27. LABEL1:
  28. IF !CC JUMP LABEL2; // (bp);
  29. CC = ! CC;
  30. LABEL2:
  31. IF !CC JUMP LABEL3; // (bp);
  32. R2 = - R2; // ALU2op killed
  33. LABEL3:
  34. IF !CC JUMP LABEL4;
  35. R3 <<= 2; // LOGI2op killed
  36. LABEL4:
  37. IF !CC JUMP LABEL5;
  38. R0 = R1 + R2; // COMP3op killed
  39. LABEL5:
  40. IF !CC JUMP LABEL6;
  41. R4 += 3; // COMPI2opD killed
  42. LABEL6:
  43. IF !CC JUMP LABEL7; // (bp);
  44. R5 = 25; // LDIMMHALF killed
  45. LABEL7:
  46. IF !CC JUMP LABEL8;
  47. R6 = CC; // CC2REG killed
  48. LABEL8:
  49. IF !CC JUMP LABEL9;
  50. JUMP.S BAD1; // UJUMP killed
  51. LABEL9:
  52. IF !CC JUMP LABELCHK1;
  53. BAD1:
  54. R7 = [ P5 ]; // LDST killed
  55. LABELCHK1:
  56. CHECKREG r0, 0x00000000;
  57. CHECKREG r1, 0x00000001;
  58. CHECKREG r2, 0x00000002;
  59. CHECKREG r3, 0x00000003;
  60. CHECKREG r4, 0x00000004;
  61. CHECKREG r5, 0x00000005;
  62. CHECKREG r6, 0x00000006;
  63. CHECKREG r7, 0x00000007;
  64. LABEL10:
  65. IF !CC JUMP LABEL11;
  66. R1 = ( A1 += R4.L * R5.H ), A0 += R4.H * R5.L;
  67. // DSP32MAC killed
  68. LABEL11:
  69. IF !CC JUMP LABEL12;
  70. R2 = R2 +|+ R3; // DSP32ALU killed
  71. LABEL12:
  72. IF !CC JUMP LABEL13;
  73. R3 = LSHIFT R2 BY R3.L (V); // dsp32shift killed
  74. LABEL13:
  75. IF !CC JUMP LABEL14;
  76. R4.H = R1.L << 6; // DSP32SHIFTIMM killed
  77. LABEL14:
  78. IF !CC JUMP LABEL15;
  79. P2 = P1; // REGMV PREG-PREG killed
  80. LABEL15:
  81. IF !CC JUMP LABEL16;
  82. R5 = P1; // REGMV Pr-to-Dr killed
  83. LABEL16:
  84. IF !CC JUMP LABEL17;
  85. ASTAT = R2; // REGMV Dr-to-sys killed
  86. LABEL17:
  87. IF !CC JUMP LABEL18;
  88. R6 = ASTAT; // REGMV sys-to-Dr killed
  89. LABEL18:
  90. IF !CC JUMP LABEL19;
  91. [ I0 ] = R2; // DSPLDST store killed
  92. LABEL19:
  93. IF !CC JUMP end;
  94. R7 = [ I0 ]; // DSPLDST load killed
  95. end:
  96. CHECKREG r0, 0x00000000;
  97. CHECKREG r1, 0x00000001;
  98. CHECKREG r2, 0x00000002;
  99. CHECKREG r3, 0x00000003;
  100. CHECKREG r4, 0x00000004;
  101. CHECKREG r5, 0x00000005;
  102. CHECKREG r6, 0x00000006;
  103. CHECKREG r7, 0x00000007;
  104. pass
  105. .data
  106. DATA0:
  107. .dd 0x000a0000
  108. .dd 0x000b0001
  109. .dd 0x000c0002
  110. .dd 0x000d0003
  111. .dd 0x000e0004
  112. DATA1:
  113. .dd 0x00f00100
  114. .dd 0x00e00101
  115. .dd 0x00d00102
  116. .dd 0x00c00103