sdivi.cgs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # frv testcase for sdivi $GRi,$s12,$GRk
  2. # mach: all
  3. .include "testutils.inc"
  4. start
  5. .global sdivi
  6. sdivi:
  7. ; simple division 12 / 3
  8. set_gr_immed 12,gr1
  9. sdivi gr1,3,gr2
  10. test_gr_immed 4,gr2
  11. ; Random example
  12. set_gr_limmed 0xfedc,0xba98,gr1
  13. sdivi gr1,0x7ff,gr2
  14. test_gr_limmed 0xffff,0xdb93,gr2
  15. ; Random negative example
  16. set_gr_limmed 0xfedc,0xba98,gr1
  17. sdivi gr1,-2048,gr2
  18. test_gr_immed 0x2468,gr2
  19. ; Special case from the Arch Spec Vol 2
  20. or_spr_immed 0x20,isr ; turn on isr.edem
  21. set_gr_limmed 0x8000,0x0000,gr1
  22. sdivi gr1,-1,gr2
  23. test_gr_limmed 0x7fff,0xffff,gr2
  24. test_spr_bits 0x4,2,1,isr ; isr.aexc is set
  25. and_spr_immed -33,isr ; turn off isr.edem
  26. ; set up exception handler
  27. set_psr_et 1
  28. and_spr_immed -4081,tbr ; clear tbr.tt
  29. set_gr_spr tbr,gr17
  30. inc_gr_immed 0x170,gr17 ; address of exception handler
  31. set_bctrlr_0_0 gr17
  32. set_spr_immed 128,lcr
  33. set_gr_immed 0,gr15
  34. ; divide will cause overflow
  35. set_spr_addr ok1,lr
  36. set_gr_addr e1,gr17
  37. set_gr_limmed 0x8000,0x0000,gr1
  38. e1: sdivi gr1,-1,gr2
  39. test_gr_immed 1,gr15
  40. test_gr_limmed 0x8000,0x0000,gr2
  41. ; divide by zero
  42. set_spr_addr ok2,lr
  43. set_gr_addr e2,gr17
  44. e2: sdivi gr1,0,gr2 ; divide by zero
  45. test_gr_immed 2,gr15
  46. pass
  47. ok1: ; exception handler for overflow
  48. test_spr_bits 0x18,3,0x2,isr ; isr.dtt is set
  49. test_spr_gr epcr0,gr17 ; return address set
  50. test_spr_bits 0x0001,0,0x1,esr0 ; esr0 is valid
  51. test_spr_bits 0x003e,1,0x13,esr0 ; esr0.ec is set
  52. inc_gr_immed 1,gr15
  53. rett 0
  54. fail
  55. ok2: ; exception handler for divide by zero
  56. test_spr_bits 0x18,3,0x3,isr ; isr.dtt is set
  57. test_spr_gr epcr0,gr17 ; return address set
  58. test_spr_bits 0x0001,0,0x1,esr0 ; esr0 is valid
  59. test_spr_bits 0x003e,1,0x13,esr0 ; esr0.ec is set
  60. inc_gr_immed 1,gr15
  61. rett 0
  62. fail