mcpxrs.cgs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # frv testcase for mcpxrs $GRi,$GRj,$ACCk
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global mcpxrs
  6. mcpxrs:
  7. ; Positive operands
  8. set_fr_iimmed 2,4,fr7 ; multiply small numbers
  9. set_fr_iimmed 3,5,fr8
  10. mcpxrs fr7,fr8,acc0
  11. test_accg_immed 0xff,accg0
  12. test_acc_immed -14,acc0
  13. set_fr_iimmed 3,1,fr7 ; multiply by 0
  14. set_fr_iimmed 2,0,fr8
  15. mcpxrs fr7,fr8,acc0
  16. test_accg_immed 0,accg0
  17. test_acc_immed 6,acc0
  18. set_fr_iimmed 2,1,fr7 ; multiply by 1
  19. set_fr_iimmed 1,1,fr8
  20. mcpxrs fr7,fr8,acc0
  21. test_accg_immed 0,accg0
  22. test_acc_immed 1,acc0
  23. set_fr_iimmed 0x3fff,2,fr7 ; 15 bit result
  24. set_fr_iimmed 2,0x0007,fr8
  25. mcpxrs fr7,fr8,acc0
  26. test_accg_immed 0,accg0
  27. test_acc_limmed 0,0x7ff0,acc0
  28. set_fr_iimmed 0x4000,2,fr7 ; 16 bit result
  29. set_fr_iimmed 2,0x2000,fr8
  30. mcpxrs fr7,fr8,acc0
  31. test_accg_immed 0,accg0
  32. test_acc_limmed 0x0000,0x4000,acc0
  33. set_fr_iimmed 0x7fff,0x0000,fr7 ; max positive result
  34. set_fr_iimmed 0x7fff,0x7fff,fr8
  35. mcpxrs fr7,fr8,acc0
  36. test_accg_immed 0,accg0
  37. test_acc_limmed 0x3fff,0x0001,acc0
  38. ; Mixed operands
  39. set_fr_iimmed 2,0xfffd,fr7 ; multiply small numbers
  40. set_fr_iimmed 0xfffd,1,fr8
  41. mcpxrs fr7,fr8,acc0
  42. test_accg_immed 0xff,accg0
  43. test_acc_immed -3,acc0
  44. set_fr_iimmed 0xfffe,2,fr7 ; multiply by 1
  45. set_fr_iimmed 1,0xfffe,fr8
  46. mcpxrs fr7,fr8,acc0
  47. test_accg_immed 0,accg0
  48. test_acc_immed 2,acc0
  49. set_fr_iimmed 0xfffe,0,fr7 ; multiply by 0
  50. set_fr_iimmed 1,0xfffe,fr8
  51. mcpxrs fr7,fr8,acc0
  52. test_accg_immed 0xff,accg0
  53. test_acc_immed -2,acc0
  54. set_fr_iimmed 0x2001,0xfffe,fr7 ; 15 bit result
  55. set_fr_iimmed 0xfffe,0xfff9,fr8
  56. mcpxrs fr7,fr8,acc0
  57. test_accg_immed 0xff,accg0
  58. test_acc_limmed 0xffff,0xbff0,acc0
  59. set_fr_iimmed 0x4000,0xfffe,fr7 ; 16 bit result
  60. set_fr_iimmed 0xfffe,0x0003,fr8
  61. mcpxrs fr7,fr8,acc0
  62. test_accg_immed 0xff,accg0
  63. test_acc_limmed 0xffff,0x8006,acc0
  64. set_fr_iimmed 0x7fff,0x8000,fr7 ; max negative result
  65. set_fr_iimmed 0x8000,0x8000,fr8
  66. mcpxrs fr7,fr8,acc0
  67. test_accg_immed 0xff,accg0
  68. test_acc_limmed 0x8000,0x8000,acc0
  69. set_fr_iimmed 0x8000,0x7fff,fr7 ; max positive result
  70. set_fr_iimmed 0x8000,0x8000,fr8
  71. mcpxrs fr7,fr8,acc0
  72. test_accg_immed 0,accg0
  73. test_acc_limmed 0x7fff,0x8000,acc0
  74. ; Negative operands
  75. set_fr_iimmed 0xfffe,0xfffc,fr7 ; multiply small numbers
  76. set_fr_iimmed 0xfffd,0xfffb,fr8
  77. mcpxrs fr7,fr8,acc0
  78. test_accg_immed 0xff,accg0
  79. test_acc_immed -14,acc0
  80. set_fr_iimmed 0xffff,0xffff,fr7 ; multiply by -1
  81. set_fr_iimmed 0xfffe,0xffff,fr8
  82. mcpxrs fr7,fr8,acc0
  83. test_accg_immed 0,accg0
  84. test_acc_immed 1,acc0
  85. set_fr_iimmed 0x7fff,0x0000,fr7 ; almost max positive result
  86. set_fr_iimmed 0x7fff,0x8001,fr8
  87. mcpxrs fr7,fr8,acc0
  88. test_accg_immed 0,accg0
  89. test_acc_immed 0x3fff0001,acc0
  90. set_fr_iimmed 0x8000,0x0000,fr7 ; max positive result
  91. set_fr_iimmed 0x8000,0x8000,fr8
  92. mcpxrs fr7,fr8,acc0
  93. test_accg_immed 0,accg0
  94. test_acc_immed 0x40000000,acc0
  95. pass