⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcomp_arm.s

📁 betaplayer的源码 tcpmp的老版本
💻 S
📖 第 1 页 / 共 2 页
字号:

	.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 + -