/* ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ .text .align .global rotate90CW_4x4_16v6 // Rotates 90deg CW a 4x4 block of 16bpp pixels using ARMv6 // src and dst must be 4 pixels-aligned (2-pixels aligned might // actually work) // // The code below is complicated by ARM's little endianness. rotate90CW_4x4_16v6: // r0 = dst // r1 = src // r2 = dst stride in pixels // r3 = src stride in pixels stmfd sp!, {r4,r5, r6,r7, r8,r9, r10,r11, lr} add r14, r3, r3 add r12, r2, r2 ldrd r2, r3, [r1], r14 ldrd r4, r5, [r1], r14 ldrd r6, r7, [r1], r14 ldrd r8, r9, [r1] pkhbt r10, r8, r6, lsl #16 pkhbt r11, r4, r2, lsl #16 strd r10, r11, [r0], r12 pkhtb r10, r6, r8, asr #16 pkhtb r11, r2, r4, asr #16 strd r10, r11, [r0], r12 pkhbt r10, r9, r7, lsl #16 pkhbt r11, r5, r3, lsl #16 strd r10, r11, [r0], r12 pkhtb r10, r7, r9, asr #16 pkhtb r11, r3, r5, asr #16 strd r10, r11, [r0] ldmfd sp!, {r4,r5, r6,r7, r8,r9, r10,r11, pc}