15dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/*
25dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * Copyright (C) 2014 The Android Open Source Project
35dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *
45dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * Licensed under the Apache License, Version 2.0 (the "License");
55dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * you may not use this file except in compliance with the License.
65dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * You may obtain a copy of the License at
75dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *
85dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *      http://www.apache.org/licenses/LICENSE-2.0
95dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *
105dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * Unless required by applicable law or agreed to in writing, software
115dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * distributed under the License is distributed on an "AS IS" BASIS,
125dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * See the License for the specific language governing permissions and
145dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * limitations under the License.
155dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
165dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
175dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie#define ENTRY(f) .text; .align 4; .globl f; .type f,#function; f: .fnstart
185dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie#define END(f) .fnend; .size f, .-f;
195dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
205dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie.eabi_attribute 25,1 @Tag_ABI_align8_preserved
215dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie.arm
225dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
235dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie.macro lanepair dst, src, xr0, xr1, yr0, yr1, zr0, zr1
245dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
25e2af295f94c8fb17ba51d0e6a199d5ca265f92daChih-Hung Hsieh            vmov        r6, r7, \src
265dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
275dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            add         r6, r6, r3
285dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            add         r7, r7, r3
295dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
305dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d16, [r6], r4
315dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d17, [r7], r4
325dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
335dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d18, [r6], r5
345dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d19, [r7], r5
355dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
365dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vdup.u8     d6, \yr0
375dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vdup.u8     d7, \yr1
385dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* Y interpolate, front, lanes 0 and 1 -> q12 and q13 */
395dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u8    q12, d16, #8
405dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u8    q13, d17, #8
415dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u8    q12, d16, d6
425dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u8    q13, d17, d7
435dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u8    q12, d18, d6
445dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u8    q13, d19, d7
455dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
465dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d18, [r6]
475dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d19, [r7]
485dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
495dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            sub         r6, r6, r4
505dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            sub         r7, r7, r4
515dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
525dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d16, [r6]
535dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vld1.u8     d17, [r7]
545dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
555dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* Y interpolate, rear, lanes 0 and 1 -> q14 and q15 */
565dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u8    q14, d16, #8
575dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u8    q15, d17, #8
585dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u8    q14, d16, d6
595dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u8    q15, d17, d7
605dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u8    q14, d18, d6
615dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u8    q15, d19, d7
625dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
635dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* Z interpolate, lane 0 q12/q14 -> q10 */
645dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q8, d24, #8
655dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q9, d25, #8
665dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q8, d24, \zr0
675dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q9, d25, \zr0
685dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q8, d28, \zr0
695dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q9, d29, \zr0
705dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vrshrn.u32  d20, q8, #8
715dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vrshrn.u32  d21, q9, #8
725dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
735dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* Z interpolate, lane 1 q13/q15 -> q11 */
745dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q8, d26, #8
755dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q9, d27, #8
765dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q8, d26, \zr1
775dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q9, d27, \zr1
785dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q8, d30, \zr1
795dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q9, d31, \zr1
805dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vrshrn.u32  d22, q8, #8
815dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vrshrn.u32  d23, q9, #8
825dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
835dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* X interpolate, lanes 0 and 1 q10,q11 -> q14 */
845dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q8, d20, #8
855dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q9, d22, #8
865dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q8, d20, \xr0
875dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlsl.u16   q9, d22, \xr1
885dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q8, d21, \xr0
895dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmlal.u16   q9, d23, \xr1
905dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshrn.u32   d28, q8, #8
915dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshrn.u32   d29, q9, #8
925dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
935dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            /* pack lanes 0-1 -> d12 */
945dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vqrshrn.u16  \dst, q14, #8
955dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie.endm
965dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
9707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie/* void rsdIntrinsic3DLUT_K(
985dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          void *dst,          // r0
995dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          void const *in,     // r1
1005dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          size_t count,       // r2
1015dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          void const *lut,    // r3
1025dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          int32_t pitchy,     // [sp]
1035dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          int32_t pitchz,     // [sp+#4]
1045dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          int dimx,           // [sp+#8]
1055dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          int dimy,           // [sp+#12]
1065dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie *          int dimz);          // [sp+#16]
1075dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
1085dcaaa5f50926bebf6877e254c521faa7e2593e3Simon HosieENTRY(rsdIntrinsic3DLUT_K)
1095dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            push        {r4,r5,r6,r7}
1105dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            ldr         r4, [sp, #16]
1115dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            ldr         r5, [sp, #20]
1125dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            ldr         r6, [sp, #24]
1135dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            ldr         r7, [sp, #28]
1145dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            ldr         r12, [sp, #32]
1155dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vpush       {d8-d15}
1165dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1175dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov.u8     d8, #1
1185dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov.u16    d8[0], r6
1195dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov.u16    d8[1], r7
1205dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov.u16    d8[2], r12
121e2af295f94c8fb17ba51d0e6a199d5ca265f92daChih-Hung Hsieh            vmov        d9, r4, r5
1225dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
12307e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            subs        r2, #8
12407e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            bge         2f
12507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            cmp         r2, #-8
12607e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            ble         9f
12707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            b           4f
1285dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1295dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            .align 6
13007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie1:          vst4.u8     {d12,d13,d14,d15}, [r0]!
1315dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/* r0  = dst
1325dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r1  = src
1335dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r2  = count
1345dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r3  = lut
1355dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r4  = pitchy
1365dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r5  = pitchz
1375dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r6 = offset0
1385dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * r7 = offset1
1395dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
14007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          vld4.u8     {d0,d2,d4,d6}, [r1]!
14107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie3:          vmov        d10, d6
1425dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/* q0,q1,q2,q5 source data
1435dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * q4 dimensions and pitches
1445dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * q3, scratch register for scalar access
1455dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
1465dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov        q3, q4
1475dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u8    q0, d0
1485dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u8    q1, d2
1495dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u8    q2, d4
1505dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmul.u16    q0, q0, d6[0]
1515dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmul.u16    q1, q1, d6[1]
1525dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmul.u16    q2, q2, d6[2]
1535dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1545dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/* vrsra.u16 below would be more accurate, but this can result in a dim.0 case
1555dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * where we try to read from the limit of the array and the limit +1 to
1565dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * interpolate, even though the fractional component is zero.  Strictly this is
1575dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * correct, except for the llegal access problem.
1585dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
1595dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vsra.u16    q0, q0, #8
1605dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vsra.u16    q1, q1, #8
1615dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vsra.u16    q2, q2, #8
1625dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1635dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshr.u16    q12, q0, #8
1645dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshr.u16    q13, q1, #8
1655dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshr.u16    q14, q2, #8
1665dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1675dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vbic.u16    q0, #0xff00
1685dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovn.u16   d2, q1
1695dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vbic.u16    q2, #0xff00
1705dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1715dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/* q0,d2,q2 fractional offset
1725dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie * q12,q13,q14 integer offset
1735dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie */
1745dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1755dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q6, d24, #2
1765dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vshll.u16   q7, d25, #2
1775dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u16   q8, d26
1785dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u16   q9, d27
1795dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u16   q10, d28
1805dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmovl.u16   q11, d29
1815dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmla.s32    q6, q8,  d9[0]
1825dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmla.s32    q7, q9,  d9[0]
1835dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmla.s32    q6, q10, d9[1]
1845dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmla.s32    q7, q11, d9[1]
1855dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1865dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie/* q6,q7 list of table offsets */
1875dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1885dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie        /* lanes 0 and 1 */
1895dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            lanepair dst=d12, src=d12, xr0=d0[0], xr1=d0[1], yr0=d2[0], yr1=d2[1], zr0=d4[0], zr1=d4[1]
1905dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1915dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie        /* lanes 2 and 3 */
1925dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            lanepair dst=d13, src=d13, xr0=d0[2], xr1=d0[3], yr0=d2[2], yr1=d2[3], zr0=d4[2], zr1=d4[3]
1935dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1945dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie        /* lanes 4 and 5 */
1955dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            lanepair dst=d14, src=d14, xr0=d1[0], xr1=d1[1], yr0=d2[4], yr1=d2[5], zr0=d5[0], zr1=d5[1]
1965dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
1975dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie        /* lanes 6 and 7 */
1985dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            lanepair dst=d15, src=d15, xr0=d1[2], xr1=d1[3], yr0=d2[6], yr1=d2[7], zr0=d5[2], zr1=d5[3]
1995dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
2005dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vuzp.u8     d12, d13
2015dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vuzp.u8     d14, d15
2025dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vuzp.u8     d12, d14
2035dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vuzp.u8     d13, d15
2045dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
20507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            subs        r2, r2, #8
2065dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vmov.u8     d15, d10
2075dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
20807e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            bge         1b
20907e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie
21007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            cmp         r2, #-8
21107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            blt         1f
21207e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie
2135dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vst4.u8     {d12,d13,d14,d15}, [r0]!
2145dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie
21507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         9f
21607e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie
21707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            /* fill the vector with a safe value */
21807e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie4:          vld1.u32    {d0[]}, [r1]
21907e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vmov        d2, d0
22007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vmov        d4, d0
22107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vmov        d6, d0
22207e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            tst         r2, #4
22307e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         2f
22407e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vld1.u32    {d0}, [r1]!
22507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vld1.u32    {d2}, [r1]!
22607e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          tst         r2, #2
22707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         2f
22807e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vld1.u32    {d4}, [r1]!
22907e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          tst         r2, #1
23007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         2f
23107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vld1.u32    {d6[0]}, [r1]!
23207e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          vuzp.8      d0, d2
23307e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vuzp.8      d4, d6
23407e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vuzp.8      d0, d4
23507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vuzp.8      d2, d6
23607e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            b           3b
23707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie
23807e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie1:          vzip.8      d12, d14
23907e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vzip.8      d13, d15
24007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vzip.8      d12, d13
24107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vzip.8      d14, d15
24207e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            tst         r2, #4
24307e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         2f
24407e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vst1.u32    {d12,d13}, [r0]!
24507e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          tst         r2, #2
24607e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         2f
24707e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vst1.u32    {d14}, [r0]!
24807e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie2:          tst         r2, #1
24907e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            beq         9f
25007e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie            vst1.u32    {d15[0]}, [r0]!
25107e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie
25207e4665c04a71462e6cfc1c2bb2300a9ed111e60Simon Hosie9:          mov         r0, #0
2535dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            vpop        {d8-d15}
2545dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            pop         {r4,r5,r6,r7}
2555dcaaa5f50926bebf6877e254c521faa7e2593e3Simon Hosie            bx lr
2565dcaaa5f50926bebf6877e254c521faa7e2593e3Simon HosieEND(rsdIntrinsic3DLUT_K)
257