t-sub2w.s 983 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # mach: all
  2. # output:
  3. # sim: --environment operating
  4. .include "t-macros.i"
  5. start
  6. ;; The d10v implements negated addition for subtraction
  7. .macro check_sub2w s x y r c v
  8. ;; clear carry
  9. ldi r6,#0x8004
  10. mvtc r6,cr0
  11. ;; load opnds
  12. ld2w r6, @(1f,r0)
  13. ld2w r8, @(2f,r0)
  14. .data
  15. 1: .long \x
  16. 2: .long \y
  17. .text
  18. ;; subtract
  19. SUB2W r6, r8
  20. ;; verify result
  21. ld2w r10, @(1f,r0)
  22. .data
  23. 1: .long \r
  24. .text
  25. cmpeq r6, r10
  26. brf0f 2f
  27. cmpeq r7, r11
  28. brf0t 3f
  29. 2: ldi r4, 1
  30. ldi r0, \s
  31. trap 15
  32. 3:
  33. ;; verify carry
  34. mvfc r6, cr0
  35. and3 r6, r6, #1
  36. cmpeqi r6, #\c
  37. brf0t 1f
  38. ldi r4, 1
  39. ldi r0, \s
  40. trap 15
  41. 1:
  42. .endm
  43. check_sub2w 1 0x00000000 0x00000000 0x00000000 1 0
  44. check_sub2w 2 0x00000000 0x00000001 0xffffffff 0 0
  45. check_sub2w 3 0x00000001 0x00000000 0x00000001 1 0
  46. check_sub2w 3 0x00000001 0x00000001 0x00000000 1 0
  47. check_sub2w 5 0x00000000 0x80000000 0x80000000 0 1
  48. check_sub2w 6 0x80000000 0x00000001 0x7fffffff 1 1
  49. check_sub2w 7 0x7fffffff 0x7fffffff 0x00000000 1 0
  50. exit0