;***************************************************************************** ;* ;* This program is free software ; you can redistribute it and/or modify ;* it under the terms of the GNU General Public License as published by ;* the Free Software Foundation; either version 2 of the License, or ;* (at your option) any later version. ;* ;* This program is distributed in the hope that it will be useful, ;* but WITHOUT ANY WARRANTY; without even the implied warranty of ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;* GNU General Public License for more details. ;* ;* You should have received a copy of the GNU General Public License ;* along with this program; if not, write to the Free Software ;* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ;* ;* $Id: mcomp_arm.asm 327 2005-11-04 07:09:17Z picard $ ;* ;* The Core Pocket Media Player ;* Copyright (c) 2004-2005 Gabor Kovacs ;* ;***************************************************************************** ;R0 src ;R1 dst ;R2 srcpitch ;R3 dstpitch AREA |.text|, CODE macro PreLoad $ARM5,$Pos if $ARM5>0 if $Pos >= 0 if $Pos > 0 pld [r0,r2,lsl #1] add r0,r0,#8 pld [r0,r2,lsl #1] sub r0,r0,#8 else pld [r0,r2,lsl #1] add r0,r0,#4 pld [r0,r2,lsl #1] sub r0,r0,#4 endif else pld [r0,r2,lsl #1] add r0,r0,#7 pld [r0,r2,lsl #1] sub r0,r0,#7 endif endif mend macro PreLoad2Init $ARM5,$Pos if $ARM5>0 if $Pos >= 0 if $Pos > 0 add r10,r2,r2 add r10,r10,#8 else add r10,r2,r2 add r10,r10,#4 endif else add r10,r2,r2 add r10,r10,#7 endif endif mend macro PreLoad2 $ARM5,$Pos if $ARM5>0 pld [r0,r2,lsl #1] pld [r0,r10] endif mend macro CopyBuild $Name,$Sub,$Round,$Add,$Fast,$ARM5 align 16 export $Name $Name proc if $ARM5>0 add ip,r2,#7 pld [r0,r2] pld [r0,#7] endif stmdb sp!, {r4 - r11, lr} if $ARM5>0 pld [r0,ip] pld [r0] endif if $Fast>0 movs r4,r0,lsl #30 beq $Name.L00 cmps r4,#0x80000000 beq $Name.L10 bhi $Name.L11 $Name.L01 bic r0,r0,#3 $Sub $Name.8,8,$Round,$Add,$ARM5 $Name.L10 bic r0,r0,#3 $Sub $Name.16,16,$Round,$Add,$ARM5 $Name.L11 bic r0,r0,#3 $Sub $Name.24,24,$Round,$Add,$ARM5 $Name.L00 $Sub $Name.0,0,$Round,$Add,$ARM5 else $Sub $Name.s,-1,$Round,$Add,$ARM5 endif endp mend ;------------------------------------------ ;COPYBLOCK ;------------------------------------------ macro CopyBlockRow $Pos if $Pos > 0 ldr r5,[r0,#8] ldr r6,[r0,#4] ldr r4,[r0],r2 mov r5,r5,lsl #32-$Pos orr r5,r5,r6,lsr #$Pos mov r4,r4,lsr #$Pos orr r4,r4,r6,lsl #32-$Pos else ldr r5,[r0,#4] ldr r4,[r0],r2 endif str r5,[r1,#4] str r4,[r1],r3 mend macro CopyBlock $Id, $Pos, $Round, $Add, $ARM5 PreLoad2Init $ARM5,$Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos PreLoad2 $ARM5,$Pos CopyBlockRow $Pos ldmia sp!, {r4 - r11, pc} mend ;------------------------------------------ ;COPYBLOCKM ;------------------------------------------ macro CopyBlockMRow $Pos if $Pos > 0 ldr r14,[r0,#16] ldr r6,[r0,#12] ldr r12,[r0,#8] mov r14,r14,lsl #32-$Pos orr r14,r14,r6,lsr #$Pos mov r12,r12,lsr #$Pos orr r12,r12,r6,lsl #32-$Pos ldr r5,[r0,#8] ldr r6,[r0,#4] ldr r4,[r0],r2 mov r5,r5,lsl #32-$Pos orr r5,r5,r6,lsr #$Pos mov r4,r4,lsr #$Pos orr r4,r4,r6,lsl #32-$Pos else ldr r5,[r0,#4] ldr r12,[r0,#8] ldr r14,[r0,#12] ldr r4,[r0],r2 endif str r5,[r1,#4] str r12,[r1,#8] str r14,[r1,#12] str r4,[r1],r3 mend macro CopyBlockM $Id, $Pos, $Round, $Add, $ARM5 PreLoad2Init $ARM5,$Pos mov r11,#16 $Id.Loop PreLoad2 $ARM5,$Pos CopyBlockMRow $Pos subs r11,r11,#1 bne $Id.Loop ldmia sp!, {r4 - r11, pc} mend ;------------------------------------------ ;COPYBLOCK16x16: no aligment!, only used in Copy() ;------------------------------------------ macro CopyBlock16x16Row ldr r7,[r0,#12] ldr r6,[r0,#8] ldr r5,[r0,#4] ldr r4,[r0],r2 str r7,[r1,#12] str r6,[r1,#8] str r5,[r1,#4] str r4,[r1],r3 mend macro CopyBlock16x16 $Id, $Pos, $Round, $Add, $ARM5 mov r11,#15 $Id.Loop pld [r0,r2,lsl #1] CopyBlock16x16Row subs r11,r11,#1 bne $Id.Loop ;unroll last (no preload needed) CopyBlock16x16Row ldmia sp!, {r4 - r11, pc} mend ;------------------------------------------ ;COPYBLOCK8x8: no aligment!, only used in Copy() ;------------------------------------------ macro CopyBlock8x8 $Id, $Pos, $Round, $Add, $ARM5 mov r11,#3 $Id.Loop pld [r0,r2,lsl #1] ldr r7,[r0,#4] ldr r6,[r0],r2 pld [r0,r2,lsl #1] ldr r5,[r0,#4] ldr r4,[r0],r2 str r7,[r1,#4] str r6,[r1],r3 str r5,[r1,#4] str r4,[r1],r3 subs r11,r11,#1 bne $Id.Loop ;unroll last (no preload needed) ldr r7,[r0,#4] ldr r6,[r0],r2 ldr r5,[r0,#4] ldr r4,[r0],r2 str r7,[r1,#4] str r6,[r1],r3 str r5,[r1,#4] str r4,[r1],r3 ldmia sp!, {r4 - r11, pc} mend ;------------------------------------------ ;ADDBLOCK ;------------------------------------------ macro AddBlockRow $Pos if $Pos < 0 ldrb r4,[r0] ldrb r6,[r0,#1] ldrb r5,[r0,#4] ldrb r7,[r0,#5] orr r4,r4,r6,lsl #8 ldrb r6,[r0,#2] orr r5,r5,r7,lsl #8 ldrb r7,[r0,#6] orr r4,r4,r6,lsl #16 ldrb r6,[r0,#3] orr r5,r5,r7,lsl #16 ldrb r7,[r0,#7] orr r4,r4,r6,lsl #24 add r0,r0,r2 orr r5,r5,r7,lsl #24 else if $Pos > 0 ldr r5,[r0,#8] ldr r6,[r0,#4] ldr r4,[r0],r2 mov r5,r5,lsl #32-$Pos orr r5,r5,r6,lsr #$Pos mov r4,r4,lsr #$Pos orr r4,r4,r6,lsl #32-$Pos else ldr r5,[r0,#4] ldr r4,[r0],r2 endif endif ldr r7,[r1,#4] ldr r6,[r1] and r9,r12,r5,lsr #1 and r8,r12,r4,lsr #1 orr r5,r7,r5 orr r4,r6,r4 and r7,r12,r7,lsr #1 and r6,r12,r6,lsr #1 add r7,r7,r9 add r6,r6,r8 and r5,r5,r14 and r4,r4,r14 add r7,r7,r5 add r6,r6,r4 str r7,[r1,#4] str r6,[r1],#8 mend macro AddBlock $Id, $Pos, $Round, $Add, $ARM5 PreLoad2Init $ARM5,$Pos ldr r14,$Id.Mask mov r11,#8 mvn r12,r14,lsl #7 $Id.Loop PreLoad2 $ARM5,$Pos AddBlockRow $Pos subs r11,r11,#1 bne $Id.Loop ldmia sp!, {r4 - r11, pc} $Id.Mask dcd 0x01010101 mend ;------------------------------------------ ; COPYBLOCKHOR ;------------------------------------------ macro LoadHorRow $Id, $Pos ; result is r4,r5 and r8,r9 (one pixel to the right) ; r6,r7 can be used if $Pos < 0 ldrb r4,[r0] ldrb r6,[r0,#1] ldrb r5,[r0,#4] ldrb r7,[r0,#5] orr r4,r4,r6,lsl #8 ldrb r6,[r0,#2] orr r5,r5,r7,lsl #8 ldrb r7,[r0,#6] orr r4,r4,r6,lsl #16 ldrb r6,[r0,#3] orr r5,r5,r7,lsl #16 ldrb r7,[r0,#7] orr r4,r4,r6,lsl #24 ldrb r6,[r0,#8] orr r5,r5,r7,lsl #24 mov r8,r4,lsr #8 mov r9,r5,lsr #8 orr r8,r8,r5,lsl #24 orr r9,r9,r6,lsl #24 add r0,r0,r2 else ldr r5,[r0,#4] ldr r6,[r0,#8] ldr r4,[r0],r2 if $Pos+8 < 32 mov r9,r5,lsr #$Pos+8 orr r9,r9,r6,lsl #32-$Pos-8 mov r8,r4,lsr #$Pos+8 orr r8,r8,r5,lsl #32-$Pos-8 else mov r8,r5 mov r9,r6 endif if $Pos > 0 mov r4,r4,lsr #$Pos mov r6,r6,lsl #32-$Pos orr r4,r4,r5,lsl #32-$Pos orr r5,r6,r5,lsr #$Pos endif endif mend macro CopyHorRow $Id, $Pos, $Round, $Add ;r14 01010101 ;r12 7f7f7f7f LoadHorRow $Id,$Pos and r6,r12,r4,lsr #1 and r7,r12,r5,lsr #1 if $Round and r4,r4,r8 and r5,r5,r9 else orr r4,r4,r8 orr r5,r5,r9 endif and r8,r12,r8,lsr #1 and r9,r12,r9,lsr #1 and r4,r4,r14 and r5,r5,r14 add r4,r4,r6 add r5,r5,r7 add r4,r4,r8 add r5,r5,r9 if $Add ldr r7,[r1,#4] ldr r6,[r1] and r9,r12,r5,lsr #1 and r8,r12,r4,lsr #1 orr r5,r7,r5 orr r4,r6,r4 and r7,r12,r7,lsr #1 and r6,r12,r6,lsr #1 add r7,r7,r9 add r6,r6,r8 and r5,r5,r14 and r4,r4,r14 add r7,r7,r5 add r6,r6,r4 str r7,[r1,#4] str r6,[r1],#8 else str r5,[r1,#4] str r4,[r1],r3 endif mend macro CopyBlockHor $Id, $Pos, $Round, $Add, $ARM5 PreLoad2Init $ARM5,$Pos ldr r14,$Id.Mask mov r11,#8 mvn r12,r14,lsl #7 $Id.Loop PreLoad2 $ARM5,$Pos CopyHorRow $Id,$Pos,$Round,$Add subs r11,r11,#1 bne $Id.Loop ldmia sp!, {r4 - r11, pc} $Id.Mask dcd 0x01010101 mend ;------------------------------------------ ; COPYBLOCKVER ;------------------------------------------ macro LoadVerRow $Id, $Pos, $Parity if $Parity ; result is r8,r9 (r10=r8>>1,r11=r9>>1) ; r10,r11 can be used if $Pos < 0 ldrb r8,[r0] ldrb r10,[r0,#1] ldrb r9,[r0,#4] ldrb r11,[r0,#5] orr r8,r8,r10,lsl #8 ldrb r10,[r0,#2] orr r9,r9,r11,lsl #8 ldrb r11,[r0,#6] orr r8,r8,r10,lsl #16 ldrb r10,[r0,#3] orr r9,r9,r11,lsl #16 ldrb r11,[r0,#7] orr r8,r8,r10,lsl #24 add r0,r0,r2 orr r9,r9,r11,lsl #24 else if $Pos > 0 ldr r9,[r0,#8] ldr r10,[r0,#4] ldr r8,[r0],r2 mov r9,r9,lsl #32-$Pos orr r9,r9,r10,lsr #$Pos mov r8,r8,lsr #$Pos orr r8,r8,r10,lsl #32-$Pos else ldr r9,[r0,#4] ldr r8,[r0],r2 endif endif and r11,r12,r9,lsr #1 and r10,r12,r8,lsr #1 else ; result is r4,r5 (r6=r4>>1,r7=r5>>1) ; r6,r7 can be used if $Pos < 0 ldrb r4,[r0] ldrb r6,[r0,#1] ldrb r5,[r0,#4] ldrb r7,[r0,#5] orr r4,r4,r6,lsl #8 ldrb r6,[r0,#2] orr r5,r5,r7,lsl #8 ldrb r7,[r0,#6] orr r4,r4,r6,lsl #16 ldrb r6,[r0,#3] orr r5,r5,r7,lsl #16 ldrb r7,[r0,#7] orr r4,r4,r6,lsl #24 add r0,r0,r2 orr r5,r5,r7,lsl #24 else if $Pos > 0 ldr r5,[r0,#8] ldr r6,[r0,#4] ldr r4,[r0],r2 mov r5,r5,lsl #32-$Pos orr r5,r5,r6,lsr #$Pos mov r4,r4,lsr #$Pos orr r4,r4,r6,lsl #32-$Pos else ldr r5,[r0,#4] ldr r4,[r0],r2 endif endif and r7,r12,r5,lsr #1 and r6,r12,r4,lsr #1 endif mend macro CopyVerRow $Id, $Pos, $Parity, $Round, $Add ;r14 01010101 ;r12 7f7f7f7f LoadVerRow $Id,$Pos,$Parity if $Parity if $Round and r4,r4,r8 and r5,r5,r9 else orr r4,r4,r8 orr r5,r5,r9 endif and r4,r4,r14 and r5,r5,r14 add r4,r4,r6 add r5,r5,r7 add r4,r4,r10 add r5,r5,r11 if $Add ldr r7,[r1,#4] ldr r6,[r1] and r3,r12,r5,lsr #1 orr r5,r7,r5 and r7,r12,r7,lsr #1 add r7,r7,r3 and r3,r12,r4,lsr #1 orr r4,r6,r4 and r6,r12,r6,lsr #1 add r6,r6,r3 and r5,r5,r14 and r4,r4,r14 add r5,r5,r7 add r4,r4,r6 ldr r7,[sp] ;end src for loop compare str r5,[r1,#4] str r4,[r1],#8 else ldr r7,[sp] ;end src for loop compare str r5,[r1,#4] str r4,[r1],r3 endif else if $Round and r8,r8,r4 and r9,r9,r5 else orr r8,r8,r4 orr r9,r9,r5 endif and r8,r8,r14 and r9,r9,r14 add r8,r8,r10 add r9,r9,r11 add r8,r8,r6 add r9,r9,r7 if $Add ldr r11,[r1,#4] ldr r10,[r1] and r3,r12,r9,lsr #1 orr r9,r11,r9 and r11,r12,r11,lsr #1 add r11,r11,r3 and r3,r12,r8,lsr #1 orr r8,r10,r8 and r10,r12,r10,lsr #1 add r10,r10,r3 and r9,r9,r14 and r8,r8,r14 add r11,r11,r9 add r10,r10,r8 str r11,[r1,#4] str r10,[r1],#8 else str r9,[r1,#4] str r8,[r1],r3 endif endif mend macro CopyBlockVer $Id, $Pos, $Round, $Add, $ARM5 sub sp,sp,#4 add r4,r0,r2,lsl #3 add r4,r4,r2 str r4,[sp] ;end src ldr r14,$Id.Mask mvn r12,r14,lsl #7 PreLoad $ARM5,$Pos LoadVerRow $Id,$Pos,1 $Id.Loop PreLoad $ARM5,$Pos CopyVerRow $Id,$Pos,0,$Round,$Add PreLoad $ARM5,$Pos CopyVerRow $Id,$Pos,1,$Round,$Add cmp r0,r7 bne $Id.Loop add sp,sp,#4 ldmia sp!, {r4 - r11, pc} $Id.Mask dcd 0x01010101 mend ;------------------------------------------ ; COPYBLOCKHORVER ;------------------------------------------ ; load needs r2,r3 for temporary (r2 is restored from stack) macro LoadHorVerRow $Id, $Pos, $Parity if $Parity ;read result r4,r5 and r2,r3 (one pixel to right) ;r6,r7 can be used if $Pos<0 ldrb r4,[r0] ldrb r6,[r0,#1] ldrb r5,[r0,#4] ldrb r7,[r0,#5] orr r4,r4,r6,lsl #8 ldrb r6,[r0,#2] orr r5,r5,r7,lsl #8 ldrb r7,[r0,#6] orr r4,r4,r6,lsl #16 ldrb r6,[r0,#3] orr r5,r5,r7,lsl #16 ldrb r7,[r0,#7] orr r4,r4,r6,lsl #24 ldrb r6,[r0,#8] orr r5,r5,r7,lsl #24 add r0,r0,r2 mov r2,r4,lsr #8 mov r3,r5,lsr #8 orr r2,r2,r5,lsl #24 orr r3,r3,r6,lsl #24 else ldr r5,[r0,#4] ldr r6,[r0,#8] ldr r4,[r0],r2 if $Pos+8 < 32 mov r3,r5,lsr #$Pos+8 orr r3,r3,r6,lsl #32-$Pos-8 mov r2,r4,lsr #$Pos+8 orr r2,r2,r5,lsl #32-$Pos-8 else mov r2,r5 mov r3,r6 endif if $Pos > 0 mov r4,r4,lsr #$Pos mov r6,r6,lsl #32-$Pos orr r4,r4,r5,lsl #32-$Pos orr r5,r6,r5,lsr #$Pos endif endif and r6,r2,r14 and r2,r12,r2,lsr #2 and r7,r4,r14 and r4,r12,r4,lsr #2 add r4,r4,r2 add r6,r6,r7 and r2,r3,r14 and r3,r12,r3,lsr #2 and r7,r5,r14 and r5,r12,r5,lsr #2 add r5,r5,r3 add r7,r2,r7 else ;read result r8,r9 and r2,r3 (one pixel to right) ;r10,r11 can be used if $Pos<0 ldrb r8,[r0] ldrb r10,[r0,#1] ldrb r9,[r0,#4] ldrb r11,[r0,#5] orr r8,r8,r10,lsl #8 ldrb r10,[r0,#2] orr r9,r9,r11,lsl #8 ldrb r11,[r0,#6] orr r8,r8,r10,lsl #16 ldrb r10,[r0,#3] orr r9,r9,r11,lsl #16 ldrb r11,[r0,#7] orr r8,r8,r10,lsl #24 ldrb r10,[r0,#8] orr r9,r9,r11,lsl #24 add r0,r0,r2 mov r2,r8,lsr #8 mov r3,r9,lsr #8 orr r2,r2,r9,lsl #24 orr r3,r3,r10,lsl #24 else ldr r9,[r0,#4] ldr r10,[r0,#8] ldr r8,[r0],r2 if $Pos+8 < 32 mov r3,r9,lsr #$Pos+8 orr r3,r3,r10,lsl #32-$Pos-8 mov r2,r8,lsr #$Pos+8 orr r2,r2,r9,lsl #32-$Pos-8 else mov r2,r9 mov r3,r10 endif if $Pos > 0 mov r8,r8,lsr #$Pos mov r10,r10,lsl #32-$Pos orr r8,r8,r9,lsl #32-$Pos orr r9,r10,r9,lsr #$Pos endif endif and r10,r2,r14 and r2,r12,r2,lsr #2 and r11,r8,r14 and r8,r12,r8,lsr #2 add r8,r8,r2 add r10,r10,r11 and r2,r3,r14 and r3,r12,r3,lsr #2 and r11,r9,r14 and r9,r12,r9,lsr #2 add r9,r9,r3 add r11,r2,r11 endif ldr r2,[sp] mend macro CopyHorVerRow $Id, $Pos, $Parity, $Round, $Add ;r14 03030303 ;r12 3f3f3f3f LoadHorVerRow $Id,$Pos,$Parity if $Round and r3,r14,r14,lsr #1 ;0x01010101 else and r3,r14,r14,lsl #1 ;0x02020202 endif if $Parity add r8,r8,r4 add r9,r9,r5 add r10,r10,r6 add r11,r11,r7 add r10,r10,r3 add r11,r11,r3 and r10,r14,r10,lsr #2 and r11,r14,r11,lsr #2 if $Add add r8,r8,r10 add r9,r9,r11 orr r12,r12,r12,lsl #1 ;0x7F7F7F7F ldr r11,[r1,#4] ldr r10,[r1] and r3,r12,r9,lsr #1 orr r9,r11,r9 and r11,r12,r11,lsr #1 add r11,r11,r3 and r3,r12,r8,lsr #1 orr r8,r10,r8 and r10,r12,r10,lsr #1 add r10,r10,r3 and r3,r14,r14,lsr #1 ;0x01010101 mvn r12,r14,lsl #6 ;restore r12 and r9,r9,r3 and r8,r8,r3 add r11,r11,r9 add r10,r10,r8 ldr r3,[sp,#4] ;end src for loop compare str r11,[r1,#4] str r10,[r1],#8 else add r8,r8,r10 ldr r10,[sp,#8] ;dstpitch add r9,r9,r11 ldr r3,[sp,#4] ;end src for loop compare str r9,[r1,#4] str r8,[r1],r10 endif else add r4,r4,r8 add r5,r5,r9 add r6,r6,r10 add r7,r7,r11 add r6,r6,r3 add r7,r7,r3 and r6,r14,r6,lsr #2 and r7,r14,r7,lsr #2 if $Add add r4,r4,r6 add r5,r5,r7 orr r12,r12,r12,lsl #1 ;0x7F7F7F7F ldr r7,[r1,#4] ldr r6,[r1] and r3,r12,r5,lsr #1 orr r5,r7,r5 and r7,r12,r7,lsr #1 add r7,r7,r3 and r3,r12,r4,lsr #1 orr r4,r6,r4 and r6,r12,r6,lsr #1 add r6,r6,r3 and r3,r14,r14,lsr #1 ;0x01010101 mvn r12,r14,lsl #6 ;restore r12 and r5,r5,r3 and r4,r4,r3 add r7,r7,r5 add r6,r6,r4 str r7,[r1,#4] str r6,[r1],#8 else ldr r3,[sp,#8] ;dstpitch add r4,r4,r6 add r5,r5,r7 str r5,[r1,#4] str r4,[r1],r3 endif endif mend macro CopyBlockHorVer $Id, $Pos, $Round, $Add, $ARM5 sub sp,sp,#12 add r4,r0,r2,lsl #3 add r4,r4,r2 str r2,[sp] ;srcpitch str r4,[sp,#4] ;end src str r3,[sp,#8] ;dstpitch ldr r14,$Id.Mask mvn r12,r14,lsl #6 PreLoad $ARM5,$Pos LoadHorVerRow $Id,$Pos,1 $Id.Loop PreLoad $ARM5,$Pos CopyHorVerRow $Id,$Pos,0,$Round,$Add PreLoad $ARM5,$Pos CopyHorVerRow $Id,$Pos,1,$Round,$Add cmp r0,r3 bne $Id.Loop add sp,sp,#12 ldmia sp!, {r4 - r11, pc} $Id.Mask dcd 0x03030303 mend ;--------------------------------------------------- ; general unaligned copy (use preload) CopyBuild CopyBlock8x8,CopyBlock8x8,0,0,0,1 CopyBuild CopyBlock16x16,CopyBlock16x16,0,0,0,1 ;--------------------------------------------------- ; smaller versions without preload ; ; CopyBuild CopyBlock,CopyBlock,0,0,1,0 ; CopyBuild CopyBlockVer,CopyBlockVer,0,0,0,0 ; CopyBuild CopyBlockHor,CopyBlockHor,0,0,0,0 ; CopyBuild CopyBlockHorVer,CopyBlockHorVer,0,0,0,0 ; CopyBuild CopyBlockVerRound,CopyBlockVer,1,0,0,0 ; CopyBuild CopyBlockHorRound,CopyBlockHor,1,0,0,0 ; CopyBuild CopyBlockHorVerRound,CopyBlockHorVer,1,0,0,0 ; ; CopyBuild AddBlock,AddBlock,0,1,0,0 ; CopyBuild AddBlockVer,CopyBlockVer,0,1,0,0 ; CopyBuild AddBlockHor,CopyBlockHor,0,1,0,0 ; CopyBuild AddBlockHorVer,CopyBlockHorVer,0,1,0,0 ; ;--------------------------------------------------- ; smaller versions with preload ; ; CopyBuild PreLoadCopyBlock,CopyBlock,0,0,1,1 ; CopyBuild PreLoadCopyBlockVer,CopyBlockVer,0,0,0,1 ; CopyBuild PreLoadCopyBlockHor,CopyBlockHor,0,0,0,1 ; CopyBuild PreLoadCopyBlockHorVer,CopyBlockHorVer,0,0,0,1 ; CopyBuild PreLoadCopyBlockVerRound,CopyBlockVer,1,0,0,1 ; CopyBuild PreLoadCopyBlockHorRound,CopyBlockHor,1,0,0,1 ; CopyBuild PreLoadCopyBlockHorVerRound,CopyBlockHorVer,1,0,0,1 ; ; CopyBuild PreLoadAddBlock,AddBlock,0,1,0,1 ; CopyBuild PreLoadAddBlockVer,CopyBlockVer,0,1,0,1 ; CopyBuild PreLoadAddBlockHor,CopyBlockHor,0,1,0,1 ; CopyBuild PreLoadAddBlockHorVer,CopyBlockHorVer,0,1,0,1 ; ;--------------------------------------------------- ; larger versions with preload ; (faster if there is enough intstruction cache available) CopyBuild CopyBlock,CopyBlock,0,0,1,1 CopyBuild CopyBlockVer,CopyBlockVer,0,0,1,1 CopyBuild CopyBlockHor,CopyBlockHor,0,0,1,1 CopyBuild CopyBlockHorVer,CopyBlockHorVer,0,0,1,1 CopyBuild CopyBlockVerRound,CopyBlockVer,1,0,1,1 CopyBuild CopyBlockHorRound,CopyBlockHor,1,0,1,1 CopyBuild CopyBlockHorVerRound,CopyBlockHorVer,1,0,1,1 CopyBuild AddBlock,AddBlock,0,1,1,1 CopyBuild AddBlockVer,CopyBlockVer,0,1,1,1 CopyBuild AddBlockHor,CopyBlockHor,0,1,1,1 CopyBuild AddBlockHorVer,CopyBlockHorVer,0,1,1,1 CopyBuild CopyBlockM,CopyBlockM,0,0,1,1 END