1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Copyright 2006, The Android Open Source Project 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** you may not use this file except in compliance with the License. 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** You may obtain a copy of the License at 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** See the License for the specific language governing permissions and 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project** limitations under the License. 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project*/ 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project .text 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project .align 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project .global rotate90CW_4x4_16v6 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// Rotates 90deg CW a 4x4 block of 16bpp pixels using ARMv6 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// src and dst must be 4 pixels-aligned (2-pixels aligned might 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// actually work) 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project// The code below is complicated by ARM's little endianness. 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectrotate90CW_4x4_16v6: 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project // r0 = dst 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project // r1 = src 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project // r2 = dst stride in pixels 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project // r3 = src stride in pixels 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project stmfd sp!, {r4,r5, r6,r7, r8,r9, r10,r11, lr} 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project add r14, r3, r3 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project add r12, r2, r2 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ldrd r2, r3, [r1], r14 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ldrd r4, r5, [r1], r14 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ldrd r6, r7, [r1], r14 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ldrd r8, r9, [r1] 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhbt r10, r8, r6, lsl #16 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhbt r11, r4, r2, lsl #16 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strd r10, r11, [r0], r12 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhtb r10, r6, r8, asr #16 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhtb r11, r2, r4, asr #16 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strd r10, r11, [r0], r12 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhbt r10, r9, r7, lsl #16 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhbt r11, r5, r3, lsl #16 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strd r10, r11, [r0], r12 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhtb r10, r7, r9, asr #16 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pkhtb r11, r3, r5, asr #16 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strd r10, r11, [r0] 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ldmfd sp!, {r4,r5, r6,r7, r8,r9, r10,r11, pc} 63