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