19b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang/* 29b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 39b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * Copyright 2012 Samsung Electronics S.LSI Co. LTD 49b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 59b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * Licensed under the Apache License, Version 2.0 (the "License") 69b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * you may not use this file except in compliance with the License. 79b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * You may obtain a copy of the License at 89b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 99b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * http://www.apache.org/licenses/LICENSE-2.0 109b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 119b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * Unless required by applicable law or agreed to in writing, software 129b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * distributed under the License is distributed on an "AS IS" BASIS, 139b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * See the License for the specific language governing permissions and 159b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * limitations under the License. 169b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang */ 179b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 189b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang/* 199b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @file csc_tiled_to_linear_uv_deinterleave_neon.s 209b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @brief SEC_OMX specific define. It support MFC 6.x tiled. 219b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @author ShinWon Lee (shinwon.lee@samsung.com) 229b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @version 1.0 239b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @history 249b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 2012.02.01 : Create 259b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang */ 269b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 279b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang/* 289b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * Converts and Deinterleave tiled data to linear for mfc 6.x 299b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 1. UV of NV12T to Y of YUV420P 309b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 319b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @param u_dst 329b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * U address of YUV420[out] 339b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 349b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @param v_dst 359b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * V address of YUV420[out] 369b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 379b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @param uv_src 389b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * UV address of NV12T[in] 399b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 409b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @param yuv420_width 419b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * real width of YUV420[in]. It should be even. 429b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * 439b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * @param yuv420_height 449b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang * real height of YUV420[in] It should be even. 459b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang */ 469b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 479b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .arch armv7-a 489b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .text 499b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .global csc_tiled_to_linear_uv_deinterleave_neon 509b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .type csc_tiled_to_linear_uv_deinterleave_neon, %function 519b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Changcsc_tiled_to_linear_uv_deinterleave_neon: 529b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .fnstart 539b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 549b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .equ CACHE_LINE_SIZE, 64 559b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .equ PRE_LOAD_OFFSET, 6 569b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 579b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r0 u_dst 589b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r1 v_dst 599b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r2 uv_src 609b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r3 width 619b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r4 height 629b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r5 i 639b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r6 j 649b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r7 dst_offset 659b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r8 src_offset 669b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r9 aligned_height 679b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r10 aligned_width 689b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r11 tiled_width 699b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r12 temp1 709b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang @r14 temp2 719b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 729b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang stmfd sp!, {r4-r12,r14} @ backup registers 739b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldr r4, [sp, #40] @ r4 = height 749b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 759b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang bic r9, r4, #0x7 @ aligned_height = height & (~0x7) 769b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang bic r10, r3, #0xF @ aligned_width = width & (~0xF) 779b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r11, r3, #15 @ tiled_width = ((width + 15) >> 4) << 4 789b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r11, r11, asr #4 799b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r11, r11, lsl #4 809b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 819b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r5, #0 829b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_MAIN_ALIGNED_HEIGHT: 839b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r8, r11, r5 @ src_offset = tiled_width * i 849b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r6, #0 859b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r2, r8 @ src_offset = uv_src + src_offset 869b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_MAIN_ALIGNED_WIDTH: 879b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r12, r3, asr #1 @ temp1 = (width >> 1) * i + (j >> 1) 889b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r12, r12, r5 899b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 909b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang pld [r8, #(CACHE_LINE_SIZE*PRE_LOAD_OFFSET)] 919b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vld2.8 {q0, q1}, [r8]! 929b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r6, asr #1 939b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vld2.8 {q2, q3}, [r8]! 949b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r0, r12 @ dst_offset = u_dst + temp1 959b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang pld [r8, #(CACHE_LINE_SIZE*PRE_LOAD_OFFSET)] 969b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vld2.8 {q4, q5}, [r8]! 979b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r14, r3, asr #1 @ temp2 = width / 2 989b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vld2.8 {q6, q7}, [r8]! 999b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1009b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d0}, [r7], r14 1019b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d1}, [r7], r14 1029b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d4}, [r7], r14 1039b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d5}, [r7], r14 1049b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d8}, [r7], r14 1059b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d9}, [r7], r14 1069b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d12}, [r7], r14 1079b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d13}, [r7], r14 1089b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1099b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r1, r12 @ dst_offset = v_dst + temp1 1109b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1119b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d2}, [r7], r14 1129b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d3}, [r7], r14 1139b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d6}, [r7], r14 1149b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d7}, [r7], r14 1159b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d10}, [r7], r14 1169b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d11}, [r7], r14 1179b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r6, r6, #16 1189b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d14}, [r7], r14 1199b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r6, r10 1209b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d15}, [r7], r14 1219b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_MAIN_ALIGNED_WIDTH 1229b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1239b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangMAIN_REMAIN_WIDTH_START: 1249b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r10, r3 @ if (aligned_width != width) { 1259b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang beq MAIN_REMAIN_WIDTH_END 1269b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang stmfd sp!, {r0-r2,r4} @ backup registers 1279b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r8, r11, r5 @ src_offset = (tiled_width * i) + (j << 3) 1289b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r8, r6, lsl #3 1299b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r2, r8 @ r8 = uv_src + src_offset 1309b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r12, r3, asr #1 @ temp1 = (width >> 1) * i + (j >> 1) 1319b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r12, r12, r5 1329b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r6, asr #1 1339b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r0, r12 @ r7 = u_dst + temp1 1349b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r1, r12 @ r12 = v_dst + temp1 1359b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r14, r3, r6 @ r14 = (width - j) / 2 1369b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r14, r14, asr #1 1379b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1389b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r4, #0 1399b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_MAIN_REMAIN_HEIGHT: 1409b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r0, #0 @ r0 is index in de-interleave 1419b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_MAIN_REMAIN_WIDTH: 1429b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldrb r1, [r8], #1 1439b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldrb r2, [r8], #1 1449b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang strb r1, [r7], #1 1459b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang strb r2, [r12], #1 1469b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r0, #1 1479b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r0, r14 1489b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_MAIN_REMAIN_WIDTH 1499b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1509b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r8, r8, r14, lsl #1 1519b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r7, r7, r14 1529b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r12, r12, r14 1539b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r8, #16 1549b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r7, r3, asr #1 1559b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r3, asr #1 1569b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1579b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r4, #1 1589b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r4, #8 1599b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_MAIN_REMAIN_HEIGHT 1609b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldmfd sp!, {r0-r2,r4} @ restore registers 1619b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangMAIN_REMAIN_WIDTH_END: 1629b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1639b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r5, r5, #8 1649b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r5, r9 1659b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_MAIN_ALIGNED_HEIGHT 1669b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1679b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangREMAIN_HEIGHT_START: 1689b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r9, r4 @ if (aligned_height != height) { 1699b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang beq REMAIN_HEIGHT_END 1709b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1719b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r6, #0 1729b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_REMAIN_HEIGHT_WIDTH16: 1739b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r8, r11, r5 @ src_offset = (tiled_width * i) + (j << 3) 1749b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r8, r6, lsl #3 1759b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r2, r8 @ src_offset = uv_src + src_offset 1769b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1779b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r12, r3, asr #1 @ temp1 = (width >> 1) * i + (j >> 1) 1789b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r12, r12, r5 1799b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r6, asr #1 1809b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r0, r12 @ r7 = u_dst + temp1 1819b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r1, r12 @ r12 = v_dst + temp1 1829b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r14, r3, asr #1 @ temp2 = width / 2 1839b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1849b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang stmfd sp!, {r0-r1} @ backup registers 1859b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r0, #0 1869b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r1, r4, r9 1879b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_REMAIN_HEIGHT_WIDTH16_HEIGHT1: 1889b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vld2.8 {d0, d1}, [r8]! 1899b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d0}, [r7], r14 1909b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang vst1.8 {d1}, [r12], r14 1919b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1929b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r0, r0, #1 1939b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r0, r1 1949b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_REMAIN_HEIGHT_WIDTH16_HEIGHT1 1959b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldmfd sp!, {r0-r1} @ restore registers 1969b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 1979b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r6, r6, #16 1989b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r6, r10 1999b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_REMAIN_HEIGHT_WIDTH16 2009b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2019b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangREMAIN_HEIGHT_REMAIN_WIDTH_START: 2029b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r10, r3 2039b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang beq REMAIN_HEIGHT_REMAIN_WIDTH_END 2049b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r8, r11, r5 @ src_offset = (tiled_width * i) + (j << 3) 2059b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r8, r6, lsl #3 2069b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r2, r8 @ src_offset = uv_src + src_offset 2079b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2089b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r12, r3, asr #1 @ temp1 = (width >> 1) * i + (j >> 1) 2099b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mul r12, r12, r5 2109b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r6, asr #1 2119b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r0, r12 @ r7 = u_dst + temp1 2129b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r1, r12 @ r12 = v_dst + temp1 2139b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r14, r3, r6 @ r14 = (width - j) /2 2149b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r14, r14, asr #1 2159b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2169b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang stmfd sp!, {r0-r2,r4-r5} @ backup registers 2179b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r0, #0 2189b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r1, r4, r9 2199b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_REMAIN_HEIGHT_REMAIN_WIDTH_HEIGHT1: 2209b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2219b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang mov r4, #0 2229b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangLOOP_REMAIN_HEIGHT_REMAIN_WIDTH_HEIGHT1_WIDTHx: 2239b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldrb r2, [r8], #1 2249b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldrb r5, [r8], #1 2259b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang strb r2, [r7], #1 2269b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang strb r5, [r12], #1 2279b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r4, #1 2289b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r4, r14 2299b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_REMAIN_HEIGHT_REMAIN_WIDTH_HEIGHT1_WIDTHx 2309b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2319b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r8, r8, r14, lsl #1 2329b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r7, r7, r14 2339b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang sub r12, r12, r14 2349b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r8, r8, #16 2359b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r7, r7, r3, asr #1 2369b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r12, r12, r3, asr #1 2379b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2389b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang add r0, r0, #1 2399b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang cmp r0, r1 2409b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang blt LOOP_REMAIN_HEIGHT_REMAIN_WIDTH_HEIGHT1 2419b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldmfd sp!, {r0-r2,r4-r5} @ restore registers 2429b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2439b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangREMAIN_HEIGHT_REMAIN_WIDTH_END: 2449b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2459b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangREMAIN_HEIGHT_END: 2469b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2479b81eb7531233e152b01ee518e7c5df9b042ae77Jiho ChangRESTORE_REG: 2489b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang ldmfd sp!, {r4-r12,r15} @ restore registers 2499b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang 2509b81eb7531233e152b01ee518e7c5df9b042ae77Jiho Chang .fnend 251