aboutsummaryrefslogtreecommitdiff
path: root/simd/jdidct-armv7.s
diff options
context:
space:
mode:
Diffstat (limited to 'simd/jdidct-armv7.s')
-rw-r--r--simd/jdidct-armv7.s113
1 files changed, 53 insertions, 60 deletions
diff --git a/simd/jdidct-armv7.s b/simd/jdidct-armv7.s
index d61e219..921b0c4 100644
--- a/simd/jdidct-armv7.s
+++ b/simd/jdidct-armv7.s
@@ -126,27 +126,34 @@
@==================================================================
@ Load input input data from memory and shift
@==================================================================
+ vld1.16 {q5-q6}, [r3]!
+ vshl.s16 q5, q5, #4
vld1.16 {d16, d17},[r0]! @q8 =row0
- vqshl.s16 q8, q8, #4 @Input data too big?!!
- @Maximum MPEG input is 2047/-2048.
+ vshl.s16 q6, q6, #4
+ vmul.s16 q8, q8, q5
vld1.16 {d18, d19},[r0]! @q9 =row1
- vqshl.s16 q9, q9, #4 @Shift 1 instead of 4
-
+ vmul.s16 q9, q9, q6
+ vld1.16 {q5-q6}, [r3]!
+ vshl.s16 q5, q5, #4
vld1.16 {d20, d21},[r0]! @q10=row2
- vqshl.s16 q10, q10, #4
-
+ vshl.s16 q6, q6, #4
+ vmul.s16 q10, q10, q5
vld1.16 {d22, d23},[r0]! @q11=row3
- vqshl.s16 q11, q11, #4
-
+ vmul.s16 q11, q11, q6
+ vld1.16 {q5-q6}, [r3]!
+ vshl.s16 q5, q5, #4
vld1.16 {d24, d25},[r0]! @q12=row4
- vqshl.s16 q12, q12, #4
-
+ vshl.s16 q6, q6, #4
+ vmul.s16 q12, q12, q5
vld1.16 {d26, d27},[r0]! @q13=row5
- vqshl.s16 q13, q13, #4
+ vmul.s16 q13, q13, q6
+ vld1.16 {q5-q6}, [r3]!
+ vshl.s16 q5, q5, #4
vld1.16 {d28, d29},[r0]! @q14=row6
- vqshl.s16 q14, q14, #4
+ vshl.s16 q6, q6, #4
+ vmul.s16 q14, q14, q5
vld1.16 {d30, d31},[r0]! @q15=row7
- vqshl.s16 q15, q15, #4
+ vmul.s16 q15, q15, q6
@==================================================================
@ refresh the constants that was clobbered last time through IDCT1D
@@ -221,53 +228,39 @@
@ 3. use multiple store. Each store will save one row of output.
@ The st queue size is 4, so do no more than 4 str in sequence.
@==================================================================
- ldr r5, =constants+5*16 @constants[5],
- vld1.16 d10, [r5] @load clamping parameters
- vdup.s16 q6, d10[0] @q6=[0000000000000000]
- vdup.s16 q7, d10[1] @q7=[FFFFFFFFFFFFFFFF]
-
- @Save the results
- vshr.s16 q8, q8, #6 @q8 = vy0
- vmax.s16 q8, q8, q6 @clamp >0
- vmin.s16 q8, q8, q7 @clamp <255
-
- vshr.s16 q9, q9, #6 @q9 = vy1
- vmax.s16 q9, q9, q6 @clamp >0
- vmin.s16 q9, q9, q7 @clamp <255
-
- vshr.s16 q10, q10, #6 @q10 = vy2
- vmax.s16 q10, q10, q6 @clamp >0
- vmin.s16 q10, q10, q7 @clamp <255
-
- vshr.s16 q11, q11, #6 @q11 = vy3
- vmax.s16 q11, q11, q6 @clamp >0
- vmin.s16 q11, q11, q7 @clamp <255
-
- vst1.16 {d16, d17},[r1],r2 @q8 =row0
- vst1.16 {d18, d19},[r1],r2 @q9 =row1
- vst1.16 {d20, d21},[r1],r2 @q10=row2
- vst1.16 {d22, d23},[r1],r2 @q11=row3
-
- vshr.s16 q12, q12, #6 @q12 = vy4
- vmax.s16 q12, q12, q6 @clamp >0
- vmin.s16 q12, q12, q7 @clamp <255
-
- vshr.s16 q13, q13, #6 @q13 = vy5
- vmax.s16 q13, q13, q6 @clamp >0
- vmin.s16 q13, q13, q7 @clamp <255
-
- vshr.s16 q14, q14, #6 @q14 = vy6
- vmax.s16 q14, q14, q6 @clamp >0
- vmin.s16 q14, q14, q7 @clamp <255
-
- vshr.s16 q15, q15, #6 @q15 = vy7
- vmax.s16 q15, q15, q6 @clamp >0
- vmin.s16 q15, q15, q7 @clamp <255
-
- vst1.16 {d24, d25},[r1],r2 @q12=row4
- vst1.16 {d26, d27},[r1],r2 @q13=row5
- vst1.16 {d28, d29},[r1],r2 @q14=row6
- vst1.16 {d30, d31},[r1] @q15=row7
+ vqshrun.s16 d16, q8, #6
+ vqshrun.s16 d17, q9, #6
+ vqshrun.s16 d18, q10, #6
+ vqshrun.s16 d19, q11, #6
+ vqshrun.s16 d20, q12, #6
+ vqshrun.s16 d21, q13, #6
+ vqshrun.s16 d22, q14, #6
+ vqshrun.s16 d23, q15, #6
+
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d16}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d17}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d18}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d19}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d20}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d21}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d22}, [r12]
+ ldr r12, [r1], #4
+ add r12, r12, r2
+ vst1.8 {d23}, [r12]
.endm
.macro BIG_BODY_TRANSPOSE_INPUT