.file "duff-3.c" .text .align 2 .globl duffcpy .type duffcpy, @function duffcpy: link.w %a6,#0 move.l %d2,-(%sp) move.l 8(%a6),%a1 move.l 12(%a6),%a0 move.l 16(%a6),%d0 move.l %d0,%d1 addq.l #7,%d1 lsr.l #3,%d1 moveq.l #7,%d2 and.l %d2,%d0 cmp.l %d0,%d2 jbcs .L1 .set .LI15,.+2 move.w .L15-.LI15.b(%pc,%d0.l*2),%d0 jmp %pc@(2,%d0:w) .align 2 .L15: .word .L4-.L15 .word .L13-.L15 .word .L12-.L15 .word .L11-.L15 .word .L10-.L15 .word .L9-.L15 .word .L8-.L15 .word .L7-.L15 .align 2 .L4: move.b (%a0)+,(%a1)+ .L7: move.b (%a0)+,(%a1)+ .L8: move.b (%a0)+,(%a1)+ .L9: move.b (%a0)+,(%a1)+ .L10: move.b (%a0)+,(%a1)+ .L11: move.b (%a0)+,(%a1)+ .L12: move.b (%a0)+,(%a1)+ .L13: move.b (%a0)+,(%a1)+ subq.l #1,%d1 jbne .L4 .L1: move.l (%sp)+,%d2 unlk %a6 rts .size duffcpy, .-duffcpy .globl testpat .section .rodata .type testpat, @object .size testpat, 46 testpat: .string "The quick brown fox jumped over the lazy dog." .text .align 2 .globl main .type main, @function main: link.w %a6,#-64 move.l %a2,-(%sp) pea 46.w pea testpat lea (-64,%a6),%a2 move.l %a2,-(%sp) jbsr duffcpy pea 46.w pea testpat move.l %a2,-(%sp) jbsr memcmp lea (24,%sp),%sp tst.l %d0 jbeq .L18 jbsr abort .align 2 .L18: clr.l -(%sp) jbsr exit nop .size main, .-main .ident "GCC: (GNU) 3.3.2"