📄 mcomp_arm.s
字号:
.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
ldmia sp!, {r0,r4 - r12, 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
ldmia sp!, {r0-r2,r4 - r12, 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 FastCopyBlock,CopyBlock,0,0,1,1
CopyBuild FastCopyBlockVer,CopyBlockVer,0,0,1,1
CopyBuild FastCopyBlockHor,CopyBlockHor,0,0,1,1
CopyBuild FastCopyBlockHorVer,CopyBlockHorVer,0,0,1,1
CopyBuild FastCopyBlockVerRound,CopyBlockVer,1,0,1,1
CopyBuild FastCopyBlockHorRound,CopyBlockHor,1,0,1,1
CopyBuild FastCopyBlockHorVerRound,CopyBlockHorVer,1,0,1,1
CopyBuild FastAddBlock,AddBlock,0,1,1,1
CopyBuild FastAddBlockVer,CopyBlockVer,0,1,1,1
CopyBuild FastAddBlockHor,CopyBlockHor,0,1,1,1
CopyBuild FastAddBlockHorVer,CopyBlockHorVer,0,1,1,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -