home *** CD-ROM | disk | FTP | other *** search
-
- public _bcmp ; compare two blocks of memory
-
- ; BCMP(src, dst, len)
-
- _bcmp: move.l 4(sp),A0
- move.l 8(sp),A1
- move.l 12(sp),D0
- beq .bcsucc
- cmp.w D0,D0 ; set Z bit.
- bra .bc2
- .bc1 cmpm.b (A0)+,(A1)+
- .bc2 dbne D0,.bc1
- bne .bcfail
- sub.l #$10000,D0
- bcc .bc1
- .bcsucc moveq.l #1,D0
- rts
- .bcfail moveq.l #0,D0
- rts
-
-
- ; OLD BCMP HAD BUGS ... alignment problems.
- ;
-
- ; move.w D0,D1 ;longword align address
- ; neg.w D1
- ; and.w #3,D1
- ; cmp.w D0,D0 ;force Z bit
- ; bra .bc2
- ;.bc1 cmpm.b (A0)+,(A1)+
- ;.bc2 dbne D1,.bc1
- ; bne .bcfail
- ; move.l D0,D1
- ; lsr.l #2,D1 ;# of longwords to compare
- ; cmp.w D0,D0 ;force Z bit
- ; bra .bc11
- ;.bc10 cmpm.l (A0)+,(A1)+
- ;.bc11 dbne D1,.bc10
- ; bne .bcfail
- ; sub.l #$10000,D0
- ; bcc .bc10
- ; and.w #3,D0 ;remaining bytes to compare
- ; cmp.w D0,D0 ;force Z bit
- ; bra .bc21
- ;.bc20 cmpm.b (A0)+,(A1)+
- ;.bc21 dbne D0,.bc20
- ; bne .bcfail
- ; moveq.l #1,D0 ;success!
- ; rts
- ;.bcfail moveq.l #0,D0 ;failure!
- ; rts
-
-