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

📄 mcomp_arm.s

📁 大名鼎鼎的CE下播放软件,TCPPMP的源代码!!!2410下可以流畅的解QVGA的H264,MPEG4等格式.
💻 S
📖 第 1 页 / 共 2 页
字号:
	  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


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -