| 1 | # Assemble with gas |
| 2 | # --register-prefix-optional --bitwise-or |
| 3 | |
| 4 | .macro ldarg arg, stacksz, reg |
| 5 | move.l (4 + \arg * 4 + \stacksz)(%sp), \reg |
| 6 | .endm |
| 7 | |
| 8 | # write with instructions that have bit0 clear |
| 9 | .global write_rreg_i0 /* u8 val */ |
| 10 | write_rreg_i0: |
| 11 | ldarg 0, 0, d0 |
| 12 | movea.l #0xa130f1, a0 |
| 13 | move.b d0, d0 |
| 14 | move.b d0, d0 |
| 15 | move.b d0, (a0) |
| 16 | move.b d0, d0 |
| 17 | move.b d0, d0 |
| 18 | move.b d0, d0 |
| 19 | move.b d0, d0 |
| 20 | rts |
| 21 | |
| 22 | |
| 23 | .global write_rreg_i1 /* u8 val */ |
| 24 | write_rreg_i1: |
| 25 | ldarg 0, 0, d1 |
| 26 | movea.l #0xa130f1, a0 |
| 27 | move.b d1, d1 |
| 28 | move.b d1, d1 |
| 29 | move.b d1, (a0) |
| 30 | move.b d1, d1 |
| 31 | move.b d1, d1 |
| 32 | move.b d1, d1 |
| 33 | move.b d1, d1 |
| 34 | rts |
| 35 | |
| 36 | |
| 37 | .global fillpx16 /* u8 *d, unsigned int blocks, u8 val */ |
| 38 | fillpx16: |
| 39 | ldarg 0, 0, a0 |
| 40 | ldarg 2, 0, d0 |
| 41 | move.b d0, d1 |
| 42 | lsl.w #8, d1 |
| 43 | or.w d1, d0 |
| 44 | move.w d0, d1 |
| 45 | swap d0 |
| 46 | move.w d1, d0 |
| 47 | ldarg 1, 0, d1 |
| 48 | subq.l #1, d1 |
| 49 | movem.l d2, -(sp) |
| 50 | move.l #32, d2 |
| 51 | 0: |
| 52 | movep.l d0, 0(a0) |
| 53 | movep.l d0, 8(a0) |
| 54 | movep.l d0, 16(a0) |
| 55 | movep.l d0, 24(a0) |
| 56 | add.l d2, a0 |
| 57 | dbra d1, 0b |
| 58 | |
| 59 | movem.l (sp)+, d2 |
| 60 | rts |
| 61 | |
| 62 | |
| 63 | .global checkpx4 /* u8 *d, unsigned int blocks, u8 val */ |
| 64 | checkpx4: |
| 65 | ldarg 0, 0, a0 |
| 66 | ldarg 2, 0, d0 |
| 67 | move.b d0, d1 |
| 68 | lsl.w #8, d1 |
| 69 | or.w d1, d0 |
| 70 | move.w d0, d1 |
| 71 | swap d0 |
| 72 | move.w d1, d0 |
| 73 | ldarg 1, 0, d1 |
| 74 | subq.l #1, d1 |
| 75 | movem.l d2-d4, -(sp) |
| 76 | move.w d1, d3 |
| 77 | move.w d1, d4 |
| 78 | swap d3 |
| 79 | 0: |
| 80 | move.w d4, d1 |
| 81 | 1: |
| 82 | movep.l 0(a0), d2 |
| 83 | addq.l #8, a0 |
| 84 | cmp.l d0, d2 |
| 85 | dbne d1, 1b |
| 86 | dbne d3, 0b |
| 87 | |
| 88 | movem.l (sp)+, d2-d4 |
| 89 | move.l d1, d0 |
| 90 | cmp.w #-1, d1 |
| 91 | beq 0f |
| 92 | moveq.l #0, d0 |
| 93 | 0: |
| 94 | rts |
| 95 | |
| 96 | |
| 97 | # vim:filetype=asmM68k:ts=4:sw=4:expandtab |