2 * Copyright © 2008 Mozilla Corporation
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Mozilla Corporation not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission. Mozilla Corporation makes no
11 * representations about the suitability of this software for any purpose. It
12 * is provided "as is" without express or implied warranty.
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
15 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
17 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
19 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
20 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
23 * Author: Jeff Muizelaar (jeff@infidigm.net)
27 /* Prevent the stack from becoming executable */
28 #if defined(__linux__) && defined(__ELF__)
29 .section .note.GNU-stack,"",%progbits
38 /* Supplementary macro for setting function attributes */
39 .macro pixman_asm_function fname
44 .type fname, %function
50 * The code below was generated by gcc 4.3.4 from the commented out
51 * functions in 'pixman-arm-simd.c' file with the following optimization
52 * options: "-O3 -mcpu=arm1136jf-s -fomit-frame-pointer"
54 * TODO: replace gcc generated code with hand tuned versions because
55 * the code quality is not very good, introduce symbolic register
56 * aliases for better readability and maintainability.
59 pixman_asm_function pixman_composite_add_8000_8000_asm_armv6
60 push {r4, r5, r6, r7, r8, r9, r10, r11}
94 pop {r4, r5, r6, r7, r8, r9, r10, r11}
117 subs r12, r6, r5, lsl #2
136 pixman_asm_function pixman_composite_over_8888_8888_asm_armv6
137 push {r4, r5, r6, r7, r8, r9, r10, r11}
168 sub r8, r11, r5, lsr #24
170 uxtb16 r7, r4, ror #8
173 uxtab16 r6, r6, r6, ror #8
174 uxtab16 r7, r7, r7, ror #8
176 uxtab16 r6, r7, r6, ror #8
187 pop {r4, r5, r6, r7, r8, r9, r10, r11}
191 pixman_asm_function pixman_composite_over_8888_n_8888_asm_armv6
192 push {r4, r5, r6, r7, r8, r9, r10, r11}
227 uxtb16 r7, r5, ror #8
230 uxtab16 r6, r6, r6, ror #8
231 uxtab16 r7, r7, r7, ror #8
232 uxtb16 r6, r6, ror #8
233 uxtb16 r7, r7, ror #8
234 orr r5, r6, r7, lsl #8
236 uxtb16 r7, r4, ror #8
237 sub r8, r11, r5, lsr #24
240 uxtab16 r6, r6, r6, ror #8
241 uxtab16 r7, r7, r7, ror #8
242 uxtb16 r6, r6, ror #8
243 uxtb16 r7, r7, ror #8
244 orr r6, r6, r7, lsl #8
256 pop {r4, r5, r6, r7, r8, r9, r10, r11}
260 pixman_asm_function pixman_composite_over_n_8_8888_asm_armv6
261 push {r4, r5, r6, r7, r8, r9, r10, r11}
266 bic r1, r9, #-16777216
271 bic r1, r1, #-16777216
301 uxtab16 r6, r6, r6, ror #8
302 uxtab16 r7, r7, r7, ror #8
303 uxtb16 r6, r6, ror #8
304 uxtb16 r7, r7, ror #8
305 orr r5, r6, r7, lsl #8
307 uxtb16 r7, r4, ror #8
312 uxtab16 r6, r6, r6, ror #8
313 uxtab16 r7, r7, r7, ror #8
314 uxtb16 r6, r6, ror #8
315 uxtb16 r7, r7, ror #8
316 orr r6, r6, r7, lsl #8
328 pop {r4, r5, r6, r7, r8, r9, r10, r11}