cms.s 444 B

1234567891011121314151617181920212223242526
  1. .define .cms
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! d0 contains set size
  8. ! on exit d0 is zero for equal, non-zero for not equal
  9. .cms:
  10. move.l (sp)+, d2 ! return address
  11. move.l sp, a0 ! address of top block
  12. lea 0(sp, d0.l), a1 ! address of lower block
  13. move.l d0, d1
  14. asr.l #2, d0
  15. 1:
  16. cmp.l (a0)+, (a1)+
  17. bne 2f
  18. sub.l #1, d0
  19. bne 1b
  20. 2:
  21. asl.l #1, d1
  22. add.l d1, sp ! two blocks popped
  23. move.l d2, -(sp)
  24. rts
  25. .align 2