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