splice1 macro ; data1,data2,mask,temp1,temp2 move.l \1,\5 ; 2(2:0) (1:1) AABBCCDD move.l \2,\4 ; 2(2:0) (1:1) EEFFGGHH and.l \3,\2 ; 2(2:0) (1:1) ..FF..HH eor.l \2,\4 ; 2(2:0) (1:1) EE..GG.. lsr.l #\0,\4 ; 4(4:0) (1:2) ..EE..GG eor.l \4,\1 ; 2(2:0) (1:1) AABBCCDD^..EE..GG and.l \3,\5 ; 2(2:0) (1:1) ..BB..DD eor.l \5,\1 ; 2(2:0) (1:1) AAEECCGG (AABBCCDD^..EE..GG^..BB..DD) lsl.l #\0,\5 ; 4(4:0) (1:2) BB..DD.. add.l \5,\2 ; 2(2:0) (1:1) BBFFDDHH endm ; 10 ops / 20 bytes / 68030=24(24:0) / 68040=(10:12) splice2 macro ; data1,data2,mask,temp ror.l #\0,\2 ; 6(4:0) (1:3) AABBCCDD HHEEFFGG move.l \2,\4 ; 2(2:0) (1:1) HHEEFFGG eor.l \1,\4 ; 2(2:0) (1:1) HHEEFFGG^AABBCCDD and.l \3,\4 ; 2(2:0) (1:1) ..EE..GG^..BB..DD eor.l \4,\1 ; 2(2:0) (1:1) AAEECCGG (AABBCCDD^..EE..GG^..BB..DD) eor.l \4,\2 ; 2(2:0) (1:1) HHBBFFDD (HHEEFFGG^..EE..GG^..BB..DD) rol.l #\0,\2 ; 6(4:0) (1:3) BBFFDDHH endm ; 7 ops / 14 bytes / 68030=22(18:0) / 68040=(7:11) splice3 macro ; data1,data2,mask,temp move.l \2,\4 ; 2(2:0) (1:1) EEFFGGHH lsr.l #\0,\4 ; 4(4:0) (1:2) ..EEFFGG eor.l \1,\4 ; 2(2:0) (1:1) ..EEFFGG^AABBCCDD and.l \3,\4 ; 2(2:0) (1:1) ..EE..GG^..BB..DD eor.l \4,\1 ; 2(2:0) (1:1) AAEECCGG (AABBCCDD^..EE..GG^..BB..DD) lsl.l #\0,\4 ; 4(4:0) (1:2) EE..GG..^BB..DD.. eor.l \4,\2 ; 2(2:0) (1:1) BBFFDDHH (EEFFGGHH^EE..GG..^BB..DD..) endm ; 7 ops / 14 bytes / 68030=18(18:0) / 68040=(7:9) splice macro ; data1,data2,mask,temp1[,temp2] splice3.\0 \1,\2,\3,\4 endm *-------------------------------------------------------* * Byte-per-pixel -> bitplane transform macro * *-------------------------------------------------------* * Converts 16 pixels per instance * *-------------------------------------------------------* chars2planes macro *-------------------------------------------------------* movem.l \1,d1-d4 *-------------------------------------------------------* move.l #$00FF00FF,d0 ; 4 splice.8 d1,d3,d0,d7 ; 18 splice.8 d2,d4,d0,d7 ; 18 *-------------------------------------------------------* move.l #$0F0F0F0F,d0 ; 4 splice.4 d1,d2,d0,d7 ; 18 splice.4 d3,d4,d0,d7 ; 18 *-------------------------------------------------------* swap d2 ; 4(4:0) swap d4 ; 4(4:0) eor.w d1,d2 ; 2(2:0) eor.w d3,d4 ; 2(2:0) eor.w d2,d1 ; 2(2:0) eor.w d4,d3 ; 2(2:0) eor.w d1,d2 ; 2(2:0) eor.w d3,d4 ; 2(2:0) swap d2 ; 4(4:0) swap d4 ; 4(4:0) *-------------------------------------------------------* move.l #$33333333,d0 ; 4 splice.2 d1,d2,d0,d7 ; 18 splice.2 d3,d4,d0,d7 ; 18 *-------------------------------------------------------* move.l #$55555555,d0 ; 4 splice.1 d1,d3,d0,d7 ; 18 splice.1 d2,d4,d0,d7 ; 18 *-------------------------------------------------------* ifeq '\0'-'w' *-------------------------------------------------------* * 16-bit destination * *-------------------------------------------------------* move.w d4,\2 swap d4 ; 4(4:0) move.w d2,\2 swap d2 ; 4(4:0) move.w d3,\2 swap d3 ; 4(4:0) move.w d1,\2 swap d1 ; 4(4:0) move.w d4,\2 move.w d2,\2 move.w d3,\2 move.w d1,\2 *-------------------------------------------------------* elseif *-------------------------------------------------------* * 32-bit destination * *-------------------------------------------------------* swap d4 ; 4(4:0) eor.w d2,d4 ; 2(2:0) eor.w d4,d2 ; 2(2:0) eor.w d2,d4 ; 2(2:0) move.l d4,\2 swap d3 ; 4(4:0) eor.w d1,d3 ; 2(2:0) eor.w d3,d1 ; 2(2:0) eor.w d1,d3 ; 2(2:0) move.l d3,\2 swap d2 ; 4(4:0) move.l d2,\2 swap d1 ; 4(4:0) move.l d1,\2 *-------------------------------------------------------* endc *-------------------------------------------------------* endm *-------------------------------------------------------* *-------------------------------------------------------* * Byte-per-pixel -> bitplane transform macro * *-------------------------------------------------------* * Converts 16 pixels per instance * *-------------------------------------------------------* chars2planesr macro *-------------------------------------------------------* move.l #$00FF00FF,d0 ; 4 splice.8 d1,d3,d0,d7 ; 18 splice.8 d2,d4,d0,d7 ; 18 *-------------------------------------------------------* move.l #$0F0F0F0F,d0 ; 4 splice.4 d1,d2,d0,d7 ; 18 splice.4 d3,d4,d0,d7 ; 18 *-------------------------------------------------------* swap d2 ; 4(4:0) swap d4 ; 4(4:0) eor.w d1,d2 ; 2(2:0) eor.w d3,d4 ; 2(2:0) eor.w d2,d1 ; 2(2:0) eor.w d4,d3 ; 2(2:0) eor.w d1,d2 ; 2(2:0) eor.w d3,d4 ; 2(2:0) swap d2 ; 4(4:0) swap d4 ; 4(4:0) *-------------------------------------------------------* move.l #$33333333,d0 ; 4 splice.2 d1,d2,d0,d7 ; 18 splice.2 d3,d4,d0,d7 ; 18 *-------------------------------------------------------* move.l #$55555555,d0 ; 4 splice.1 d1,d3,d0,d7 ; 18 splice.1 d2,d4,d0,d7 ; 18 *-------------------------------------------------------* endm *-------------------------------------------------------*