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