10c1bc742181ded4930842b46e9507372f0b1b963James Dong/* 278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Copyright (C) 2007-2008 ARM Limited 378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Licensed under the Apache License, Version 2.0 (the "License"); 578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * you may not use this file except in compliance with the License. 678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * You may obtain a copy of the License at 778e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 878e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * http://www.apache.org/licenses/LICENSE-2.0 978e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1078e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * Unless required by applicable law or agreed to in writing, software 1178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * distributed under the License is distributed on an "AS IS" BASIS, 1278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * See the License for the specific language governing permissions and 1478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * limitations under the License. 1578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar * 1678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar */ 1778e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar/* 180c1bc742181ded4930842b46e9507372f0b1b963James Dong * 190c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 200c1bc742181ded4930842b46e9507372f0b1b963James Dong 210c1bc742181ded4930842b46e9507372f0b1b963James Dong .eabi_attribute 24, 1 220c1bc742181ded4930842b46e9507372f0b1b963James Dong .eabi_attribute 25, 1 230c1bc742181ded4930842b46e9507372f0b1b963James Dong 240c1bc742181ded4930842b46e9507372f0b1b963James Dong .arm 250c1bc742181ded4930842b46e9507372f0b1b963James Dong .fpu neon 260c1bc742181ded4930842b46e9507372f0b1b963James Dong .text 270c1bc742181ded4930842b46e9507372f0b1b963James Dong 280c1bc742181ded4930842b46e9507372f0b1b963James Dong .global omxVCM4P10_DequantTransformResidualFromPairAndAdd 290c1bc742181ded4930842b46e9507372f0b1b963James DongomxVCM4P10_DequantTransformResidualFromPairAndAdd: 300c1bc742181ded4930842b46e9507372f0b1b963James Dong PUSH {r4-r12,lr} 310c1bc742181ded4930842b46e9507372f0b1b963James Dong VPUSH {d8-d9} 320c1bc742181ded4930842b46e9507372f0b1b963James Dong SUB sp,sp,#0x20 330c1bc742181ded4930842b46e9507372f0b1b963James Dong ADD r4,sp,#0 340c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r5,[sp,#0x64] 350c1bc742181ded4930842b46e9507372f0b1b963James Dong MOV r7,r1 360c1bc742181ded4930842b46e9507372f0b1b963James Dong MOV r8,r2 370c1bc742181ded4930842b46e9507372f0b1b963James Dong MOV r9,r3 380c1bc742181ded4930842b46e9507372f0b1b963James Dong CMP r5,#0 390c1bc742181ded4930842b46e9507372f0b1b963James Dong BEQ L0x114 400c1bc742181ded4930842b46e9507372f0b1b963James Dong MOV r1,r4 410c1bc742181ded4930842b46e9507372f0b1b963James Dong BL armVCM4P10_UnpackBlock4x4 ;// 420c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r1,[sp,#0x60] 4322e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel LDR r11, .LarmVCM4P10_QPModuloTable 4422e06318d04074d1a7c90caa173857abdcfd153eArd BiesheuvelP0: ADD r11, pc 4522e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel LDR r10, .LarmVCM4P10_QPDivTable 4622e06318d04074d1a7c90caa173857abdcfd153eArd BiesheuvelP1: ADD r10, pc 4722e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel LDR r2, .LarmVCM4P10_VMatrixU16 4822e06318d04074d1a7c90caa173857abdcfd153eArd BiesheuvelP2: ADD r2, pc 490c1bc742181ded4930842b46e9507372f0b1b963James Dong LDRSB r12,[r11,r1] 500c1bc742181ded4930842b46e9507372f0b1b963James Dong LDRSB lr,[r10,r1] 510c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r10, =0x3020504 520c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r1, =0x5040100 530c1bc742181ded4930842b46e9507372f0b1b963James Dong ADD r2,r2,r12 540c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.32 d7,r1 550c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.32 d9,r10 560c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.16 d5,lr 570c1bc742181ded4930842b46e9507372f0b1b963James Dong VLD1.8 {d6},[r2] 580c1bc742181ded4930842b46e9507372f0b1b963James Dong VTBL.8 d8,{d6},d7 590c1bc742181ded4930842b46e9507372f0b1b963James Dong VTBL.8 d4,{d6},d9 600c1bc742181ded4930842b46e9507372f0b1b963James Dong CMP r8,#0 610c1bc742181ded4930842b46e9507372f0b1b963James Dong VLD1.16 {d0,d1,d2,d3},[r4] 620c1bc742181ded4930842b46e9507372f0b1b963James Dong VSHL.U16 d8,d8,d5 630c1bc742181ded4930842b46e9507372f0b1b963James Dong VSHL.U16 d4,d4,d5 640c1bc742181ded4930842b46e9507372f0b1b963James Dong BEQ L1 650c1bc742181ded4930842b46e9507372f0b1b963James Dong LDRSH r10,[r8,#0] 660c1bc742181ded4930842b46e9507372f0b1b963James DongL1: 670c1bc742181ded4930842b46e9507372f0b1b963James Dong VMUL.I16 d0,d0,d8 680c1bc742181ded4930842b46e9507372f0b1b963James Dong VMUL.I16 d1,d1,d4 690c1bc742181ded4930842b46e9507372f0b1b963James Dong VMUL.I16 d2,d2,d8 700c1bc742181ded4930842b46e9507372f0b1b963James Dong VMUL.I16 d3,d3,d4 710c1bc742181ded4930842b46e9507372f0b1b963James Dong VMOVNE.16 d0[0],r10 720c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.16 d0,d1 730c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.16 d2,d3 740c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.32 q0,q1 750c1bc742181ded4930842b46e9507372f0b1b963James Dong VMOV.I16 d4,#0 760c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d5,d0,d2 770c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d6,d0,d2 780c1bc742181ded4930842b46e9507372f0b1b963James Dong VHADD.S16 d7,d1,d4 790c1bc742181ded4930842b46e9507372f0b1b963James Dong VHADD.S16 d8,d3,d4 800c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d7,d7,d3 810c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d8,d1,d8 820c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d0,d5,d8 830c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d1,d6,d7 840c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d2,d6,d7 850c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d3,d5,d8 860c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.16 d0,d1 870c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.16 d2,d3 880c1bc742181ded4930842b46e9507372f0b1b963James Dong VTRN.32 q0,q1 890c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d5,d0,d2 900c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d6,d0,d2 910c1bc742181ded4930842b46e9507372f0b1b963James Dong VHADD.S16 d7,d1,d4 920c1bc742181ded4930842b46e9507372f0b1b963James Dong VHADD.S16 d8,d3,d4 930c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d7,d7,d3 940c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d8,d1,d8 950c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d0,d5,d8 960c1bc742181ded4930842b46e9507372f0b1b963James Dong VADD.I16 d1,d6,d7 970c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d2,d6,d7 980c1bc742181ded4930842b46e9507372f0b1b963James Dong VSUB.I16 d3,d5,d8 990c1bc742181ded4930842b46e9507372f0b1b963James Dong VRSHR.S16 d0,d0,#6 1000c1bc742181ded4930842b46e9507372f0b1b963James Dong VRSHR.S16 d1,d1,#6 1010c1bc742181ded4930842b46e9507372f0b1b963James Dong VRSHR.S16 d2,d2,#6 1020c1bc742181ded4930842b46e9507372f0b1b963James Dong VRSHR.S16 d3,d3,#6 1030c1bc742181ded4930842b46e9507372f0b1b963James Dong B L0x130 1040c1bc742181ded4930842b46e9507372f0b1b963James DongL0x114: 1050c1bc742181ded4930842b46e9507372f0b1b963James Dong LDRSH r10,[r8,#0] 1060c1bc742181ded4930842b46e9507372f0b1b963James Dong ADD r10,r10,#0x20 1070c1bc742181ded4930842b46e9507372f0b1b963James Dong ASR r10,r10,#6 1080c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.16 d0,r10 1090c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.16 d1,r10 1100c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.16 d2,r10 1110c1bc742181ded4930842b46e9507372f0b1b963James Dong VDUP.16 d3,r10 1120c1bc742181ded4930842b46e9507372f0b1b963James DongL0x130: 1130c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r1,[sp,#0x58] 1140c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r10,[sp,#0x5c] 1150c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r3,[r7],r1 1160c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r5,[r7],r1 1170c1bc742181ded4930842b46e9507372f0b1b963James Dong VMOV d4,r3,r5 1180c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r3,[r7],r1 1190c1bc742181ded4930842b46e9507372f0b1b963James Dong LDR r5,[r7,#0] 1200c1bc742181ded4930842b46e9507372f0b1b963James Dong VMOV d5,r3,r5 1210c1bc742181ded4930842b46e9507372f0b1b963James Dong VADDW.U8 q3,q0,d4 1220c1bc742181ded4930842b46e9507372f0b1b963James Dong VADDW.U8 q4,q1,d5 1230c1bc742181ded4930842b46e9507372f0b1b963James Dong VQMOVUN.S16 d0,q3 1240c1bc742181ded4930842b46e9507372f0b1b963James Dong VQMOVUN.S16 d1,q4 1250c1bc742181ded4930842b46e9507372f0b1b963James Dong VST1.32 {d0[0]},[r9],r10 1260c1bc742181ded4930842b46e9507372f0b1b963James Dong VST1.32 {d0[1]},[r9],r10 1270c1bc742181ded4930842b46e9507372f0b1b963James Dong VST1.32 {d1[0]},[r9],r10 1280c1bc742181ded4930842b46e9507372f0b1b963James Dong VST1.32 {d1[1]},[r9] 1290c1bc742181ded4930842b46e9507372f0b1b963James Dong MOV r0,#0 1300c1bc742181ded4930842b46e9507372f0b1b963James Dong ADD sp,sp,#0x20 1310c1bc742181ded4930842b46e9507372f0b1b963James Dong VPOP {d8-d9} 1320c1bc742181ded4930842b46e9507372f0b1b963James Dong POP {r4-r12,pc} 1330c1bc742181ded4930842b46e9507372f0b1b963James Dong 13422e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel.LarmVCM4P10_QPModuloTable: 13522e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel .word armVCM4P10_QPModuloTable-(P0+8) 13622e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel.LarmVCM4P10_QPDivTable: 13722e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel .word armVCM4P10_QPDivTable-(P1+8) 13822e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel.LarmVCM4P10_VMatrixU16: 13922e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel .word armVCM4P10_VMatrixU16-(P2+8) 14022e06318d04074d1a7c90caa173857abdcfd153eArd Biesheuvel 1410c1bc742181ded4930842b46e9507372f0b1b963James Dong .end 1420c1bc742181ded4930842b46e9507372f0b1b963James Dong 143