omxVCM4P10_DequantTransformResidualFromPairAndAdd_s.S revision 0c1bc742181ded4930842b46e9507372f0b1b963
10c1bc742181ded4930842b46e9507372f0b1b963James Dong/*
20c1bc742181ded4930842b46e9507372f0b1b963James Dong * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
30c1bc742181ded4930842b46e9507372f0b1b963James Dong *
40c1bc742181ded4930842b46e9507372f0b1b963James Dong */
50c1bc742181ded4930842b46e9507372f0b1b963James Dong
60c1bc742181ded4930842b46e9507372f0b1b963James Dong    .eabi_attribute 24, 1
70c1bc742181ded4930842b46e9507372f0b1b963James Dong    .eabi_attribute 25, 1
80c1bc742181ded4930842b46e9507372f0b1b963James Dong
90c1bc742181ded4930842b46e9507372f0b1b963James Dong    .arm
100c1bc742181ded4930842b46e9507372f0b1b963James Dong    .fpu neon
110c1bc742181ded4930842b46e9507372f0b1b963James Dong    .text
120c1bc742181ded4930842b46e9507372f0b1b963James Dong
130c1bc742181ded4930842b46e9507372f0b1b963James Dong    .global omxVCM4P10_DequantTransformResidualFromPairAndAdd
140c1bc742181ded4930842b46e9507372f0b1b963James Dong    .func   omxVCM4P10_DequantTransformResidualFromPairAndAdd
150c1bc742181ded4930842b46e9507372f0b1b963James DongomxVCM4P10_DequantTransformResidualFromPairAndAdd:
160c1bc742181ded4930842b46e9507372f0b1b963James Dong    PUSH     {r4-r12,lr}
170c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPUSH    {d8-d9}
180c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUB      sp,sp,#0x20
190c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD      r4,sp,#0
200c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r5,[sp,#0x64]
210c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r7,r1
220c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r8,r2
230c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r9,r3
240c1bc742181ded4930842b46e9507372f0b1b963James Dong    CMP      r5,#0
250c1bc742181ded4930842b46e9507372f0b1b963James Dong    BEQ      L0x114
260c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r1,r4
270c1bc742181ded4930842b46e9507372f0b1b963James Dong    BL       armVCM4P10_UnpackBlock4x4  ;//
280c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r1,[sp,#0x60]
290c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r11, =armVCM4P10_QPModuloTable
300c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r10, =armVCM4P10_QPDivTable
310c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r2,  =armVCM4P10_VMatrixU16
320c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRSB    r12,[r11,r1]
330c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRSB    lr,[r10,r1]
340c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r10, =0x3020504
350c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r1, =0x5040100
360c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD      r2,r2,r12
370c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.32  d7,r1
380c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.32  d9,r10
390c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.16  d5,lr
400c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d6},[r2]
410c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTBL.8   d8,{d6},d7
420c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTBL.8   d4,{d6},d9
430c1bc742181ded4930842b46e9507372f0b1b963James Dong    CMP      r8,#0
440c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.16  {d0,d1,d2,d3},[r4]
450c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSHL.U16 d8,d8,d5
460c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSHL.U16 d4,d4,d5
470c1bc742181ded4930842b46e9507372f0b1b963James Dong    BEQ      L1
480c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRSH    r10,[r8,#0]
490c1bc742181ded4930842b46e9507372f0b1b963James DongL1:
500c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMUL.I16 d0,d0,d8
510c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMUL.I16 d1,d1,d4
520c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMUL.I16 d2,d2,d8
530c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMUL.I16 d3,d3,d4
540c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMOVNE.16 d0[0],r10
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.16  d0,d1
560c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.16  d2,d3
570c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.32  q0,q1
580c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMOV.I16 d4,#0
590c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d5,d0,d2
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d6,d0,d2
610c1bc742181ded4930842b46e9507372f0b1b963James Dong    VHADD.S16 d7,d1,d4
620c1bc742181ded4930842b46e9507372f0b1b963James Dong    VHADD.S16 d8,d3,d4
630c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d7,d7,d3
640c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d8,d1,d8
650c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d0,d5,d8
660c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d1,d6,d7
670c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d2,d6,d7
680c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d3,d5,d8
690c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.16  d0,d1
700c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.16  d2,d3
710c1bc742181ded4930842b46e9507372f0b1b963James Dong    VTRN.32  q0,q1
720c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d5,d0,d2
730c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d6,d0,d2
740c1bc742181ded4930842b46e9507372f0b1b963James Dong    VHADD.S16 d7,d1,d4
750c1bc742181ded4930842b46e9507372f0b1b963James Dong    VHADD.S16 d8,d3,d4
760c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d7,d7,d3
770c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d8,d1,d8
780c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d0,d5,d8
790c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADD.I16 d1,d6,d7
800c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d2,d6,d7
810c1bc742181ded4930842b46e9507372f0b1b963James Dong    VSUB.I16 d3,d5,d8
820c1bc742181ded4930842b46e9507372f0b1b963James Dong    VRSHR.S16 d0,d0,#6
830c1bc742181ded4930842b46e9507372f0b1b963James Dong    VRSHR.S16 d1,d1,#6
840c1bc742181ded4930842b46e9507372f0b1b963James Dong    VRSHR.S16 d2,d2,#6
850c1bc742181ded4930842b46e9507372f0b1b963James Dong    VRSHR.S16 d3,d3,#6
860c1bc742181ded4930842b46e9507372f0b1b963James Dong    B        L0x130
870c1bc742181ded4930842b46e9507372f0b1b963James DongL0x114:
880c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRSH    r10,[r8,#0]
890c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD      r10,r10,#0x20
900c1bc742181ded4930842b46e9507372f0b1b963James Dong    ASR      r10,r10,#6
910c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.16  d0,r10
920c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.16  d1,r10
930c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.16  d2,r10
940c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.16  d3,r10
950c1bc742181ded4930842b46e9507372f0b1b963James DongL0x130:
960c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r1,[sp,#0x58]
970c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r10,[sp,#0x5c]
980c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r3,[r7],r1
990c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r5,[r7],r1
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMOV     d4,r3,r5
1010c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r3,[r7],r1
1020c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      r5,[r7,#0]
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMOV     d5,r3,r5
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADDW.U8 q3,q0,d4
1050c1bc742181ded4930842b46e9507372f0b1b963James Dong    VADDW.U8 q4,q1,d5
1060c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQMOVUN.S16 d0,q3
1070c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQMOVUN.S16 d1,q4
1080c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d0[0]},[r9],r10
1090c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d0[1]},[r9],r10
1100c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d1[0]},[r9],r10
1110c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d1[1]},[r9]
1120c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1130c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD      sp,sp,#0x20
1140c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d9}
1150c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1160c1bc742181ded4930842b46e9507372f0b1b963James Dong    .endfunc
1170c1bc742181ded4930842b46e9507372f0b1b963James Dong
1180c1bc742181ded4930842b46e9507372f0b1b963James Dong    .end
1190c1bc742181ded4930842b46e9507372f0b1b963James Dong
120