@***************************************************************************** @* @* 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.s 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 .macro PreLoad ARM5,Pos .if &ARM5>0 .if &Pos >= 0 .if &Pos > 0 .dc.l 0x0f7d0f082 add r0,r0,#8 .dc.l 0x0f7d0f082 sub r0,r0,#8 .else .dc.l 0x0f7d0f082 add r0,r0,#4 .dc.l 0x0f7d0f082 sub r0,r0,#4 .endif .else .dc.l 0x0f7d0f082 add r0,r0,#7 .dc.l 0x0f7d0f082 sub r0,r0,#7 .endif .endif .endm .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 .endm .macro PreLoad2 ARM5,Pos .if &ARM5>0 .dc.l 0x0f7d0f082 .dc.l 0x0f7d0f00a .endif .endm .macro CopyBuild Name,Sub,Round,Add,Fast,ARM5 .align 2 .global &Name &Name: .if &ARM5>0 add ip,r2,#7 .dc.l 0x0f7d0f002 .dc.l 0x0f5d0f007 .endif stmdb sp!, {r4 - r11, lr} .if &ARM5>0 .dc.l 0x0f7d0f00c .dc.l 0x0f5d0f000 .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 .endm @------------------------------------------ @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 .endm .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} .endm @------------------------------------------ @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 .endm .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} .endm @------------------------------------------ @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 .endm .macro CopyBlock16x16 Id, Pos, Round, Add, ARM5 mov r11,#15 &Id.Loop: .dc.l 0x0f7d0f082 CopyBlock16x16Row subs r11,r11,#1 bne &Id.Loop @unroll last (no preload needed) CopyBlock16x16Row ldmia sp!, {r4 - r11, pc} .endm @------------------------------------------ @COPYBLOCK8x8: no aligment!, only used in Copy() @------------------------------------------ .macro CopyBlock8x8 Id, Pos, Round, Add, ARM5 mov r11,#3 &Id.Loop: .dc.l 0x0f7d0f082 ldr r7,[r0,#4] ldr r6,[r0],r2 .dc.l 0x0f7d0f082 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} .endm @------------------------------------------ @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 .endm .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: .dc.l 0x01010101 .endm @------------------------------------------ @ 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 .endm .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 .endm .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: .dc.l 0x01010101 .endm @------------------------------------------ @ 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 .endm .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 .endm .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: .dc.l 0x01010101 .endm @------------------------------------------ @ 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] .endm .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 .endm .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: .dc.l 0x03030303 .endm @--------------------------------------------------- @ 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