aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-07-27 14:26:17 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-29 12:28:32 +0000
commit5f9b59b52db2b9a11d41bb7fa93ec5e5d6104236 (patch)
tree82c5e74b257ee4b5aaec55e6bc9bb05f2f05606f /src
parent31981ecdcb37ef54fd34a0358fc6be471b43a47e (diff)
use new Stage ABI for ARMv7 too
ARMv7 can pass 16 floats as function arguments. We've been slicing that as 8 2-float vectors. This CL switches to 4 4-float vectors. We'll now operate on 4 pixels at a time instead of 2, at the expense of keeping the d-vectors (mostly used for blending) on the stack. It'll be interesting to see how this plays out performance-wise. One nice side effect is now both ARMv7 and ARMv8 use 4-float NEON vectors. Most of the code is now shared, with just a couple checks to use new instructions added in ARMv8. It looks like we do see a ~15% win: $ bin/droid out/monobench SkRasterPipeline_srgb 200 Before: 644.029ns After: 547.301ns ARMv8: 453.838ns (just for reference) Change-Id: I184ff29a36499e3cdb4c284809d40880b02c2236 Reviewed-on: https://skia-review.googlesource.com/27701 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src')
-rw-r--r--src/jumper/SkJumper_generated.S10794
-rw-r--r--src/jumper/SkJumper_stages.cpp9
-rw-r--r--src/jumper/SkJumper_vectors.h149
3 files changed, 6284 insertions, 4668 deletions
diff --git a/src/jumper/SkJumper_generated.S b/src/jumper/SkJumper_generated.S
index fb0055af01..19c6f1c0fe 100644
--- a/src/jumper/SkJumper_generated.S
+++ b/src/jumper/SkJumper_generated.S
@@ -5550,47 +5550,46 @@ FUNCTION(_sk_start_pipeline_vfp4)
_sk_start_pipeline_vfp4:
.long 0xe92d4ff0 // push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
.long 0xe28db01c // add fp, sp, #28
- .long 0xe24dd014 // sub sp, sp, #20
+ .long 0xe24dd06c // sub sp, sp, #108
+ .long 0xe7c3d01f // bfc sp, #0, #4
.long 0xe1a06001 // mov r6, r1
.long 0xe1a05002 // mov r5, r2
+ .long 0xe1a09000 // mov r9, r0
.long 0xe1560003 // cmp r6, r3
- .long 0xe58d0010 // str r0, [sp, #16]
.long 0xe58d300c // str r3, [sp, #12]
- .long 0x2a000021 // bcs ac <sk_start_pipeline_vfp4+0xac>
+ .long 0x2a00001f // bcs a8 <sk_start_pipeline_vfp4+0xa8>
.long 0xe59b4008 // ldr r4, [fp, #8]
- .long 0xe3a09000 // mov r9, #0
- .long 0xe59ba00c // ldr sl, [fp, #12]
- .long 0xe59d0010 // ldr r0, [sp, #16]
- .long 0xe4948004 // ldr r8, [r4], #4
- .long 0xe2800002 // add r0, r0, #2
- .long 0xe58d0008 // str r0, [sp, #8]
- .long 0xe59d0008 // ldr r0, [sp, #8]
- .long 0xe59d7010 // ldr r7, [sp, #16]
- .long 0xe1500005 // cmp r0, r5
- .long 0x8a00000a // bhi 7c <sk_start_pipeline_vfp4+0x7c>
- .long 0xe59d7010 // ldr r7, [sp, #16]
- .long 0xe1a0000a // mov r0, sl
+ .long 0xe2898004 // add r8, r9, #4
+ .long 0xe28d7010 // add r7, sp, #16
+ .long 0xe494a004 // ldr sl, [r4], #4
+ .long 0xe3a00000 // mov r0, #0
+ .long 0xe58d9010 // str r9, [sp, #16]
+ .long 0xe58d6014 // str r6, [sp, #20]
+ .long 0xe1580005 // cmp r8, r5
+ .long 0xe58d0018 // str r0, [sp, #24]
+ .long 0xe59b000c // ldr r0, [fp, #12]
+ .long 0xe58d001c // str r0, [sp, #28]
+ .long 0xe1a00009 // mov r0, r9
+ .long 0x8a000008 // bhi 80 <sk_start_pipeline_vfp4+0x80>
+ .long 0xe1a00007 // mov r0, r7
.long 0xe1a01004 // mov r1, r4
- .long 0xe1a02007 // mov r2, r7
- .long 0xe1a03006 // mov r3, r6
- .long 0xe58d9000 // str r9, [sp]
- .long 0xe12fff38 // blx r8
- .long 0xe2870004 // add r0, r7, #4
- .long 0xe2877002 // add r7, r7, #2
- .long 0xe1500005 // cmp r0, r5
- .long 0x9afffff5 // bls 54 <sk_start_pipeline_vfp4+0x54>
- .long 0xe0550007 // subs r0, r5, r7
- .long 0x0a000005 // beq 9c <sk_start_pipeline_vfp4+0x9c>
- .long 0xe58d0000 // str r0, [sp]
- .long 0xe1a0000a // mov r0, sl
+ .long 0xe12fff3a // blx sl
+ .long 0xe59d1010 // ldr r1, [sp, #16]
+ .long 0xe2810004 // add r0, r1, #4
+ .long 0xe2811008 // add r1, r1, #8
+ .long 0xe1510005 // cmp r1, r5
+ .long 0xe58d0010 // str r0, [sp, #16]
+ .long 0x9afffff6 // bls 5c <sk_start_pipeline_vfp4+0x5c>
+ .long 0xe0550000 // subs r0, r5, r0
+ .long 0x0a000003 // beq 98 <sk_start_pipeline_vfp4+0x98>
+ .long 0xe58d0018 // str r0, [sp, #24]
+ .long 0xe1a00007 // mov r0, r7
.long 0xe1a01004 // mov r1, r4
- .long 0xe1a02007 // mov r2, r7
- .long 0xe1a03006 // mov r3, r6
- .long 0xe12fff38 // blx r8
+ .long 0xe12fff3a // blx sl
.long 0xe59d000c // ldr r0, [sp, #12]
.long 0xe2866001 // add r6, r6, #1
.long 0xe1560000 // cmp r6, r0
- .long 0x1affffe4 // bne 40 <sk_start_pipeline_vfp4+0x40>
+ .long 0x1affffe3 // bne 38 <sk_start_pipeline_vfp4+0x38>
.long 0xe24bd01c // sub sp, fp, #28
.long 0xe8bd8ff0 // pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
@@ -5599,999 +5598,1284 @@ HIDDEN _sk_just_return_vfp4
FUNCTION(_sk_just_return_vfp4)
_sk_just_return_vfp4:
.long 0xe12fff1e // bx lr
+ .long 0xe320f000 // nop {0}
HIDDEN _sk_seed_shader_vfp4
.globl _sk_seed_shader_vfp4
FUNCTION(_sk_seed_shader_vfp4)
_sk_seed_shader_vfp4:
- .long 0xee802b90 // vdup.32 d16, r2
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xee823b90 // vdup.32 d18, r3
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xedd03b00 // vldr d19, [r0]
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2872f10 // vmov.f32 d2, #1
- .long 0xf2803010 // vmov.i32 d3, #0
- .long 0xf2400da1 // vadd.f32 d16, d16, d17
- .long 0xf2021da1 // vadd.f32 d1, d18, d17
- .long 0xf2804010 // vmov.i32 d4, #0
- .long 0xf2805010 // vmov.i32 d5, #0
- .long 0xf2000da3 // vadd.f32 d0, d16, d19
- .long 0xf2806010 // vmov.i32 d6, #0
- .long 0xf2807010 // vmov.i32 d7, #0
- .long 0xe12fff1c // bx ip
+ .long 0xe1a02000 // mov r2, r0
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf4e20cbd // vld1.32 {d16[]-d17[]}, [r2 :32]!
+ .long 0xf2c06050 // vmov.i32 q11, #0
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xe590200c // ldr r2, [r0, #12]
+ .long 0xe28f3040 // add r3, pc, #64
+ .long 0xf2400de4 // vadd.f32 q8, q8, q10
+ .long 0xf4234acf // vld1.64 {d4-d5}, [r3]
+ .long 0xf4628a8f // vld1.32 {d24-d25}, [r2]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2022de4 // vadd.f32 q1, q9, q10
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2080de0 // vadd.f32 q0, q12, q8
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2806050 // vmov.i32 q3, #0
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_dither_vfp4
.globl _sk_dither_vfp4
FUNCTION(_sk_dither_vfp4)
_sk_dither_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xee802b90 // vdup.32 d16, r2
- .long 0xf2c02011 // vmov.i32 d18, #1
- .long 0xedd01b08 // vldr d17, [r0, #32]
- .long 0xf2c03014 // vmov.i32 d19, #4
- .long 0xf26108a0 // vadd.i32 d16, d17, d16
- .long 0xee853b90 // vdup.32 d21, r3
- .long 0xf2c01012 // vmov.i32 d17, #2
- .long 0xe3a0c5f2 // mov ip, #1015021568
- .long 0xf24041b2 // vand d20, d16, d18
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf24061b1 // vand d22, d16, d17
- .long 0xf34551b0 // veor d21, d21, d16
- .long 0xf24001b3 // vand d16, d16, d19
- .long 0xf2e44534 // vshl.s32 d20, d20, #4
- .long 0xf2e16536 // vshl.s32 d22, d22, #1
- .long 0xf24521b2 // vand d18, d21, d18
- .long 0xf3fe0030 // vshr.u32 d16, d16, #2
- .long 0xf26641b4 // vorr d20, d22, d20
- .long 0xf24511b1 // vand d17, d21, d17
- .long 0xf2e52532 // vshl.s32 d18, d18, #5
- .long 0xf26401b0 // vorr d16, d20, d16
- .long 0xf24531b3 // vand d19, d21, d19
- .long 0xf26001b2 // vorr d16, d16, d18
- .long 0xf2e21531 // vshl.s32 d17, d17, #2
- .long 0xf3ff2033 // vshr.u32 d18, d19, #1
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0xee81cb90 // vdup.32 d17, ip
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf26001b2 // vorr d16, d16, d18
+ .long 0xe590200c // ldr r2, [r0, #12]
+ .long 0xe1a03000 // mov r3, r0
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf2c04051 // vmov.i32 q10, #1
+ .long 0xe2822020 // add r2, r2, #32
+ .long 0xf2c06054 // vmov.i32 q11, #4
+ .long 0xf4e3acbf // vld1.32 {d26[]-d27[]}, [r3 :32]
+ .long 0xf4622a8f // vld1.32 {d18-d19}, [r2]
+ .long 0xe3a025f2 // mov r2, #1015021568
+ .long 0xf26208e0 // vadd.i32 q8, q9, q8
+ .long 0xf2c02052 // vmov.i32 q9, #2
+ .long 0xf24081f4 // vand q12, q8, q10
+ .long 0xf240c1f2 // vand q14, q8, q9
+ .long 0xf34aa1f0 // veor q13, q13, q8
+ .long 0xf24001f6 // vand q8, q8, q11
+ .long 0xf2e48578 // vshl.s32 q12, q12, #4
+ .long 0xf2e1c57c // vshl.s32 q14, q14, #1
+ .long 0xf24a41f4 // vand q10, q13, q10
+ .long 0xf3fe0070 // vshr.u32 q8, q8, #2
+ .long 0xf26c81f8 // vorr q12, q14, q12
+ .long 0xf24a21f2 // vand q9, q13, q9
+ .long 0xf2e54574 // vshl.s32 q10, q10, #5
+ .long 0xf26801f0 // vorr q8, q12, q8
+ .long 0xf24a61f6 // vand q11, q13, q11
+ .long 0xf26001f4 // vorr q8, q8, q10
+ .long 0xf2e22572 // vshl.s32 q9, q9, #2
+ .long 0xf3ff4076 // vshr.u32 q10, q11, #1
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xeea22b90 // vdup.32 q9, r2
+ .long 0xe28f2054 // add r2, pc, #84
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf26001f4 // vorr q8, q8, q10
+ .long 0xf2c06050 // vmov.i32 q11, #0
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3400df2 // vmul.f32 q8, q8, q9
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xeddf1b0e // vldr d17, [pc, #56]
- .long 0xf2400da1 // vadd.f32 d16, d16, d17
- .long 0xf4ee1c9f // vld1.32 {d17[]}, [lr :32]
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2401d80 // vadd.f32 d17, d16, d0
- .long 0xf2402d81 // vadd.f32 d18, d16, d1
- .long 0xf2400d82 // vadd.f32 d16, d16, d2
- .long 0xf2611f83 // vmin.f32 d17, d17, d3
- .long 0xf2622f83 // vmin.f32 d18, d18, d3
- .long 0xf2600f83 // vmin.f32 d16, d16, d3
- .long 0xf2030fa1 // vmax.f32 d0, d19, d17
- .long 0xf2031fa2 // vmax.f32 d1, d19, d18
- .long 0xf2032fa0 // vmax.f32 d2, d19, d16
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf2400de2 // vadd.f32 q8, q8, q9
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xf3420df0 // vmul.f32 q8, q9, q8
+ .long 0xf2402dc0 // vadd.f32 q9, q8, q0
+ .long 0xf2404dc2 // vadd.f32 q10, q8, q1
+ .long 0xf2400dc4 // vadd.f32 q8, q8, q2
+ .long 0xf2622fc6 // vmin.f32 q9, q9, q3
+ .long 0xf2644fc6 // vmin.f32 q10, q10, q3
+ .long 0xf2600fc6 // vmin.f32 q8, q8, q3
+ .long 0xf2060fe2 // vmax.f32 q0, q11, q9
+ .long 0xf2062fe4 // vmax.f32 q1, q11, q10
+ .long 0xf2064fe0 // vmax.f32 q2, q11, q8
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
.long 0xbefc0000 // .word 0xbefc0000
.long 0xbefc0000 // .word 0xbefc0000
+ .long 0xbefc0000 // .word 0xbefc0000
+ .long 0xbefc0000 // .word 0xbefc0000
HIDDEN _sk_uniform_color_vfp4
.globl _sk_uniform_color_vfp4
FUNCTION(_sk_uniform_color_vfp4)
_sk_uniform_color_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e500c // add r5, lr, #12
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4a40c9d // vld1.32 {d0[]}, [r4 :32]!
- .long 0xf4a53c9f // vld1.32 {d3[]}, [r5 :32]
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xf4a52c9f // vld1.32 {d2[]}, [r5 :32]
- .long 0xf4a41c9f // vld1.32 {d1[]}, [r4 :32]
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4ae0cbd // vld1.32 {d0[]-d1[]}, [lr :32]!
+ .long 0xf4a26cbf // vld1.32 {d6[]-d7[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf4a24cbf // vld1.32 {d4[]-d5[]}, [r2 :32]
+ .long 0xf4ae2cbf // vld1.32 {d2[]-d3[]}, [lr :32]
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_black_color_vfp4
.globl _sk_black_color_vfp4
FUNCTION(_sk_black_color_vfp4)
_sk_black_color_vfp4:
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2800010 // vmov.i32 d0, #0
- .long 0xf2801010 // vmov.i32 d1, #0
- .long 0xf2802010 // vmov.i32 d2, #0
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xe12fff1c // bx ip
+ .long 0xe28f2018 // add r2, pc, #24
+ .long 0xf2800050 // vmov.i32 q0, #0
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xf2802050 // vmov.i32 q1, #0
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_white_color_vfp4
.globl _sk_white_color_vfp4
FUNCTION(_sk_white_color_vfp4)
_sk_white_color_vfp4:
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2870f10 // vmov.f32 d0, #1
- .long 0xf2871f10 // vmov.f32 d1, #1
- .long 0xf2872f10 // vmov.f32 d2, #1
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xe12fff1c // bx ip
+ .long 0xe28f2018 // add r2, pc, #24
+ .long 0xf4220acf // vld1.64 {d0-d1}, [r2]
+ .long 0xf2202150 // vorr q1, q0, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2204150 // vorr q2, q0, q0
+ .long 0xf2206150 // vorr q3, q0, q0
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_load_rgba_vfp4
.globl _sk_load_rgba_vfp4
FUNCTION(_sk_load_rgba_vfp4)
_sk_load_rgba_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe1a0400e // mov r4, lr
- .long 0xed9e2b04 // vldr d2, [lr, #16]
- .long 0xf424078d // vld1.32 {d0}, [r4]!
- .long 0xed9e3b06 // vldr d3, [lr, #24]
- .long 0xed941b00 // vldr d1, [r4]
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe2832030 // add r2, r3, #48
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4226a8f // vld1.32 {d6-d7}, [r2]
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf42e0a8d // vld1.32 {d0-d1}, [lr]!
+ .long 0xf4224a8f // vld1.32 {d4-d5}, [r2]
+ .long 0xf42e2a8f // vld1.32 {d2-d3}, [lr]
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_store_rgba_vfp4
.globl _sk_store_rgba_vfp4
FUNCTION(_sk_store_rgba_vfp4)
_sk_store_rgba_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe1a0e00c // mov lr, ip
- .long 0xf40e078d // vst1.32 {d0}, [lr]!
- .long 0xed8e1b00 // vstr d1, [lr]
- .long 0xed8c2b04 // vstr d2, [ip, #16]
- .long 0xed8c3b06 // vstr d3, [ip, #24]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe1a03002 // mov r3, r2
+ .long 0xf4030a8d // vst1.32 {d0-d1}, [r3]!
+ .long 0xf4032a8f // vst1.32 {d2-d3}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xe2822030 // add r2, r2, #48
+ .long 0xf4034a8f // vst1.32 {d4-d5}, [r3]
+ .long 0xf4026a8f // vst1.32 {d6-d7}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
HIDDEN _sk_clear_vfp4
.globl _sk_clear_vfp4
FUNCTION(_sk_clear_vfp4)
_sk_clear_vfp4:
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2800010 // vmov.i32 d0, #0
- .long 0xf2801010 // vmov.i32 d1, #0
- .long 0xf2802010 // vmov.i32 d2, #0
- .long 0xf2803010 // vmov.i32 d3, #0
- .long 0xe12fff1c // bx ip
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2800050 // vmov.i32 q0, #0
+ .long 0xf2802050 // vmov.i32 q1, #0
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf2806050 // vmov.i32 q3, #0
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_srcatop_vfp4
.globl _sk_srcatop_vfp4
FUNCTION(_sk_srcatop_vfp4)
_sk_srcatop_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2603d83 // vsub.f32 d19, d16, d3
- .long 0xf3033d17 // vmul.f32 d3, d3, d7
- .long 0xf3430d94 // vmul.f32 d16, d19, d4
- .long 0xf3431d95 // vmul.f32 d17, d19, d5
- .long 0xf3432d96 // vmul.f32 d18, d19, d6
- .long 0xf2400c17 // vfma.f32 d16, d0, d7
- .long 0xf2411c17 // vfma.f32 d17, d1, d7
- .long 0xf2422c17 // vfma.f32 d18, d2, d7
- .long 0xf2033c97 // vfma.f32 d3, d19, d7
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2602dc6 // vsub.f32 q9, q8, q3
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3046dd6 // vmul.f32 q3, q10, q3
+ .long 0xf3042dd2 // vmul.f32 q1, q10, q1
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xf3044dd4 // vmul.f32 q2, q10, q2
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3420df0 // vmul.f32 q8, q9, q8
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xf2026cf4 // vfma.f32 q3, q9, q10
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2022cf6 // vfma.f32 q1, q9, q11
+ .long 0xf2440cd0 // vfma.f32 q8, q10, q0
+ .long 0xf2024cf8 // vfma.f32 q2, q9, q12
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_dstatop_vfp4
.globl _sk_dstatop_vfp4
FUNCTION(_sk_dstatop_vfp4)
_sk_dstatop_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3431d15 // vmul.f32 d17, d3, d5
- .long 0xf2604d87 // vsub.f32 d20, d16, d7
- .long 0xf3430d14 // vmul.f32 d16, d3, d4
- .long 0xf3432d16 // vmul.f32 d18, d3, d6
- .long 0xf3433d17 // vmul.f32 d19, d3, d7
- .long 0xf2440c90 // vfma.f32 d16, d20, d0
- .long 0xf2441c91 // vfma.f32 d17, d20, d1
- .long 0xf2442c92 // vfma.f32 d18, d20, d2
- .long 0xf2443c93 // vfma.f32 d19, d20, d3
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xf22331b3 // vorr d3, d19, d19
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2606de4 // vsub.f32 q11, q8, q10
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3400dd6 // vmul.f32 q8, q8, q3
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf3444dd6 // vmul.f32 q10, q10, q3
+ .long 0xf3422dd6 // vmul.f32 q9, q9, q3
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3064dd4 // vmul.f32 q2, q11, q2
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xf2460cd0 // vfma.f32 q8, q11, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2462cd2 // vfma.f32 q9, q11, q1
+ .long 0xf2464cd6 // vfma.f32 q10, q11, q3
+ .long 0xf2084cd6 // vfma.f32 q2, q12, q3
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22461f4 // vorr q3, q10, q10
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_srcin_vfp4
.globl _sk_srcin_vfp4
FUNCTION(_sk_srcin_vfp4)
_sk_srcin_vfp4:
- .long 0xf3000d17 // vmul.f32 d0, d0, d7
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3011d17 // vmul.f32 d1, d1, d7
- .long 0xf3022d17 // vmul.f32 d2, d2, d7
- .long 0xf3033d17 // vmul.f32 d3, d3, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xf3000dd0 // vmul.f32 q0, q8, q0
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3004dd4 // vmul.f32 q2, q8, q2
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_dstin_vfp4
.globl _sk_dstin_vfp4
FUNCTION(_sk_dstin_vfp4)
_sk_dstin_vfp4:
- .long 0xf3030d14 // vmul.f32 d0, d3, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3031d15 // vmul.f32 d1, d3, d5
- .long 0xf3032d16 // vmul.f32 d2, d3, d6
- .long 0xf3033d17 // vmul.f32 d3, d3, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3000dd6 // vmul.f32 q0, q8, q3
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3024dd6 // vmul.f32 q2, q9, q3
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf3042dd6 // vmul.f32 q1, q10, q3
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_srcout_vfp4
.globl _sk_srcout_vfp4
FUNCTION(_sk_srcout_vfp4)
_sk_srcout_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2600d87 // vsub.f32 d16, d16, d7
- .long 0xf3000d90 // vmul.f32 d0, d16, d0
- .long 0xf3001d91 // vmul.f32 d1, d16, d1
- .long 0xf3002d92 // vmul.f32 d2, d16, d2
- .long 0xf3003d93 // vmul.f32 d3, d16, d3
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3000dd0 // vmul.f32 q0, q8, q0
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xf3004dd4 // vmul.f32 q2, q8, q2
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_dstout_vfp4
.globl _sk_dstout_vfp4
FUNCTION(_sk_dstout_vfp4)
_sk_dstout_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf3000d94 // vmul.f32 d0, d16, d4
- .long 0xf3001d95 // vmul.f32 d1, d16, d5
- .long 0xf3002d96 // vmul.f32 d2, d16, d6
- .long 0xf3003d97 // vmul.f32 d3, d16, d7
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2600dc6 // vsub.f32 q8, q8, q3
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf3000df2 // vmul.f32 q0, q8, q9
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf3002df6 // vmul.f32 q1, q8, q11
+ .long 0xf3004df4 // vmul.f32 q2, q8, q10
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3006df2 // vmul.f32 q3, q8, q9
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_srcover_vfp4
.globl _sk_srcover_vfp4
FUNCTION(_sk_srcover_vfp4)
_sk_srcover_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf2040c30 // vfma.f32 d0, d4, d16
- .long 0xf2051c30 // vfma.f32 d1, d5, d16
- .long 0xf2062c30 // vfma.f32 d2, d6, d16
- .long 0xf2073c30 // vfma.f32 d3, d7, d16
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2600dc6 // vsub.f32 q8, q8, q3
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2020cf0 // vfma.f32 q0, q9, q8
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2042cf0 // vfma.f32 q1, q10, q8
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xf2024cf0 // vfma.f32 q2, q9, q8
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2046cf0 // vfma.f32 q3, q10, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_dstover_vfp4
.globl _sk_dstover_vfp4
FUNCTION(_sk_dstover_vfp4)
_sk_dstover_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2651115 // vorr d17, d5, d5
- .long 0xf2604d87 // vsub.f32 d20, d16, d7
- .long 0xf2640114 // vorr d16, d4, d4
- .long 0xf2662116 // vorr d18, d6, d6
- .long 0xf2673117 // vorr d19, d7, d7
- .long 0xf2400c34 // vfma.f32 d16, d0, d20
- .long 0xf2411c34 // vfma.f32 d17, d1, d20
- .long 0xf2422c34 // vfma.f32 d18, d2, d20
- .long 0xf2433c34 // vfma.f32 d19, d3, d20
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xf22331b3 // vorr d3, d19, d19
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2628de0 // vsub.f32 q12, q9, q8
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xf2402c78 // vfma.f32 q9, q0, q12
+ .long 0xf2424c78 // vfma.f32 q10, q1, q12
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2446c78 // vfma.f32 q11, q2, q12
+ .long 0xf2460c78 // vfma.f32 q8, q3, q12
+ .long 0xf22201f2 // vorr q0, q9, q9
+ .long 0xf22421f4 // vorr q1, q10, q10
+ .long 0xf22641f6 // vorr q2, q11, q11
+ .long 0xf22061f0 // vorr q3, q8, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_modulate_vfp4
.globl _sk_modulate_vfp4
FUNCTION(_sk_modulate_vfp4)
_sk_modulate_vfp4:
- .long 0xf3000d14 // vmul.f32 d0, d0, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3011d15 // vmul.f32 d1, d1, d5
- .long 0xf3022d16 // vmul.f32 d2, d2, d6
- .long 0xf3033d17 // vmul.f32 d3, d3, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3000dd0 // vmul.f32 q0, q8, q0
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3024dd4 // vmul.f32 q2, q9, q2
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf3042dd2 // vmul.f32 q1, q10, q1
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_multiply_vfp4
.globl _sk_multiply_vfp4
FUNCTION(_sk_multiply_vfp4)
_sk_multiply_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2601d87 // vsub.f32 d17, d16, d7
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf3412d90 // vmul.f32 d18, d17, d0
- .long 0xf3403d94 // vmul.f32 d19, d16, d4
- .long 0xf3414d91 // vmul.f32 d20, d17, d1
- .long 0xf3405d95 // vmul.f32 d21, d16, d5
- .long 0xf3416d92 // vmul.f32 d22, d17, d2
- .long 0xf3418d93 // vmul.f32 d24, d17, d3
- .long 0xf3407d96 // vmul.f32 d23, d16, d6
- .long 0xf3409d97 // vmul.f32 d25, d16, d7
- .long 0xf2430da2 // vadd.f32 d16, d19, d18
- .long 0xf2451da4 // vadd.f32 d17, d21, d20
- .long 0xf2472da6 // vadd.f32 d18, d23, d22
- .long 0xf2493da8 // vadd.f32 d19, d25, d24
- .long 0xf2400c14 // vfma.f32 d16, d0, d4
- .long 0xf2411c15 // vfma.f32 d17, d1, d5
- .long 0xf2422c16 // vfma.f32 d18, d2, d6
- .long 0xf2433c17 // vfma.f32 d19, d3, d7
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xf22331b3 // vorr d3, d19, d19
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf260ade8 // vsub.f32 q13, q8, q12
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2606dc6 // vsub.f32 q11, q8, q3
+ .long 0xf4228aef // vld1.64 {d8-d9}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf34a2dd4 // vmul.f32 q9, q13, q2
+ .long 0xf34aedd6 // vmul.f32 q15, q13, q3
+ .long 0xf3460dfc // vmul.f32 q8, q11, q14
+ .long 0xf3464df8 // vmul.f32 q10, q11, q12
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf2442dee // vadd.f32 q9, q10, q15
+ .long 0xf34aedd0 // vmul.f32 q15, q13, q0
+ .long 0xf3464dd8 // vmul.f32 q10, q11, q4
+ .long 0xf34aadd2 // vmul.f32 q13, q13, q1
+ .long 0xf24c0cd4 // vfma.f32 q8, q14, q2
+ .long 0xf2482cd6 // vfma.f32 q9, q12, q3
+ .long 0xf2444dee // vadd.f32 q10, q10, q15
+ .long 0xf462eaef // vld1.64 {d30-d31}, [r2 :128]
+ .long 0xf3466dfe // vmul.f32 q11, q11, q15
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2484c50 // vfma.f32 q10, q4, q0
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xf2466dea // vadd.f32 q11, q11, q13
+ .long 0xf22261f2 // vorr q3, q9, q9
+ .long 0xf24e6cd2 // vfma.f32 q11, q15, q1
+ .long 0xf22401f4 // vorr q0, q10, q10
+ .long 0xf22621f6 // vorr q1, q11, q11
+ .long 0xecbd8b04 // vpop {d8-d9}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_plus__vfp4
.globl _sk_plus__vfp4
FUNCTION(_sk_plus__vfp4)
_sk_plus__vfp4:
- .long 0xf2000d04 // vadd.f32 d0, d0, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2011d05 // vadd.f32 d1, d1, d5
- .long 0xf2022d06 // vadd.f32 d2, d2, d6
- .long 0xf2033d07 // vadd.f32 d3, d3, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2000dc0 // vadd.f32 q0, q8, q0
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2022dc2 // vadd.f32 q1, q9, q1
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2004dc4 // vadd.f32 q2, q8, q2
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2026dc6 // vadd.f32 q3, q9, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_screen_vfp4
.globl _sk_screen_vfp4
FUNCTION(_sk_screen_vfp4)
_sk_screen_vfp4:
- .long 0xf2400d04 // vadd.f32 d16, d0, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2411d05 // vadd.f32 d17, d1, d5
- .long 0xf2422d06 // vadd.f32 d18, d2, d6
- .long 0xf2433d07 // vadd.f32 d19, d3, d7
- .long 0xf2600c14 // vfms.f32 d16, d0, d4
- .long 0xf2611c15 // vfms.f32 d17, d1, d5
- .long 0xf2622c16 // vfms.f32 d18, d2, d6
- .long 0xf2633c17 // vfms.f32 d19, d3, d7
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xf22331b3 // vorr d3, d19, d19
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2460dc0 // vadd.f32 q8, q11, q0
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2482dc2 // vadd.f32 q9, q12, q1
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf24a4dc4 // vadd.f32 q10, q13, q2
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xf2660cd0 // vfms.f32 q8, q11, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf24c6dc6 // vadd.f32 q11, q14, q3
+ .long 0xf2682cd2 // vfms.f32 q9, q12, q1
+ .long 0xf26a4cd4 // vfms.f32 q10, q13, q2
+ .long 0xf26c6cd6 // vfms.f32 q11, q14, q3
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22441f4 // vorr q2, q10, q10
+ .long 0xf22661f6 // vorr q3, q11, q11
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_xor__vfp4
.globl _sk_xor__vfp4
FUNCTION(_sk_xor__vfp4)
_sk_xor__vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2603d83 // vsub.f32 d19, d16, d3
- .long 0xf2604d87 // vsub.f32 d20, d16, d7
- .long 0xf3430d94 // vmul.f32 d16, d19, d4
- .long 0xf3431d95 // vmul.f32 d17, d19, d5
- .long 0xf3432d96 // vmul.f32 d18, d19, d6
- .long 0xf3433d97 // vmul.f32 d19, d19, d7
- .long 0xf2440c90 // vfma.f32 d16, d20, d0
- .long 0xf2441c91 // vfma.f32 d17, d20, d1
- .long 0xf2442c92 // vfma.f32 d18, d20, d2
- .long 0xf2443c93 // vfma.f32 d19, d20, d3
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xf22331b3 // vorr d3, d19, d19
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2606dc6 // vsub.f32 q11, q8, q3
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2608de4 // vsub.f32 q12, q8, q10
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3460df2 // vmul.f32 q8, q11, q9
+ .long 0xf3462dfa // vmul.f32 q9, q11, q13
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xf3464df4 // vmul.f32 q10, q11, q10
+ .long 0xf3084dd4 // vmul.f32 q2, q12, q2
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2480cd0 // vfma.f32 q8, q12, q0
+ .long 0xf2482cd2 // vfma.f32 q9, q12, q1
+ .long 0xf2484cd6 // vfma.f32 q10, q12, q3
+ .long 0xf2064cfa // vfma.f32 q2, q11, q13
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22461f4 // vorr q3, q10, q10
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_darken_vfp4
.globl _sk_darken_vfp4
FUNCTION(_sk_darken_vfp4)
_sk_darken_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3431d14 // vmul.f32 d17, d3, d4
- .long 0xf3402d17 // vmul.f32 d18, d0, d7
- .long 0xf3433d15 // vmul.f32 d19, d3, d5
- .long 0xf3414d17 // vmul.f32 d20, d1, d7
- .long 0xf3435d16 // vmul.f32 d21, d3, d6
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf3426d17 // vmul.f32 d22, d2, d7
- .long 0xf2421fa1 // vmax.f32 d17, d18, d17
- .long 0xf2407d04 // vadd.f32 d23, d0, d4
- .long 0xf2443fa3 // vmax.f32 d19, d20, d19
- .long 0xf2412d05 // vadd.f32 d18, d1, d5
- .long 0xf2424d06 // vadd.f32 d20, d2, d6
- .long 0xf2465fa5 // vmax.f32 d21, d22, d21
- .long 0xf2073c30 // vfma.f32 d3, d7, d16
- .long 0xf2270da1 // vsub.f32 d0, d23, d17
- .long 0xf2221da3 // vsub.f32 d1, d18, d19
- .long 0xf2242da5 // vsub.f32 d2, d20, d21
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf340add0 // vmul.f32 q13, q8, q0
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3446dd6 // vmul.f32 q11, q10, q3
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xf340edd2 // vmul.f32 q15, q8, q1
+ .long 0xf348cdd6 // vmul.f32 q14, q12, q3
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2444dc0 // vadd.f32 q10, q10, q0
+ .long 0xf24a6fe6 // vmax.f32 q11, q13, q11
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xf24ecfec // vmax.f32 q14, q15, q14
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf24aedc4 // vadd.f32 q15, q13, q2
+ .long 0xf34aadd6 // vmul.f32 q13, q13, q3
+ .long 0xf3000dd4 // vmul.f32 q0, q8, q2
+ .long 0xf2622dc6 // vsub.f32 q9, q9, q3
+ .long 0xf2488dc2 // vadd.f32 q12, q12, q1
+ .long 0xf240af6a // vmax.f32 q13, q0, q13
+ .long 0xf2006cf2 // vfma.f32 q3, q8, q9
+ .long 0xf2240de6 // vsub.f32 q0, q10, q11
+ .long 0xf2282dec // vsub.f32 q1, q12, q14
+ .long 0xf22e4dea // vsub.f32 q2, q15, q13
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_lighten_vfp4
.globl _sk_lighten_vfp4
FUNCTION(_sk_lighten_vfp4)
_sk_lighten_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3431d14 // vmul.f32 d17, d3, d4
- .long 0xf3402d17 // vmul.f32 d18, d0, d7
- .long 0xf3433d15 // vmul.f32 d19, d3, d5
- .long 0xf3414d17 // vmul.f32 d20, d1, d7
- .long 0xf3435d16 // vmul.f32 d21, d3, d6
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf3426d17 // vmul.f32 d22, d2, d7
- .long 0xf2621fa1 // vmin.f32 d17, d18, d17
- .long 0xf2407d04 // vadd.f32 d23, d0, d4
- .long 0xf2643fa3 // vmin.f32 d19, d20, d19
- .long 0xf2412d05 // vadd.f32 d18, d1, d5
- .long 0xf2424d06 // vadd.f32 d20, d2, d6
- .long 0xf2665fa5 // vmin.f32 d21, d22, d21
- .long 0xf2073c30 // vfma.f32 d3, d7, d16
- .long 0xf2270da1 // vsub.f32 d0, d23, d17
- .long 0xf2221da3 // vsub.f32 d1, d18, d19
- .long 0xf2242da5 // vsub.f32 d2, d20, d21
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf340add0 // vmul.f32 q13, q8, q0
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3446dd6 // vmul.f32 q11, q10, q3
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xf340edd2 // vmul.f32 q15, q8, q1
+ .long 0xf348cdd6 // vmul.f32 q14, q12, q3
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2444dc0 // vadd.f32 q10, q10, q0
+ .long 0xf26a6fe6 // vmin.f32 q11, q13, q11
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xf26ecfec // vmin.f32 q14, q15, q14
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf24aedc4 // vadd.f32 q15, q13, q2
+ .long 0xf34aadd6 // vmul.f32 q13, q13, q3
+ .long 0xf3000dd4 // vmul.f32 q0, q8, q2
+ .long 0xf2622dc6 // vsub.f32 q9, q9, q3
+ .long 0xf2488dc2 // vadd.f32 q12, q12, q1
+ .long 0xf260af6a // vmin.f32 q13, q0, q13
+ .long 0xf2006cf2 // vfma.f32 q3, q8, q9
+ .long 0xf2240de6 // vsub.f32 q0, q10, q11
+ .long 0xf2282dec // vsub.f32 q1, q12, q14
+ .long 0xf22e4dea // vsub.f32 q2, q15, q13
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_difference_vfp4
.globl _sk_difference_vfp4
FUNCTION(_sk_difference_vfp4)
_sk_difference_vfp4:
- .long 0xf3430d14 // vmul.f32 d16, d3, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3401d17 // vmul.f32 d17, d0, d7
- .long 0xf3432d15 // vmul.f32 d18, d3, d5
- .long 0xf3413d17 // vmul.f32 d19, d1, d7
- .long 0xf3434d16 // vmul.f32 d20, d3, d6
- .long 0xf3425d17 // vmul.f32 d21, d2, d7
- .long 0xf2c76f10 // vmov.f32 d22, #1
- .long 0xf2610fa0 // vmin.f32 d16, d17, d16
- .long 0xf2631fa2 // vmin.f32 d17, d19, d18
- .long 0xf2662d83 // vsub.f32 d18, d22, d3
- .long 0xf2653fa4 // vmin.f32 d19, d21, d20
- .long 0xf2404d04 // vadd.f32 d20, d0, d4
- .long 0xf2400da0 // vadd.f32 d16, d16, d16
- .long 0xf2073c32 // vfma.f32 d3, d7, d18
- .long 0xf2415d05 // vadd.f32 d21, d1, d5
- .long 0xf2411da1 // vadd.f32 d17, d17, d17
- .long 0xf2426d06 // vadd.f32 d22, d2, d6
- .long 0xf2432da3 // vadd.f32 d18, d19, d19
- .long 0xf2240da0 // vsub.f32 d0, d20, d16
- .long 0xf2251da1 // vsub.f32 d1, d21, d17
- .long 0xf2262da2 // vsub.f32 d2, d22, d18
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf3404dd6 // vmul.f32 q10, q8, q3
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3426dd0 // vmul.f32 q11, q9, q0
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xf342cdd4 // vmul.f32 q14, q9, q2
+ .long 0xf348add6 // vmul.f32 q13, q12, q3
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf342edd2 // vmul.f32 q15, q9, q1
+ .long 0xf2400dc0 // vadd.f32 q8, q8, q0
+ .long 0xf2664fe4 // vmin.f32 q10, q11, q10
+ .long 0xf26c6fea // vmin.f32 q11, q14, q13
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xf34acdd6 // vmul.f32 q14, q13, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2444de4 // vadd.f32 q10, q10, q10
+ .long 0xf24aadc2 // vadd.f32 q13, q13, q1
+ .long 0xf26ecfec // vmin.f32 q14, q15, q14
+ .long 0xf2c7ef50 // vmov.f32 q15, #1
+ .long 0xf2488dc4 // vadd.f32 q12, q12, q2
+ .long 0xf26eedc6 // vsub.f32 q15, q15, q3
+ .long 0xf24ccdec // vadd.f32 q14, q14, q14
+ .long 0xf2466de6 // vadd.f32 q11, q11, q11
+ .long 0xf2026cfe // vfma.f32 q3, q9, q15
+ .long 0xf2200de4 // vsub.f32 q0, q8, q10
+ .long 0xf22a2dec // vsub.f32 q1, q13, q14
+ .long 0xf2284de6 // vsub.f32 q2, q12, q11
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_exclusion_vfp4
.globl _sk_exclusion_vfp4
FUNCTION(_sk_exclusion_vfp4)
_sk_exclusion_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3401d14 // vmul.f32 d17, d0, d4
- .long 0xf3412d15 // vmul.f32 d18, d1, d5
- .long 0xf3423d16 // vmul.f32 d19, d2, d6
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf2404d04 // vadd.f32 d20, d0, d4
- .long 0xf2411da1 // vadd.f32 d17, d17, d17
- .long 0xf2415d05 // vadd.f32 d21, d1, d5
- .long 0xf2422da2 // vadd.f32 d18, d18, d18
- .long 0xf2426d06 // vadd.f32 d22, d2, d6
- .long 0xf2433da3 // vadd.f32 d19, d19, d19
- .long 0xf2073c30 // vfma.f32 d3, d7, d16
- .long 0xf2240da1 // vsub.f32 d0, d20, d17
- .long 0xf2251da2 // vsub.f32 d1, d21, d18
- .long 0xf2262da3 // vsub.f32 d2, d22, d19
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf3424dd0 // vmul.f32 q10, q9, q0
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3468dd2 // vmul.f32 q12, q11, q1
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xf2600dc6 // vsub.f32 q8, q8, q3
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf34acdd4 // vmul.f32 q14, q13, q2
+ .long 0xf462eaef // vld1.64 {d30-d31}, [r2 :128]
+ .long 0xf2422dc0 // vadd.f32 q9, q9, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2444de4 // vadd.f32 q10, q10, q10
+ .long 0xf2466dc2 // vadd.f32 q11, q11, q1
+ .long 0xf2488de8 // vadd.f32 q12, q12, q12
+ .long 0xf24aadc4 // vadd.f32 q13, q13, q2
+ .long 0xf24ccdec // vadd.f32 q14, q14, q14
+ .long 0xf20e6cf0 // vfma.f32 q3, q15, q8
+ .long 0xf2220de4 // vsub.f32 q0, q9, q10
+ .long 0xf2262de8 // vsub.f32 q1, q11, q12
+ .long 0xf22a4dec // vsub.f32 q2, q13, q14
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_colorburn_vfp4
.globl _sk_colorburn_vfp4
FUNCTION(_sk_colorburn_vfp4)
_sk_colorburn_vfp4:
- .long 0xed2d8b08 // vpush {d8-d11}
- .long 0xf2670d04 // vsub.f32 d16, d7, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2671d06 // vsub.f32 d17, d7, d6
- .long 0xf2672d05 // vsub.f32 d18, d7, d5
- .long 0xf3008d93 // vmul.f32 d8, d16, d3
- .long 0xf3019d93 // vmul.f32 d9, d17, d3
- .long 0xf302ad93 // vmul.f32 d10, d18, d3
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xeec8baa0 // vdiv.f32 s23, s17, s1
- .long 0xee88ba00 // vdiv.f32 s22, s16, s0
- .long 0xeec98aa2 // vdiv.f32 s17, s19, s5
- .long 0xee898a02 // vdiv.f32 s16, s18, s4
- .long 0xeeca9aa1 // vdiv.f32 s19, s21, s3
- .long 0xee8a9a01 // vdiv.f32 s18, s20, s2
- .long 0xf2672f08 // vmin.f32 d18, d7, d8
- .long 0xf2673f09 // vmin.f32 d19, d7, d9
- .long 0xf2670f0b // vmin.f32 d16, d7, d11
- .long 0xf2614d87 // vsub.f32 d20, d17, d7
- .long 0xf2672d22 // vsub.f32 d18, d7, d18
- .long 0xf2673d23 // vsub.f32 d19, d7, d19
- .long 0xf2611d83 // vsub.f32 d17, d17, d3
- .long 0xf2670d20 // vsub.f32 d16, d7, d16
- .long 0xf3445d90 // vmul.f32 d21, d20, d0
- .long 0xf3446d92 // vmul.f32 d22, d20, d2
- .long 0xf3422d93 // vmul.f32 d18, d18, d3
- .long 0xf3444d91 // vmul.f32 d20, d20, d1
- .long 0xf3433d93 // vmul.f32 d19, d19, d3
- .long 0xf3400d93 // vmul.f32 d16, d16, d3
- .long 0xf3417d95 // vmul.f32 d23, d17, d5
- .long 0xf3418d94 // vmul.f32 d24, d17, d4
- .long 0xf3419d96 // vmul.f32 d25, d17, d6
- .long 0xf2443da3 // vadd.f32 d19, d20, d19
- .long 0xf2462da2 // vadd.f32 d18, d22, d18
- .long 0xf245ada0 // vadd.f32 d26, d21, d16
- .long 0xf247bd81 // vadd.f32 d27, d23, d1
- .long 0xf248cd80 // vadd.f32 d28, d24, d0
- .long 0xf249dd82 // vadd.f32 d29, d25, d2
- .long 0xf2073c31 // vfma.f32 d3, d7, d17
- .long 0xf2499da2 // vadd.f32 d25, d25, d18
- .long 0xf2473da3 // vadd.f32 d19, d23, d19
- .long 0xf3f97501 // vceq.f32 d23, d1, #0
- .long 0xf2455d84 // vadd.f32 d21, d21, d4
- .long 0xf2444d85 // vadd.f32 d20, d20, d5
- .long 0xf2440e07 // vceq.f32 d16, d4, d7
- .long 0xf2466d86 // vadd.f32 d22, d22, d6
- .long 0xf2451e07 // vceq.f32 d17, d5, d7
- .long 0xf2462e07 // vceq.f32 d18, d6, d7
- .long 0xf35b71b3 // vbsl d23, d27, d19
- .long 0xf3f93500 // vceq.f32 d19, d0, #0
- .long 0xf2488daa // vadd.f32 d24, d24, d26
- .long 0xf35c31b8 // vbsl d19, d28, d24
- .long 0xf3f98502 // vceq.f32 d24, d2, #0
- .long 0xf35d81b9 // vbsl d24, d29, d25
- .long 0xf35501b3 // vbsl d16, d21, d19
- .long 0xf35411b7 // vbsl d17, d20, d23
- .long 0xf35621b8 // vbsl d18, d22, d24
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xecbd8b08 // vpop {d8-d11}
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf2c76f50 // vmov.f32 q11, #1
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2668dc6 // vsub.f32 q12, q11, q3
+ .long 0xf3b9c540 // vceq.f32 q6, q0, #0
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2604de2 // vsub.f32 q10, q8, q9
+ .long 0xf266cde0 // vsub.f32 q14, q11, q8
+ .long 0xf348edf2 // vmul.f32 q15, q12, q9
+ .long 0xf3048dd6 // vmul.f32 q4, q10, q3
+ .long 0xeec9baa5 // vdiv.f32 s23, s19, s11
+ .long 0xee89ba05 // vdiv.f32 s22, s18, s10
+ .long 0xeec8aaa4 // vdiv.f32 s21, s17, s9
+ .long 0xee88aa04 // vdiv.f32 s20, s16, s8
+ .long 0xf2604fca // vmin.f32 q10, q8, q5
+ .long 0xf260ade4 // vsub.f32 q13, q8, q10
+ .long 0xf34c4dd4 // vmul.f32 q10, q14, q2
+ .long 0xf34a6dd6 // vmul.f32 q11, q13, q3
+ .long 0xf462aaef // vld1.64 {d26-d27}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2446de6 // vadd.f32 q11, q10, q11
+ .long 0xf20eade6 // vadd.f32 q5, q15, q11
+ .long 0xf2606dea // vsub.f32 q11, q8, q13
+ .long 0xf24eedc4 // vadd.f32 q15, q15, q2
+ .long 0xf3068dd6 // vmul.f32 q4, q11, q3
+ .long 0xf3f96544 // vceq.f32 q11, q2, #0
+ .long 0xf35e61da // vbsl q11, q15, q5
+ .long 0xeec95aa3 // vdiv.f32 s11, s19, s7
+ .long 0xee895a03 // vdiv.f32 s10, s18, s6
+ .long 0xeec84aa2 // vdiv.f32 s9, s17, s5
+ .long 0xee884a02 // vdiv.f32 s8, s16, s4
+ .long 0xf260efc4 // vmin.f32 q15, q8, q2
+ .long 0xf30c8dd2 // vmul.f32 q4, q14, q1
+ .long 0xf3084dfa // vmul.f32 q2, q12, q13
+ .long 0xf34ccdd0 // vmul.f32 q14, q14, q0
+ .long 0xf260edee // vsub.f32 q15, q8, q15
+ .long 0xf34eedd6 // vmul.f32 q15, q15, q3
+ .long 0xf248ed6e // vadd.f32 q15, q4, q15
+ .long 0xf204ad6e // vadd.f32 q5, q2, q15
+ .long 0xf3f9e542 // vceq.f32 q15, q1, #0
+ .long 0xf2044d42 // vadd.f32 q2, q2, q1
+ .long 0xf354e15a // vbsl q15, q2, q5
+ .long 0xf422aaef // vld1.64 {d10-d11}, [r2 :128]
+ .long 0xf2202dca // vsub.f32 q1, q8, q5
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3022d56 // vmul.f32 q1, q1, q3
+ .long 0xeec35aa1 // vdiv.f32 s11, s7, s3
+ .long 0xee835a01 // vdiv.f32 s10, s6, s2
+ .long 0xeec24aa0 // vdiv.f32 s9, s5, s1
+ .long 0xee824a00 // vdiv.f32 s8, s4, s0
+ .long 0xf2202fc4 // vmin.f32 q1, q8, q2
+ .long 0xf3084dda // vmul.f32 q2, q12, q5
+ .long 0xf2202dc2 // vsub.f32 q1, q8, q1
+ .long 0xf3022d56 // vmul.f32 q1, q1, q3
+ .long 0xf2006cf8 // vfma.f32 q3, q8, q12
+ .long 0xf20c2dc2 // vadd.f32 q1, q14, q1
+ .long 0xf2042d42 // vadd.f32 q1, q2, q1
+ .long 0xf2044d40 // vadd.f32 q2, q2, q0
+ .long 0xf20a0e60 // vceq.f32 q0, q5, q8
+ .long 0xf314c152 // vbsl q6, q2, q1
+ .long 0xf2024ee0 // vceq.f32 q2, q9, q8
+ .long 0xf2442de2 // vadd.f32 q9, q10, q9
+ .long 0xf20a2ee0 // vceq.f32 q1, q13, q8
+ .long 0xf2484d6a // vadd.f32 q10, q4, q13
+ .long 0xf24a0d6c // vadd.f32 q8, q5, q14
+ .long 0xf31241f6 // vbsl q2, q9, q11
+ .long 0xf31421fe // vbsl q1, q10, q15
+ .long 0xf31001dc // vbsl q0, q8, q6
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_colordodge_vfp4
.globl _sk_colordodge_vfp4
FUNCTION(_sk_colordodge_vfp4)
_sk_colordodge_vfp4:
- .long 0xed2d8b0e // vpush {d8-d14}
- .long 0xf2238d02 // vsub.f32 d8, d3, d2
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3039d16 // vmul.f32 d9, d3, d6
- .long 0xf223ad01 // vsub.f32 d10, d3, d1
- .long 0xf303bd15 // vmul.f32 d11, d3, d5
- .long 0xf223cd00 // vsub.f32 d12, d3, d0
- .long 0xf303dd14 // vmul.f32 d13, d3, d4
- .long 0xeec9eaa8 // vdiv.f32 s29, s19, s17
- .long 0xee89ea08 // vdiv.f32 s28, s18, s16
- .long 0xeecb8aaa // vdiv.f32 s17, s23, s21
- .long 0xeecd9aac // vdiv.f32 s19, s27, s25
- .long 0xee8b8a0a // vdiv.f32 s16, s22, s20
- .long 0xee8d9a0c // vdiv.f32 s18, s26, s24
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xf2672f0e // vmin.f32 d18, d7, d14
- .long 0xf2601d87 // vsub.f32 d17, d16, d7
- .long 0xf2673f08 // vmin.f32 d19, d7, d8
- .long 0xf2674f09 // vmin.f32 d20, d7, d9
- .long 0xf2600d83 // vsub.f32 d16, d16, d3
- .long 0xf3415d92 // vmul.f32 d21, d17, d2
- .long 0xf3422d93 // vmul.f32 d18, d18, d3
- .long 0xf3416d91 // vmul.f32 d22, d17, d1
- .long 0xf3433d93 // vmul.f32 d19, d19, d3
- .long 0xf3411d90 // vmul.f32 d17, d17, d0
- .long 0xf3444d93 // vmul.f32 d20, d20, d3
- .long 0xf3407d95 // vmul.f32 d23, d16, d5
- .long 0xf3408d94 // vmul.f32 d24, d16, d4
- .long 0xf3409d96 // vmul.f32 d25, d16, d6
- .long 0xf2452da2 // vadd.f32 d18, d21, d18
- .long 0xf2463da3 // vadd.f32 d19, d22, d19
- .long 0xf2414da4 // vadd.f32 d20, d17, d20
- .long 0xf241ae03 // vceq.f32 d26, d1, d3
- .long 0xf247bd81 // vadd.f32 d27, d23, d1
- .long 0xf3b91505 // vceq.f32 d1, d5, #0
- .long 0xf240ce03 // vceq.f32 d28, d0, d3
- .long 0xf248dd80 // vadd.f32 d29, d24, d0
- .long 0xf3b90504 // vceq.f32 d0, d4, #0
- .long 0xf242ee03 // vceq.f32 d30, d2, d3
- .long 0xf249fd82 // vadd.f32 d31, d25, d2
- .long 0xf3b92506 // vceq.f32 d2, d6, #0
- .long 0xf2073c30 // vfma.f32 d3, d7, d16
- .long 0xf2410d84 // vadd.f32 d16, d17, d4
- .long 0xf2491da2 // vadd.f32 d17, d25, d18
- .long 0xf2462d85 // vadd.f32 d18, d22, d5
- .long 0xf2455d86 // vadd.f32 d21, d21, d6
- .long 0xf2473da3 // vadd.f32 d19, d23, d19
- .long 0xf2484da4 // vadd.f32 d20, d24, d20
- .long 0xf35fe1b1 // vbsl d30, d31, d17
- .long 0xf35ba1b3 // vbsl d26, d27, d19
- .long 0xf35dc1b4 // vbsl d28, d29, d20
- .long 0xf31001bc // vbsl d0, d16, d28
- .long 0xf31211ba // vbsl d1, d18, d26
- .long 0xf31521be // vbsl d2, d21, d30
- .long 0xecbd8b0e // vpop {d8-d14}
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf226ad44 // vsub.f32 q5, q3, q2
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf300cdd6 // vmul.f32 q6, q8, q3
+ .long 0xf2c74f50 // vmov.f32 q10, #1
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf264ade2 // vsub.f32 q13, q10, q9
+ .long 0xf2646dc6 // vsub.f32 q11, q10, q3
+ .long 0xeecd9aab // vdiv.f32 s19, s27, s23
+ .long 0xee8d9a0b // vdiv.f32 s18, s26, s22
+ .long 0xeecc8aaa // vdiv.f32 s17, s25, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf262cfc8 // vmin.f32 q14, q9, q4
+ .long 0xf34a8dd4 // vmul.f32 q12, q13, q2
+ .long 0xf34c4dd6 // vmul.f32 q10, q14, q3
+ .long 0xf346cdf0 // vmul.f32 q14, q11, q8
+ .long 0xf248ede4 // vadd.f32 q15, q12, q10
+ .long 0xf20c8dc4 // vadd.f32 q4, q14, q2
+ .long 0xf2444e46 // vceq.f32 q10, q2, q3
+ .long 0xf24ccdee // vadd.f32 q14, q14, q15
+ .long 0xf2264d42 // vsub.f32 q2, q3, q1
+ .long 0xf358417c // vbsl q10, q4, q14
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf30c8dd6 // vmul.f32 q4, q14, q3
+ .long 0xeec9baa5 // vdiv.f32 s23, s19, s11
+ .long 0xee89ba05 // vdiv.f32 s22, s18, s10
+ .long 0xeec8aaa4 // vdiv.f32 s21, s17, s9
+ .long 0xee88aa04 // vdiv.f32 s20, s16, s8
+ .long 0xf262efca // vmin.f32 q15, q9, q5
+ .long 0xf30a4dd2 // vmul.f32 q2, q13, q1
+ .long 0xf3068dfc // vmul.f32 q4, q11, q14
+ .long 0xf34aadd0 // vmul.f32 q13, q13, q0
+ .long 0xf34eedd6 // vmul.f32 q15, q15, q3
+ .long 0xf244ed6e // vadd.f32 q15, q2, q15
+ .long 0xf208ad6e // vadd.f32 q5, q4, q15
+ .long 0xf242ee46 // vceq.f32 q15, q1, q3
+ .long 0xf2082d42 // vadd.f32 q1, q4, q1
+ .long 0xf2268d40 // vsub.f32 q4, q3, q0
+ .long 0xf352e15a // vbsl q15, q1, q5
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xf302ad56 // vmul.f32 q5, q1, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xeecbdaa9 // vdiv.f32 s27, s23, s19
+ .long 0xee8bda09 // vdiv.f32 s26, s22, s18
+ .long 0xeecacaa8 // vdiv.f32 s25, s21, s17
+ .long 0xee8aca08 // vdiv.f32 s24, s20, s16
+ .long 0xf2228fcc // vmin.f32 q4, q9, q6
+ .long 0xf306add2 // vmul.f32 q5, q11, q1
+ .long 0xf200ce46 // vceq.f32 q6, q0, q3
+ .long 0xf3088d56 // vmul.f32 q4, q4, q3
+ .long 0xf2026cf6 // vfma.f32 q3, q9, q11
+ .long 0xf20a0d40 // vadd.f32 q0, q5, q0
+ .long 0xf20a8dc8 // vadd.f32 q4, q13, q4
+ .long 0xf2482de0 // vadd.f32 q9, q12, q8
+ .long 0xf2446d6c // vadd.f32 q11, q2, q14
+ .long 0xf3b94560 // vceq.f32 q2, q8, #0
+ .long 0xf2428d6a // vadd.f32 q12, q1, q13
+ .long 0xf20a8d48 // vadd.f32 q4, q5, q4
+ .long 0xf310c158 // vbsl q6, q0, q4
+ .long 0xf3b90542 // vceq.f32 q0, q1, #0
+ .long 0xf3b9256c // vceq.f32 q1, q14, #0
+ .long 0xf31801dc // vbsl q0, q12, q6
+ .long 0xf31621fe // vbsl q1, q11, q15
+ .long 0xf31241f4 // vbsl q2, q9, q10
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_hardlight_vfp4
.globl _sk_hardlight_vfp4
FUNCTION(_sk_hardlight_vfp4)
_sk_hardlight_vfp4:
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2670d04 // vsub.f32 d16, d7, d4
- .long 0xf2617d87 // vsub.f32 d23, d17, d7
- .long 0xf2611d83 // vsub.f32 d17, d17, d3
- .long 0xf2672d05 // vsub.f32 d18, d7, d5
- .long 0xf2674d06 // vsub.f32 d20, d7, d6
- .long 0xf2633d00 // vsub.f32 d19, d3, d0
- .long 0xf2635d01 // vsub.f32 d21, d3, d1
- .long 0xf2636d02 // vsub.f32 d22, d3, d2
- .long 0xf347bd90 // vmul.f32 d27, d23, d0
- .long 0xf341cd94 // vmul.f32 d28, d17, d4
- .long 0xf3430db0 // vmul.f32 d16, d19, d16
- .long 0xf3463db4 // vmul.f32 d19, d22, d20
- .long 0xf3452db2 // vmul.f32 d18, d21, d18
- .long 0xf2404d00 // vadd.f32 d20, d0, d0
- .long 0xf3405d14 // vmul.f32 d21, d0, d4
- .long 0xf2416d01 // vadd.f32 d22, d1, d1
- .long 0xf3418d15 // vmul.f32 d24, d1, d5
- .long 0xf2429d02 // vadd.f32 d25, d2, d2
- .long 0xf342ad16 // vmul.f32 d26, d2, d6
- .long 0xf347dd91 // vmul.f32 d29, d23, d1
- .long 0xf341fd95 // vmul.f32 d31, d17, d5
- .long 0xf24cbdab // vadd.f32 d27, d28, d27
- .long 0xf3477d92 // vmul.f32 d23, d23, d2
- .long 0xf341cd96 // vmul.f32 d28, d17, d6
- .long 0xf2400da0 // vadd.f32 d16, d16, d16
- .long 0xf343ed17 // vmul.f32 d30, d3, d7
- .long 0xf2422da2 // vadd.f32 d18, d18, d18
- .long 0xf2433da3 // vadd.f32 d19, d19, d19
- .long 0xf3434e24 // vcge.f32 d20, d3, d20
- .long 0xf2455da5 // vadd.f32 d21, d21, d21
- .long 0xf3436e26 // vcge.f32 d22, d3, d22
- .long 0xf3439e29 // vcge.f32 d25, d3, d25
- .long 0xf2488da8 // vadd.f32 d24, d24, d24
- .long 0xf24aadaa // vadd.f32 d26, d26, d26
- .long 0xf2073c31 // vfma.f32 d3, d7, d17
- .long 0xf24fddad // vadd.f32 d29, d31, d29
- .long 0xf24c1da7 // vadd.f32 d17, d28, d23
- .long 0xf26e0da0 // vsub.f32 d16, d30, d16
- .long 0xf26e2da2 // vsub.f32 d18, d30, d18
- .long 0xf26e3da3 // vsub.f32 d19, d30, d19
- .long 0xf35541b0 // vbsl d20, d21, d16
- .long 0xf35861b2 // vbsl d22, d24, d18
- .long 0xf35a91b3 // vbsl d25, d26, d19
- .long 0xf20b0da4 // vadd.f32 d0, d27, d20
- .long 0xf20d1da6 // vadd.f32 d1, d29, d22
- .long 0xf2012da9 // vadd.f32 d2, d17, d25
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xf2c74f50 // vmov.f32 q10, #1
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf264ade2 // vsub.f32 q13, q10, q9
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2640dc6 // vsub.f32 q8, q10, q3
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf266ed42 // vsub.f32 q15, q3, q1
+ .long 0xf34a8dd4 // vmul.f32 q12, q13, q2
+ .long 0xf3404df6 // vmul.f32 q10, q8, q11
+ .long 0xf30cadd2 // vmul.f32 q5, q14, q1
+ .long 0xf2484de4 // vadd.f32 q10, q12, q10
+ .long 0xf2628dec // vsub.f32 q12, q9, q14
+ .long 0xf340cdfc // vmul.f32 q14, q8, q14
+ .long 0xf20aad4a // vadd.f32 q5, q5, q5
+ .long 0xf34e8df8 // vmul.f32 q12, q15, q12
+ .long 0xf342edd6 // vmul.f32 q15, q9, q3
+ .long 0xf2488de8 // vadd.f32 q12, q12, q12
+ .long 0xf22e8de8 // vsub.f32 q4, q15, q12
+ .long 0xf2428d42 // vadd.f32 q12, q1, q1
+ .long 0xf30a2dd2 // vmul.f32 q1, q13, q1
+ .long 0xf34aadd0 // vmul.f32 q13, q13, q0
+ .long 0xf3468e68 // vcge.f32 q12, q3, q12
+ .long 0xf242cd6c // vadd.f32 q14, q1, q14
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xf302cd50 // vmul.f32 q6, q1, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf35a8158 // vbsl q12, q5, q4
+ .long 0xf2228dc2 // vsub.f32 q4, q9, q1
+ .long 0xf226ad40 // vsub.f32 q5, q3, q0
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xf20ccd4c // vadd.f32 q6, q6, q6
+ .long 0xf30a8d58 // vmul.f32 q4, q5, q4
+ .long 0xf200ad40 // vadd.f32 q5, q0, q0
+ .long 0xf2220de6 // vsub.f32 q0, q9, q11
+ .long 0xf242ad6a // vadd.f32 q13, q1, q13
+ .long 0xf2262d44 // vsub.f32 q1, q3, q2
+ .long 0xf2088d48 // vadd.f32 q4, q4, q4
+ .long 0xf3466dd4 // vmul.f32 q11, q11, q2
+ .long 0xf3020d50 // vmul.f32 q0, q1, q0
+ .long 0xf306ae4a // vcge.f32 q5, q3, q5
+ .long 0xf22e8dc8 // vsub.f32 q4, q15, q4
+ .long 0xf2000d40 // vadd.f32 q0, q0, q0
+ .long 0xf31ca158 // vbsl q5, q6, q4
+ .long 0xf2466de6 // vadd.f32 q11, q11, q11
+ .long 0xf26eedc0 // vsub.f32 q15, q15, q0
+ .long 0xf2040d44 // vadd.f32 q0, q2, q2
+ .long 0xf2082dec // vadd.f32 q1, q12, q14
+ .long 0xf3068e40 // vcge.f32 q4, q3, q0
+ .long 0xf2026cf0 // vfma.f32 q3, q9, q8
+ .long 0xf20a0d6a // vadd.f32 q0, q5, q13
+ .long 0xf31681fe // vbsl q4, q11, q15
+ .long 0xf2084d64 // vadd.f32 q2, q4, q10
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_overlay_vfp4
.globl _sk_overlay_vfp4
FUNCTION(_sk_overlay_vfp4)
_sk_overlay_vfp4:
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2670d04 // vsub.f32 d16, d7, d4
- .long 0xf2617d87 // vsub.f32 d23, d17, d7
- .long 0xf2611d83 // vsub.f32 d17, d17, d3
- .long 0xf2672d05 // vsub.f32 d18, d7, d5
- .long 0xf2674d06 // vsub.f32 d20, d7, d6
- .long 0xf2633d00 // vsub.f32 d19, d3, d0
- .long 0xf2635d01 // vsub.f32 d21, d3, d1
- .long 0xf2636d02 // vsub.f32 d22, d3, d2
- .long 0xf347bd90 // vmul.f32 d27, d23, d0
- .long 0xf341cd94 // vmul.f32 d28, d17, d4
- .long 0xf3430db0 // vmul.f32 d16, d19, d16
- .long 0xf3463db4 // vmul.f32 d19, d22, d20
- .long 0xf3452db2 // vmul.f32 d18, d21, d18
- .long 0xf2444d04 // vadd.f32 d20, d4, d4
- .long 0xf3405d14 // vmul.f32 d21, d0, d4
- .long 0xf2456d05 // vadd.f32 d22, d5, d5
- .long 0xf3418d15 // vmul.f32 d24, d1, d5
- .long 0xf2469d06 // vadd.f32 d25, d6, d6
- .long 0xf342ad16 // vmul.f32 d26, d2, d6
- .long 0xf347dd91 // vmul.f32 d29, d23, d1
- .long 0xf341fd95 // vmul.f32 d31, d17, d5
- .long 0xf24cbdab // vadd.f32 d27, d28, d27
- .long 0xf3477d92 // vmul.f32 d23, d23, d2
- .long 0xf341cd96 // vmul.f32 d28, d17, d6
- .long 0xf343ed17 // vmul.f32 d30, d3, d7
- .long 0xf2400da0 // vadd.f32 d16, d16, d16
- .long 0xf2422da2 // vadd.f32 d18, d18, d18
- .long 0xf2433da3 // vadd.f32 d19, d19, d19
- .long 0xf3474e24 // vcge.f32 d20, d7, d20
- .long 0xf2455da5 // vadd.f32 d21, d21, d21
- .long 0xf3476e26 // vcge.f32 d22, d7, d22
- .long 0xf2488da8 // vadd.f32 d24, d24, d24
- .long 0xf3479e29 // vcge.f32 d25, d7, d25
- .long 0xf24aadaa // vadd.f32 d26, d26, d26
- .long 0xf2073c31 // vfma.f32 d3, d7, d17
- .long 0xf24fddad // vadd.f32 d29, d31, d29
- .long 0xf24c1da7 // vadd.f32 d17, d28, d23
- .long 0xf26e0da0 // vsub.f32 d16, d30, d16
- .long 0xf26e2da2 // vsub.f32 d18, d30, d18
- .long 0xf26e3da3 // vsub.f32 d19, d30, d19
- .long 0xf35541b0 // vbsl d20, d21, d16
- .long 0xf35861b2 // vbsl d22, d24, d18
- .long 0xf35a91b3 // vbsl d25, d26, d19
- .long 0xf20b0da4 // vadd.f32 d0, d27, d20
- .long 0xf20d1da6 // vadd.f32 d1, d29, d22
- .long 0xf2012da9 // vadd.f32 d2, d17, d25
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xf2c74f50 // vmov.f32 q10, #1
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf264ade2 // vsub.f32 q13, q10, q9
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2640dc6 // vsub.f32 q8, q10, q3
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf266ed42 // vsub.f32 q15, q3, q1
+ .long 0xf34a8dd4 // vmul.f32 q12, q13, q2
+ .long 0xf3404df6 // vmul.f32 q10, q8, q11
+ .long 0xf30cadd2 // vmul.f32 q5, q14, q1
+ .long 0xf30a2dd2 // vmul.f32 q1, q13, q1
+ .long 0xf34aadd0 // vmul.f32 q13, q13, q0
+ .long 0xf2484de4 // vadd.f32 q10, q12, q10
+ .long 0xf2628dec // vsub.f32 q12, q9, q14
+ .long 0xf20aad4a // vadd.f32 q5, q5, q5
+ .long 0xf34e8df8 // vmul.f32 q12, q15, q12
+ .long 0xf342edd6 // vmul.f32 q15, q9, q3
+ .long 0xf2488de8 // vadd.f32 q12, q12, q12
+ .long 0xf22e8de8 // vsub.f32 q4, q15, q12
+ .long 0xf24c8dec // vadd.f32 q12, q14, q14
+ .long 0xf340cdfc // vmul.f32 q14, q8, q14
+ .long 0xf3428ee8 // vcge.f32 q12, q9, q12
+ .long 0xf242cd6c // vadd.f32 q14, q1, q14
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xf302cd50 // vmul.f32 q6, q1, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf35a8158 // vbsl q12, q5, q4
+ .long 0xf2228dc2 // vsub.f32 q4, q9, q1
+ .long 0xf226ad40 // vsub.f32 q5, q3, q0
+ .long 0xf2220de6 // vsub.f32 q0, q9, q11
+ .long 0xf20ccd4c // vadd.f32 q6, q6, q6
+ .long 0xf30a8d58 // vmul.f32 q4, q5, q4
+ .long 0xf202ad42 // vadd.f32 q5, q1, q1
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xf2088d48 // vadd.f32 q4, q4, q4
+ .long 0xf302aeca // vcge.f32 q5, q9, q5
+ .long 0xf242ad6a // vadd.f32 q13, q1, q13
+ .long 0xf2262d44 // vsub.f32 q1, q3, q2
+ .long 0xf22e8dc8 // vsub.f32 q4, q15, q4
+ .long 0xf31ca158 // vbsl q5, q6, q4
+ .long 0xf3020d50 // vmul.f32 q0, q1, q0
+ .long 0xf2026cf0 // vfma.f32 q3, q9, q8
+ .long 0xf2082dec // vadd.f32 q1, q12, q14
+ .long 0xf2000d40 // vadd.f32 q0, q0, q0
+ .long 0xf26eedc0 // vsub.f32 q15, q15, q0
+ .long 0xf2060de6 // vadd.f32 q0, q11, q11
+ .long 0xf3466dd4 // vmul.f32 q11, q11, q2
+ .long 0xf3028ec0 // vcge.f32 q4, q9, q0
+ .long 0xf2466de6 // vadd.f32 q11, q11, q11
+ .long 0xf20a0d6a // vadd.f32 q0, q5, q13
+ .long 0xf31681fe // vbsl q4, q11, q15
+ .long 0xf2084d64 // vadd.f32 q2, q4, q10
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_softlight_vfp4
.globl _sk_softlight_vfp4
FUNCTION(_sk_softlight_vfp4)
_sk_softlight_vfp4:
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xeec58aa7 // vdiv.f32 s17, s11, s15
- .long 0xf3f90407 // vcgt.f32 d16, d7, #0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeec49aa7 // vdiv.f32 s19, s9, s15
- .long 0xeec6aaa7 // vdiv.f32 s21, s13, s15
- .long 0xee858a07 // vdiv.f32 s16, s10, s14
- .long 0xee849a07 // vdiv.f32 s18, s8, s14
- .long 0xee86aa07 // vdiv.f32 s20, s12, s14
- .long 0xf26021b0 // vorr d18, d16, d16
- .long 0xf2c01010 // vmov.i32 d17, #0
- .long 0xf3582131 // vbsl d18, d8, d17
- .long 0xf26031b0 // vorr d19, d16, d16
- .long 0xf3fb45a2 // vrsqrte.f32 d20, d18
- .long 0xf3593131 // vbsl d19, d9, d17
- .long 0xf35a0131 // vbsl d16, d10, d17
- .long 0xf3fb15a3 // vrsqrte.f32 d17, d19
- .long 0xf3fb55a0 // vrsqrte.f32 d21, d16
- .long 0xf3446db4 // vmul.f32 d22, d20, d20
- .long 0xf243ada3 // vadd.f32 d26, d19, d19
- .long 0xf240bda0 // vadd.f32 d27, d16, d16
- .long 0xf3417db1 // vmul.f32 d23, d17, d17
- .long 0xf3458db5 // vmul.f32 d24, d21, d21
- .long 0xf2626fb6 // vrsqrts.f32 d22, d18, d22
- .long 0xf2429da2 // vadd.f32 d25, d18, d18
- .long 0xf2637fb7 // vrsqrts.f32 d23, d19, d23
- .long 0xf2608fb8 // vrsqrts.f32 d24, d16, d24
- .long 0xf2818f1c // vmov.f32 d8, #7
- .long 0xf2499da9 // vadd.f32 d25, d25, d25
- .long 0xf3444db6 // vmul.f32 d20, d20, d22
- .long 0xf24a6daa // vadd.f32 d22, d26, d26
- .long 0xf24badab // vadd.f32 d26, d27, d27
- .long 0xf3411db7 // vmul.f32 d17, d17, d23
- .long 0xf3455db8 // vmul.f32 d21, d21, d24
- .long 0xf3fb7524 // vrecpe.f32 d23, d20
- .long 0xf3498db9 // vmul.f32 d24, d25, d25
- .long 0xf3fbd521 // vrecpe.f32 d29, d17
- .long 0xf34aedba // vmul.f32 d30, d26, d26
- .long 0xf3fbf525 // vrecpe.f32 d31, d21
- .long 0xf2444fb7 // vrecps.f32 d20, d20, d23
- .long 0xf346cdb6 // vmul.f32 d28, d22, d22
- .long 0xf2411fbd // vrecps.f32 d17, d17, d29
- .long 0xf3c7bf10 // vmov.f32 d27, #-1
- .long 0xf2455fbf // vrecps.f32 d21, d21, d31
- .long 0xf24aadae // vadd.f32 d26, d26, d30
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf2429dab // vadd.f32 d25, d18, d27
- .long 0xf2466dac // vadd.f32 d22, d22, d28
- .long 0xf243cdab // vadd.f32 d28, d19, d27
- .long 0xf240bdab // vadd.f32 d27, d16, d27
- .long 0xf3474db4 // vmul.f32 d20, d23, d20
- .long 0xf2c7ef10 // vmov.f32 d30, #1
- .long 0xf34d1db1 // vmul.f32 d17, d29, d17
- .long 0xf34badba // vmul.f32 d26, d27, d26
- .long 0xf242bd02 // vadd.f32 d27, d2, d2
- .long 0xf26edda0 // vsub.f32 d29, d30, d16
- .long 0xf3498db8 // vmul.f32 d24, d25, d24
- .long 0xf3429d98 // vmul.f32 d25, d18, d8
- .long 0xf34f5db5 // vmul.f32 d21, d31, d21
- .long 0xf26efda2 // vsub.f32 d31, d30, d18
- .long 0xf2642da2 // vsub.f32 d18, d20, d18
- .long 0xf26b4d83 // vsub.f32 d20, d27, d3
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf34c6db6 // vmul.f32 d22, d28, d22
- .long 0xf3437d98 // vmul.f32 d23, d19, d8
- .long 0xf3449dbd // vmul.f32 d25, d20, d29
- .long 0xf245dd05 // vadd.f32 d29, d5, d5
- .long 0xf340cd98 // vmul.f32 d28, d16, d8
- .long 0xf2476da6 // vadd.f32 d22, d23, d22
- .long 0xf2611da3 // vsub.f32 d17, d17, d19
- .long 0xf24dddad // vadd.f32 d29, d29, d29
- .long 0xf24c7daa // vadd.f32 d23, d28, d26
- .long 0xf2650da0 // vsub.f32 d16, d21, d16
- .long 0xf26e3da3 // vsub.f32 d19, d30, d19
- .long 0xf347de2d // vcge.f32 d29, d7, d29
- .long 0xf241ad01 // vadd.f32 d26, d1, d1
- .long 0xf3444d97 // vmul.f32 d20, d20, d7
- .long 0xf358d1b2 // vbsl d29, d24, d18
- .long 0xf2448d04 // vadd.f32 d24, d4, d4
- .long 0xf2462d06 // vadd.f32 d18, d6, d6
- .long 0xf26a5d83 // vsub.f32 d21, d26, d3
- .long 0xf2488da8 // vadd.f32 d24, d24, d24
- .long 0xf2422da2 // vadd.f32 d18, d18, d18
- .long 0xf345cdbf // vmul.f32 d28, d21, d31
- .long 0xf3455d97 // vmul.f32 d21, d21, d7
- .long 0xf3478e28 // vcge.f32 d24, d7, d24
- .long 0xf3472e22 // vcge.f32 d18, d7, d18
- .long 0xf343fd14 // vmul.f32 d31, d3, d4
- .long 0xf3455dbd // vmul.f32 d21, d21, d29
- .long 0xf35681b1 // vbsl d24, d22, d17
- .long 0xf2401d00 // vadd.f32 d17, d0, d0
- .long 0xf35721b0 // vbsl d18, d23, d16
- .long 0xf24c0d83 // vadd.f32 d16, d28, d3
- .long 0xf2496d83 // vadd.f32 d22, d25, d3
- .long 0xf2617d83 // vsub.f32 d23, d17, d3
- .long 0xf3442db2 // vmul.f32 d18, d20, d18
- .long 0xf3434e2a // vcge.f32 d20, d3, d26
- .long 0xf343ae2b // vcge.f32 d26, d3, d27
- .long 0xf3473db3 // vmul.f32 d19, d23, d19
- .long 0xf3477d97 // vmul.f32 d23, d23, d7
- .long 0xf3431e21 // vcge.f32 d17, d3, d17
- .long 0xf3400d95 // vmul.f32 d16, d16, d5
- .long 0xf2433d83 // vadd.f32 d19, d19, d3
- .long 0xf3477db8 // vmul.f32 d23, d23, d24
- .long 0xf26e8d87 // vsub.f32 d24, d30, d7
- .long 0xf26eed83 // vsub.f32 d30, d30, d3
- .long 0xf3433d94 // vmul.f32 d19, d19, d4
- .long 0xf24f7da7 // vadd.f32 d23, d31, d23
- .long 0xf3489d91 // vmul.f32 d25, d24, d1
- .long 0xf348cd90 // vmul.f32 d28, d24, d0
- .long 0xf34edd94 // vmul.f32 d29, d30, d4
- .long 0xf34ebd95 // vmul.f32 d27, d30, d5
- .long 0xf3488d92 // vmul.f32 d24, d24, d2
- .long 0xf34efd96 // vmul.f32 d31, d30, d6
- .long 0xf24dcdac // vadd.f32 d28, d29, d28
- .long 0xf343dd15 // vmul.f32 d29, d3, d5
- .long 0xf24b9da9 // vadd.f32 d25, d27, d25
- .long 0xf343bd16 // vmul.f32 d27, d3, d6
- .long 0xf3466d96 // vmul.f32 d22, d22, d6
- .long 0xf24f8da8 // vadd.f32 d24, d31, d24
- .long 0xf24d5da5 // vadd.f32 d21, d29, d21
- .long 0xf24b2da2 // vadd.f32 d18, d27, d18
- .long 0xf35311b7 // vbsl d17, d19, d23
- .long 0xf35041b5 // vbsl d20, d16, d21
- .long 0xf356a1b2 // vbsl d26, d22, d18
- .long 0xf2073c3e // vfma.f32 d3, d7, d30
- .long 0xf20c0da1 // vadd.f32 d0, d28, d17
- .long 0xf2091da4 // vadd.f32 d1, d25, d20
- .long 0xf2082daa // vadd.f32 d2, d24, d26
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe12fff1c // bx ip
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd028 // sub sp, sp, #40
+ .long 0xf2624152 // vorr q10, q1, q1
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c06050 // vmov.i32 q11, #0
+ .long 0xec834b04 // vstmia r3, {d4-d5}
+ .long 0xf3872f50 // vmov.f32 q1, #-1
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xeccd4b04 // vstmia sp, {d20-d21}
+ .long 0xf4228aef // vld1.64 {d8-d9}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf422aaef // vld1.64 {d10-d11}, [r2 :128]
+ .long 0xf3f90448 // vcgt.f32 q8, q4, #0
+ .long 0xf26021f0 // vorr q9, q8, q8
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xeecbdaa9 // vdiv.f32 s27, s23, s19
+ .long 0xee8bda09 // vdiv.f32 s26, s22, s18
+ .long 0xeecacaa8 // vdiv.f32 s25, s21, s17
+ .long 0xee8aca08 // vdiv.f32 s24, s20, s16
+ .long 0xf35c2176 // vbsl q9, q6, q11
+ .long 0xf3fb65e2 // vrsqrte.f32 q11, q9
+ .long 0xf242ade2 // vadd.f32 q13, q9, q9
+ .long 0xf242cdc2 // vadd.f32 q14, q9, q1
+ .long 0xf3468df6 // vmul.f32 q12, q11, q11
+ .long 0xf24aadea // vadd.f32 q13, q13, q13
+ .long 0xf2628ff8 // vrsqrts.f32 q12, q9, q12
+ .long 0xf3466df8 // vmul.f32 q11, q11, q12
+ .long 0xf3fb8566 // vrecpe.f32 q12, q11
+ .long 0xf2466ff8 // vrecps.f32 q11, q11, q12
+ .long 0xf3486df6 // vmul.f32 q11, q12, q11
+ .long 0xf34a8dfa // vmul.f32 q12, q13, q13
+ .long 0xf2666de2 // vsub.f32 q11, q11, q9
+ .long 0xf24aade8 // vadd.f32 q13, q13, q12
+ .long 0xf34ccdfa // vmul.f32 q14, q14, q13
+ .long 0xf2c1af5c // vmov.f32 q13, #7
+ .long 0xf342edfa // vmul.f32 q15, q9, q13
+ .long 0xf24ecdec // vadd.f32 q14, q15, q14
+ .long 0xf24aed4a // vadd.f32 q15, q5, q5
+ .long 0xf24eedee // vadd.f32 q15, q15, q15
+ .long 0xf348ee6e // vcge.f32 q15, q4, q15
+ .long 0xf35ce1f6 // vbsl q15, q14, q11
+ .long 0xf244cde4 // vadd.f32 q14, q10, q10
+ .long 0xf22ccdc6 // vsub.f32 q6, q14, q3
+ .long 0xf34c6d58 // vmul.f32 q11, q6, q4
+ .long 0xf3466dfe // vmul.f32 q11, q11, q15
+ .long 0xf34aed56 // vmul.f32 q15, q5, q3
+ .long 0xf24eede6 // vadd.f32 q15, q15, q11
+ .long 0xf2c76f50 // vmov.f32 q11, #1
+ .long 0xf2662de2 // vsub.f32 q9, q11, q9
+ .long 0xf34c2d72 // vmul.f32 q9, q6, q9
+ .long 0xf2422dc6 // vadd.f32 q9, q9, q3
+ .long 0xf30acd72 // vmul.f32 q6, q5, q9
+ .long 0xf3462e6c // vcge.f32 q9, q3, q14
+ .long 0xf260c1f0 // vorr q14, q8, q8
+ .long 0xf35c217e // vbsl q9, q6, q15
+ .long 0xf422caef // vld1.64 {d12-d13}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xeecdfaa9 // vdiv.f32 s31, s27, s19
+ .long 0xee8dfa09 // vdiv.f32 s30, s26, s18
+ .long 0xeecceaa8 // vdiv.f32 s29, s25, s17
+ .long 0xee8cea08 // vdiv.f32 s28, s24, s16
+ .long 0xf35ec154 // vbsl q14, q7, q2
+ .long 0xf2204150 // vorr q2, q0, q0
+ .long 0xf3fbe5ec // vrsqrte.f32 q15, q14
+ .long 0xf30eedfe // vmul.f32 q7, q15, q15
+ .long 0xf22cefde // vrsqrts.f32 q7, q14, q7
+ .long 0xf34eedde // vmul.f32 q15, q15, q7
+ .long 0xf3bbe56e // vrecpe.f32 q7, q15
+ .long 0xf24eefde // vrecps.f32 q15, q15, q7
+ .long 0xf34eed7e // vmul.f32 q15, q7, q15
+ .long 0xf20cedec // vadd.f32 q7, q14, q14
+ .long 0xf26eedec // vsub.f32 q15, q15, q14
+ .long 0xf20eed4e // vadd.f32 q7, q7, q7
+ .long 0xf34e4d5e // vmul.f32 q10, q7, q7
+ .long 0xf24e4d64 // vadd.f32 q10, q7, q10
+ .long 0xf20cedc2 // vadd.f32 q7, q14, q1
+ .long 0xf34e4d74 // vmul.f32 q10, q7, q10
+ .long 0xf30cedfa // vmul.f32 q7, q14, q13
+ .long 0xf266cdec // vsub.f32 q14, q11, q14
+ .long 0xf24e4d64 // vadd.f32 q10, q7, q10
+ .long 0xf20ced4c // vadd.f32 q7, q6, q6
+ .long 0xf20eed4e // vadd.f32 q7, q7, q7
+ .long 0xf308ee4e // vcge.f32 q7, q4, q7
+ .long 0xf314e1fe // vbsl q7, q10, q15
+ .long 0xf2404d40 // vadd.f32 q10, q0, q0
+ .long 0xf264edc6 // vsub.f32 q15, q10, q3
+ .long 0xf34e8dd8 // vmul.f32 q12, q15, q4
+ .long 0xf34ecdfc // vmul.f32 q14, q15, q14
+ .long 0xf3488dde // vmul.f32 q12, q12, q7
+ .long 0xf30ced56 // vmul.f32 q7, q6, q3
+ .long 0xf24ccdc6 // vadd.f32 q14, q14, q3
+ .long 0xf24e8d68 // vadd.f32 q12, q7, q12
+ .long 0xf422eaef // vld1.64 {d14-d15}, [r2 :128]
+ .long 0xe28d2010 // add r2, sp, #16
+ .long 0xeecf1aa9 // vdiv.f32 s3, s31, s19
+ .long 0xee8f1a09 // vdiv.f32 s2, s30, s18
+ .long 0xeece0aa8 // vdiv.f32 s1, s29, s17
+ .long 0xee8e0a08 // vdiv.f32 s0, s28, s16
+ .long 0xf34ced7c // vmul.f32 q15, q6, q14
+ .long 0xf346ce64 // vcge.f32 q14, q3, q10
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xf3500174 // vbsl q8, q0, q10
+ .long 0xec920b04 // vldmia r2, {d0-d1}
+ .long 0xf35ec1f8 // vbsl q14, q15, q12
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3fb45e0 // vrsqrte.f32 q10, q8
+ .long 0xf340adfa // vmul.f32 q13, q8, q13
+ .long 0xf3448df4 // vmul.f32 q12, q10, q10
+ .long 0xf2608ff8 // vrsqrts.f32 q12, q8, q12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf3fb8564 // vrecpe.f32 q12, q10
+ .long 0xf2444ff8 // vrecps.f32 q10, q10, q12
+ .long 0xf3484df4 // vmul.f32 q10, q12, q10
+ .long 0xf2408de0 // vadd.f32 q12, q8, q8
+ .long 0xf2644de0 // vsub.f32 q10, q10, q8
+ .long 0xf2488de8 // vadd.f32 q12, q12, q12
+ .long 0xf348edf8 // vmul.f32 q15, q12, q12
+ .long 0xf2488dee // vadd.f32 q12, q12, q15
+ .long 0xf240edc2 // vadd.f32 q15, q8, q1
+ .long 0xec9d2b04 // vldmia sp, {d2-d3}
+ .long 0xf2660de0 // vsub.f32 q8, q11, q8
+ .long 0xf34e8df8 // vmul.f32 q12, q15, q12
+ .long 0xf24a8de8 // vadd.f32 q12, q13, q12
+ .long 0xf24ead4e // vadd.f32 q13, q7, q7
+ .long 0xf24aadea // vadd.f32 q13, q13, q13
+ .long 0xf348ae6a // vcge.f32 q13, q4, q13
+ .long 0xf358a1f4 // vbsl q13, q12, q10
+ .long 0xf2404d40 // vadd.f32 q10, q0, q0
+ .long 0xf2648dc6 // vsub.f32 q12, q10, q3
+ .long 0xf3464e64 // vcge.f32 q10, q3, q10
+ .long 0xf348edd8 // vmul.f32 q15, q12, q4
+ .long 0xf3480df0 // vmul.f32 q8, q12, q8
+ .long 0xf2668dc6 // vsub.f32 q12, q11, q3
+ .long 0xf2666dc8 // vsub.f32 q11, q11, q4
+ .long 0xf34eadfa // vmul.f32 q13, q15, q13
+ .long 0xf34eed56 // vmul.f32 q15, q7, q3
+ .long 0xf2400dc6 // vadd.f32 q8, q8, q3
+ .long 0xf3060dd0 // vmul.f32 q0, q11, q0
+ .long 0xf3062dd2 // vmul.f32 q1, q11, q1
+ .long 0xf24eadea // vadd.f32 q13, q15, q13
+ .long 0xf348edde // vmul.f32 q15, q12, q7
+ .long 0xf3466dd4 // vmul.f32 q11, q11, q2
+ .long 0xf34e0d70 // vmul.f32 q8, q7, q8
+ .long 0xf2086c78 // vfma.f32 q3, q4, q12
+ .long 0xf240ed6e // vadd.f32 q15, q0, q15
+ .long 0xf3080dda // vmul.f32 q0, q12, q5
+ .long 0xf35041fa // vbsl q10, q8, q13
+ .long 0xf20e4de4 // vadd.f32 q2, q15, q10
+ .long 0xf2022d40 // vadd.f32 q1, q1, q0
+ .long 0xf3080ddc // vmul.f32 q0, q12, q6
+ .long 0xf2022d62 // vadd.f32 q1, q1, q9
+ .long 0xf2406d66 // vadd.f32 q11, q0, q11
+ .long 0xf2060dec // vadd.f32 q0, q11, q14
+ .long 0xe28dd028 // add sp, sp, #40
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
HIDDEN _sk_hue_vfp4
.globl _sk_hue_vfp4
FUNCTION(_sk_hue_vfp4)
_sk_hue_vfp4:
- .long 0xed2d8b0c // vpush {d8-d13}
- .long 0xf3420d13 // vmul.f32 d16, d2, d3
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3411d13 // vmul.f32 d17, d1, d3
- .long 0xf2652f06 // vmin.f32 d18, d5, d6
- .long 0xf2453f06 // vmax.f32 d19, d5, d6
- .long 0xf3404d13 // vmul.f32 d20, d0, d3
- .long 0xf2615fa0 // vmin.f32 d21, d17, d16
- .long 0xf2642f22 // vmin.f32 d18, d4, d18
- .long 0xf2443f23 // vmax.f32 d19, d4, d19
- .long 0xf2416fa0 // vmax.f32 d22, d17, d16
- .long 0xf2645fa5 // vmin.f32 d21, d20, d21
- .long 0xf2632da2 // vsub.f32 d18, d19, d18
- .long 0xf2443fa6 // vmax.f32 d19, d20, d22
- .long 0xeddf6b76 // vldr d22, [pc, #472]
- .long 0xf2611da5 // vsub.f32 d17, d17, d21
- .long 0xf2644da5 // vsub.f32 d20, d20, d21
- .long 0xf3422d93 // vmul.f32 d18, d18, d3
- .long 0xf2238da5 // vsub.f32 d8, d19, d21
- .long 0xf2600da5 // vsub.f32 d16, d16, d21
- .long 0xf3f97508 // vceq.f32 d23, d8, #0
- .long 0xf26751b7 // vorr d21, d23, d23
- .long 0xf3029db1 // vmul.f32 d9, d18, d17
- .long 0xeddf1b69 // vldr d17, [pc, #420]
- .long 0xf302adb4 // vmul.f32 d10, d18, d20
- .long 0xf3453d31 // vmul.f32 d19, d5, d17
- .long 0xf302bdb0 // vmul.f32 d11, d18, d16
- .long 0xeddf2b67 // vldr d18, [pc, #412]
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xeec9caa8 // vdiv.f32 s25, s19, s17
- .long 0xee89ca08 // vdiv.f32 s24, s18, s16
- .long 0xeeca9aa8 // vdiv.f32 s19, s21, s17
- .long 0xee8a9a08 // vdiv.f32 s18, s20, s16
- .long 0xeecbaaa8 // vdiv.f32 s21, s23, s17
- .long 0xee8baa08 // vdiv.f32 s20, s22, s16
- .long 0xf3444d32 // vmul.f32 d20, d4, d18
- .long 0xf350519c // vbsl d21, d16, d12
- .long 0xf3468d36 // vmul.f32 d24, d6, d22
- .long 0xf3459db1 // vmul.f32 d25, d21, d17
- .long 0xf2443da3 // vadd.f32 d19, d20, d19
- .long 0xf26741b7 // vorr d20, d23, d23
- .long 0xf350719a // vbsl d23, d16, d10
- .long 0xf3504199 // vbsl d20, d16, d9
- .long 0xf2433da8 // vadd.f32 d19, d19, d24
- .long 0xf344adb2 // vmul.f32 d26, d20, d18
- .long 0xf3478db6 // vmul.f32 d24, d23, d22
- .long 0xf3433d93 // vmul.f32 d19, d19, d3
- .long 0xf24a9da9 // vadd.f32 d25, d26, d25
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf2633da8 // vsub.f32 d19, d19, d24
- .long 0xf2458da3 // vadd.f32 d24, d21, d19
- .long 0xf2445da3 // vadd.f32 d21, d20, d19
- .long 0xf2477da3 // vadd.f32 d23, d23, d19
- .long 0xf3481db1 // vmul.f32 d17, d24, d17
- .long 0xf3452db2 // vmul.f32 d18, d21, d18
- .long 0xf3473db6 // vmul.f32 d19, d23, d22
- .long 0xf2684fa7 // vmin.f32 d20, d24, d23
- .long 0xf2486fa7 // vmax.f32 d22, d24, d23
- .long 0xf2421da1 // vadd.f32 d17, d18, d17
- .long 0xf2456fa6 // vmax.f32 d22, d21, d22
- .long 0xf2432da1 // vadd.f32 d18, d19, d17
- .long 0xf2653fa4 // vmin.f32 d19, d21, d20
- .long 0xf3f944a3 // vcge.f32 d20, d19, #0
- .long 0xf264a1b4 // vorr d26, d20, d20
- .long 0xf2671da2 // vsub.f32 d17, d23, d18
- .long 0xf2228da3 // vsub.f32 d8, d18, d19
- .long 0xf26431b4 // vorr d19, d20, d20
- .long 0xf3029db1 // vmul.f32 d9, d18, d17
- .long 0xf3431d17 // vmul.f32 d17, d3, d7
- .long 0xeec9aaa8 // vdiv.f32 s21, s19, s17
- .long 0xee89aa08 // vdiv.f32 s20, s18, s16
- .long 0xf2429d8a // vadd.f32 d25, d18, d10
- .long 0xf35731b9 // vbsl d19, d23, d25
- .long 0xf2619da2 // vsub.f32 d25, d17, d18
- .long 0xf2637da2 // vsub.f32 d23, d19, d18
- .long 0xf226ada2 // vsub.f32 d10, d22, d18
- .long 0xf309bdb7 // vmul.f32 d11, d25, d23
- .long 0xf2687da2 // vsub.f32 d23, d24, d18
- .long 0xeecb9aaa // vdiv.f32 s19, s23, s21
- .long 0xee8b9a0a // vdiv.f32 s18, s22, s20
- .long 0xf302bdb7 // vmul.f32 d11, d18, d23
- .long 0xeecbcaa8 // vdiv.f32 s25, s23, s17
- .long 0xee8bca08 // vdiv.f32 s24, s22, s16
- .long 0xf2427d8c // vadd.f32 d23, d18, d12
- .long 0xf358a1b7 // vbsl d26, d24, d23
- .long 0xf26a7da2 // vsub.f32 d23, d26, d18
- .long 0xf309bdb7 // vmul.f32 d11, d25, d23
- .long 0xf2657da2 // vsub.f32 d23, d21, d18
- .long 0xeecbcaaa // vdiv.f32 s25, s23, s21
- .long 0xee8bca0a // vdiv.f32 s24, s22, s20
- .long 0xf302bdb7 // vmul.f32 d11, d18, d23
- .long 0xf2428d8c // vadd.f32 d24, d18, d12
- .long 0xeecbdaa8 // vdiv.f32 s27, s23, s17
- .long 0xee8bda08 // vdiv.f32 s26, s22, s16
- .long 0xf2427d8d // vadd.f32 d23, d18, d13
- .long 0xf35541b7 // vbsl d20, d21, d23
- .long 0xf2c77f10 // vmov.f32 d23, #1
- .long 0xf2645da2 // vsub.f32 d21, d20, d18
- .long 0xf3098db5 // vmul.f32 d8, d25, d21
- .long 0xf3665ea1 // vcgt.f32 d21, d22, d17
- .long 0xf2679d87 // vsub.f32 d25, d23, d7
- .long 0xf2677d83 // vsub.f32 d23, d23, d3
- .long 0xeec8baaa // vdiv.f32 s23, s17, s21
- .long 0xee88ba0a // vdiv.f32 s22, s16, s20
- .long 0xf2426d8b // vadd.f32 d22, d18, d11
- .long 0xf265f1b5 // vorr d31, d21, d21
- .long 0xf2422d89 // vadd.f32 d18, d18, d9
- .long 0xf349bd90 // vmul.f32 d27, d25, d0
- .long 0xf356f1b4 // vbsl d31, d22, d20
- .long 0xf347cd94 // vmul.f32 d28, d23, d4
- .long 0xf349dd91 // vmul.f32 d29, d25, d1
- .long 0xf3494d92 // vmul.f32 d20, d25, d2
- .long 0xf3476d96 // vmul.f32 d22, d23, d6
- .long 0xf347ed95 // vmul.f32 d30, d23, d5
- .long 0xf26571b5 // vorr d23, d21, d21
- .long 0xf35251b3 // vbsl d21, d18, d19
- .long 0xf35871ba // vbsl d23, d24, d26
- .long 0xf2438d07 // vadd.f32 d24, d3, d7
- .long 0xf24c9dab // vadd.f32 d25, d28, d27
- .long 0xf24f2fa0 // vmax.f32 d18, d31, d16
- .long 0xf2477fa0 // vmax.f32 d23, d23, d16
- .long 0xf24e3dad // vadd.f32 d19, d30, d29
- .long 0xf2464da4 // vadd.f32 d20, d22, d20
- .long 0xf2450fa0 // vmax.f32 d16, d21, d16
- .long 0xf2283da1 // vsub.f32 d3, d24, d17
- .long 0xf2090da2 // vadd.f32 d0, d25, d18
- .long 0xf2031da7 // vadd.f32 d1, d19, d23
- .long 0xf2042da0 // vadd.f32 d2, d20, d16
- .long 0xecbd8b0c // vpop {d8-d13}
- .long 0xe12fff1c // bx ip
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd068 // sub sp, sp, #104
+ .long 0xf3440d56 // vmul.f32 q8, q2, q3
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf342ed56 // vmul.f32 q15, q1, q3
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3404d56 // vmul.f32 q10, q0, q3
+ .long 0xec834b04 // vstmia r3, {d4-d5}
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xec832b04 // vstmia r3, {d2-d3}
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xf26e2fe0 // vmin.f32 q9, q15, q8
+ .long 0xec830b04 // vstmia r3, {d0-d1}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xf24e6fe0 // vmax.f32 q11, q15, q8
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf2642fe2 // vmin.f32 q9, q10, q9
+ .long 0xf2446fe6 // vmax.f32 q11, q10, q11
+ .long 0xf2648de2 // vsub.f32 q12, q10, q9
+ .long 0xf2260de2 // vsub.f32 q0, q11, q9
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf266afc2 // vmin.f32 q13, q11, q1
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xf246cfc2 // vmax.f32 q14, q11, q1
+ .long 0xec832b04 // vstmia r3, {d2-d3}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf26eede2 // vsub.f32 q15, q15, q9
+ .long 0xecc34b04 // vstmia r3, {d20-d21}
+ .long 0xe28f2f9d // add r2, pc, #628
+ .long 0xf264afea // vmin.f32 q13, q10, q13
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf244cfec // vmax.f32 q14, q10, q14
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf26cadea // vsub.f32 q13, q14, q13
+ .long 0xf34acdd6 // vmul.f32 q14, q13, q3
+ .long 0xf30c4df8 // vmul.f32 q2, q14, q12
+ .long 0xf3f98540 // vceq.f32 q12, q0, #0
+ .long 0xf268a1f8 // vorr q13, q12, q12
+ .long 0xeec59aa1 // vdiv.f32 s19, s11, s3
+ .long 0xee859a01 // vdiv.f32 s18, s10, s2
+ .long 0xeec48aa0 // vdiv.f32 s17, s9, s1
+ .long 0xee848a00 // vdiv.f32 s16, s8, s0
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf354a158 // vbsl q13, q2, q4
+ .long 0xf30c8dfe // vmul.f32 q4, q14, q15
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf268e1f8 // vorr q15, q12, q12
+ .long 0xeec9baa1 // vdiv.f32 s23, s19, s3
+ .long 0xee89ba01 // vdiv.f32 s22, s18, s2
+ .long 0xeec8aaa0 // vdiv.f32 s21, s17, s1
+ .long 0xee88aa00 // vdiv.f32 s20, s16, s0
+ .long 0xf4228acf // vld1.64 {d8-d9}, [r2]
+ .long 0xf354e15a // vbsl q15, q2, q5
+ .long 0xe28f2e22 // add r2, pc, #544
+ .long 0xf422aacf // vld1.64 {d10-d11}, [r2]
+ .long 0xe28f2f8a // add r2, pc, #552
+ .long 0xf30ecdd8 // vmul.f32 q6, q15, q4
+ .long 0xf30aedda // vmul.f32 q7, q13, q5
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf20ecd4c // vadd.f32 q6, q7, q6
+ .long 0xf30cedf0 // vmul.f32 q7, q14, q8
+ .long 0xf346cdd8 // vmul.f32 q14, q11, q4
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xeecf5aa1 // vdiv.f32 s11, s31, s3
+ .long 0xee8f5a01 // vdiv.f32 s10, s30, s2
+ .long 0xeece4aa0 // vdiv.f32 s9, s29, s1
+ .long 0xee8e4a00 // vdiv.f32 s8, s28, s0
+ .long 0xf3040dda // vmul.f32 q0, q10, q5
+ .long 0xf35081d4 // vbsl q12, q8, q2
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xf3480df2 // vmul.f32 q8, q12, q9
+ .long 0xf240cd6c // vadd.f32 q14, q0, q14
+ .long 0xf3020d72 // vmul.f32 q0, q1, q9
+ .long 0xf24c0d60 // vadd.f32 q8, q6, q8
+ .long 0xf24ccdc0 // vadd.f32 q14, q14, q0
+ .long 0xf34ccdd6 // vmul.f32 q14, q14, q3
+ .long 0xf26ccde0 // vsub.f32 q14, q14, q8
+ .long 0xf20e0dec // vadd.f32 q0, q15, q14
+ .long 0xf24a0dec // vadd.f32 q8, q13, q14
+ .long 0xf248cdec // vadd.f32 q14, q12, q14
+ .long 0xf340ed58 // vmul.f32 q15, q0, q4
+ .long 0xf340adda // vmul.f32 q13, q8, q5
+ .long 0xf34c2df2 // vmul.f32 q9, q14, q9
+ .long 0xf24aadee // vadd.f32 q13, q13, q15
+ .long 0xf462eaef // vld1.64 {d30-d31}, [r2 :128]
+ .long 0xf2428dea // vadd.f32 q12, q9, q13
+ .long 0xf2602d68 // vsub.f32 q9, q0, q12
+ .long 0xf3088df2 // vmul.f32 q4, q12, q9
+ .long 0xf2602f6c // vmin.f32 q9, q0, q14
+ .long 0xf2602fe2 // vmin.f32 q9, q8, q9
+ .long 0xf228ade2 // vsub.f32 q5, q12, q9
+ .long 0xeec95aab // vdiv.f32 s11, s19, s23
+ .long 0xee895a0b // vdiv.f32 s10, s18, s22
+ .long 0xeec84aaa // vdiv.f32 s9, s17, s21
+ .long 0xee884a0a // vdiv.f32 s8, s16, s20
+ .long 0xf3b984e2 // vcge.f32 q4, q9, #0
+ .long 0xf248adc4 // vadd.f32 q13, q12, q2
+ .long 0xf2284158 // vorr q2, q4, q4
+ .long 0xf310417a // vbsl q2, q0, q13
+ .long 0xf34eadd6 // vmul.f32 q13, q15, q3
+ .long 0xf2000f6c // vmax.f32 q0, q0, q14
+ .long 0xf224cd68 // vsub.f32 q6, q2, q12
+ .long 0xf26a2de8 // vsub.f32 q9, q13, q12
+ .long 0xf200efc0 // vmax.f32 q7, q8, q0
+ .long 0xf302cddc // vmul.f32 q6, q9, q6
+ .long 0xf22e0d68 // vsub.f32 q0, q7, q12
+ .long 0xf32eee6a // vcgt.f32 q7, q7, q13
+ .long 0xeecd3aa1 // vdiv.f32 s7, s27, s3
+ .long 0xee8d3a01 // vdiv.f32 s6, s26, s2
+ .long 0xeecc2aa0 // vdiv.f32 s5, s25, s1
+ .long 0xee8c2a00 // vdiv.f32 s4, s24, s0
+ .long 0xf2082dc2 // vadd.f32 q1, q12, q1
+ .long 0xf22ec15e // vorr q6, q7, q7
+ .long 0xf312c154 // vbsl q6, q1, q2
+ .long 0xf20c2f64 // vmax.f32 q1, q6, q10
+ .long 0xec8d2b04 // vstmia sp, {d2-d3}
+ .long 0xf2202de8 // vsub.f32 q1, q8, q12
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3082dd2 // vmul.f32 q1, q12, q1
+ .long 0xeec35aab // vdiv.f32 s11, s7, s23
+ .long 0xee835a0b // vdiv.f32 s10, s6, s22
+ .long 0xeec24aaa // vdiv.f32 s9, s5, s21
+ .long 0xee824a0a // vdiv.f32 s8, s4, s20
+ .long 0xf2082dc4 // vadd.f32 q1, q12, q2
+ .long 0xf2284158 // vorr q2, q4, q4
+ .long 0xf31041d2 // vbsl q2, q8, q1
+ .long 0xf2640d68 // vsub.f32 q8, q2, q12
+ .long 0xf3022df0 // vmul.f32 q1, q9, q8
+ .long 0xeec3daa1 // vdiv.f32 s27, s7, s3
+ .long 0xee83da01 // vdiv.f32 s26, s6, s2
+ .long 0xeec2caa0 // vdiv.f32 s25, s5, s1
+ .long 0xee82ca00 // vdiv.f32 s24, s4, s0
+ .long 0xf2480dcc // vadd.f32 q8, q12, q6
+ .long 0xf22e215e // vorr q1, q7, q7
+ .long 0xf280c050 // vmov.i32 q6, #0
+ .long 0xf31021d4 // vbsl q1, q8, q2
+ .long 0xf2420f64 // vmax.f32 q8, q1, q10
+ .long 0xf22c2de8 // vsub.f32 q1, q14, q12
+ .long 0xf3082dd2 // vmul.f32 q1, q12, q1
+ .long 0xeec35aab // vdiv.f32 s11, s7, s23
+ .long 0xee835a0b // vdiv.f32 s10, s6, s22
+ .long 0xeec24aaa // vdiv.f32 s9, s5, s21
+ .long 0xee824a0a // vdiv.f32 s8, s4, s20
+ .long 0xf2082dc4 // vadd.f32 q1, q12, q2
+ .long 0xf31c81d2 // vbsl q4, q14, q1
+ .long 0xf268cd68 // vsub.f32 q14, q4, q12
+ .long 0xf3022dfc // vmul.f32 q1, q9, q14
+ .long 0xecd3cb04 // vldmia r3, {d28-d29}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xeec35aa1 // vdiv.f32 s11, s7, s3
+ .long 0xee835a01 // vdiv.f32 s10, s6, s2
+ .long 0xeec24aa0 // vdiv.f32 s9, s5, s1
+ .long 0xee824a00 // vdiv.f32 s8, s4, s0
+ .long 0xf2482dc4 // vadd.f32 q9, q12, q2
+ .long 0xf312e1d8 // vbsl q7, q9, q4
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2628dc6 // vsub.f32 q12, q9, q3
+ .long 0xf2622dee // vsub.f32 q9, q9, q15
+ .long 0xf3484df6 // vmul.f32 q10, q12, q11
+ .long 0xecd36b04 // vldmia r3, {d22-d23}
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xf342cdfc // vmul.f32 q14, q9, q14
+ .long 0xf3486df6 // vmul.f32 q11, q12, q11
+ .long 0xf2444dec // vadd.f32 q10, q10, q14
+ .long 0xecd3cb04 // vldmia r3, {d28-d29}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xf342cdfc // vmul.f32 q14, q9, q14
+ .long 0xf2466dec // vadd.f32 q11, q11, q14
+ .long 0xf24ecdc6 // vadd.f32 q14, q15, q3
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf3488dfe // vmul.f32 q12, q12, q15
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xf2060de0 // vadd.f32 q0, q11, q8
+ .long 0xf3422dfe // vmul.f32 q9, q9, q15
+ .long 0xecdd0b04 // vldmia sp, {d16-d17}
+ .long 0xf22c6dea // vsub.f32 q3, q14, q13
+ .long 0xf2042de0 // vadd.f32 q1, q10, q8
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf24e8f4c // vmax.f32 q12, q7, q6
+ .long 0xf2024de8 // vadd.f32 q2, q9, q12
+ .long 0xe28dd068 // add sp, sp, #104
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3de147ae // .word 0x3de147ae
+ .long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
@@ -6599,140 +6883,210 @@ HIDDEN _sk_saturation_vfp4
.globl _sk_saturation_vfp4
FUNCTION(_sk_saturation_vfp4)
_sk_saturation_vfp4:
- .long 0xed2d8b0c // vpush {d8-d13}
- .long 0xf3430d16 // vmul.f32 d16, d3, d6
- .long 0xeddf7b82 // vldr d23, [pc, #520]
- .long 0xf3431d15 // vmul.f32 d17, d3, d5
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2612f02 // vmin.f32 d18, d1, d2
- .long 0xf2413f02 // vmax.f32 d19, d1, d2
- .long 0xf3434d14 // vmul.f32 d20, d3, d4
- .long 0xf2615fa0 // vmin.f32 d21, d17, d16
- .long 0xf2602f22 // vmin.f32 d18, d0, d18
- .long 0xf2403f23 // vmax.f32 d19, d0, d19
- .long 0xf2416fa0 // vmax.f32 d22, d17, d16
- .long 0xf2645fa5 // vmin.f32 d21, d20, d21
- .long 0xf3468d37 // vmul.f32 d24, d6, d23
- .long 0xf2632da2 // vsub.f32 d18, d19, d18
- .long 0xf2443fa6 // vmax.f32 d19, d20, d22
- .long 0xf2611da5 // vsub.f32 d17, d17, d21
- .long 0xf2644da5 // vsub.f32 d20, d20, d21
- .long 0xf3422d97 // vmul.f32 d18, d18, d7
- .long 0xf2238da5 // vsub.f32 d8, d19, d21
- .long 0xf2600da5 // vsub.f32 d16, d16, d21
- .long 0xf3f96508 // vceq.f32 d22, d8, #0
- .long 0xf26651b6 // vorr d21, d22, d22
- .long 0xf3029db1 // vmul.f32 d9, d18, d17
- .long 0xeddf1b68 // vldr d17, [pc, #416]
- .long 0xf302adb4 // vmul.f32 d10, d18, d20
- .long 0xf3453d31 // vmul.f32 d19, d5, d17
- .long 0xf302bdb0 // vmul.f32 d11, d18, d16
- .long 0xeddf2b66 // vldr d18, [pc, #408]
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xeec9caa8 // vdiv.f32 s25, s19, s17
- .long 0xee89ca08 // vdiv.f32 s24, s18, s16
- .long 0xeeca9aa8 // vdiv.f32 s19, s21, s17
- .long 0xee8a9a08 // vdiv.f32 s18, s20, s16
- .long 0xeecbaaa8 // vdiv.f32 s21, s23, s17
- .long 0xee8baa08 // vdiv.f32 s20, s22, s16
- .long 0xf3444d32 // vmul.f32 d20, d4, d18
- .long 0xf350519c // vbsl d21, d16, d12
- .long 0xf3459db1 // vmul.f32 d25, d21, d17
- .long 0xf2443da3 // vadd.f32 d19, d20, d19
- .long 0xf26641b6 // vorr d20, d22, d22
- .long 0xf350619a // vbsl d22, d16, d10
- .long 0xf3504199 // vbsl d20, d16, d9
- .long 0xf2433da8 // vadd.f32 d19, d19, d24
- .long 0xf344adb2 // vmul.f32 d26, d20, d18
- .long 0xf3468db7 // vmul.f32 d24, d22, d23
- .long 0xf3433d93 // vmul.f32 d19, d19, d3
- .long 0xf24a9da9 // vadd.f32 d25, d26, d25
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf2633da8 // vsub.f32 d19, d19, d24
- .long 0xf2458da3 // vadd.f32 d24, d21, d19
- .long 0xf2445da3 // vadd.f32 d21, d20, d19
- .long 0xf2466da3 // vadd.f32 d22, d22, d19
- .long 0xf3481db1 // vmul.f32 d17, d24, d17
- .long 0xf3452db2 // vmul.f32 d18, d21, d18
- .long 0xf3463db7 // vmul.f32 d19, d22, d23
- .long 0xf2684fa6 // vmin.f32 d20, d24, d22
- .long 0xf2487fa6 // vmax.f32 d23, d24, d22
- .long 0xf2421da1 // vadd.f32 d17, d18, d17
- .long 0xf2457fa7 // vmax.f32 d23, d21, d23
- .long 0xf2432da1 // vadd.f32 d18, d19, d17
- .long 0xf2653fa4 // vmin.f32 d19, d21, d20
- .long 0xf3f944a3 // vcge.f32 d20, d19, #0
- .long 0xf264a1b4 // vorr d26, d20, d20
- .long 0xf2661da2 // vsub.f32 d17, d22, d18
- .long 0xf2228da3 // vsub.f32 d8, d18, d19
- .long 0xf26431b4 // vorr d19, d20, d20
- .long 0xf3029db1 // vmul.f32 d9, d18, d17
- .long 0xf3431d17 // vmul.f32 d17, d3, d7
- .long 0xeec9aaa8 // vdiv.f32 s21, s19, s17
- .long 0xee89aa08 // vdiv.f32 s20, s18, s16
- .long 0xf2429d8a // vadd.f32 d25, d18, d10
- .long 0xf35631b9 // vbsl d19, d22, d25
- .long 0xf2619da2 // vsub.f32 d25, d17, d18
- .long 0xf2636da2 // vsub.f32 d22, d19, d18
- .long 0xf227ada2 // vsub.f32 d10, d23, d18
- .long 0xf309bdb6 // vmul.f32 d11, d25, d22
- .long 0xf2686da2 // vsub.f32 d22, d24, d18
- .long 0xeecb9aaa // vdiv.f32 s19, s23, s21
- .long 0xee8b9a0a // vdiv.f32 s18, s22, s20
- .long 0xf302bdb6 // vmul.f32 d11, d18, d22
- .long 0xeecbcaa8 // vdiv.f32 s25, s23, s17
- .long 0xee8bca08 // vdiv.f32 s24, s22, s16
- .long 0xf2426d8c // vadd.f32 d22, d18, d12
- .long 0xf358a1b6 // vbsl d26, d24, d22
- .long 0xf26a6da2 // vsub.f32 d22, d26, d18
- .long 0xf309bdb6 // vmul.f32 d11, d25, d22
- .long 0xf2656da2 // vsub.f32 d22, d21, d18
- .long 0xeecbcaaa // vdiv.f32 s25, s23, s21
- .long 0xee8bca0a // vdiv.f32 s24, s22, s20
- .long 0xf302bdb6 // vmul.f32 d11, d18, d22
- .long 0xf2428d8c // vadd.f32 d24, d18, d12
- .long 0xeecbdaa8 // vdiv.f32 s27, s23, s17
- .long 0xee8bda08 // vdiv.f32 s26, s22, s16
- .long 0xf2426d8d // vadd.f32 d22, d18, d13
- .long 0xf35541b6 // vbsl d20, d21, d22
- .long 0xf2645da2 // vsub.f32 d21, d20, d18
- .long 0xf3098db5 // vmul.f32 d8, d25, d21
- .long 0xf3675ea1 // vcgt.f32 d21, d23, d17
- .long 0xf2c77f10 // vmov.f32 d23, #1
- .long 0xf2679d87 // vsub.f32 d25, d23, d7
- .long 0xeec8baaa // vdiv.f32 s23, s17, s21
- .long 0xee88ba0a // vdiv.f32 s22, s16, s20
- .long 0xf2677d83 // vsub.f32 d23, d23, d3
- .long 0xf2426d8b // vadd.f32 d22, d18, d11
- .long 0xf265f1b5 // vorr d31, d21, d21
- .long 0xf2422d89 // vadd.f32 d18, d18, d9
- .long 0xf349bd90 // vmul.f32 d27, d25, d0
- .long 0xf356f1b4 // vbsl d31, d22, d20
- .long 0xf347cd94 // vmul.f32 d28, d23, d4
- .long 0xf349dd91 // vmul.f32 d29, d25, d1
- .long 0xf3494d92 // vmul.f32 d20, d25, d2
- .long 0xf3476d96 // vmul.f32 d22, d23, d6
- .long 0xf347ed95 // vmul.f32 d30, d23, d5
- .long 0xf26571b5 // vorr d23, d21, d21
- .long 0xf35251b3 // vbsl d21, d18, d19
- .long 0xf35871ba // vbsl d23, d24, d26
- .long 0xf2438d07 // vadd.f32 d24, d3, d7
- .long 0xf24c9dab // vadd.f32 d25, d28, d27
- .long 0xf24f2fa0 // vmax.f32 d18, d31, d16
- .long 0xf2477fa0 // vmax.f32 d23, d23, d16
- .long 0xf24e3dad // vadd.f32 d19, d30, d29
- .long 0xf2464da4 // vadd.f32 d20, d22, d20
- .long 0xf2450fa0 // vmax.f32 d16, d21, d16
- .long 0xf2283da1 // vsub.f32 d3, d24, d17
- .long 0xf2090da2 // vadd.f32 d0, d25, d18
- .long 0xf2031da7 // vadd.f32 d1, d19, d23
- .long 0xf2042da0 // vadd.f32 d2, d20, d16
- .long 0xecbd8b0c // vpop {d8-d13}
- .long 0xe12fff1c // bx ip
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd068 // sub sp, sp, #104
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf2604150 // vorr q10, q0, q0
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xec832b04 // vstmia r3, {d2-d3}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xecc34b04 // vstmia r3, {d20-d21}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xecc30b04 // vstmia r3, {d16-d17}
+ .long 0xf3400dd6 // vmul.f32 q8, q8, q3
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf3028dd6 // vmul.f32 q4, q9, q3
+ .long 0xecc32b04 // vstmia r3, {d18-d19}
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf4628aef // vld1.64 {d24-d25}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf3482dd6 // vmul.f32 q9, q12, q3
+ .long 0xf2686f60 // vmin.f32 q11, q4, q8
+ .long 0xeccd8b04 // vstmia sp, {d24-d25}
+ .long 0xf248cf60 // vmax.f32 q14, q4, q8
+ .long 0xec834b04 // vstmia r3, {d4-d5}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf262afe6 // vmin.f32 q13, q9, q11
+ .long 0xf2426fec // vmax.f32 q11, q9, q14
+ .long 0xf242cf44 // vmax.f32 q14, q1, q2
+ .long 0xf2622dea // vsub.f32 q9, q9, q13
+ .long 0xf2260dea // vsub.f32 q0, q11, q13
+ .long 0xf2626f44 // vmin.f32 q11, q1, q2
+ .long 0xf244cfec // vmax.f32 q14, q10, q14
+ .long 0xf2288d6a // vsub.f32 q4, q4, q13
+ .long 0xf2646fe6 // vmin.f32 q11, q10, q11
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xf2600dea // vsub.f32 q8, q8, q13
+ .long 0xf26ccde6 // vsub.f32 q14, q14, q11
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe28f2f97 // add r2, pc, #604
+ .long 0xf34cedf6 // vmul.f32 q15, q14, q11
+ .long 0xf30e2df2 // vmul.f32 q1, q15, q9
+ .long 0xf3f92540 // vceq.f32 q9, q0, #0
+ .long 0xf30e8dd8 // vmul.f32 q4, q15, q4
+ .long 0xf262c1f2 // vorr q14, q9, q9
+ .long 0xeec3baa1 // vdiv.f32 s23, s7, s3
+ .long 0xee83ba01 // vdiv.f32 s22, s6, s2
+ .long 0xeec2aaa0 // vdiv.f32 s21, s5, s1
+ .long 0xee82aa00 // vdiv.f32 s20, s4, s0
+ .long 0xf354c1da // vbsl q14, q10, q5
+ .long 0xeec9baa1 // vdiv.f32 s23, s19, s3
+ .long 0xee89ba01 // vdiv.f32 s22, s18, s2
+ .long 0xeec8aaa0 // vdiv.f32 s21, s17, s1
+ .long 0xee88aa00 // vdiv.f32 s20, s16, s0
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xf22281f2 // vorr q4, q9, q9
+ .long 0xf31481da // vbsl q4, q10, q5
+ .long 0xf422aacf // vld1.64 {d10-d11}, [r2]
+ .long 0xe28f2e22 // add r2, pc, #544
+ .long 0xf422cacf // vld1.64 {d12-d13}, [r2]
+ .long 0xe28f2f8a // add r2, pc, #552
+ .long 0xf308ed5a // vmul.f32 q7, q4, q5
+ .long 0xf30c4ddc // vmul.f32 q2, q14, q6
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xe28d2040 // add r2, sp, #64
+ .long 0xf2044d4e // vadd.f32 q2, q2, q7
+ .long 0xf30eedf0 // vmul.f32 q7, q15, q8
+ .long 0xeecf3aa1 // vdiv.f32 s7, s31, s3
+ .long 0xee8f3a01 // vdiv.f32 s6, s30, s2
+ .long 0xeece2aa0 // vdiv.f32 s5, s29, s1
+ .long 0xee8e2a00 // vdiv.f32 s4, s28, s0
+ .long 0xf35421d2 // vbsl q9, q10, q1
+ .long 0xecd24b04 // vldmia r2, {d20-d21}
+ .long 0xe28d2050 // add r2, sp, #80
+ .long 0xf344edda // vmul.f32 q15, q10, q5
+ .long 0xf3080ddc // vmul.f32 q0, q12, q6
+ .long 0xecd24b04 // vldmia r2, {d20-d21}
+ .long 0xf3420dfa // vmul.f32 q8, q9, q13
+ .long 0xe28d2040 // add r2, sp, #64
+ .long 0xf2c08050 // vmov.i32 q12, #0
+ .long 0xf240ed6e // vadd.f32 q15, q0, q15
+ .long 0xf3040dfa // vmul.f32 q0, q10, q13
+ .long 0xf2440d60 // vadd.f32 q8, q2, q8
+ .long 0xf24eedc0 // vadd.f32 q15, q15, q0
+ .long 0xf34eedd6 // vmul.f32 q15, q15, q3
+ .long 0xf26eede0 // vsub.f32 q15, q15, q8
+ .long 0xf24c0dee // vadd.f32 q8, q14, q15
+ .long 0xf2080d6e // vadd.f32 q0, q4, q15
+ .long 0xf242edee // vadd.f32 q15, q9, q15
+ .long 0xf340cddc // vmul.f32 q14, q8, q6
+ .long 0xf3002d5a // vmul.f32 q1, q0, q5
+ .long 0xf34e2dfa // vmul.f32 q9, q15, q13
+ .long 0xf24ccdc2 // vadd.f32 q14, q14, q1
+ .long 0xf242adec // vadd.f32 q13, q9, q14
+ .long 0xf2602d6a // vsub.f32 q9, q0, q13
+ .long 0xf30a8df2 // vmul.f32 q4, q13, q9
+ .long 0xf2602f6e // vmin.f32 q9, q0, q15
+ .long 0xf2602fe2 // vmin.f32 q9, q8, q9
+ .long 0xf22aade2 // vsub.f32 q5, q13, q9
+ .long 0xeec93aab // vdiv.f32 s7, s19, s23
+ .long 0xee893a0b // vdiv.f32 s6, s18, s22
+ .long 0xeec82aaa // vdiv.f32 s5, s17, s21
+ .long 0xee882a0a // vdiv.f32 s4, s16, s20
+ .long 0xf3b984e2 // vcge.f32 q4, q9, #0
+ .long 0xf24acdc2 // vadd.f32 q14, q13, q1
+ .long 0xf2282158 // vorr q1, q4, q4
+ .long 0xf310217c // vbsl q1, q0, q14
+ .long 0xf346cdd6 // vmul.f32 q14, q11, q3
+ .long 0xf2224d6a // vsub.f32 q2, q1, q13
+ .long 0xf2000f6e // vmax.f32 q0, q0, q15
+ .long 0xf26c2dea // vsub.f32 q9, q14, q13
+ .long 0xf302cdd4 // vmul.f32 q6, q9, q2
+ .long 0xf2004fc0 // vmax.f32 q2, q8, q0
+ .long 0xf2240d6a // vsub.f32 q0, q2, q13
+ .long 0xeecdfaa1 // vdiv.f32 s31, s27, s3
+ .long 0xee8dfa01 // vdiv.f32 s30, s26, s2
+ .long 0xeecceaa0 // vdiv.f32 s29, s25, s1
+ .long 0xee8cea00 // vdiv.f32 s28, s24, s0
+ .long 0xf20acdce // vadd.f32 q6, q13, q7
+ .long 0xf324ee6c // vcgt.f32 q7, q2, q14
+ .long 0xf22e415e // vorr q2, q7, q7
+ .long 0xf31c4152 // vbsl q2, q6, q1
+ .long 0xf2202dea // vsub.f32 q1, q8, q13
+ .long 0xf2444f68 // vmax.f32 q10, q2, q12
+ .long 0xf30a2dd2 // vmul.f32 q1, q13, q1
+ .long 0xeec35aab // vdiv.f32 s11, s7, s23
+ .long 0xee835a0b // vdiv.f32 s10, s6, s22
+ .long 0xeec24aaa // vdiv.f32 s9, s5, s21
+ .long 0xee824a0a // vdiv.f32 s8, s4, s20
+ .long 0xf20a2dc4 // vadd.f32 q1, q13, q2
+ .long 0xf2284158 // vorr q2, q4, q4
+ .long 0xf31041d2 // vbsl q2, q8, q1
+ .long 0xf2640d6a // vsub.f32 q8, q2, q13
+ .long 0xf3022df0 // vmul.f32 q1, q9, q8
+ .long 0xeec3daa1 // vdiv.f32 s27, s7, s3
+ .long 0xee83da01 // vdiv.f32 s26, s6, s2
+ .long 0xeec2caa0 // vdiv.f32 s25, s5, s1
+ .long 0xee82ca00 // vdiv.f32 s24, s4, s0
+ .long 0xf24a0dcc // vadd.f32 q8, q13, q6
+ .long 0xf22e215e // vorr q1, q7, q7
+ .long 0xf280c050 // vmov.i32 q6, #0
+ .long 0xf31021d4 // vbsl q1, q8, q2
+ .long 0xf2420f68 // vmax.f32 q8, q1, q12
+ .long 0xecd28b04 // vldmia r2, {d24-d25}
+ .long 0xf22e2dea // vsub.f32 q1, q15, q13
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf30a2dd2 // vmul.f32 q1, q13, q1
+ .long 0xeec35aab // vdiv.f32 s11, s7, s23
+ .long 0xee835a0b // vdiv.f32 s10, s6, s22
+ .long 0xeec24aaa // vdiv.f32 s9, s5, s21
+ .long 0xee824a0a // vdiv.f32 s8, s4, s20
+ .long 0xf20a2dc4 // vadd.f32 q1, q13, q2
+ .long 0xf31e81d2 // vbsl q4, q15, q1
+ .long 0xf268ed6a // vsub.f32 q15, q4, q13
+ .long 0xf3022dfe // vmul.f32 q1, q9, q15
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xeec35aa1 // vdiv.f32 s11, s7, s3
+ .long 0xee835a01 // vdiv.f32 s10, s6, s2
+ .long 0xeec24aa0 // vdiv.f32 s9, s5, s1
+ .long 0xee824a00 // vdiv.f32 s8, s4, s0
+ .long 0xf24a2dc4 // vadd.f32 q9, q13, q2
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf312e1d8 // vbsl q7, q9, q4
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf262adc6 // vsub.f32 q13, q9, q3
+ .long 0xf2622de6 // vsub.f32 q9, q9, q11
+ .long 0xf2466dc6 // vadd.f32 q11, q11, q3
+ .long 0xf34a8df8 // vmul.f32 q12, q13, q12
+ .long 0xf342edfe // vmul.f32 q15, q9, q15
+ .long 0xf3020dd0 // vmul.f32 q0, q9, q0
+ .long 0xf2266dec // vsub.f32 q3, q11, q14
+ .long 0xf2488dee // vadd.f32 q12, q12, q15
+ .long 0xecddeb04 // vldmia sp, {d30-d31}
+ .long 0xf34aedfe // vmul.f32 q15, q13, q15
+ .long 0xf2082de4 // vadd.f32 q1, q12, q10
+ .long 0xf24eedc0 // vadd.f32 q15, q15, q0
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf34aadd0 // vmul.f32 q13, q13, q0
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xf3422dd0 // vmul.f32 q9, q9, q0
+ .long 0xf20e0de0 // vadd.f32 q0, q15, q8
+ .long 0xf24a2de2 // vadd.f32 q9, q13, q9
+ .long 0xf24eaf4c // vmax.f32 q13, q7, q6
+ .long 0xf2024dea // vadd.f32 q2, q9, q13
+ .long 0xe28dd068 // add sp, sp, #104
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
+ .long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3de147ae // .word 0x3de147ae
+ .long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
@@ -6740,112 +7094,166 @@ HIDDEN _sk_color_vfp4
.globl _sk_color_vfp4
FUNCTION(_sk_color_vfp4)
_sk_color_vfp4:
- .long 0xed2d8b0e // vpush {d8-d14}
- .long 0xeddf0b63 // vldr d16, [pc, #396]
- .long 0xf3412d17 // vmul.f32 d18, d1, d7
- .long 0xeddf3b63 // vldr d19, [pc, #396]
- .long 0xf3401d17 // vmul.f32 d17, d0, d7
- .long 0xf3454d30 // vmul.f32 d20, d5, d16
- .long 0xeddf7b62 // vldr d23, [pc, #392]
- .long 0xf3446d33 // vmul.f32 d22, d4, d19
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3425d17 // vmul.f32 d21, d2, d7
- .long 0xf3428db0 // vmul.f32 d24, d18, d16
- .long 0xf3419db3 // vmul.f32 d25, d17, d19
- .long 0xf2464da4 // vadd.f32 d20, d22, d20
- .long 0xf346ad37 // vmul.f32 d26, d6, d23
- .long 0xf3456db7 // vmul.f32 d22, d21, d23
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf2c0e010 // vmov.i32 d30, #0
- .long 0xf2444daa // vadd.f32 d20, d20, d26
- .long 0xf2466da8 // vadd.f32 d22, d22, d24
- .long 0xf3444d93 // vmul.f32 d20, d20, d3
- .long 0xf2646da6 // vsub.f32 d22, d20, d22
- .long 0xf2414da6 // vadd.f32 d20, d17, d22
- .long 0xf2428da6 // vadd.f32 d24, d18, d22
- .long 0xf2455da6 // vadd.f32 d21, d21, d22
- .long 0xf3441db3 // vmul.f32 d17, d20, d19
- .long 0xf3480db0 // vmul.f32 d16, d24, d16
- .long 0xf3452db7 // vmul.f32 d18, d21, d23
- .long 0xf2683fa5 // vmin.f32 d19, d24, d21
- .long 0xf2486fa5 // vmax.f32 d22, d24, d21
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf2421da0 // vadd.f32 d17, d18, d16
- .long 0xf2642fa3 // vmin.f32 d18, d20, d19
- .long 0xf3f934a2 // vcge.f32 d19, d18, #0
- .long 0xf26391b3 // vorr d25, d19, d19
- .long 0xf2650da1 // vsub.f32 d16, d21, d17
- .long 0xf2219da2 // vsub.f32 d9, d17, d18
- .long 0xf26321b3 // vorr d18, d19, d19
- .long 0xf3018db0 // vmul.f32 d8, d17, d16
- .long 0xf3430d17 // vmul.f32 d16, d3, d7
- .long 0xeec8aaa9 // vdiv.f32 s21, s17, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2417d8a // vadd.f32 d23, d17, d10
- .long 0xf35521b7 // vbsl d18, d21, d23
- .long 0xf2445fa6 // vmax.f32 d21, d20, d22
- .long 0xf2626da1 // vsub.f32 d22, d18, d17
- .long 0xf2607da1 // vsub.f32 d23, d16, d17
- .long 0xf225ada1 // vsub.f32 d10, d21, d17
- .long 0xf307bdb6 // vmul.f32 d11, d23, d22
- .long 0xf2686da1 // vsub.f32 d22, d24, d17
- .long 0xeecb8aaa // vdiv.f32 s17, s23, s21
- .long 0xf301cdb6 // vmul.f32 d12, d17, d22
- .long 0xee8b8a0a // vdiv.f32 s16, s22, s20
- .long 0xeeccdaa9 // vdiv.f32 s27, s25, s19
- .long 0xee8cda09 // vdiv.f32 s26, s24, s18
- .long 0xf2416d8d // vadd.f32 d22, d17, d13
- .long 0xf35891b6 // vbsl d25, d24, d22
- .long 0xf2696da1 // vsub.f32 d22, d25, d17
- .long 0xf307ddb6 // vmul.f32 d13, d23, d22
- .long 0xf2646da1 // vsub.f32 d22, d20, d17
- .long 0xeecdcaaa // vdiv.f32 s25, s27, s21
- .long 0xee8dca0a // vdiv.f32 s24, s26, s20
- .long 0xf301ddb6 // vmul.f32 d13, d17, d22
- .long 0xf2418d8c // vadd.f32 d24, d17, d12
- .long 0xeecdeaa9 // vdiv.f32 s29, s27, s19
- .long 0xee8dea09 // vdiv.f32 s28, s26, s18
- .long 0xf2416d8e // vadd.f32 d22, d17, d14
- .long 0xf35431b6 // vbsl d19, d20, d22
- .long 0xf2634da1 // vsub.f32 d20, d19, d17
- .long 0xf3079db4 // vmul.f32 d9, d23, d20
- .long 0xf3654ea0 // vcgt.f32 d20, d21, d16
- .long 0xf2c75f10 // vmov.f32 d21, #1
- .long 0xf2657d83 // vsub.f32 d23, d21, d3
- .long 0xeec9daaa // vdiv.f32 s27, s19, s21
- .long 0xee89da0a // vdiv.f32 s26, s18, s20
- .long 0xf2655d87 // vsub.f32 d21, d21, d7
- .long 0xf2416d8d // vadd.f32 d22, d17, d13
- .long 0xf264f1b4 // vorr d31, d20, d20
- .long 0xf2411d88 // vadd.f32 d17, d17, d8
- .long 0xf345ad90 // vmul.f32 d26, d21, d0
- .long 0xf356f1b3 // vbsl d31, d22, d19
- .long 0xf26461b4 // vorr d22, d20, d20
- .long 0xf347bd94 // vmul.f32 d27, d23, d4
- .long 0xf345cd91 // vmul.f32 d28, d21, d1
- .long 0xf3453d92 // vmul.f32 d19, d21, d2
- .long 0xf3475d96 // vmul.f32 d21, d23, d6
- .long 0xf347dd95 // vmul.f32 d29, d23, d5
- .long 0xf35141b2 // vbsl d20, d17, d18
- .long 0xf35861b9 // vbsl d22, d24, d25
- .long 0xf2437d07 // vadd.f32 d23, d3, d7
- .long 0xf24b8daa // vadd.f32 d24, d27, d26
- .long 0xf24f1fae // vmax.f32 d17, d31, d30
- .long 0xf24d2dac // vadd.f32 d18, d29, d28
- .long 0xf2466fae // vmax.f32 d22, d22, d30
- .long 0xf2453da3 // vadd.f32 d19, d21, d19
- .long 0xf2444fae // vmax.f32 d20, d20, d30
- .long 0xf2273da0 // vsub.f32 d3, d23, d16
- .long 0xf2080da1 // vadd.f32 d0, d24, d17
- .long 0xf2021da6 // vadd.f32 d1, d18, d22
- .long 0xf2032da4 // vadd.f32 d2, d19, d20
- .long 0xecbd8b0e // vpop {d8-d14}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd068 // sub sp, sp, #104
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xec834b04 // vstmia r3, {d4-d5}
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xec832b04 // vstmia r3, {d2-d3}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xec830b04 // vstmia r3, {d0-d1}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe28f2e22 // add r2, pc, #544
+ .long 0xf3440dd2 // vmul.f32 q8, q10, q1
+ .long 0xf3442dd0 // vmul.f32 q9, q10, q0
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f2e22 // add r2, pc, #544
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f2f8a // add r2, pc, #552
+ .long 0xf3406df8 // vmul.f32 q11, q8, q12
+ .long 0xf462eacf // vld1.64 {d30-d31}, [r2]
+ .long 0xf342cdfa // vmul.f32 q14, q9, q13
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xec8d2b04 // vstmia sp, {d2-d3}
+ .long 0xf3022d78 // vmul.f32 q1, q1, q12
+ .long 0xf24c6de6 // vadd.f32 q11, q14, q11
+ .long 0xf344cdd4 // vmul.f32 q14, q10, q2
+ .long 0xf30c0dfe // vmul.f32 q0, q14, q15
+ .long 0xf2406d66 // vadd.f32 q11, q0, q11
+ .long 0xf4220aef // vld1.64 {d0-d1}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3008d7a // vmul.f32 q4, q0, q13
+ .long 0xec830b04 // vstmia r3, {d0-d1}
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xf4220aef // vld1.64 {d0-d1}, [r2 :128]
+ .long 0xe28d2010 // add r2, sp, #16
+ .long 0xf300ad7e // vmul.f32 q5, q0, q15
+ .long 0xec820b04 // vstmia r2, {d0-d1}
+ .long 0xf2088d42 // vadd.f32 q4, q4, q1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2088d4a // vadd.f32 q4, q4, q5
+ .long 0xf3088d56 // vmul.f32 q4, q4, q3
+ .long 0xf2288d66 // vsub.f32 q4, q4, q11
+ .long 0xf2406dc8 // vadd.f32 q11, q8, q4
+ .long 0xf2420dc8 // vadd.f32 q8, q9, q4
+ .long 0xf24ccdc8 // vadd.f32 q14, q14, q4
+ .long 0xf3468df8 // vmul.f32 q12, q11, q12
+ .long 0xf3402dfa // vmul.f32 q9, q8, q13
+ .long 0xf2422de8 // vadd.f32 q9, q9, q12
+ .long 0xf34c8dfe // vmul.f32 q12, q14, q15
+ .long 0xf2488de2 // vadd.f32 q12, q12, q9
+ .long 0xf2662de8 // vsub.f32 q9, q11, q12
+ .long 0xf308adf2 // vmul.f32 q5, q12, q9
+ .long 0xf2662fec // vmin.f32 q9, q11, q14
+ .long 0xf2602fe2 // vmin.f32 q9, q8, q9
+ .long 0xf3f9e4e2 // vcge.f32 q15, q9, #0
+ .long 0xf2288de2 // vsub.f32 q4, q12, q9
+ .long 0xeecbdaa9 // vdiv.f32 s27, s23, s19
+ .long 0xee8bda09 // vdiv.f32 s26, s22, s18
+ .long 0xeecacaa8 // vdiv.f32 s25, s21, s17
+ .long 0xee8aca08 // vdiv.f32 s24, s20, s16
+ .long 0xf248adcc // vadd.f32 q13, q12, q6
+ .long 0xf22ec1fe // vorr q6, q15, q15
+ .long 0xf316c1fa // vbsl q6, q11, q13
+ .long 0xf2466fec // vmax.f32 q11, q11, q14
+ .long 0xf344add6 // vmul.f32 q13, q10, q3
+ .long 0xf22cad68 // vsub.f32 q5, q6, q12
+ .long 0xf2406fe6 // vmax.f32 q11, q8, q11
+ .long 0xf26a2de8 // vsub.f32 q9, q13, q12
+ .long 0xf226ede8 // vsub.f32 q7, q11, q12
+ .long 0xf302adda // vmul.f32 q5, q9, q5
+ .long 0xf3666eea // vcgt.f32 q11, q11, q13
+ .long 0xeecb5aaf // vdiv.f32 s11, s23, s31
+ .long 0xee8b5a0f // vdiv.f32 s10, s22, s30
+ .long 0xeeca4aae // vdiv.f32 s9, s21, s29
+ .long 0xee8a4a0e // vdiv.f32 s8, s20, s28
+ .long 0xf2084dc4 // vadd.f32 q2, q12, q2
+ .long 0xf226a1f6 // vorr q5, q11, q11
+ .long 0xf314a15c // vbsl q5, q2, q6
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf20acf44 // vmax.f32 q6, q5, q2
+ .long 0xf220ade8 // vsub.f32 q5, q8, q12
+ .long 0xf308adda // vmul.f32 q5, q12, q5
+ .long 0xeecb3aa9 // vdiv.f32 s7, s23, s19
+ .long 0xee8b3a09 // vdiv.f32 s6, s22, s18
+ .long 0xeeca2aa8 // vdiv.f32 s5, s21, s17
+ .long 0xee8a2a08 // vdiv.f32 s4, s20, s16
+ .long 0xf2082dc2 // vadd.f32 q1, q12, q1
+ .long 0xf22ea1fe // vorr q5, q15, q15
+ .long 0xf310a1d2 // vbsl q5, q8, q1
+ .long 0xf26a0d68 // vsub.f32 q8, q5, q12
+ .long 0xf3022df0 // vmul.f32 q1, q9, q8
+ .long 0xeec31aaf // vdiv.f32 s3, s7, s31
+ .long 0xee831a0f // vdiv.f32 s2, s6, s30
+ .long 0xeec20aae // vdiv.f32 s1, s5, s29
+ .long 0xee820a0e // vdiv.f32 s0, s4, s28
+ .long 0xf2480dc0 // vadd.f32 q8, q12, q0
+ .long 0xf22601f6 // vorr q0, q11, q11
+ .long 0xf31001da // vbsl q0, q8, q5
+ .long 0xf2400f44 // vmax.f32 q8, q0, q2
+ .long 0xf22c0de8 // vsub.f32 q0, q14, q12
+ .long 0xf3080dd0 // vmul.f32 q0, q12, q0
+ .long 0xeec13aa9 // vdiv.f32 s7, s3, s19
+ .long 0xee813a09 // vdiv.f32 s6, s2, s18
+ .long 0xeec02aa8 // vdiv.f32 s5, s1, s17
+ .long 0xee802a08 // vdiv.f32 s4, s0, s16
+ .long 0xf2080dc2 // vadd.f32 q0, q12, q1
+ .long 0xf35ce1d0 // vbsl q15, q14, q0
+ .long 0xf26ecde8 // vsub.f32 q14, q15, q12
+ .long 0xf3020dfc // vmul.f32 q0, q9, q14
+ .long 0xecddcb04 // vldmia sp, {d28-d29}
+ .long 0xeec13aaf // vdiv.f32 s7, s3, s31
+ .long 0xee813a0f // vdiv.f32 s6, s2, s30
+ .long 0xeec02aae // vdiv.f32 s5, s1, s29
+ .long 0xee802a0e // vdiv.f32 s4, s0, s28
+ .long 0xf2482dc2 // vadd.f32 q9, q12, q1
+ .long 0xf35261fe // vbsl q11, q9, q15
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2466fc4 // vmax.f32 q11, q11, q2
+ .long 0xf2628dc6 // vsub.f32 q12, q9, q3
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2444dc6 // vadd.f32 q10, q10, q3
+ .long 0xf348cdfc // vmul.f32 q14, q12, q14
+ .long 0xf342edfe // vmul.f32 q15, q9, q15
+ .long 0xf2246dea // vsub.f32 q3, q10, q13
+ .long 0xf24ecdec // vadd.f32 q14, q15, q14
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf348edfe // vmul.f32 q15, q12, q15
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf3020dd0 // vmul.f32 q0, q9, q0
+ .long 0xf20c2dcc // vadd.f32 q1, q14, q6
+ .long 0xf240ed6e // vadd.f32 q15, q0, q15
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf3488dd0 // vmul.f32 q12, q12, q0
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xf3422dd0 // vmul.f32 q9, q9, q0
+ .long 0xf20e0de0 // vadd.f32 q0, q15, q8
+ .long 0xf2422de8 // vadd.f32 q9, q9, q12
+ .long 0xf2024de6 // vadd.f32 q2, q9, q11
+ .long 0xe28dd068 // add sp, sp, #104
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
+ .long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3de147ae // .word 0x3de147ae
+ .long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
@@ -6853,112 +7261,166 @@ HIDDEN _sk_luminosity_vfp4
.globl _sk_luminosity_vfp4
FUNCTION(_sk_luminosity_vfp4)
_sk_luminosity_vfp4:
- .long 0xed2d8b0e // vpush {d8-d14}
- .long 0xeddf0b63 // vldr d16, [pc, #396]
- .long 0xf3432d15 // vmul.f32 d18, d3, d5
- .long 0xeddf3b63 // vldr d19, [pc, #396]
- .long 0xf3431d14 // vmul.f32 d17, d3, d4
- .long 0xf3414d30 // vmul.f32 d20, d1, d16
- .long 0xeddf7b62 // vldr d23, [pc, #392]
- .long 0xf3406d33 // vmul.f32 d22, d0, d19
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3435d16 // vmul.f32 d21, d3, d6
- .long 0xf3428db0 // vmul.f32 d24, d18, d16
- .long 0xf3419db3 // vmul.f32 d25, d17, d19
- .long 0xf2464da4 // vadd.f32 d20, d22, d20
- .long 0xf342ad37 // vmul.f32 d26, d2, d23
- .long 0xf3456db7 // vmul.f32 d22, d21, d23
- .long 0xf2498da8 // vadd.f32 d24, d25, d24
- .long 0xf2c0e010 // vmov.i32 d30, #0
- .long 0xf2444daa // vadd.f32 d20, d20, d26
- .long 0xf2486da6 // vadd.f32 d22, d24, d22
- .long 0xf3444d97 // vmul.f32 d20, d20, d7
- .long 0xf2646da6 // vsub.f32 d22, d20, d22
- .long 0xf2414da6 // vadd.f32 d20, d17, d22
- .long 0xf2428da6 // vadd.f32 d24, d18, d22
- .long 0xf2455da6 // vadd.f32 d21, d21, d22
- .long 0xf3441db3 // vmul.f32 d17, d20, d19
- .long 0xf3480db0 // vmul.f32 d16, d24, d16
- .long 0xf3452db7 // vmul.f32 d18, d21, d23
- .long 0xf2683fa5 // vmin.f32 d19, d24, d21
- .long 0xf2486fa5 // vmax.f32 d22, d24, d21
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf2421da0 // vadd.f32 d17, d18, d16
- .long 0xf2642fa3 // vmin.f32 d18, d20, d19
- .long 0xf3f934a2 // vcge.f32 d19, d18, #0
- .long 0xf26391b3 // vorr d25, d19, d19
- .long 0xf2650da1 // vsub.f32 d16, d21, d17
- .long 0xf2219da2 // vsub.f32 d9, d17, d18
- .long 0xf26321b3 // vorr d18, d19, d19
- .long 0xf3018db0 // vmul.f32 d8, d17, d16
- .long 0xf3430d17 // vmul.f32 d16, d3, d7
- .long 0xeec8aaa9 // vdiv.f32 s21, s17, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2417d8a // vadd.f32 d23, d17, d10
- .long 0xf35521b7 // vbsl d18, d21, d23
- .long 0xf2445fa6 // vmax.f32 d21, d20, d22
- .long 0xf2626da1 // vsub.f32 d22, d18, d17
- .long 0xf2607da1 // vsub.f32 d23, d16, d17
- .long 0xf225ada1 // vsub.f32 d10, d21, d17
- .long 0xf307bdb6 // vmul.f32 d11, d23, d22
- .long 0xf2686da1 // vsub.f32 d22, d24, d17
- .long 0xeecb8aaa // vdiv.f32 s17, s23, s21
- .long 0xf301cdb6 // vmul.f32 d12, d17, d22
- .long 0xee8b8a0a // vdiv.f32 s16, s22, s20
- .long 0xeeccdaa9 // vdiv.f32 s27, s25, s19
- .long 0xee8cda09 // vdiv.f32 s26, s24, s18
- .long 0xf2416d8d // vadd.f32 d22, d17, d13
- .long 0xf35891b6 // vbsl d25, d24, d22
- .long 0xf2696da1 // vsub.f32 d22, d25, d17
- .long 0xf307ddb6 // vmul.f32 d13, d23, d22
- .long 0xf2646da1 // vsub.f32 d22, d20, d17
- .long 0xeecdcaaa // vdiv.f32 s25, s27, s21
- .long 0xee8dca0a // vdiv.f32 s24, s26, s20
- .long 0xf301ddb6 // vmul.f32 d13, d17, d22
- .long 0xf2418d8c // vadd.f32 d24, d17, d12
- .long 0xeecdeaa9 // vdiv.f32 s29, s27, s19
- .long 0xee8dea09 // vdiv.f32 s28, s26, s18
- .long 0xf2416d8e // vadd.f32 d22, d17, d14
- .long 0xf35431b6 // vbsl d19, d20, d22
- .long 0xf2634da1 // vsub.f32 d20, d19, d17
- .long 0xf3079db4 // vmul.f32 d9, d23, d20
- .long 0xf3654ea0 // vcgt.f32 d20, d21, d16
- .long 0xf2c75f10 // vmov.f32 d21, #1
- .long 0xf2657d83 // vsub.f32 d23, d21, d3
- .long 0xeec9daaa // vdiv.f32 s27, s19, s21
- .long 0xee89da0a // vdiv.f32 s26, s18, s20
- .long 0xf2655d87 // vsub.f32 d21, d21, d7
- .long 0xf2416d8d // vadd.f32 d22, d17, d13
- .long 0xf264f1b4 // vorr d31, d20, d20
- .long 0xf2411d88 // vadd.f32 d17, d17, d8
- .long 0xf345ad90 // vmul.f32 d26, d21, d0
- .long 0xf356f1b3 // vbsl d31, d22, d19
- .long 0xf26461b4 // vorr d22, d20, d20
- .long 0xf347bd94 // vmul.f32 d27, d23, d4
- .long 0xf345cd91 // vmul.f32 d28, d21, d1
- .long 0xf3453d92 // vmul.f32 d19, d21, d2
- .long 0xf3475d96 // vmul.f32 d21, d23, d6
- .long 0xf347dd95 // vmul.f32 d29, d23, d5
- .long 0xf35141b2 // vbsl d20, d17, d18
- .long 0xf35861b9 // vbsl d22, d24, d25
- .long 0xf2437d07 // vadd.f32 d23, d3, d7
- .long 0xf24b8daa // vadd.f32 d24, d27, d26
- .long 0xf24f1fae // vmax.f32 d17, d31, d30
- .long 0xf24d2dac // vadd.f32 d18, d29, d28
- .long 0xf2466fae // vmax.f32 d22, d22, d30
- .long 0xf2453da3 // vadd.f32 d19, d21, d19
- .long 0xf2444fae // vmax.f32 d20, d20, d30
- .long 0xf2273da0 // vsub.f32 d3, d23, d16
- .long 0xf2080da1 // vadd.f32 d0, d24, d17
- .long 0xf2021da6 // vadd.f32 d1, d18, d22
- .long 0xf2032da4 // vadd.f32 d2, d19, d20
- .long 0xecbd8b0e // vpop {d8-d14}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd068 // sub sp, sp, #104
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xec834b04 // vstmia r3, {d4-d5}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xec8d2b04 // vstmia sp, {d2-d3}
+ .long 0xec830b04 // vstmia r3, {d0-d1}
+ .long 0xe28d3040 // add r3, sp, #64
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xecc30b04 // vstmia r3, {d16-d17}
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf3400dd6 // vmul.f32 q8, q8, q3
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xf3442dd6 // vmul.f32 q9, q10, q3
+ .long 0xecc34b04 // vstmia r3, {d20-d21}
+ .long 0xe28f2f82 // add r2, pc, #520
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f2f83 // add r2, pc, #524
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf3404df8 // vmul.f32 q10, q8, q12
+ .long 0xf462caef // vld1.64 {d28-d29}, [r2 :128]
+ .long 0xf3426dfa // vmul.f32 q11, q9, q13
+ .long 0xf3008d7a // vmul.f32 q4, q0, q13
+ .long 0xecc3cb04 // vstmia r3, {d28-d29}
+ .long 0xf34ccdd6 // vmul.f32 q14, q14, q3
+ .long 0xe28f2f7e // add r2, pc, #504
+ .long 0xe28d3050 // add r3, sp, #80
+ .long 0xf462eacf // vld1.64 {d30-d31}, [r2]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2464de4 // vadd.f32 q10, q11, q10
+ .long 0xf34c6dfe // vmul.f32 q11, q14, q15
+ .long 0xf2444de6 // vadd.f32 q10, q10, q11
+ .long 0xf3426d78 // vmul.f32 q11, q1, q12
+ .long 0xf2486d66 // vadd.f32 q11, q4, q11
+ .long 0xf3048d7e // vmul.f32 q4, q2, q15
+ .long 0xf2068dc8 // vadd.f32 q4, q11, q4
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xe28d2040 // add r2, sp, #64
+ .long 0xf3088d76 // vmul.f32 q4, q4, q11
+ .long 0xf2288d64 // vsub.f32 q4, q4, q10
+ .long 0xf2404dc8 // vadd.f32 q10, q8, q4
+ .long 0xf2420dc8 // vadd.f32 q8, q9, q4
+ .long 0xf24ccdc8 // vadd.f32 q14, q14, q4
+ .long 0xf3448df8 // vmul.f32 q12, q10, q12
+ .long 0xf3402dfa // vmul.f32 q9, q8, q13
+ .long 0xf2422de8 // vadd.f32 q9, q9, q12
+ .long 0xf34c8dfe // vmul.f32 q12, q14, q15
+ .long 0xf2488de2 // vadd.f32 q12, q12, q9
+ .long 0xf2642de8 // vsub.f32 q9, q10, q12
+ .long 0xf308adf2 // vmul.f32 q5, q12, q9
+ .long 0xf2642fec // vmin.f32 q9, q10, q14
+ .long 0xf2602fe2 // vmin.f32 q9, q8, q9
+ .long 0xf3f9e4e2 // vcge.f32 q15, q9, #0
+ .long 0xf2288de2 // vsub.f32 q4, q12, q9
+ .long 0xeecbdaa9 // vdiv.f32 s27, s23, s19
+ .long 0xee8bda09 // vdiv.f32 s26, s22, s18
+ .long 0xeecacaa8 // vdiv.f32 s25, s21, s17
+ .long 0xee8aca08 // vdiv.f32 s24, s20, s16
+ .long 0xf248adcc // vadd.f32 q13, q12, q6
+ .long 0xf22ec1fe // vorr q6, q15, q15
+ .long 0xf314c1fa // vbsl q6, q10, q13
+ .long 0xf2444fec // vmax.f32 q10, q10, q14
+ .long 0xf346add6 // vmul.f32 q13, q11, q3
+ .long 0xf22cad68 // vsub.f32 q5, q6, q12
+ .long 0xf2404fe4 // vmax.f32 q10, q8, q10
+ .long 0xf26a2de8 // vsub.f32 q9, q13, q12
+ .long 0xf224ede8 // vsub.f32 q7, q10, q12
+ .long 0xf302adda // vmul.f32 q5, q9, q5
+ .long 0xf3644eea // vcgt.f32 q10, q10, q13
+ .long 0xeecb5aaf // vdiv.f32 s11, s23, s31
+ .long 0xee8b5a0f // vdiv.f32 s10, s22, s30
+ .long 0xeeca4aae // vdiv.f32 s9, s21, s29
+ .long 0xee8a4a0e // vdiv.f32 s8, s20, s28
+ .long 0xf2084dc4 // vadd.f32 q2, q12, q2
+ .long 0xf224a1f4 // vorr q5, q10, q10
+ .long 0xf314a15c // vbsl q5, q2, q6
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf20acf44 // vmax.f32 q6, q5, q2
+ .long 0xf220ade8 // vsub.f32 q5, q8, q12
+ .long 0xf308adda // vmul.f32 q5, q12, q5
+ .long 0xeecb3aa9 // vdiv.f32 s7, s23, s19
+ .long 0xee8b3a09 // vdiv.f32 s6, s22, s18
+ .long 0xeeca2aa8 // vdiv.f32 s5, s21, s17
+ .long 0xee8a2a08 // vdiv.f32 s4, s20, s16
+ .long 0xf2082dc2 // vadd.f32 q1, q12, q1
+ .long 0xf22ea1fe // vorr q5, q15, q15
+ .long 0xf310a1d2 // vbsl q5, q8, q1
+ .long 0xf26a0d68 // vsub.f32 q8, q5, q12
+ .long 0xf3022df0 // vmul.f32 q1, q9, q8
+ .long 0xeec31aaf // vdiv.f32 s3, s7, s31
+ .long 0xee831a0f // vdiv.f32 s2, s6, s30
+ .long 0xeec20aae // vdiv.f32 s1, s5, s29
+ .long 0xee820a0e // vdiv.f32 s0, s4, s28
+ .long 0xf2480dc0 // vadd.f32 q8, q12, q0
+ .long 0xf22401f4 // vorr q0, q10, q10
+ .long 0xf31001da // vbsl q0, q8, q5
+ .long 0xf2400f44 // vmax.f32 q8, q0, q2
+ .long 0xf22c0de8 // vsub.f32 q0, q14, q12
+ .long 0xf3080dd0 // vmul.f32 q0, q12, q0
+ .long 0xeec13aa9 // vdiv.f32 s7, s3, s19
+ .long 0xee813a09 // vdiv.f32 s6, s2, s18
+ .long 0xeec02aa8 // vdiv.f32 s5, s1, s17
+ .long 0xee802a08 // vdiv.f32 s4, s0, s16
+ .long 0xf2080dc2 // vadd.f32 q0, q12, q1
+ .long 0xf35ce1d0 // vbsl q15, q14, q0
+ .long 0xf26ecde8 // vsub.f32 q14, q15, q12
+ .long 0xf3020dfc // vmul.f32 q0, q9, q14
+ .long 0xecd2cb04 // vldmia r2, {d28-d29}
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xeec13aaf // vdiv.f32 s7, s3, s31
+ .long 0xee813a0f // vdiv.f32 s6, s2, s30
+ .long 0xeec02aae // vdiv.f32 s5, s1, s29
+ .long 0xee802a0e // vdiv.f32 s4, s0, s28
+ .long 0xf2482dc2 // vadd.f32 q9, q12, q1
+ .long 0xf35241fe // vbsl q10, q9, q15
+ .long 0xecddeb04 // vldmia sp, {d30-d31}
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2444fc4 // vmax.f32 q10, q10, q2
+ .long 0xf2628dc6 // vsub.f32 q12, q9, q3
+ .long 0xf2622de6 // vsub.f32 q9, q9, q11
+ .long 0xf2466dc6 // vadd.f32 q11, q11, q3
+ .long 0xf348cdfc // vmul.f32 q14, q12, q14
+ .long 0xf342edfe // vmul.f32 q15, q9, q15
+ .long 0xf2266dea // vsub.f32 q3, q11, q13
+ .long 0xf24ccdee // vadd.f32 q14, q14, q15
+ .long 0xecd3eb04 // vldmia r3, {d30-d31}
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf348edfe // vmul.f32 q15, q12, q15
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3030 // add r3, sp, #48
+ .long 0xf3020dd0 // vmul.f32 q0, q9, q0
+ .long 0xf20c2dcc // vadd.f32 q1, q14, q6
+ .long 0xf24eedc0 // vadd.f32 q15, q15, q0
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xe28d3020 // add r3, sp, #32
+ .long 0xf3488dd0 // vmul.f32 q12, q12, q0
+ .long 0xec930b04 // vldmia r3, {d0-d1}
+ .long 0xf3422dd0 // vmul.f32 q9, q9, q0
+ .long 0xf20e0de0 // vadd.f32 q0, q15, q8
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf2024de4 // vadd.f32 q2, q9, q10
+ .long 0xe28dd068 // add sp, sp, #104
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
.long 0x3f170a3d // .word 0x3f170a3d
.long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3f170a3d // .word 0x3f170a3d
+ .long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3de147ae // .word 0x3de147ae
+ .long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
.long 0x3de147ae // .word 0x3de147ae
@@ -6966,295 +7428,411 @@ HIDDEN _sk_srcover_rgba_8888_vfp4
.globl _sk_srcover_rgba_8888_vfp4
FUNCTION(_sk_srcover_rgba_8888_vfp4)
_sk_srcover_rgba_8888_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59de010 // ldr lr, [sp, #16]
- .long 0xe59c4004 // ldr r4, [ip, #4]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe0040394 // mul r4, r4, r3
- .long 0xe0855104 // add r5, r5, r4, lsl #2
- .long 0xe085c102 // add ip, r5, r2, lsl #2
- .long 0x0a00002c // beq 1434 <sk_srcover_rgba_8888_vfp4+0xdc>
- .long 0xed9c4b00 // vldr d4, [ip]
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xeddf6b2e // vldr d22, [pc, #184]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe35e0001 // cmp lr, #1
- .long 0xf3f82014 // vshr.u32 d18, d4, #8
- .long 0xf3e84014 // vshr.u32 d20, d4, #24
- .long 0xf2611d83 // vsub.f32 d17, d17, d3
- .long 0xf24221b0 // vand d18, d18, d16
- .long 0xf3f03014 // vshr.u32 d19, d4, #16
- .long 0xf3bb7624 // vcvt.f32.s32 d7, d20
- .long 0xf2445130 // vand d21, d4, d16
- .long 0xf3033d36 // vmul.f32 d3, d3, d22
- .long 0xf24301b0 // vand d16, d19, d16
- .long 0xf3bb5622 // vcvt.f32.s32 d5, d18
- .long 0xf3011d36 // vmul.f32 d1, d1, d22
- .long 0xf3bb4625 // vcvt.f32.s32 d4, d21
- .long 0xf3000d36 // vmul.f32 d0, d0, d22
- .long 0xf3bb6620 // vcvt.f32.s32 d6, d16
- .long 0xf2073c31 // vfma.f32 d3, d7, d17
- .long 0xf3022d36 // vmul.f32 d2, d2, d22
- .long 0xf2051c31 // vfma.f32 d1, d5, d17
- .long 0xf2040c31 // vfma.f32 d0, d4, d17
- .long 0xf2062c31 // vfma.f32 d2, d6, d17
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xf2431d20 // vadd.f32 d17, d3, d16
- .long 0xf2413d20 // vadd.f32 d19, d1, d16
- .long 0xf2402d20 // vadd.f32 d18, d0, d16
- .long 0xf2420d20 // vadd.f32 d16, d2, d16
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xf3fb37a3 // vcvt.u32.f32 d19, d19
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf3fb07a0 // vcvt.u32.f32 d16, d16
- .long 0xf2f81531 // vshl.s32 d17, d17, #24
- .long 0xf26111b2 // vorr d17, d17, d18
- .long 0xf2e82533 // vshl.s32 d18, d19, #8
- .long 0xf2f00530 // vshl.s32 d16, d16, #16
- .long 0xf26111b2 // vorr d17, d17, d18
- .long 0xf26101b0 // vorr d16, d17, d16
- .long 0x0a000007 // beq 1440 <sk_srcover_rgba_8888_vfp4+0xe8>
- .long 0xedcc0b00 // vstr d16, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xed2d8b08 // vpush {d8-d11}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe5905004 // ldr r5, [r0, #4]
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5906000 // ldr r6, [r0]
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe5903008 // ldr r3, [r0, #8]
+ .long 0xe0020592 // mul r2, r2, r5
+ .long 0xe2805010 // add r5, r0, #16
+ .long 0xe3530000 // cmp r3, #0
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe2804020 // add r4, r0, #32
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0x1a000032 // bne 1ba0 <sk_srcover_rgba_8888_vfp4+0x110>
+ .long 0xf4620a8f // vld1.32 {d16-d17}, [r2]
+ .long 0xf3c7405f // vmov.i32 q10, #255
+ .long 0xe28f6f51 // add r6, pc, #324
+ .long 0xf3f02070 // vshr.u32 q9, q8, #16
+ .long 0xf4668acf // vld1.64 {d24-d25}, [r6]
+ .long 0xf2c76f50 // vmov.f32 q11, #1
+ .long 0xe3530000 // cmp r3, #0
+ .long 0xf240e1f4 // vand q15, q8, q10
+ .long 0xf3a88070 // vshr.u32 q4, q8, #24
+ .long 0xf3f80070 // vshr.u32 q8, q8, #8
+ .long 0xf2666dc6 // vsub.f32 q11, q11, q3
+ .long 0xf24001f4 // vand q8, q8, q10
+ .long 0xf3bb8648 // vcvt.f32.s32 q4, q4
+ .long 0xf3066d78 // vmul.f32 q3, q3, q12
+ .long 0xf24221f4 // vand q9, q9, q10
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3022d78 // vmul.f32 q1, q1, q12
+ .long 0xf3fbe66e // vcvt.f32.s32 q15, q15
+ .long 0xf3000d78 // vmul.f32 q0, q0, q12
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf3044d78 // vmul.f32 q2, q2, q12
+ .long 0xf2086c76 // vfma.f32 q3, q4, q11
+ .long 0xf445eaef // vst1.64 {d30-d31}, [r5 :128]
+ .long 0xf2002cf6 // vfma.f32 q1, q8, q11
+ .long 0xf4440aef // vst1.64 {d16-d17}, [r4 :128]
+ .long 0xf20e0cf6 // vfma.f32 q0, q15, q11
+ .long 0xf44e2aef // vst1.64 {d18-d19}, [lr :128]
+ .long 0xf2024cf6 // vfma.f32 q2, q9, q11
+ .long 0xf40c8aef // vst1.64 {d8-d9}, [ip :128]
+ .long 0xf2c3a65f // vmov.i32 q13, #1056964608
+ .long 0xf206ad6a // vadd.f32 q5, q3, q13
+ .long 0xf2424d6a // vadd.f32 q10, q1, q13
+ .long 0xf240ed6a // vadd.f32 q15, q0, q13
+ .long 0xf244cd6a // vadd.f32 q14, q2, q13
+ .long 0xf3bba7ca // vcvt.u32.f32 q5, q5
+ .long 0xf3fb47e4 // vcvt.u32.f32 q10, q10
+ .long 0xf3fbe7ee // vcvt.u32.f32 q15, q15
+ .long 0xf3fbc7ec // vcvt.u32.f32 q14, q14
+ .long 0xf2b8a55a // vshl.s32 q5, q5, #24
+ .long 0xf2e84574 // vshl.s32 q10, q10, #8
+ .long 0xf26ee1da // vorr q15, q15, q5
+ .long 0xf2f0c57c // vshl.s32 q14, q14, #16
+ .long 0xf26e01f4 // vorr q8, q15, q10
+ .long 0xf26001fc // vorr q8, q8, q14
+ .long 0x1a000015 // bne 1be0 <sk_srcover_rgba_8888_vfp4+0x150>
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf4a05 // vldr s9, [pc, #20]
- .long 0xed9c4a00 // vldr s8, [ip]
- .long 0xeaffffd0 // b 1384 <sk_srcover_rgba_8888_vfp4+0x2c>
- .long 0xf4cc083f // vst1.32 {d16[0]}, [ip :32]
- .long 0xeafffff6 // b 1424 <sk_srcover_rgba_8888_vfp4+0xcc>
+ .long 0xecbd8b08 // vpop {d8-d11}
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe2036003 // and r6, r3, #3
+ .long 0xe3560001 // cmp r6, #1
+ .long 0x0a000017 // beq 1c0c <sk_srcover_rgba_8888_vfp4+0x17c>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe3560002 // cmp r6, #2
+ .long 0x0a000005 // beq 1bd0 <sk_srcover_rgba_8888_vfp4+0x140>
+ .long 0xe3560003 // cmp r6, #3
+ .long 0x1affffc5 // bne 1ad8 <sk_srcover_rgba_8888_vfp4+0x48>
+ .long 0xe3a06000 // mov r6, #0
+ .long 0xeea06b90 // vdup.32 q8, r6
+ .long 0xe2826008 // add r6, r2, #8
+ .long 0xf4e6183f // vld1.32 {d17[0]}, [r6 :32]
+ .long 0xedd22b00 // vldr d18, [r2]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffbd // b 1ad8 <sk_srcover_rgba_8888_vfp4+0x48>
+ .long 0xe2033003 // and r3, r3, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000b // beq 1c1c <sk_srcover_rgba_8888_vfp4+0x18c>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 1c04 <sk_srcover_rgba_8888_vfp4+0x174>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe3 // bne 1b8c <sk_srcover_rgba_8888_vfp4+0xfc>
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4c3183f // vst1.32 {d17[0]}, [r3 :32]
+ .long 0xedc20b00 // vstr d16, [r2]
+ .long 0xeaffffdf // b 1b8c <sk_srcover_rgba_8888_vfp4+0xfc>
+ .long 0xe3a06000 // mov r6, #0
+ .long 0xeea06b90 // vdup.32 q8, r6
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffae // b 1ad8 <sk_srcover_rgba_8888_vfp4+0x48>
+ .long 0xf4c2083f // vst1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffd9 // b 1b8c <sk_srcover_rgba_8888_vfp4+0xfc>
+ .long 0xe320f000 // nop {0}
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
- .long 0x00000000 // .word 0x00000000
HIDDEN _sk_clamp_0_vfp4
.globl _sk_clamp_0_vfp4
FUNCTION(_sk_clamp_0_vfp4)
_sk_clamp_0_vfp4:
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2000f20 // vmax.f32 d0, d0, d16
- .long 0xf2011f20 // vmax.f32 d1, d1, d16
- .long 0xf2022f20 // vmax.f32 d2, d2, d16
- .long 0xf2033f20 // vmax.f32 d3, d3, d16
- .long 0xe12fff1c // bx ip
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2000f60 // vmax.f32 q0, q0, q8
+ .long 0xf2022f60 // vmax.f32 q1, q1, q8
+ .long 0xf2044f60 // vmax.f32 q2, q2, q8
+ .long 0xf2066f60 // vmax.f32 q3, q3, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_clamp_1_vfp4
.globl _sk_clamp_1_vfp4
FUNCTION(_sk_clamp_1_vfp4)
_sk_clamp_1_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2200f20 // vmin.f32 d0, d0, d16
- .long 0xf2211f20 // vmin.f32 d1, d1, d16
- .long 0xf2222f20 // vmin.f32 d2, d2, d16
- .long 0xf2233f20 // vmin.f32 d3, d3, d16
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2200f60 // vmin.f32 q0, q0, q8
+ .long 0xf2222f60 // vmin.f32 q1, q1, q8
+ .long 0xf2244f60 // vmin.f32 q2, q2, q8
+ .long 0xf2266f60 // vmin.f32 q3, q3, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_clamp_a_vfp4
.globl _sk_clamp_a_vfp4
FUNCTION(_sk_clamp_a_vfp4)
_sk_clamp_a_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2233f20 // vmin.f32 d3, d3, d16
- .long 0xf2200f03 // vmin.f32 d0, d0, d3
- .long 0xf2211f03 // vmin.f32 d1, d1, d3
- .long 0xf2222f03 // vmin.f32 d2, d2, d3
- .long 0xe12fff1c // bx ip
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2266f60 // vmin.f32 q3, q3, q8
+ .long 0xf2200f46 // vmin.f32 q0, q0, q3
+ .long 0xf2222f46 // vmin.f32 q1, q1, q3
+ .long 0xf2244f46 // vmin.f32 q2, q2, q3
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_clamp_a_dst_vfp4
.globl _sk_clamp_a_dst_vfp4
FUNCTION(_sk_clamp_a_dst_vfp4)
_sk_clamp_a_dst_vfp4:
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2277f20 // vmin.f32 d7, d7, d16
- .long 0xf2244f07 // vmin.f32 d4, d4, d7
- .long 0xf2255f07 // vmin.f32 d5, d5, d7
- .long 0xf2266f07 // vmin.f32 d6, d6, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2620fe0 // vmin.f32 q8, q9, q8
+ .long 0xf4420aef // vst1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2622fe0 // vmin.f32 q9, q9, q8
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2622fe0 // vmin.f32 q9, q9, q8
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2620fe0 // vmin.f32 q8, q9, q8
+ .long 0xf4420aef // vst1.64 {d16-d17}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_set_rgb_vfp4
.globl _sk_set_rgb_vfp4
FUNCTION(_sk_set_rgb_vfp4)
_sk_set_rgb_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4ae0c9d // vld1.32 {d0[]}, [lr :32]!
- .long 0xf4a42c9f // vld1.32 {d2[]}, [r4 :32]
- .long 0xf4ae1c9f // vld1.32 {d1[]}, [lr :32]
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf4a30cbd // vld1.32 {d0[]-d1[]}, [r3 :32]!
+ .long 0xf4a24cbf // vld1.32 {d4[]-d5[]}, [r2 :32]
+ .long 0xf4a32cbf // vld1.32 {d2[]-d3[]}, [r3 :32]
.long 0xe12fff1c // bx ip
HIDDEN _sk_swap_rb_vfp4
.globl _sk_swap_rb_vfp4
FUNCTION(_sk_swap_rb_vfp4)
_sk_swap_rb_vfp4:
- .long 0xeef00b40 // vmov.f64 d16, d0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeeb00b42 // vmov.f64 d0, d2
- .long 0xeeb02b60 // vmov.f64 d2, d16
- .long 0xe12fff1c // bx ip
+ .long 0xf2600150 // vorr q8, q0, q0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2240154 // vorr q0, q2, q2
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_move_src_dst_vfp4
.globl _sk_move_src_dst_vfp4
FUNCTION(_sk_move_src_dst_vfp4)
_sk_move_src_dst_vfp4:
- .long 0xeeb04b40 // vmov.f64 d4, d0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeeb05b41 // vmov.f64 d5, d1
- .long 0xeeb06b42 // vmov.f64 d6, d2
- .long 0xeeb07b43 // vmov.f64 d7, d3
- .long 0xe12fff1c // bx ip
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4020aef // vst1.64 {d0-d1}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4022aef // vst1.64 {d2-d3}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4024aef // vst1.64 {d4-d5}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4026aef // vst1.64 {d6-d7}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_move_dst_src_vfp4
.globl _sk_move_dst_src_vfp4
FUNCTION(_sk_move_dst_src_vfp4)
_sk_move_dst_src_vfp4:
- .long 0xeeb00b44 // vmov.f64 d0, d4
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeeb01b45 // vmov.f64 d1, d5
- .long 0xeeb02b46 // vmov.f64 d2, d6
- .long 0xeeb03b47 // vmov.f64 d3, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0xf4226aef // vld1.64 {d6-d7}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4224aef // vld1.64 {d4-d5}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4222aef // vld1.64 {d2-d3}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf4230aef // vld1.64 {d0-d1}, [r3 :128]
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_premul_vfp4
.globl _sk_premul_vfp4
FUNCTION(_sk_premul_vfp4)
_sk_premul_vfp4:
- .long 0xf3000d13 // vmul.f32 d0, d0, d3
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3011d13 // vmul.f32 d1, d1, d3
- .long 0xf3022d13 // vmul.f32 d2, d2, d3
- .long 0xe12fff1c // bx ip
+ .long 0xf3000d56 // vmul.f32 q0, q0, q3
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3022d56 // vmul.f32 q1, q1, q3
+ .long 0xf3044d56 // vmul.f32 q2, q2, q3
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_premul_dst_vfp4
.globl _sk_premul_dst_vfp4
FUNCTION(_sk_premul_dst_vfp4)
_sk_premul_dst_vfp4:
- .long 0xf3044d17 // vmul.f32 d4, d4, d7
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3055d17 // vmul.f32 d5, d5, d7
- .long 0xf3066d17 // vmul.f32 d6, d6, d7
- .long 0xe12fff1c // bx ip
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf3422df0 // vmul.f32 q9, q9, q8
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf3420df0 // vmul.f32 q8, q9, q8
+ .long 0xf4420aef // vst1.64 {d16-d17}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_unpremul_vfp4
.globl _sk_unpremul_vfp4
FUNCTION(_sk_unpremul_vfp4)
_sk_unpremul_vfp4:
- .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xed2dab04 // vpush {d10-d11}
+ .long 0xed2d8b02 // vpush {d8}
.long 0xeeb78a00 // vmov.f32 s16, #112
- .long 0xf3f91503 // vceq.f32 d17, d3, #0
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeec89a23 // vdiv.f32 s19, s16, s7
- .long 0xee889a03 // vdiv.f32 s18, s16, s6
- .long 0xf3501199 // vbsl d17, d16, d9
- .long 0xf3010d90 // vmul.f32 d0, d17, d0
- .long 0xf3011d91 // vmul.f32 d1, d17, d1
- .long 0xf3012d92 // vmul.f32 d2, d17, d2
- .long 0xecbd8b04 // vpop {d8-d9}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf3f92546 // vceq.f32 q9, q3, #0
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xeec8ba27 // vdiv.f32 s23, s16, s15
+ .long 0xee88ba07 // vdiv.f32 s22, s16, s14
+ .long 0xeec8aa26 // vdiv.f32 s21, s16, s13
+ .long 0xee88aa06 // vdiv.f32 s20, s16, s12
+ .long 0xf35021da // vbsl q9, q8, q5
+ .long 0xf3020dd0 // vmul.f32 q0, q9, q0
+ .long 0xf3022dd2 // vmul.f32 q1, q9, q1
+ .long 0xf3024dd4 // vmul.f32 q2, q9, q2
+ .long 0xecbd8b02 // vpop {d8}
+ .long 0xecbdab04 // vpop {d10-d11}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_from_srgb_vfp4
.globl _sk_from_srgb_vfp4
FUNCTION(_sk_from_srgb_vfp4)
_sk_from_srgb_vfp4:
- .long 0xeddf3b20 // vldr d19, [pc, #128]
- .long 0xf3408d10 // vmul.f32 d24, d0, d0
- .long 0xeddf0b1c // vldr d16, [pc, #112]
- .long 0xf26341b3 // vorr d20, d19, d19
- .long 0xf26351b3 // vorr d21, d19, d19
- .long 0xeddf9b1f // vldr d25, [pc, #124]
- .long 0xf2404c30 // vfma.f32 d20, d0, d16
- .long 0xeddf2b1b // vldr d18, [pc, #108]
- .long 0xf2415c30 // vfma.f32 d21, d1, d16
- .long 0xeddfcb1d // vldr d28, [pc, #116]
- .long 0xf2423c30 // vfma.f32 d19, d2, d16
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3426d12 // vmul.f32 d22, d2, d2
- .long 0xf3417d11 // vmul.f32 d23, d1, d1
- .long 0xf3620e80 // vcgt.f32 d16, d18, d0
- .long 0xf3621e81 // vcgt.f32 d17, d18, d1
- .long 0xf341ad39 // vmul.f32 d26, d1, d25
- .long 0xf342bd39 // vmul.f32 d27, d2, d25
- .long 0xf3622e82 // vcgt.f32 d18, d18, d2
- .long 0xf3409d39 // vmul.f32 d25, d0, d25
- .long 0xf26cd1bc // vorr d29, d28, d28
- .long 0xf248dcb4 // vfma.f32 d29, d24, d20
- .long 0xf26c41bc // vorr d20, d28, d28
- .long 0xf2474cb5 // vfma.f32 d20, d23, d21
- .long 0xf246ccb3 // vfma.f32 d28, d22, d19
- .long 0xf35901bd // vbsl d16, d25, d29
- .long 0xf35a11b4 // vbsl d17, d26, d20
- .long 0xf35b21bc // vbsl d18, d27, d28
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe28f2094 // add r2, pc, #148
+ .long 0xf3408d50 // vmul.f32 q12, q0, q0
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f2098 // add r2, pc, #152
+ .long 0xf342ad52 // vmul.f32 q13, q1, q1
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf26621f6 // vorr q9, q11, q11
+ .long 0xf26641f6 // vorr q10, q11, q11
+ .long 0xf462cacf // vld1.64 {d28-d29}, [r2]
+ .long 0xf2402c70 // vfma.f32 q9, q0, q8
+ .long 0xe28f2098 // add r2, pc, #152
+ .long 0xf2424c70 // vfma.f32 q10, q1, q8
+ .long 0xf26ce1fc // vorr q15, q14, q14
+ .long 0xf2446c70 // vfma.f32 q11, q2, q8
+ .long 0xf22c81fc // vorr q4, q14, q14
+ .long 0xf248ecf2 // vfma.f32 q15, q12, q9
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f208c // add r2, pc, #140
+ .long 0xf20a8cf4 // vfma.f32 q4, q13, q10
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf3680ec2 // vcgt.f32 q8, q12, q1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3022d7a // vmul.f32 q1, q1, q13
+ .long 0xf3682ec4 // vcgt.f32 q9, q12, q2
+ .long 0xf3684ec0 // vcgt.f32 q10, q12, q0
+ .long 0xf3448d7a // vmul.f32 q12, q2, q13
+ .long 0xf340ad7a // vmul.f32 q13, q0, q13
+ .long 0xf3040d54 // vmul.f32 q0, q2, q2
+ .long 0xf3520158 // vbsl q8, q1, q4
+ .long 0xf35a41fe // vbsl q10, q13, q15
+ .long 0xf240cc76 // vfma.f32 q14, q0, q11
+ .long 0xf35821fc // vbsl q9, q12, q14
+ .long 0xf22401f4 // vorr q0, q10, q10
+ .long 0xf22021f0 // vorr q1, q8, q8
+ .long 0xf22241f2 // vorr q2, q9, q9
+ .long 0xecbd8b04 // vpop {d8-d9}
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
.long 0x3f328f5c // .word 0x3f328f5c
.long 0x3f328f5c // .word 0x3f328f5c
+ .long 0x3f328f5c // .word 0x3f328f5c
+ .long 0x3f328f5c // .word 0x3f328f5c
+ .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3d6147ae // .word 0x3d6147ae
+ .long 0x3d6147ae // .word 0x3d6147ae
.long 0x3d6147ae // .word 0x3d6147ae
.long 0x3d6147ae // .word 0x3d6147ae
.long 0x3d9e8391 // .word 0x3d9e8391
.long 0x3d9e8391 // .word 0x3d9e8391
- .long 0x3b23d70a // .word 0x3b23d70a
- .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3d9e8391 // .word 0x3d9e8391
+ .long 0x3d9e8391 // .word 0x3d9e8391
HIDDEN _sk_from_srgb_dst_vfp4
.globl _sk_from_srgb_dst_vfp4
FUNCTION(_sk_from_srgb_dst_vfp4)
_sk_from_srgb_dst_vfp4:
- .long 0xeddf3b20 // vldr d19, [pc, #128]
- .long 0xf3448d14 // vmul.f32 d24, d4, d4
- .long 0xeddf0b1c // vldr d16, [pc, #112]
- .long 0xf26341b3 // vorr d20, d19, d19
- .long 0xf26351b3 // vorr d21, d19, d19
- .long 0xeddf9b1f // vldr d25, [pc, #124]
- .long 0xf2444c30 // vfma.f32 d20, d4, d16
- .long 0xeddf2b1b // vldr d18, [pc, #108]
- .long 0xf2455c30 // vfma.f32 d21, d5, d16
- .long 0xeddfcb1d // vldr d28, [pc, #116]
- .long 0xf2463c30 // vfma.f32 d19, d6, d16
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3466d16 // vmul.f32 d22, d6, d6
- .long 0xf3457d15 // vmul.f32 d23, d5, d5
- .long 0xf3620e84 // vcgt.f32 d16, d18, d4
- .long 0xf3621e85 // vcgt.f32 d17, d18, d5
- .long 0xf345ad39 // vmul.f32 d26, d5, d25
- .long 0xf346bd39 // vmul.f32 d27, d6, d25
- .long 0xf3622e86 // vcgt.f32 d18, d18, d6
- .long 0xf3449d39 // vmul.f32 d25, d4, d25
- .long 0xf26cd1bc // vorr d29, d28, d28
- .long 0xf248dcb4 // vfma.f32 d29, d24, d20
- .long 0xf26c41bc // vorr d20, d28, d28
- .long 0xf2474cb5 // vfma.f32 d20, d23, d21
- .long 0xf246ccb3 // vfma.f32 d28, d22, d19
- .long 0xf35901bd // vbsl d16, d25, d29
- .long 0xf35a11b4 // vbsl d17, d26, d20
- .long 0xf35b21bc // vbsl d18, d27, d28
- .long 0xf22041b0 // vorr d4, d16, d16
- .long 0xf22151b1 // vorr d5, d17, d17
- .long 0xf22261b2 // vorr d6, d18, d18
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b08 // vpush {d8-d11}
+ .long 0xe28f20ac // add r2, pc, #172
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe28f30ac // add r3, pc, #172
+ .long 0xf4630acf // vld1.64 {d16-d17}, [r3]
+ .long 0xe28f30b4 // add r3, pc, #180
+ .long 0xf26061f0 // vorr q11, q8, q8
+ .long 0xf2446cf2 // vfma.f32 q11, q10, q9
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30b4 // add r3, pc, #180
+ .long 0xf463cacf // vld1.64 {d28-d29}, [r3]
+ .long 0xf344adf4 // vmul.f32 q13, q10, q10
+ .long 0xf368eee4 // vcgt.f32 q15, q12, q10
+ .long 0xe28f30b4 // add r3, pc, #180
+ .long 0xf4238acf // vld1.64 {d8-d9}, [r3]
+ .long 0xf3444dfc // vmul.f32 q10, q10, q14
+ .long 0xf228a158 // vorr q5, q4, q4
+ .long 0xf20aacf6 // vfma.f32 q5, q13, q11
+ .long 0xf354e1da // vbsl q15, q10, q5
+ .long 0xf26061f0 // vorr q11, q8, q8
+ .long 0xf228a158 // vorr q5, q4, q4
+ .long 0xf442eaef // vst1.64 {d30-d31}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xf2446cf2 // vfma.f32 q11, q10, q9
+ .long 0xf344adf4 // vmul.f32 q13, q10, q10
+ .long 0xf368eee4 // vcgt.f32 q15, q12, q10
+ .long 0xf3444dfc // vmul.f32 q10, q10, q14
+ .long 0xf20aacf6 // vfma.f32 q5, q13, q11
+ .long 0xf354e1da // vbsl q15, q10, q5
+ .long 0xf442eaef // vst1.64 {d30-d31}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xf2440cf2 // vfma.f32 q8, q10, q9
+ .long 0xf3442df4 // vmul.f32 q9, q10, q10
+ .long 0xf3686ee4 // vcgt.f32 q11, q12, q10
+ .long 0xf3444dfc // vmul.f32 q10, q10, q14
+ .long 0xf2028cf0 // vfma.f32 q4, q9, q8
+ .long 0xf35461d8 // vbsl q11, q10, q4
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xecbd8b08 // vpop {d8-d11}
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
.long 0x3e99999a // .word 0x3e99999a
.long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3e99999a // .word 0x3e99999a
+ .long 0x3f328f5c // .word 0x3f328f5c
+ .long 0x3f328f5c // .word 0x3f328f5c
.long 0x3f328f5c // .word 0x3f328f5c
.long 0x3f328f5c // .word 0x3f328f5c
.long 0x3d6147ae // .word 0x3d6147ae
.long 0x3d6147ae // .word 0x3d6147ae
+ .long 0x3d6147ae // .word 0x3d6147ae
+ .long 0x3d6147ae // .word 0x3d6147ae
+ .long 0x3d9e8391 // .word 0x3d9e8391
.long 0x3d9e8391 // .word 0x3d9e8391
.long 0x3d9e8391 // .word 0x3d9e8391
+ .long 0x3d9e8391 // .word 0x3d9e8391
+ .long 0x3b23d70a // .word 0x3b23d70a
+ .long 0x3b23d70a // .word 0x3b23d70a
.long 0x3b23d70a // .word 0x3b23d70a
.long 0x3b23d70a // .word 0x3b23d70a
@@ -7262,131 +7840,161 @@ HIDDEN _sk_to_srgb_vfp4
.globl _sk_to_srgb_vfp4
FUNCTION(_sk_to_srgb_vfp4)
_sk_to_srgb_vfp4:
- .long 0xf3fb0580 // vrsqrte.f32 d16, d0
- .long 0xeddf9b3b // vldr d25, [pc, #236]
- .long 0xf3fb1581 // vrsqrte.f32 d17, d1
- .long 0xeddf7b37 // vldr d23, [pc, #220]
- .long 0xf3fb2582 // vrsqrte.f32 d18, d2
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf269a1b9 // vorr d26, d25, d25
- .long 0xf269c1b9 // vorr d28, d25, d25
- .long 0xf3403db0 // vmul.f32 d19, d16, d16
- .long 0xf3414db1 // vmul.f32 d20, d17, d17
- .long 0xf3425db2 // vmul.f32 d21, d18, d18
- .long 0xf2603f33 // vrsqrts.f32 d19, d0, d19
- .long 0xf2614f34 // vrsqrts.f32 d20, d1, d20
- .long 0xf2625f35 // vrsqrts.f32 d21, d2, d21
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xeddf3b29 // vldr d19, [pc, #164]
- .long 0xf3411db4 // vmul.f32 d17, d17, d20
- .long 0xf3422db5 // vmul.f32 d18, d18, d21
- .long 0xf2404da3 // vadd.f32 d20, d16, d19
- .long 0xf2415da3 // vadd.f32 d21, d17, d19
- .long 0xf2423da3 // vadd.f32 d19, d18, d19
- .long 0xf240acb7 // vfma.f32 d26, d16, d23
- .long 0xf3fb6524 // vrecpe.f32 d22, d20
- .long 0xf3fb8525 // vrecpe.f32 d24, d21
- .long 0xf3fbb523 // vrecpe.f32 d27, d19
- .long 0xf241ccb7 // vfma.f32 d28, d17, d23
- .long 0xf2429cb7 // vfma.f32 d25, d18, d23
- .long 0xeddf7b23 // vldr d23, [pc, #140]
- .long 0xf2455fb8 // vrecps.f32 d21, d21, d24
- .long 0xf2444fb6 // vrecps.f32 d20, d20, d22
- .long 0xf2433fbb // vrecps.f32 d19, d19, d27
- .long 0xf267d1b7 // vorr d29, d23, d23
- .long 0xf240dcba // vfma.f32 d29, d16, d26
- .long 0xf267a1b7 // vorr d26, d23, d23
- .long 0xf241acbc // vfma.f32 d26, d17, d28
- .long 0xf2427cb9 // vfma.f32 d23, d18, d25
- .long 0xeddf2b1e // vldr d18, [pc, #120]
- .long 0xf3620e80 // vcgt.f32 d16, d18, d0
- .long 0xf3485db5 // vmul.f32 d21, d24, d21
- .long 0xeddf8b19 // vldr d24, [pc, #100]
- .long 0xf3464db4 // vmul.f32 d20, d22, d20
- .long 0xf34b3db3 // vmul.f32 d19, d27, d19
- .long 0xf3621e81 // vcgt.f32 d17, d18, d1
- .long 0xf3406d38 // vmul.f32 d22, d0, d24
- .long 0xf3419d38 // vmul.f32 d25, d1, d24
- .long 0xf3622e82 // vcgt.f32 d18, d18, d2
- .long 0xf3428d38 // vmul.f32 d24, d2, d24
- .long 0xf34d4db4 // vmul.f32 d20, d29, d20
- .long 0xf34a5db5 // vmul.f32 d21, d26, d21
- .long 0xf3473db3 // vmul.f32 d19, d23, d19
- .long 0xf35601b4 // vbsl d16, d22, d20
- .long 0xf35911b5 // vbsl d17, d25, d21
- .long 0xf35821b3 // vbsl d18, d24, d19
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22221b2 // vorr d2, d18, d18
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b08 // vpush {d8-d11}
+ .long 0xf3fb05c0 // vrsqrte.f32 q8, q0
+ .long 0xe28f20f8 // add r2, pc, #248
+ .long 0xf3402df0 // vmul.f32 q9, q8, q8
+ .long 0xf2602f72 // vrsqrts.f32 q9, q0, q9
+ .long 0xf3400df2 // vmul.f32 q8, q8, q9
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe28f20f4 // add r2, pc, #244
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f20fc // add r2, pc, #252
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f2f41 // add r2, pc, #260
+ .long 0xf26ac1fa // vorr q14, q13, q13
+ .long 0xf240ccf8 // vfma.f32 q14, q8, q12
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xe28f2f41 // add r2, pc, #260
+ .long 0xf22681f6 // vorr q4, q11, q11
+ .long 0xf2404de2 // vadd.f32 q10, q8, q9
+ .long 0xf3fbe564 // vrecpe.f32 q15, q10
+ .long 0xf2008cfc // vfma.f32 q4, q8, q14
+ .long 0xf3fb05c2 // vrsqrte.f32 q8, q1
+ .long 0xf2444ffe // vrecps.f32 q10, q10, q15
+ .long 0xf340cdf0 // vmul.f32 q14, q8, q8
+ .long 0xf262cf7c // vrsqrts.f32 q14, q1, q14
+ .long 0xf34e4df4 // vmul.f32 q10, q15, q10
+ .long 0xf266e1f6 // vorr q15, q11, q11
+ .long 0xf3400dfc // vmul.f32 q8, q8, q14
+ .long 0xf26ac1fa // vorr q14, q13, q13
+ .long 0xf240ccf8 // vfma.f32 q14, q8, q12
+ .long 0xf240ecfc // vfma.f32 q15, q8, q14
+ .long 0xf2400de2 // vadd.f32 q8, q8, q9
+ .long 0xf3fbc560 // vrecpe.f32 q14, q8
+ .long 0xf2400ffc // vrecps.f32 q8, q8, q14
+ .long 0xf34c0df0 // vmul.f32 q8, q14, q8
+ .long 0xf3fbc5c4 // vrsqrte.f32 q14, q2
+ .long 0xf30cadfc // vmul.f32 q5, q14, q14
+ .long 0xf224af5a // vrsqrts.f32 q5, q2, q5
+ .long 0xf34ccdda // vmul.f32 q14, q14, q5
+ .long 0xf24c2de2 // vadd.f32 q9, q14, q9
+ .long 0xf24cacf8 // vfma.f32 q13, q14, q12
+ .long 0xf3fb8562 // vrecpe.f32 q12, q9
+ .long 0xf2422ff8 // vrecps.f32 q9, q9, q12
+ .long 0xf24c6cfa // vfma.f32 q11, q14, q13
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f20a0 // add r2, pc, #160
+ .long 0xf34ecdf0 // vmul.f32 q14, q15, q8
+ .long 0xf348ed74 // vmul.f32 q15, q4, q10
+ .long 0xf4228acf // vld1.64 {d8-d9}, [r2]
+ .long 0xf36a0ec4 // vcgt.f32 q8, q13, q2
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3044d58 // vmul.f32 q2, q2, q4
+ .long 0xf36a4ec0 // vcgt.f32 q10, q13, q0
+ .long 0xf3488df2 // vmul.f32 q12, q12, q9
+ .long 0xf36a2ec2 // vcgt.f32 q9, q13, q1
+ .long 0xf3022d58 // vmul.f32 q1, q1, q4
+ .long 0xf340ad58 // vmul.f32 q13, q0, q4
+ .long 0xf3466df8 // vmul.f32 q11, q11, q12
+ .long 0xf3540176 // vbsl q8, q2, q11
+ .long 0xf352217c // vbsl q9, q1, q14
+ .long 0xf35a41fe // vbsl q10, q13, q15
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22401f4 // vorr q0, q10, q10
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xecbd8b08 // vpop {d8-d11}
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
.long 0x3e10c64c // .word 0x3e10c64c
.long 0x3e10c64c // .word 0x3e10c64c
+ .long 0x3e10c64c // .word 0x3e10c64c
+ .long 0x3e10c64c // .word 0x3e10c64c
+ .long 0xbb20d739 // .word 0xbb20d739
.long 0xbb20d739 // .word 0xbb20d739
.long 0xbb20d739 // .word 0xbb20d739
+ .long 0xbb20d739 // .word 0xbb20d739
+ .long 0x3c629fba // .word 0x3c629fba
+ .long 0x3c629fba // .word 0x3c629fba
.long 0x3c629fba // .word 0x3c629fba
.long 0x3c629fba // .word 0x3c629fba
.long 0x3f90a3d7 // .word 0x3f90a3d7
.long 0x3f90a3d7 // .word 0x3f90a3d7
- .long 0x414eb852 // .word 0x414eb852
- .long 0x414eb852 // .word 0x414eb852
+ .long 0x3f90a3d7 // .word 0x3f90a3d7
+ .long 0x3f90a3d7 // .word 0x3f90a3d7
+ .long 0x3b98b1a8 // .word 0x3b98b1a8
+ .long 0x3b98b1a8 // .word 0x3b98b1a8
.long 0x3b98b1a8 // .word 0x3b98b1a8
.long 0x3b98b1a8 // .word 0x3b98b1a8
+ .long 0x414eb852 // .word 0x414eb852
+ .long 0x414eb852 // .word 0x414eb852
+ .long 0x414eb852 // .word 0x414eb852
+ .long 0x414eb852 // .word 0x414eb852
HIDDEN _sk_rgb_to_hsl_vfp4
.globl _sk_rgb_to_hsl_vfp4
FUNCTION(_sk_rgb_to_hsl_vfp4)
_sk_rgb_to_hsl_vfp4:
- .long 0xed2d8b08 // vpush {d8-d11}
- .long 0xf2401f01 // vmax.f32 d17, d0, d1
- .long 0xeddf9b2c // vldr d25, [pc, #176]
- .long 0xf2600f01 // vmin.f32 d16, d0, d1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xeeb78a00 // vmov.f32 s16, #112
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xf2411f82 // vmax.f32 d17, d17, d2
- .long 0xf2602f82 // vmin.f32 d18, d16, d2
- .long 0xf2c45610 // vmov.i32 d21, #1073741824
- .long 0xf2607d01 // vsub.f32 d23, d0, d1
- .long 0xf2656da1 // vsub.f32 d22, d21, d17
- .long 0xf221ada2 // vsub.f32 d10, d17, d18
- .long 0xf2413da2 // vadd.f32 d19, d17, d18
- .long 0xf2c08010 // vmov.i32 d24, #0
- .long 0xf2666da2 // vsub.f32 d22, d22, d18
- .long 0xf241ae80 // vceq.f32 d26, d17, d0
- .long 0xeec8ba2a // vdiv.f32 s23, s16, s21
- .long 0xf3430db4 // vmul.f32 d16, d19, d20
- .long 0xee88ba0a // vdiv.f32 s22, s16, s20
- .long 0xf3209ea4 // vcgt.f32 d9, d16, d20
- .long 0xf2614d02 // vsub.f32 d20, d1, d2
- .long 0xf3477d9b // vmul.f32 d23, d23, d11
- .long 0xf31691b3 // vbsl d9, d22, d19
- .long 0xf2623d00 // vsub.f32 d19, d2, d0
- .long 0xf3626e01 // vcgt.f32 d22, d2, d1
- .long 0xeeca8aa9 // vdiv.f32 s17, s21, s19
- .long 0xee8a8a09 // vdiv.f32 s16, s20, s18
- .long 0xf3433d9b // vmul.f32 d19, d19, d11
- .long 0xf3444d9b // vmul.f32 d20, d20, d11
- .long 0xf35961b8 // vbsl d22, d25, d24
- .long 0xf2419e81 // vceq.f32 d25, d17, d1
- .long 0xf2011ea2 // vceq.f32 d1, d17, d18
- .long 0xf2433da5 // vadd.f32 d19, d19, d21
- .long 0xf2c15f10 // vmov.f32 d21, #4
- .long 0xf2464da4 // vadd.f32 d20, d22, d20
- .long 0xf2471da5 // vadd.f32 d17, d23, d21
- .long 0xf35391b1 // vbsl d25, d19, d17
- .long 0xeddf1b0a // vldr d17, [pc, #40]
- .long 0xf2612111 // vorr d18, d1, d1
- .long 0xf354a1b9 // vbsl d26, d20, d25
- .long 0xf35821ba // vbsl d18, d24, d26
- .long 0xf3181198 // vbsl d1, d24, d8
- .long 0xf3020db1 // vmul.f32 d0, d18, d17
- .long 0xf22021b0 // vorr d2, d16, d16
- .long 0xecbd8b08 // vpop {d8-d11}
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xf2600f42 // vmin.f32 q8, q0, q1
+ .long 0xe28f20c8 // add r2, pc, #200
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f20d0 // add r2, pc, #208
+ .long 0xf2402f42 // vmax.f32 q9, q0, q1
+ .long 0xeeb7ca00 // vmov.f32 s24, #112
+ .long 0xf2600fc4 // vmin.f32 q8, q8, q2
+ .long 0xf2422fc4 // vmax.f32 q9, q9, q2
+ .long 0xf2624d44 // vsub.f32 q10, q1, q2
+ .long 0xf3648e42 // vcgt.f32 q12, q2, q1
+ .long 0xf2228de0 // vsub.f32 q4, q9, q8
+ .long 0xf260cd42 // vsub.f32 q14, q0, q1
+ .long 0xf2c1ef50 // vmov.f32 q15, #4
+ .long 0xeeccba29 // vdiv.f32 s23, s24, s19
+ .long 0xee8cba09 // vdiv.f32 s22, s24, s18
+ .long 0xeeccaa28 // vdiv.f32 s21, s24, s17
+ .long 0xee8caa08 // vdiv.f32 s20, s24, s16
+ .long 0xf3446dda // vmul.f32 q11, q10, q5
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xf35a81f4 // vbsl q12, q13, q10
+ .long 0xf34ccdda // vmul.f32 q14, q14, q5
+ .long 0xf2486de6 // vadd.f32 q11, q12, q11
+ .long 0xf2648d40 // vsub.f32 q12, q2, q0
+ .long 0xf24ccdee // vadd.f32 q14, q14, q15
+ .long 0xf242ede0 // vadd.f32 q15, q9, q8
+ .long 0xf3488dda // vmul.f32 q12, q12, q5
+ .long 0xf283a65f // vmov.i32 q5, #1056964608
+ .long 0xf2c4a650 // vmov.i32 q13, #1073741824
+ .long 0xf30e4dda // vmul.f32 q2, q15, q5
+ .long 0xf2488dea // vadd.f32 q12, q12, q13
+ .long 0xf26aade2 // vsub.f32 q13, q13, q9
+ .long 0xf324ce4a // vcgt.f32 q6, q2, q5
+ .long 0xf26aade0 // vsub.f32 q13, q13, q8
+ .long 0xf2420ee0 // vceq.f32 q8, q9, q8
+ .long 0xf31ac1fe // vbsl q6, q13, q15
+ .long 0xf242aec0 // vceq.f32 q13, q9, q0
+ .long 0xeec9baad // vdiv.f32 s23, s19, s27
+ .long 0xee89ba0d // vdiv.f32 s22, s18, s26
+ .long 0xeec8aaac // vdiv.f32 s21, s17, s25
+ .long 0xee88aa0c // vdiv.f32 s20, s16, s24
+ .long 0xf2422ec2 // vceq.f32 q9, q9, q1
+ .long 0xf35821fc // vbsl q9, q12, q14
+ .long 0xf356a1f2 // vbsl q13, q11, q9
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf26021f0 // vorr q9, q8, q8
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf35401da // vbsl q8, q10, q5
+ .long 0xf35421fa // vbsl q9, q10, q13
+ .long 0xf22021f0 // vorr q1, q8, q8
+ .long 0xf3020df6 // vmul.f32 q0, q9, q11
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
.long 0x40c00000 // .word 0x40c00000
.long 0x40c00000 // .word 0x40c00000
+ .long 0x40c00000 // .word 0x40c00000
+ .long 0x40c00000 // .word 0x40c00000
+ .long 0x3e2aaaab // .word 0x3e2aaaab
+ .long 0x3e2aaaab // .word 0x3e2aaaab
.long 0x3e2aaaab // .word 0x3e2aaaab
.long 0x3e2aaaab // .word 0x3e2aaaab
@@ -7394,98 +8002,132 @@ HIDDEN _sk_hsl_to_rgb_vfp4
.globl _sk_hsl_to_rgb_vfp4
FUNCTION(_sk_hsl_to_rgb_vfp4)
_sk_hsl_to_rgb_vfp4:
- .long 0xed2d8b02 // vpush {d8}
- .long 0xeddf0b51 // vldr d16, [pc, #324]
- .long 0xf3fb2700 // vcvt.s32.f32 d18, d0
- .long 0xeddf1b51 // vldr d17, [pc, #324]
- .long 0xf2400d20 // vadd.f32 d16, d0, d16
- .long 0xf2401d21 // vadd.f32 d17, d0, d17
- .long 0xeddfab50 // vldr d26, [pc, #320]
- .long 0xf3416d12 // vmul.f32 d22, d1, d2
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb3720 // vcvt.s32.f32 d19, d16
- .long 0xf3fb4721 // vcvt.s32.f32 d20, d17
- .long 0xf2c3761f // vmov.i32 d23, #1056964608
- .long 0xf3625e80 // vcgt.f32 d21, d18, d0
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3fb4624 // vcvt.f32.s32 d20, d20
- .long 0xf2c08010 // vmov.i32 d24, #0
- .long 0xf35a51b8 // vbsl d21, d26, d24
- .long 0xf3639ea0 // vcgt.f32 d25, d19, d16
- .long 0xf364bea1 // vcgt.f32 d27, d20, d17
- .long 0xf342ce27 // vcge.f32 d28, d2, d23
- .long 0xf261dd26 // vsub.f32 d29, d1, d22
- .long 0xf35a91b8 // vbsl d25, d26, d24
- .long 0xf35ab1b8 // vbsl d27, d26, d24
- .long 0xf2622da5 // vsub.f32 d18, d18, d21
- .long 0xf2633da9 // vsub.f32 d19, d19, d25
- .long 0xf2644dab // vsub.f32 d20, d20, d27
- .long 0xf35dc1b6 // vbsl d28, d29, d22
- .long 0xeddfdb3c // vldr d29, [pc, #240]
- .long 0xf2602d22 // vsub.f32 d18, d0, d18
- .long 0xf2600da3 // vsub.f32 d16, d16, d19
- .long 0xf2c15f18 // vmov.f32 d21, #6
- .long 0xf2426d02 // vadd.f32 d22, d2, d2
- .long 0xf24c8d82 // vadd.f32 d24, d28, d2
- .long 0xf2611da4 // vsub.f32 d17, d17, d20
- .long 0xf3423db5 // vmul.f32 d19, d18, d21
- .long 0xf3409db5 // vmul.f32 d25, d16, d21
- .long 0xf2664da8 // vsub.f32 d20, d22, d24
- .long 0xf3415db5 // vmul.f32 d21, d17, d21
- .long 0xf2c16f10 // vmov.f32 d22, #4
- .long 0xf342eead // vcge.f32 d30, d18, d29
- .long 0xf266ada3 // vsub.f32 d26, d22, d19
- .long 0xf268bda4 // vsub.f32 d27, d24, d20
- .long 0xf266cda9 // vsub.f32 d28, d22, d25
- .long 0xf2666da5 // vsub.f32 d22, d22, d21
- .long 0xf340fead // vcge.f32 d31, d16, d29
- .long 0xf34badba // vmul.f32 d26, d27, d26
- .long 0xf341dead // vcge.f32 d29, d17, d29
- .long 0xf34bcdbc // vmul.f32 d28, d27, d28
- .long 0xf34b6db6 // vmul.f32 d22, d27, d22
- .long 0xf244adaa // vadd.f32 d26, d20, d26
- .long 0xf3020ea7 // vcge.f32 d0, d18, d23
- .long 0xf3008ea7 // vcge.f32 d8, d16, d23
- .long 0xf354e1ba // vbsl d30, d20, d26
- .long 0xeddfab24 // vldr d26, [pc, #144]
- .long 0xf244cdac // vadd.f32 d28, d20, d28
- .long 0xf2446da6 // vadd.f32 d22, d20, d22
- .long 0xf34b3db3 // vmul.f32 d19, d27, d19
- .long 0xf34b9db9 // vmul.f32 d25, d27, d25
- .long 0xf3417ea7 // vcge.f32 d23, d17, d23
- .long 0xf354d1b6 // vbsl d29, d20, d22
- .long 0xf354f1bc // vbsl d31, d20, d28
- .long 0xf3406eaa // vcge.f32 d22, d16, d26
- .long 0xf3422eaa // vcge.f32 d18, d18, d26
- .long 0xf34b5db5 // vmul.f32 d21, d27, d21
- .long 0xf3411eaa // vcge.f32 d17, d17, d26
- .long 0xf31e01b8 // vbsl d0, d30, d24
- .long 0xf31f81b8 // vbsl d8, d31, d24
- .long 0xf2440da3 // vadd.f32 d16, d20, d19
- .long 0xf2443da9 // vadd.f32 d19, d20, d25
- .long 0xf3502130 // vbsl d18, d0, d16
- .long 0xf3f90501 // vceq.f32 d16, d1, #0
- .long 0xf35d71b8 // vbsl d23, d29, d24
- .long 0xf3586133 // vbsl d22, d8, d19
- .long 0xf22011b0 // vorr d1, d16, d16
- .long 0xf2444da5 // vadd.f32 d20, d20, d21
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf3520136 // vbsl d16, d2, d22
- .long 0xf35711b4 // vbsl d17, d23, d20
- .long 0xf3121132 // vbsl d1, d2, d18
- .long 0xf3120131 // vbsl d0, d2, d17
- .long 0xf22021b0 // vorr d2, d16, d16
- .long 0xecbd8b02 // vpop {d8}
- .long 0xe12fff1c // bx ip
+ .long 0xe92d0030 // push {r4, r5}
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd028 // sub sp, sp, #40
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf3424d54 // vmul.f32 q10, q1, q2
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xec836b04 // vstmia r3, {d6-d7}
+ .long 0xe28f2f63 // add r2, pc, #396
+ .long 0xf3446e66 // vcge.f32 q11, q2, q11
+ .long 0xe28d3010 // add r3, sp, #16
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f2f63 // add r2, pc, #396
+ .long 0xf2400d60 // vadd.f32 q8, q0, q8
+ .long 0xf4228acf // vld1.64 {d8-d9}, [r2]
+ .long 0xe28f2e19 // add r2, pc, #400
+ .long 0xf2628d64 // vsub.f32 q12, q1, q10
+ .long 0xf422eacf // vld1.64 {d14-d15}, [r2]
+ .long 0xf2c0a050 // vmov.i32 q13, #0
+ .long 0xf3fb2760 // vcvt.s32.f32 q9, q8
+ .long 0xf35861f4 // vbsl q11, q12, q10
+ .long 0xf283665f // vmov.i32 q3, #1056964608
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf2464dc4 // vadd.f32 q10, q11, q2
+ .long 0xf2446d44 // vadd.f32 q11, q2, q2
+ .long 0xf362cee0 // vcgt.f32 q14, q9, q8
+ .long 0xf281cf50 // vmov.f32 q6, #4
+ .long 0xf2666de4 // vsub.f32 q11, q11, q10
+ .long 0xf358c17a // vbsl q14, q4, q13
+ .long 0xf283a65f // vmov.i32 q5, #1056964608
+ .long 0xf2622dec // vsub.f32 q9, q9, q14
+ .long 0xf264cde6 // vsub.f32 q14, q10, q11
+ .long 0xf260ade2 // vsub.f32 q13, q8, q9
+ .long 0xf2c10f58 // vmov.f32 q8, #6
+ .long 0xf2c12f50 // vmov.f32 q9, #4
+ .long 0xf34a0df0 // vmul.f32 q8, q13, q8
+ .long 0xf34aeece // vcge.f32 q15, q13, q7
+ .long 0xf2628de0 // vsub.f32 q12, q9, q8
+ .long 0xf34c0df0 // vmul.f32 q8, q14, q8
+ .long 0xf2c02050 // vmov.i32 q9, #0
+ .long 0xf34c8df8 // vmul.f32 q12, q14, q12
+ .long 0xf2460de0 // vadd.f32 q8, q11, q8
+ .long 0xf2468de8 // vadd.f32 q12, q11, q12
+ .long 0xeccd0b04 // vstmia sp, {d16-d17}
+ .long 0xe28f2f4b // add r2, pc, #300
+ .long 0xf356e1f8 // vbsl q15, q11, q12
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f2e13 // add r2, pc, #304
+ .long 0xf2400d60 // vadd.f32 q8, q0, q8
+ .long 0xf34a8ec6 // vcge.f32 q12, q13, q3
+ .long 0xf3bb6760 // vcvt.s32.f32 q3, q8
+ .long 0xf35e81f4 // vbsl q12, q15, q10
+ .long 0xf3bb6646 // vcvt.f32.s32 q3, q3
+ .long 0xf366ee60 // vcgt.f32 q15, q3, q8
+ .long 0xf358e172 // vbsl q15, q4, q9
+ .long 0xf266ed6e // vsub.f32 q15, q3, q15
+ .long 0xf2602dee // vsub.f32 q9, q8, q15
+ .long 0xf2c10f58 // vmov.f32 q8, #6
+ .long 0xf342edf0 // vmul.f32 q15, q9, q8
+ .long 0xf3420ece // vcge.f32 q8, q9, q7
+ .long 0xf22c6d6e // vsub.f32 q3, q6, q15
+ .long 0xf280c050 // vmov.i32 q6, #0
+ .long 0xf30c6dd6 // vmul.f32 q3, q14, q3
+ .long 0xf2066dc6 // vadd.f32 q3, q11, q3
+ .long 0xf35601d6 // vbsl q8, q11, q3
+ .long 0xf3026eca // vcge.f32 q3, q9, q5
+ .long 0xf31061f4 // vbsl q3, q8, q10
+ .long 0xf34c0dfe // vmul.f32 q8, q14, q15
+ .long 0xf3fbe740 // vcvt.s32.f32 q15, q0
+ .long 0xf2460de0 // vadd.f32 q8, q11, q8
+ .long 0xf3fbe66e // vcvt.f32.s32 q15, q15
+ .long 0xf32eaec0 // vcgt.f32 q5, q15, q0
+ .long 0xf318a15c // vbsl q5, q4, q6
+ .long 0xf2818f50 // vmov.f32 q4, #4
+ .long 0xf26eedca // vsub.f32 q15, q15, q5
+ .long 0xf260ed6e // vsub.f32 q15, q0, q15
+ .long 0xf2810f58 // vmov.f32 q0, #6
+ .long 0xf30e0dd0 // vmul.f32 q0, q15, q0
+ .long 0xf30eaece // vcge.f32 q5, q15, q7
+ .long 0xf2288d40 // vsub.f32 q4, q4, q0
+ .long 0xf30c8dd8 // vmul.f32 q4, q14, q4
+ .long 0xf2068dc8 // vadd.f32 q4, q11, q4
+ .long 0xf316a1d8 // vbsl q5, q11, q4
+ .long 0xf283865f // vmov.i32 q4, #1056964608
+ .long 0xf30e8ec8 // vcge.f32 q4, q15, q4
+ .long 0xf31a8174 // vbsl q4, q5, q10
+ .long 0xf34c4dd0 // vmul.f32 q10, q14, q0
+ .long 0xf2464de4 // vadd.f32 q10, q11, q10
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf3422ee6 // vcge.f32 q9, q9, q11
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf34aaee6 // vcge.f32 q13, q13, q11
+ .long 0xf34e6ee6 // vcge.f32 q11, q15, q11
+ .long 0xf3562170 // vbsl q9, q3, q8
+ .long 0xecdd0b04 // vldmia sp, {d16-d17}
+ .long 0xf358a1f0 // vbsl q13, q12, q8
+ .long 0xf3f90542 // vceq.f32 q8, q1, #0
+ .long 0xec936b04 // vldmia r3, {d6-d7}
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22021f0 // vorr q1, q8, q8
+ .long 0xf354017a // vbsl q8, q2, q13
+ .long 0xf3586174 // vbsl q11, q4, q10
+ .long 0xf3142176 // vbsl q1, q2, q11
+ .long 0xf3140172 // vbsl q0, q2, q9
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xe28dd028 // add sp, sp, #40
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd0030 // pop {r4, r5}
+ .long 0xe12fff12 // bx r2
.long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
- .long 0x3eaaaaab // .word 0x3eaaaaab
- .long 0x3eaaaaab // .word 0x3eaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f2aaaab // .word 0x3f2aaaab
.long 0x3f2aaaab // .word 0x3f2aaaab
.long 0x3f2aaaab // .word 0x3f2aaaab
+ .long 0x3f2aaaab // .word 0x3f2aaaab
+ .long 0x3eaaaaab // .word 0x3eaaaaab
+ .long 0x3eaaaaab // .word 0x3eaaaaab
+ .long 0x3eaaaaab // .word 0x3eaaaaab
+ .long 0x3eaaaaab // .word 0x3eaaaaab
+ .long 0x3e2aaaab // .word 0x3e2aaaab
+ .long 0x3e2aaaab // .word 0x3e2aaaab
.long 0x3e2aaaab // .word 0x3e2aaaab
.long 0x3e2aaaab // .word 0x3e2aaaab
@@ -7493,342 +8135,476 @@ HIDDEN _sk_scale_1_float_vfp4
.globl _sk_scale_1_float_vfp4
FUNCTION(_sk_scale_1_float_vfp4)
_sk_scale_1_float_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee0c9f // vld1.32 {d16[]}, [lr :32]
- .long 0xf3000d90 // vmul.f32 d0, d16, d0
- .long 0xf3001d91 // vmul.f32 d1, d16, d1
- .long 0xf3002d92 // vmul.f32 d2, d16, d2
- .long 0xf3003d93 // vmul.f32 d3, d16, d3
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4e30cbf // vld1.32 {d16[]-d17[]}, [r3 :32]
+ .long 0xf3000dd0 // vmul.f32 q0, q8, q0
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xf3004dd4 // vmul.f32 q2, q8, q2
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
HIDDEN _sk_scale_u8_vfp4
.globl _sk_scale_u8_vfp4
FUNCTION(_sk_scale_u8_vfp4)
_sk_scale_u8_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe92d4010 // push {r4, lr}
.long 0xe24dd008 // sub sp, sp, #8
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de020 // ldr lr, [sp, #32]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000014 // beq 1af0 <sk_scale_u8_vfp4+0x80>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b4 // strh ip, [sp, #4]
- .long 0xe28dc004 // add ip, sp, #4
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0224392 // mla r2, r2, r3, r4
+ .long 0xe082200e // add r2, r2, lr
+ .long 0x1a000013 // bne 24ec <sk_scale_u8_vfp4+0x7c>
+ .long 0xe5922000 // ldr r2, [r2]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3908a30 // vmovl.u16 q4, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b10 // vldr d17, [pc, #64]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2480130 // vand d16, d8, d16
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf3000d90 // vmul.f32 d0, d16, d0
- .long 0xf3001d91 // vmul.f32 d1, d16, d1
- .long 0xf3002d92 // vmul.f32 d2, d16, d2
- .long 0xf3003d93 // vmul.f32 d3, d16, d3
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3400df2 // vmul.f32 q8, q8, q9
+ .long 0xf3000dd0 // vmul.f32 q0, q8, q0
+ .long 0xf3002dd2 // vmul.f32 q1, q8, q1
+ .long 0xf3004dd4 // vmul.f32 q2, q8, q2
+ .long 0xf3006dd6 // vmul.f32 q3, q8, q3
.long 0xe28dd008 // add sp, sp, #8
- .long 0xecbd8b04 // vpop {d8-d9}
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf8a03 // vldr s17, [pc, #12]
- .long 0xee08ca10 // vmov s16, ip
- .long 0xeaffffec // b 1ab4 <sk_scale_u8_vfp4+0x44>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000012 // beq 2544 <sk_scale_u8_vfp4+0xd4>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 251c <sk_scale_u8_vfp4+0xac>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe8 // bne 24b0 <sk_scale_u8_vfp4+0x40>
+ .long 0xe3a04000 // mov r4, #0
+ .long 0xe5d23002 // ldrb r3, [r2, #2]
+ .long 0xee804bb0 // vdup.16 d16, r4
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xe1d220b0 // ldrh r2, [r2]
+ .long 0xe1cd20b4 // strh r2, [sp, #4]
+ .long 0xe28d2004 // add r2, sp, #4
+ .long 0xf4e2241f // vld1.16 {d18[0]}, [r2 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffda // b 24b0 <sk_scale_u8_vfp4+0x40>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xe5d22000 // ldrb r2, [r2]
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xee002bb0 // vmov.16 d16[0], r2
+ .long 0xeaffffd5 // b 24b0 <sk_scale_u8_vfp4+0x40>
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
HIDDEN _sk_lerp_1_float_vfp4
.globl _sk_lerp_1_float_vfp4
FUNCTION(_sk_lerp_1_float_vfp4)
_sk_lerp_1_float_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2600d04 // vsub.f32 d16, d0, d4
- .long 0xf2611d05 // vsub.f32 d17, d1, d5
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2622d06 // vsub.f32 d18, d2, d6
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2633d07 // vsub.f32 d19, d3, d7
- .long 0xf4ee4c9f // vld1.32 {d20[]}, [lr :32]
- .long 0xf2240114 // vorr d0, d4, d4
- .long 0xf2251115 // vorr d1, d5, d5
- .long 0xf2262116 // vorr d2, d6, d6
- .long 0xf2273117 // vorr d3, d7, d7
- .long 0xf2000cb4 // vfma.f32 d0, d16, d20
- .long 0xf2011cb4 // vfma.f32 d1, d17, d20
- .long 0xf2022cb4 // vfma.f32 d2, d18, d20
- .long 0xf2033cb4 // vfma.f32 d3, d19, d20
- .long 0xe8bd4800 // pop {fp, lr}
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf2648d60 // vsub.f32 q12, q2, q8
+ .long 0xf4e3ecbf // vld1.32 {d30[]-d31[]}, [r3 :32]
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf260ad62 // vsub.f32 q13, q0, q9
+ .long 0xf4624aef // vld1.64 {d20-d21}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf262cd64 // vsub.f32 q14, q1, q10
+ .long 0xf4626aef // vld1.64 {d22-d23}, [r2 :128]
+ .long 0xf2260d66 // vsub.f32 q0, q3, q11
+ .long 0xf2480cfe // vfma.f32 q8, q12, q15
+ .long 0xf24c4cfe // vfma.f32 q10, q14, q15
+ .long 0xf2406c7e // vfma.f32 q11, q0, q15
+ .long 0xf24a2cfe // vfma.f32 q9, q13, q15
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xf22421f4 // vorr q1, q10, q10
+ .long 0xf22661f6 // vorr q3, q11, q11
+ .long 0xf22201f2 // vorr q0, q9, q9
.long 0xe12fff1c // bx ip
HIDDEN _sk_lerp_u8_vfp4
.globl _sk_lerp_u8_vfp4
FUNCTION(_sk_lerp_u8_vfp4)
_sk_lerp_u8_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
.long 0xe24dd008 // sub sp, sp, #8
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de020 // ldr lr, [sp, #32]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a00001e // beq 1c00 <sk_lerp_u8_vfp4+0xa8>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b4 // strh ip, [sp, #4]
- .long 0xe28dc004 // add ip, sp, #4
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0225492 // mla r2, r2, r4, r5
+ .long 0xe0824003 // add r4, r2, r3
+ .long 0xe2803020 // add r3, r0, #32
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0x1a00001f // bne 2680 <sk_lerp_u8_vfp4+0xb8>
+ .long 0xe5944000 // ldr r4, [r4]
+ .long 0xe58d4000 // str r4, [sp]
+ .long 0xe1a0400d // mov r4, sp
+ .long 0xf4e4083f // vld1.32 {d16[0]}, [r4 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3908a30 // vmovl.u16 q4, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b1a // vldr d17, [pc, #104]
- .long 0xf2602d04 // vsub.f32 d18, d0, d4
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xf2480130 // vand d16, d8, d16
- .long 0xe281c008 // add ip, r1, #8
- .long 0xf2623d06 // vsub.f32 d19, d2, d6
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xe1a0100c // mov r1, ip
- .long 0xf2634d07 // vsub.f32 d20, d3, d7
- .long 0xe1a0c00e // mov ip, lr
- .long 0xf2240114 // vorr d0, d4, d4
- .long 0xf2262116 // vorr d2, d6, d6
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf2611d05 // vsub.f32 d17, d1, d5
- .long 0xf2251115 // vorr d1, d5, d5
- .long 0xf2273117 // vorr d3, d7, d7
- .long 0xf2020cb0 // vfma.f32 d0, d18, d16
- .long 0xf2011cb0 // vfma.f32 d1, d17, d16
- .long 0xf2032cb0 // vfma.f32 d2, d19, d16
- .long 0xf2043cb0 // vfma.f32 d3, d20, d16
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xf4634aef // vld1.64 {d20-d21}, [r3 :128]
+ .long 0xf262cd64 // vsub.f32 q14, q1, q10
+ .long 0xf3d02a30 // vmovl.u16 q9, d16
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xf2608d60 // vsub.f32 q12, q0, q8
+ .long 0xf3fb66e2 // vcvt.f32.u32 q11, q9
+ .long 0xf46e2aef // vld1.64 {d18-d19}, [lr :128]
+ .long 0xe28f20b4 // add r2, pc, #180
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf264ed62 // vsub.f32 q15, q2, q9
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xe2811008 // add r1, r1, #8
+ .long 0xf346adfa // vmul.f32 q13, q11, q13
+ .long 0xf46c6aef // vld1.64 {d22-d23}, [ip :128]
+ .long 0xf2260d66 // vsub.f32 q0, q3, q11
+ .long 0xf24c4cfa // vfma.f32 q10, q14, q13
+ .long 0xf24e2cfa // vfma.f32 q9, q15, q13
+ .long 0xf2406c7a // vfma.f32 q11, q0, q13
+ .long 0xf2480cfa // vfma.f32 q8, q12, q13
+ .long 0xf22421f4 // vorr q1, q10, q10
+ .long 0xf22241f2 // vorr q2, q9, q9
+ .long 0xf22661f6 // vorr q3, q11, q11
+ .long 0xf22001f0 // vorr q0, q8, q8
.long 0xe28dd008 // add sp, sp, #8
- .long 0xecbd8b04 // vpop {d8-d9}
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf8a03 // vldr s17, [pc, #12]
- .long 0xee08ca10 // vmov s16, ip
- .long 0xeaffffe2 // b 1b9c <sk_lerp_u8_vfp4+0x44>
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe2065003 // and r5, r6, #3
+ .long 0xe3550001 // cmp r5, #1
+ .long 0x0a000012 // beq 26d8 <sk_lerp_u8_vfp4+0x110>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 26b0 <sk_lerp_u8_vfp4+0xe8>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffdc // bne 2614 <sk_lerp_u8_vfp4+0x4c>
+ .long 0xe3a06000 // mov r6, #0
+ .long 0xe5d45002 // ldrb r5, [r4, #2]
+ .long 0xee806bb0 // vdup.16 d16, r6
+ .long 0xee205bb0 // vmov.16 d16[2], r5
+ .long 0xe1d440b0 // ldrh r4, [r4]
+ .long 0xe1cd40b4 // strh r4, [sp, #4]
+ .long 0xe28d4004 // add r4, sp, #4
+ .long 0xf4e4241f // vld1.16 {d18[0]}, [r4 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffce // b 2614 <sk_lerp_u8_vfp4+0x4c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xe5d44000 // ldrb r4, [r4]
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xee004bb0 // vmov.16 d16[0], r4
+ .long 0xeaffffc9 // b 2614 <sk_lerp_u8_vfp4+0x4c>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_lerp_565_vfp4
.globl _sk_lerp_565_vfp4
FUNCTION(_sk_lerp_565_vfp4)
_sk_lerp_565_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xed2d8b04 // vpush {d8-d9}
- .long 0xe24dd008 // sub sp, sp, #8
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5028 // ldr r5, [sp, #40]
- .long 0xe59ce000 // ldr lr, [ip]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe24dd004 // sub sp, sp, #4
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280e020 // add lr, r0, #32
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280c010 // add ip, r0, #16
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852082 // add r2, r5, r2, lsl #1
+ .long 0xe0824083 // add r4, r2, r3, lsl #1
+ .long 0xe2803040 // add r3, r0, #64
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0x1a00002e // bne 27f8 <sk_lerp_565_vfp4+0xf8>
+ .long 0xf464074f // vld1.16 {d16}, [r4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe3a04e7e // mov r4, #2016
+ .long 0xf2c1205f // vmov.i32 q9, #31
+ .long 0xeea64b90 // vdup.32 q11, r4
+ .long 0xf3c74258 // vmov.i32 q10, #63488
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24061f6 // vand q11, q8, q11
+ .long 0xf24001f4 // vand q8, q8, q10
+ .long 0xf3fb4666 // vcvt.f32.s32 q10, q11
+ .long 0xf4636aef // vld1.64 {d22-d23}, [r3 :128]
+ .long 0xe28f30f0 // add r3, pc, #240
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30f4 // add r3, pc, #244
+ .long 0xf463cacf // vld1.64 {d28-d29}, [r3]
+ .long 0xf266ad66 // vsub.f32 q13, q3, q11
+ .long 0xe28f30f8 // add r3, pc, #248
+ .long 0xf344cdfc // vmul.f32 q14, q10, q14
+ .long 0xf3428df8 // vmul.f32 q12, q9, q12
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xf26641f6 // vorr q10, q11, q11
+ .long 0xf22661f6 // vorr q3, q11, q11
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf24a4cf8 // vfma.f32 q10, q13, q12
+ .long 0xf20a6cfc // vfma.f32 q3, q13, q14
+ .long 0xf340edf2 // vmul.f32 q15, q8, q9
+ .long 0xf46e2aef // vld1.64 {d18-d19}, [lr :128]
+ .long 0xf4620aef // vld1.64 {d16-d17}, [r2 :128]
+ .long 0xf2244d60 // vsub.f32 q2, q2, q8
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xe2811008 // add r1, r1, #8
+ .long 0xf24a6cfe // vfma.f32 q11, q13, q15
+ .long 0xf262ad62 // vsub.f32 q13, q1, q9
+ .long 0xf2062f64 // vmax.f32 q1, q3, q10
+ .long 0xf46c4aef // vld1.64 {d20-d21}, [ip :128]
+ .long 0xf2200d64 // vsub.f32 q0, q0, q10
+ .long 0xf2440c78 // vfma.f32 q8, q2, q12
+ .long 0xf24a2cfc // vfma.f32 q9, q13, q14
+ .long 0xf2404c7e // vfma.f32 q10, q0, q15
+ .long 0xf2066fc2 // vmax.f32 q3, q11, q1
+ .long 0xf22041f0 // vorr q2, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22401f4 // vorr q0, q10, q10
+ .long 0xe28dd004 // add sp, sp, #4
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe2065003 // and r5, r6, #3
.long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0x0a00002e // beq 1d0c <sk_lerp_565_vfp4+0xec>
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe58d5004 // str r5, [sp, #4]
- .long 0xe28d5004 // add r5, sp, #4
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf3908a30 // vmovl.u16 q4, d16
- .long 0xf2c1001f // vmov.i32 d16, #31
- .long 0xe3a05e7e // mov r5, #2016
- .long 0xee825b90 // vdup.32 d18, r5
- .long 0xf3c71218 // vmov.i32 d17, #63488
- .long 0xf2480130 // vand d16, d8, d16
- .long 0xeddf3b28 // vldr d19, [pc, #160]
- .long 0xf2482132 // vand d18, d8, d18
- .long 0xeddf4b28 // vldr d20, [pc, #160]
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xe5915004 // ldr r5, [r1, #4]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xe281c008 // add ip, r1, #8
- .long 0xf2481131 // vand d17, d8, d17
- .long 0xf2635d07 // vsub.f32 d21, d3, d7
- .long 0xe1a0100c // mov r1, ip
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xe1a0c005 // mov ip, r5
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xeddf3b1f // vldr d19, [pc, #124]
- .long 0xf3422db4 // vmul.f32 d18, d18, d20
- .long 0xf2674117 // vorr d20, d7, d7
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf2673117 // vorr d19, d7, d7
- .long 0xf2453cb0 // vfma.f32 d19, d21, d16
- .long 0xf2454cb2 // vfma.f32 d20, d21, d18
- .long 0xf2679117 // vorr d25, d7, d7
- .long 0xf2628d06 // vsub.f32 d24, d2, d6
- .long 0xf2459cb1 // vfma.f32 d25, d21, d17
- .long 0xf2262116 // vorr d2, d6, d6
- .long 0xf2606d04 // vsub.f32 d22, d0, d4
- .long 0xf2617d05 // vsub.f32 d23, d1, d5
- .long 0xf2082cb0 // vfma.f32 d2, d24, d16
- .long 0xf2440fa3 // vmax.f32 d16, d20, d19
- .long 0xf2240114 // vorr d0, d4, d4
- .long 0xf2251115 // vorr d1, d5, d5
- .long 0xf2060cb1 // vfma.f32 d0, d22, d17
- .long 0xf2071cb2 // vfma.f32 d1, d23, d18
- .long 0xf2093fa0 // vmax.f32 d3, d25, d16
- .long 0xe28dd008 // add sp, sp, #8
- .long 0xecbd8b04 // vpop {d8-d9}
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe1dc50b0 // ldrh r5, [ip]
- .long 0xeddf8a08 // vldr s17, [pc, #32]
- .long 0xee085a10 // vmov s16, r5
- .long 0xeaffffd1 // b 1c64 <sk_lerp_565_vfp4+0x44>
+ .long 0x0a000011 // beq 284c <sk_lerp_565_vfp4+0x14c>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 2828 <sk_lerp_565_vfp4+0x128>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffc9 // bne 2740 <sk_lerp_565_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xe2845004 // add r5, r4, #4
+ .long 0xf4e5049f // vld1.16 {d16[2]}, [r5 :16]
+ .long 0xe5944000 // ldr r4, [r4]
+ .long 0xe58d4000 // str r4, [sp]
+ .long 0xe1a0400d // mov r4, sp
+ .long 0xf4e4183f // vld1.32 {d17[0]}, [r4 :32]
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3f62121 // vuzp.16 d18, d17
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffbc // b 2740 <sk_lerp_565_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xf4e4041f // vld1.16 {d16[0]}, [r4 :16]
+ .long 0xeaffffb8 // b 2740 <sk_lerp_565_vfp4+0x40>
.long 0xe320f000 // nop {0}
.long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
+ .long 0x3a020821 // .word 0x3a020821
+ .long 0x37842108 // .word 0x37842108
+ .long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_load_tables_vfp4
.globl _sk_load_tables_vfp4
FUNCTION(_sk_load_tables_vfp4)
_sk_load_tables_vfp4:
.long 0xe92d47f0 // push {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d4020 // ldr r4, [sp, #32]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3540001 // cmp r4, #1
- .long 0xe08ee102 // add lr, lr, r2, lsl #2
- .long 0x0a000023 // beq 1dec <sk_load_tables_vfp4+0xac>
- .long 0xed9e0b00 // vldr d0, [lr]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe59c7004 // ldr r7, [ip, #4]
- .long 0xf3f01010 // vshr.u32 d17, d0, #16
- .long 0xe59c6008 // ldr r6, [ip, #8]
- .long 0xf3f82010 // vshr.u32 d18, d0, #8
- .long 0xe59c400c // ldr r4, [ip, #12]
- .long 0xf24111b0 // vand d17, d17, d16
- .long 0xf24221b0 // vand d18, d18, d16
- .long 0xf2400130 // vand d16, d0, d16
- .long 0xee319b90 // vmov.32 r9, d17[1]
- .long 0xee32eb90 // vmov.32 lr, d18[1]
- .long 0xee305b90 // vmov.32 r5, d16[1]
- .long 0xee108b90 // vmov.32 r8, d16[0]
- .long 0xf3e80010 // vshr.u32 d16, d0, #24
- .long 0xee12cb90 // vmov.32 ip, d18[0]
- .long 0xee11ab90 // vmov.32 sl, d17[0]
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xeddf1b13 // vldr d17, [pc, #76]
- .long 0xf3003db1 // vmul.f32 d3, d16, d17
- .long 0xe0849109 // add r9, r4, r9, lsl #2
- .long 0xe086e10e // add lr, r6, lr, lsl #2
+ .long 0xe5916000 // ldr r6, [r1]
+ .long 0xe5902000 // ldr r2, [r0]
+ .long 0xe5903008 // ldr r3, [r0, #8]
+ .long 0xe5964000 // ldr r4, [r6]
+ .long 0xe3530000 // cmp r3, #0
+ .long 0xe084e102 // add lr, r4, r2, lsl #2
+ .long 0x1a000036 // bne 298c <sk_load_tables_vfp4+0xfc>
+ .long 0xf46e0a8f // vld1.32 {d16-d17}, [lr]
+ .long 0xf3c7405f // vmov.i32 q10, #255
+ .long 0xe5967004 // ldr r7, [r6, #4]
+ .long 0xf3f02070 // vshr.u32 q9, q8, #16
+ .long 0xe596200c // ldr r2, [r6, #12]
+ .long 0xf24061f4 // vand q11, q8, q10
+ .long 0xe5963008 // ldr r3, [r6, #8]
+ .long 0xf24221f4 // vand q9, q9, q10
+ .long 0xe28f6f42 // add r6, pc, #264
+ .long 0xf4668acf // vld1.64 {d24-d25}, [r6]
+ .long 0xee375b90 // vmov.32 r5, d23[1]
+ .long 0xee334b90 // vmov.32 r4, d19[1]
+ .long 0xee17eb90 // vmov.32 lr, d23[0]
+ .long 0xee368b90 // vmov.32 r8, d22[1]
+ .long 0xee16ab90 // vmov.32 sl, d22[0]
+ .long 0xf3f86070 // vshr.u32 q11, q8, #8
+ .long 0xee32cb90 // vmov.32 ip, d18[1]
+ .long 0xf3e80070 // vshr.u32 q8, q8, #24
+ .long 0xf24641f4 // vand q10, q11, q10
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xee156b90 // vmov.32 r6, d21[0]
+ .long 0xf3006df8 // vmul.f32 q3, q8, q12
.long 0xe0875105 // add r5, r7, r5, lsl #2
- .long 0xedd92a00 // vldr s5, [r9]
- .long 0xedde1a00 // vldr s3, [lr]
- .long 0xedd50a00 // vldr s1, [r5]
+ .long 0xe0829104 // add r9, r2, r4, lsl #2
+ .long 0xee354b90 // vmov.32 r4, d21[1]
+ .long 0xedd51a00 // vldr s3, [r5]
+ .long 0xe087510e // add r5, r7, lr, lsl #2
+ .long 0xedd95a00 // vldr s11, [r9]
+ .long 0xed951a00 // vldr s2, [r5]
.long 0xe0875108 // add r5, r7, r8, lsl #2
- .long 0xe086710c // add r7, r6, ip, lsl #2
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xed950a00 // vldr s0, [r5]
+ .long 0xe087710a // add r7, r7, sl, lsl #2
+ .long 0xe082c10c // add ip, r2, ip, lsl #2
+ .long 0xedd50a00 // vldr s1, [r5]
+ .long 0xee345b90 // vmov.32 r5, d20[1]
+ .long 0xed970a00 // vldr s0, [r7]
+ .long 0xe0837104 // add r7, r3, r4, lsl #2
+ .long 0xee144b90 // vmov.32 r4, d20[0]
+ .long 0xedd73a00 // vldr s7, [r7]
+ .long 0xe0837106 // add r7, r3, r6, lsl #2
+ .long 0xee136b90 // vmov.32 r6, d19[0]
+ .long 0xed973a00 // vldr s6, [r7]
+ .long 0xe0837105 // add r7, r3, r5, lsl #2
+ .long 0xee125b90 // vmov.32 r5, d18[0]
+ .long 0xedd72a00 // vldr s5, [r7]
+ .long 0xe0833104 // add r3, r3, r4, lsl #2
+ .long 0xed932a00 // vldr s4, [r3]
+ .long 0xe0823106 // add r3, r2, r6, lsl #2
+ .long 0xed935a00 // vldr s10, [r3]
+ .long 0xe0822105 // add r2, r2, r5, lsl #2
+ .long 0xeddc4a00 // vldr s9, [ip]
+ .long 0xed924a00 // vldr s8, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xed971a00 // vldr s2, [r7]
- .long 0xe084710a // add r7, r4, sl, lsl #2
- .long 0xed972a00 // vldr s4, [r7]
.long 0xe8bd47f0 // pop {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf0a03 // vldr s1, [pc, #12]
- .long 0xed9e0a00 // vldr s0, [lr]
- .long 0xeaffffd9 // b 1d60 <sk_load_tables_vfp4+0x20>
+ .long 0xe12fff12 // bx r2
+ .long 0xe203c003 // and ip, r3, #3
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0x0a00000c // beq 29cc <sk_load_tables_vfp4+0x13c>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe35c0002 // cmp ip, #2
+ .long 0x0a000005 // beq 29bc <sk_load_tables_vfp4+0x12c>
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0x1affffc1 // bne 28b4 <sk_load_tables_vfp4+0x24>
+ .long 0xe3a02000 // mov r2, #0
+ .long 0xeea02b90 // vdup.32 q8, r2
+ .long 0xe28e2008 // add r2, lr, #8
+ .long 0xf4e2183f // vld1.32 {d17[0]}, [r2 :32]
+ .long 0xedde2b00 // vldr d18, [lr]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffb9 // b 28b4 <sk_load_tables_vfp4+0x24>
+ .long 0xe3a02000 // mov r2, #0
+ .long 0xeea02b90 // vdup.32 q8, r2
+ .long 0xf4ee083f // vld1.32 {d16[0]}, [lr :32]
+ .long 0xeaffffb5 // b 28b4 <sk_load_tables_vfp4+0x24>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_load_tables_u16_be_vfp4
.globl _sk_load_tables_u16_be_vfp4
FUNCTION(_sk_load_tables_u16_be_vfp4)
_sk_load_tables_u16_be_vfp4:
.long 0xe92d47f0 // push {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d4020 // ldr r4, [sp, #32]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3540000 // cmp r4, #0
- .long 0xe08ee182 // add lr, lr, r2, lsl #3
- .long 0xf4ee070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [lr]
- .long 0x1a000001 // bne 1e30 <sk_load_tables_u16_be_vfp4+0x28>
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e4074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r4]
- .long 0xee924bb0 // vmov.u16 r4, d18[0]
- .long 0xf3c7701f // vmov.i32 d23, #255
- .long 0xee905bb0 // vmov.u16 r5, d16[0]
- .long 0xee91ebb0 // vmov.u16 lr, d17[0]
- .long 0xee926bf0 // vmov.u16 r6, d18[1]
- .long 0xee908bf0 // vmov.u16 r8, d16[1]
- .long 0xee917bf0 // vmov.u16 r7, d17[1]
- .long 0xee044b90 // vmov.32 d20[0], r4
- .long 0xe59c400c // ldr r4, [ip, #12]
- .long 0xee065b90 // vmov.32 d22[0], r5
- .long 0xee05eb90 // vmov.32 d21[0], lr
- .long 0xee246b90 // vmov.32 d20[1], r6
- .long 0xee936bb0 // vmov.u16 r6, d19[0]
- .long 0xee268b90 // vmov.32 d22[1], r8
- .long 0xee257b90 // vmov.32 d21[1], r7
- .long 0xee937bf0 // vmov.u16 r7, d19[1]
- .long 0xf24621b7 // vand d18, d22, d23
- .long 0xf24401b7 // vand d16, d20, d23
- .long 0xf24511b7 // vand d17, d21, d23
- .long 0xee32eb90 // vmov.32 lr, d18[1]
- .long 0xee305b90 // vmov.32 r5, d16[1]
- .long 0xee319b90 // vmov.32 r9, d17[1]
- .long 0xee128b90 // vmov.32 r8, d18[0]
- .long 0xf3c72c1f // vmov.i32 d18, #65535
- .long 0xee036b90 // vmov.32 d19[0], r6
- .long 0xe59c6008 // ldr r6, [ip, #8]
- .long 0xee237b90 // vmov.32 d19[1], r7
- .long 0xe59c7004 // ldr r7, [ip, #4]
- .long 0xee11cb90 // vmov.32 ip, d17[0]
- .long 0xf24311b2 // vand d17, d19, d18
- .long 0xe084a105 // add sl, r4, r5, lsl #2
- .long 0xe087510e // add r5, r7, lr, lsl #2
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xf2e80533 // vshl.s32 d16, d19, #8
- .long 0xf3f81031 // vshr.u32 d17, d17, #8
- .long 0xe0869109 // add r9, r6, r9, lsl #2
- .long 0xedd50a00 // vldr s1, [r5]
- .long 0xe0875108 // add r5, r7, r8, lsl #2
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0xedd91a00 // vldr s3, [r9]
- .long 0xeddf1b0c // vldr d17, [pc, #48]
- .long 0xf24001b2 // vand d16, d16, d18
- .long 0xedda2a00 // vldr s5, [sl]
- .long 0xed950a00 // vldr s0, [r5]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3003db1 // vmul.f32 d3, d16, d17
- .long 0xe086710c // add r7, r6, ip, lsl #2
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5918000 // ldr r8, [r1]
+ .long 0xe5903000 // ldr r3, [r0]
+ .long 0xe590e008 // ldr lr, [r0, #8]
+ .long 0xe5982000 // ldr r2, [r8]
+ .long 0xe35e0000 // cmp lr, #0
+ .long 0xe082c183 // add ip, r2, r3, lsl #3
+ .long 0x1a000039 // bne 2af8 <sk_load_tables_u16_be_vfp4+0x108>
+ .long 0xf46c004f // vld4.16 {d16-d19}, [ip]
+ .long 0xf3c72b3f // vbic.i16 d18, #65280
+ .long 0xe5986004 // ldr r6, [r8, #4]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe5983008 // ldr r3, [r8, #8]
+ .long 0xe598200c // ldr r2, [r8, #12]
+ .long 0xe28f40f0 // add r4, pc, #240
+ .long 0xf3d04a32 // vmovl.u16 q10, d18
+ .long 0xf4646acf // vld1.64 {d22-d23}, [r4]
+ .long 0xf3d08a30 // vmovl.u16 q12, d16
+ .long 0xf3c71b3f // vbic.i16 d17, #65280
+ .long 0xf2d80533 // vshl.s16 d16, d19, #8
+ .long 0xee355b90 // vmov.32 r5, d21[1]
+ .long 0xee397b90 // vmov.32 r7, d25[1]
+ .long 0xee199b90 // vmov.32 r9, d25[0]
+ .long 0xee388b90 // vmov.32 r8, d24[1]
+ .long 0xee18ab90 // vmov.32 sl, d24[0]
+ .long 0xf3d08a31 // vmovl.u16 q12, d17
+ .long 0xee34cb90 // vmov.32 ip, d20[1]
+ .long 0xe082e105 // add lr, r2, r5, lsl #2
+ .long 0xee195b90 // vmov.32 r5, d25[0]
+ .long 0xe0864107 // add r4, r6, r7, lsl #2
+ .long 0xee397b90 // vmov.32 r7, d25[1]
+ .long 0xedde5a00 // vldr s11, [lr]
+ .long 0xedd41a00 // vldr s3, [r4]
+ .long 0xe0864109 // add r4, r6, r9, lsl #2
+ .long 0xed941a00 // vldr s2, [r4]
+ .long 0xe0864108 // add r4, r6, r8, lsl #2
+ .long 0xe082c10c // add ip, r2, ip, lsl #2
+ .long 0xedd40a00 // vldr s1, [r4]
+ .long 0xe086410a // add r4, r6, sl, lsl #2
+ .long 0xee386b90 // vmov.32 r6, d24[1]
+ .long 0xed940a00 // vldr s0, [r4]
+ .long 0xe0834107 // add r4, r3, r7, lsl #2
+ .long 0xee187b90 // vmov.32 r7, d24[0]
+ .long 0xf3d88033 // vshr.u16 d24, d19, #8
+ .long 0xedd43a00 // vldr s7, [r4]
+ .long 0xe0834105 // add r4, r3, r5, lsl #2
+ .long 0xee155b90 // vmov.32 r5, d21[0]
+ .long 0xf26001b8 // vorr d16, d16, d24
+ .long 0xed943a00 // vldr s6, [r4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe0834106 // add r4, r3, r6, lsl #2
+ .long 0xee146b90 // vmov.32 r6, d20[0]
+ .long 0xedd42a00 // vldr s5, [r4]
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3006df6 // vmul.f32 q3, q8, q11
+ .long 0xe0833107 // add r3, r3, r7, lsl #2
+ .long 0xed932a00 // vldr s4, [r3]
+ .long 0xe0823105 // add r3, r2, r5, lsl #2
+ .long 0xed935a00 // vldr s10, [r3]
+ .long 0xeddc4a00 // vldr s9, [ip]
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0xed924a00 // vldr s8, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xed971a00 // vldr s2, [r7]
- .long 0xe084710e // add r7, r4, lr, lsl #2
- .long 0xed972a00 // vldr s4, [r7]
.long 0xe8bd47f0 // pop {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe12fff12 // bx r2
+ .long 0xf4ec070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [ip]
+ .long 0xe35e0001 // cmp lr, #1
+ .long 0x0affffc3 // beq 2a14 <sk_load_tables_u16_be_vfp4+0x24>
+ .long 0xe28c2008 // add r2, ip, #8
+ .long 0xe35e0003 // cmp lr, #3
+ .long 0xf4e2074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r2]
+ .long 0x3affffbf // bcc 2a14 <sk_load_tables_u16_be_vfp4+0x24>
+ .long 0xe28c2010 // add r2, ip, #16
+ .long 0xf4e2078f // vld4.16 {d16[2],d17[2],d18[2],d19[2]}, [r2]
+ .long 0xeaffffbc // b 2a14 <sk_load_tables_u16_be_vfp4+0x24>
+ .long 0x37800080 // .word 0x37800080
+ .long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
@@ -7837,122 +8613,180 @@ HIDDEN _sk_load_tables_rgb_u16_be_vfp4
FUNCTION(_sk_load_tables_rgb_u16_be_vfp4)
_sk_load_tables_rgb_u16_be_vfp4:
.long 0xe92d47f0 // push {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe0824082 // add r4, r2, r2, lsl #1
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe08ee084 // add lr, lr, r4, lsl #1
- .long 0xe59d4020 // ldr r4, [sp, #32]
- .long 0xf4ee060f // vld3.16 {d16[0],d17[0],d18[0]}, [lr]
- .long 0xe3540000 // cmp r4, #0
- .long 0x1a000001 // bne 1f3c <sk_load_tables_rgb_u16_be_vfp4+0x2c>
- .long 0xe28e4006 // add r4, lr, #6
- .long 0xf4e4064f // vld3.16 {d16[1],d17[1],d18[1]}, [r4]
- .long 0xee924bb0 // vmov.u16 r4, d18[0]
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xee905bb0 // vmov.u16 r5, d16[0]
- .long 0xee908bf0 // vmov.u16 r8, d16[1]
- .long 0xf3c7301f // vmov.i32 d19, #255
- .long 0xee926bf0 // vmov.u16 r6, d18[1]
- .long 0xee91ebb0 // vmov.u16 lr, d17[0]
- .long 0xee917bf0 // vmov.u16 r7, d17[1]
- .long 0xee004b90 // vmov.32 d16[0], r4
- .long 0xee025b90 // vmov.32 d18[0], r5
- .long 0xee206b90 // vmov.32 d16[1], r6
- .long 0xe99c0070 // ldmib ip, {r4, r5, r6}
- .long 0xee228b90 // vmov.32 d18[1], r8
- .long 0xf24001b3 // vand d16, d16, d19
- .long 0xee01eb90 // vmov.32 d17[0], lr
- .long 0xf24221b3 // vand d18, d18, d19
- .long 0xee217b90 // vmov.32 d17[1], r7
- .long 0xee307b90 // vmov.32 r7, d16[1]
- .long 0xf24111b3 // vand d17, d17, d19
- .long 0xee328b90 // vmov.32 r8, d18[1]
- .long 0xee12eb90 // vmov.32 lr, d18[0]
- .long 0xee319b90 // vmov.32 r9, d17[1]
- .long 0xee11cb90 // vmov.32 ip, d17[0]
- .long 0xe086a107 // add sl, r6, r7, lsl #2
- .long 0xe0847108 // add r7, r4, r8, lsl #2
- .long 0xee108b90 // vmov.32 r8, d16[0]
- .long 0xedda2a00 // vldr s5, [sl]
- .long 0xe0859109 // add r9, r5, r9, lsl #2
- .long 0xedd70a00 // vldr s1, [r7]
- .long 0xe084710e // add r7, r4, lr, lsl #2
- .long 0xedd91a00 // vldr s3, [r9]
+ .long 0xe5903000 // ldr r3, [r0]
+ .long 0xe5918000 // ldr r8, [r1]
+ .long 0xe590e008 // ldr lr, [r0, #8]
+ .long 0xe0833083 // add r3, r3, r3, lsl #1
+ .long 0xe5982000 // ldr r2, [r8]
+ .long 0xe35e0000 // cmp lr, #0
+ .long 0xe082c083 // add ip, r2, r3, lsl #1
+ .long 0x1a000033 // bne 2c24 <sk_load_tables_rgb_u16_be_vfp4+0xf4>
+ .long 0xf46c044f // vld3.16 {d16-d18}, [ip]
+ .long 0xf3c72b3f // vbic.i16 d18, #65280
+ .long 0xe5987004 // ldr r7, [r8, #4]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe5983008 // ldr r3, [r8, #8]
+ .long 0xe598200c // ldr r2, [r8, #12]
+ .long 0xe28f40dc // add r4, pc, #220
+ .long 0xf3d04a32 // vmovl.u16 q10, d18
+ .long 0xf4246acf // vld1.64 {d6-d7}, [r4]
+ .long 0xf3d06a30 // vmovl.u16 q11, d16
+ .long 0xf3c71b3f // vbic.i16 d17, #65280
+ .long 0xee355b90 // vmov.32 r5, d21[1]
+ .long 0xee376b90 // vmov.32 r6, d23[1]
+ .long 0xf3d00a31 // vmovl.u16 q8, d17
+ .long 0xee17eb90 // vmov.32 lr, d23[0]
+ .long 0xee368b90 // vmov.32 r8, d22[1]
+ .long 0xee16ab90 // vmov.32 sl, d22[0]
+ .long 0xee314b90 // vmov.32 r4, d17[1]
+ .long 0xee34cb90 // vmov.32 ip, d20[1]
+ .long 0xe0829105 // add r9, r2, r5, lsl #2
+ .long 0xe0875106 // add r5, r7, r6, lsl #2
+ .long 0xee116b90 // vmov.32 r6, d17[0]
+ .long 0xedd95a00 // vldr s11, [r9]
+ .long 0xedd51a00 // vldr s3, [r5]
+ .long 0xe087510e // add r5, r7, lr, lsl #2
+ .long 0xed951a00 // vldr s2, [r5]
+ .long 0xe0875108 // add r5, r7, r8, lsl #2
+ .long 0xe087710a // add r7, r7, sl, lsl #2
+ .long 0xe082c10c // add ip, r2, ip, lsl #2
+ .long 0xedd50a00 // vldr s1, [r5]
+ .long 0xee305b90 // vmov.32 r5, d16[1]
.long 0xed970a00 // vldr s0, [r7]
- .long 0xe085710c // add r7, r5, ip, lsl #2
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe0837104 // add r7, r3, r4, lsl #2
+ .long 0xee104b90 // vmov.32 r4, d16[0]
+ .long 0xedd73a00 // vldr s7, [r7]
+ .long 0xe0837106 // add r7, r3, r6, lsl #2
+ .long 0xee156b90 // vmov.32 r6, d21[0]
+ .long 0xed973a00 // vldr s6, [r7]
+ .long 0xe0837105 // add r7, r3, r5, lsl #2
+ .long 0xee145b90 // vmov.32 r5, d20[0]
+ .long 0xedd72a00 // vldr s5, [r7]
+ .long 0xe0833104 // add r3, r3, r4, lsl #2
+ .long 0xed932a00 // vldr s4, [r3]
+ .long 0xe0823106 // add r3, r2, r6, lsl #2
+ .long 0xed935a00 // vldr s10, [r3]
+ .long 0xeddc4a00 // vldr s9, [ip]
+ .long 0xe0822105 // add r2, r2, r5, lsl #2
+ .long 0xed924a00 // vldr s8, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xed971a00 // vldr s2, [r7]
- .long 0xe0867108 // add r7, r6, r8, lsl #2
- .long 0xed972a00 // vldr s4, [r7]
.long 0xe8bd47f0 // pop {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe12fff12 // bx r2
+ .long 0xf4ec060f // vld3.16 {d16[0],d17[0],d18[0]}, [ip]
+ .long 0xe35e0001 // cmp lr, #1
+ .long 0x0affffc9 // beq 2b58 <sk_load_tables_rgb_u16_be_vfp4+0x28>
+ .long 0xe28c2006 // add r2, ip, #6
+ .long 0xe35e0003 // cmp lr, #3
+ .long 0xf4e2064f // vld3.16 {d16[1],d17[1],d18[1]}, [r2]
+ .long 0x3affffc5 // bcc 2b58 <sk_load_tables_rgb_u16_be_vfp4+0x28>
+ .long 0xe28c200c // add r2, ip, #12
+ .long 0xf4e2068f // vld3.16 {d16[2],d17[2],d18[2]}, [r2]
+ .long 0xeaffffc2 // b 2b58 <sk_load_tables_rgb_u16_be_vfp4+0x28>
.long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_byte_tables_vfp4
.globl _sk_byte_tables_vfp4
FUNCTION(_sk_byte_tables_vfp4)
_sk_byte_tables_vfp4:
- .long 0xe92d47f0 // push {r4, r5, r6, r7, r8, r9, sl, lr}
- .long 0xeddf0b37 // vldr d16, [pc, #220]
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xf2413c30 // vfma.f32 d19, d1, d16
- .long 0xe8911020 // ldm r1, {r5, ip}
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2422c30 // vfma.f32 d18, d2, d16
+ .long 0xe92d48f0 // push {r4, r5, r6, r7, fp, lr}
+ .long 0xe28f2f55 // add r2, pc, #340
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xf2420c7a // vfma.f32 q8, q1, q13
+ .long 0xe8911040 // ldm r1, {r6, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xe89504c0 // ldm r5, {r6, r7, sl}
- .long 0xf2404c30 // vfma.f32 d20, d0, d16
- .long 0xe595900c // ldr r9, [r5, #12]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xf3fb37a3 // vcvt.u32.f32 d19, d19
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf3fb47a4 // vcvt.u32.f32 d20, d20
- .long 0xee138b90 // vmov.32 r8, d19[0]
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xee12eb90 // vmov.32 lr, d18[0]
- .long 0xee144b90 // vmov.32 r4, d20[0]
- .long 0xe7d75008 // ldrb r5, [r7, r8]
- .long 0xe7dae00e // ldrb lr, [sl, lr]
- .long 0xee055b90 // vmov.32 d21[0], r5
- .long 0xe7d64004 // ldrb r4, [r6, r4]
- .long 0xee345b90 // vmov.32 r5, d20[1]
- .long 0xee04eb90 // vmov.32 d20[0], lr
- .long 0xee014b90 // vmov.32 d17[0], r4
- .long 0xee104b90 // vmov.32 r4, d16[0]
- .long 0xe7d6e005 // ldrb lr, [r6, r5]
- .long 0xee335b90 // vmov.32 r5, d19[1]
- .long 0xee326b90 // vmov.32 r6, d18[1]
- .long 0xf3c7201f // vmov.i32 d18, #255
- .long 0xee21eb90 // vmov.32 d17[1], lr
- .long 0xe7d94004 // ldrb r4, [r9, r4]
- .long 0xf24111b2 // vand d17, d17, d18
- .long 0xf3fb16a1 // vcvt.f32.u32 d17, d17
- .long 0xe7d75005 // ldrb r5, [r7, r5]
- .long 0xee307b90 // vmov.32 r7, d16[1]
- .long 0xee004b90 // vmov.32 d16[0], r4
- .long 0xee255b90 // vmov.32 d21[1], r5
- .long 0xe7da5006 // ldrb r5, [sl, r6]
- .long 0xf24531b2 // vand d19, d21, d18
- .long 0xee245b90 // vmov.32 d20[1], r5
- .long 0xf24441b2 // vand d20, d20, d18
- .long 0xf3fb46a4 // vcvt.f32.u32 d20, d20
- .long 0xe7d94007 // ldrb r4, [r9, r7]
- .long 0xee204b90 // vmov.32 d16[1], r4
- .long 0xf24001b2 // vand d16, d16, d18
- .long 0xf3fb26a3 // vcvt.f32.u32 d18, d19
- .long 0xeddf3b08 // vldr d19, [pc, #32]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3010db3 // vmul.f32 d0, d17, d19
- .long 0xf3042db3 // vmul.f32 d2, d20, d19
- .long 0xf3021db3 // vmul.f32 d1, d18, d19
- .long 0xf3003db3 // vmul.f32 d3, d16, d19
- .long 0xe8bd47f0 // pop {r4, r5, r6, r7, r8, r9, sl, lr}
+ .long 0xf2468c7a // vfma.f32 q12, q3, q13
+ .long 0xe8960018 // ldm r6, {r3, r4}
+ .long 0xe5962008 // ldr r2, [r6, #8]
+ .long 0xe596e00c // ldr lr, [r6, #12]
+ .long 0xf3fb27e0 // vcvt.u32.f32 q9, q8
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2400c7a // vfma.f32 q8, q0, q13
+ .long 0xf3fb87e8 // vcvt.u32.f32 q12, q12
+ .long 0xee127b90 // vmov.32 r7, d18[0]
+ .long 0xee325b90 // vmov.32 r5, d18[1]
+ .long 0xf3fb47e0 // vcvt.u32.f32 q10, q8
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2440c7a // vfma.f32 q8, q2, q13
+ .long 0xf3fb67e0 // vcvt.u32.f32 q11, q8
+ .long 0xe7d46007 // ldrb r6, [r4, r7]
+ .long 0xee147b90 // vmov.32 r7, d20[0]
+ .long 0xe7d45005 // ldrb r5, [r4, r5]
+ .long 0xee006bb0 // vmov.16 d16[0], r6
+ .long 0xee005bf0 // vmov.16 d16[1], r5
+ .long 0xe7d36007 // ldrb r6, [r3, r7]
+ .long 0xee167b90 // vmov.32 r7, d22[0]
+ .long 0xee016bb0 // vmov.16 d17[0], r6
+ .long 0xe7d26007 // ldrb r6, [r2, r7]
+ .long 0xee187b90 // vmov.32 r7, d24[0]
+ .long 0xee0a6bb0 // vmov.16 d26[0], r6
+ .long 0xe7de6007 // ldrb r6, [lr, r7]
+ .long 0xee347b90 // vmov.32 r7, d20[1]
+ .long 0xee0b6bb0 // vmov.16 d27[0], r6
+ .long 0xee176b90 // vmov.32 r6, d23[0]
+ .long 0xe7d35007 // ldrb r5, [r3, r7]
+ .long 0xee367b90 // vmov.32 r7, d22[1]
+ .long 0xee015bf0 // vmov.16 d17[1], r5
+ .long 0xe7d25006 // ldrb r5, [r2, r6]
+ .long 0xe7d26007 // ldrb r6, [r2, r7]
+ .long 0xee387b90 // vmov.32 r7, d24[1]
+ .long 0xee0a6bf0 // vmov.16 d26[1], r6
+ .long 0xee2a5bb0 // vmov.16 d26[2], r5
+ .long 0xee195b90 // vmov.32 r5, d25[0]
+ .long 0xe7de6007 // ldrb r6, [lr, r7]
+ .long 0xee157b90 // vmov.32 r7, d21[0]
+ .long 0xee0b6bf0 // vmov.16 d27[1], r6
+ .long 0xe7de5005 // ldrb r5, [lr, r5]
+ .long 0xee2b5bb0 // vmov.16 d27[2], r5
+ .long 0xe7d36007 // ldrb r6, [r3, r7]
+ .long 0xee137b90 // vmov.32 r7, d19[0]
+ .long 0xee216bb0 // vmov.16 d17[2], r6
+ .long 0xe7d46007 // ldrb r6, [r4, r7]
+ .long 0xee337b90 // vmov.32 r7, d19[1]
+ .long 0xee206bb0 // vmov.16 d16[2], r6
+ .long 0xee356b90 // vmov.32 r6, d21[1]
+ .long 0xe7d44007 // ldrb r4, [r4, r7]
+ .long 0xee397b90 // vmov.32 r7, d25[1]
+ .long 0xee204bf0 // vmov.16 d16[3], r4
+ .long 0xe7d33006 // ldrb r3, [r3, r6]
+ .long 0xee376b90 // vmov.32 r6, d23[1]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xee213bf0 // vmov.16 d17[3], r3
+ .long 0xf3c71b3f // vbic.i16 d17, #65280
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb26e2 // vcvt.f32.u32 q9, q9
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xe7de3007 // ldrb r3, [lr, r7]
+ .long 0xee2b3bf0 // vmov.16 d27[3], r3
+ .long 0xe7d22006 // ldrb r2, [r2, r6]
+ .long 0xf3c7bb3f // vbic.i16 d27, #65280
+ .long 0xee2a2bf0 // vmov.16 d26[3], r2
+ .long 0xf3d06a3b // vmovl.u16 q11, d27
+ .long 0xe28f2038 // add r2, pc, #56
+ .long 0xf3c7ab3f // vbic.i16 d26, #65280
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf3fb66e6 // vcvt.f32.u32 q11, q11
+ .long 0xf3d04a3a // vmovl.u16 q10, d26
+ .long 0xf3020df8 // vmul.f32 q0, q9, q12
+ .long 0xf3002df8 // vmul.f32 q1, q8, q12
+ .long 0xf3fb46e4 // vcvt.f32.u32 q10, q10
+ .long 0xf3066df8 // vmul.f32 q3, q11, q12
+ .long 0xf3044df8 // vmul.f32 q2, q10, q12
+ .long 0xe8bd48f0 // pop {r4, r5, r6, r7, fp, lr}
.long 0xe12fff1c // bx ip
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
@@ -7960,247 +8794,307 @@ HIDDEN _sk_byte_tables_rgb_vfp4
.globl _sk_byte_tables_rgb_vfp4
FUNCTION(_sk_byte_tables_rgb_vfp4)
_sk_byte_tables_rgb_vfp4:
- .long 0xe92d4bf0 // push {r4, r5, r6, r7, r8, r9, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf3c7301f // vmov.i32 d19, #255
+ .long 0xe92d48f0 // push {r4, r5, r6, r7, fp, lr}
+ .long 0xe8911010 // ldm r1, {r4, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
.long 0xe2811008 // add r1, r1, #8
- .long 0xe89e0210 // ldm lr, {r4, r9}
- .long 0xe59e600c // ldr r6, [lr, #12]
- .long 0xe59e8008 // ldr r8, [lr, #8]
- .long 0xe2466001 // sub r6, r6, #1
- .long 0xee806b90 // vdup.32 d16, r6
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf2402c30 // vfma.f32 d18, d0, d16
- .long 0xf2411c30 // vfma.f32 d17, d1, d16
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xee126b90 // vmov.32 r6, d18[0]
- .long 0xee327b90 // vmov.32 r7, d18[1]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2422c30 // vfma.f32 d18, d2, d16
- .long 0xf3fb07a2 // vcvt.u32.f32 d16, d18
- .long 0xee105b90 // vmov.32 r5, d16[0]
- .long 0xe7d46006 // ldrb r6, [r4, r6]
- .long 0xe7d4e007 // ldrb lr, [r4, r7]
- .long 0xee314b90 // vmov.32 r4, d17[1]
- .long 0xee026b90 // vmov.32 d18[0], r6
- .long 0xee116b90 // vmov.32 r6, d17[0]
- .long 0xee307b90 // vmov.32 r7, d16[1]
- .long 0xee22eb90 // vmov.32 d18[1], lr
- .long 0xf24221b3 // vand d18, d18, d19
- .long 0xf3fb26a2 // vcvt.f32.u32 d18, d18
- .long 0xe7d85005 // ldrb r5, [r8, r5]
- .long 0xee015b90 // vmov.32 d17[0], r5
- .long 0xe7d94004 // ldrb r4, [r9, r4]
- .long 0xe7d96006 // ldrb r6, [r9, r6]
- .long 0xe7d85007 // ldrb r5, [r8, r7]
- .long 0xee006b90 // vmov.32 d16[0], r6
- .long 0xee215b90 // vmov.32 d17[1], r5
- .long 0xee204b90 // vmov.32 d16[1], r4
- .long 0xf24111b3 // vand d17, d17, d19
- .long 0xf24001b3 // vand d16, d16, d19
- .long 0xeddf3b06 // vldr d19, [pc, #24]
- .long 0xf3fb16a1 // vcvt.f32.u32 d17, d17
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3020db3 // vmul.f32 d0, d18, d19
- .long 0xf3012db3 // vmul.f32 d2, d17, d19
- .long 0xf3001db3 // vmul.f32 d1, d16, d19
- .long 0xe8bd4bf0 // pop {r4, r5, r6, r7, r8, r9, fp, lr}
+ .long 0xe5943000 // ldr r3, [r4]
+ .long 0xe9944004 // ldmib r4, {r2, lr}
+ .long 0xe594400c // ldr r4, [r4, #12]
+ .long 0xe2444001 // sub r4, r4, #1
+ .long 0xeea04b90 // vdup.32 q8, r4
+ .long 0xf3fb4660 // vcvt.f32.s32 q10, q8
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2440c74 // vfma.f32 q8, q2, q10
+ .long 0xf2422c74 // vfma.f32 q9, q1, q10
+ .long 0xf2406c74 // vfma.f32 q11, q0, q10
+ .long 0xf3fb07e0 // vcvt.u32.f32 q8, q8
+ .long 0xf3fb27e2 // vcvt.u32.f32 q9, q9
+ .long 0xf3fb47e6 // vcvt.u32.f32 q10, q11
+ .long 0xee104b90 // vmov.32 r4, d16[0]
+ .long 0xee317b90 // vmov.32 r7, d17[1]
+ .long 0xee125b90 // vmov.32 r5, d18[0]
+ .long 0xee146b90 // vmov.32 r6, d20[0]
+ .long 0xe7de4004 // ldrb r4, [lr, r4]
+ .long 0xe7de7007 // ldrb r7, [lr, r7]
+ .long 0xe7d25005 // ldrb r5, [r2, r5]
+ .long 0xee074bb0 // vmov.16 d23[0], r4
+ .long 0xe7d34006 // ldrb r4, [r3, r6]
+ .long 0xee065bb0 // vmov.16 d22[0], r5
+ .long 0xee155b90 // vmov.32 r5, d21[0]
+ .long 0xee346b90 // vmov.32 r6, d20[1]
+ .long 0xee084bb0 // vmov.16 d24[0], r4
+ .long 0xe7d34005 // ldrb r4, [r3, r5]
+ .long 0xe7d35006 // ldrb r5, [r3, r6]
+ .long 0xee326b90 // vmov.32 r6, d18[1]
+ .long 0xee085bf0 // vmov.16 d24[1], r5
+ .long 0xee284bb0 // vmov.16 d24[2], r4
+ .long 0xee134b90 // vmov.32 r4, d19[0]
+ .long 0xe7d25006 // ldrb r5, [r2, r6]
+ .long 0xee306b90 // vmov.32 r6, d16[1]
+ .long 0xee065bf0 // vmov.16 d22[1], r5
+ .long 0xe7d24004 // ldrb r4, [r2, r4]
+ .long 0xee264bb0 // vmov.16 d22[2], r4
+ .long 0xe7de5006 // ldrb r5, [lr, r6]
+ .long 0xee356b90 // vmov.32 r6, d21[1]
+ .long 0xee075bf0 // vmov.16 d23[1], r5
+ .long 0xee115b90 // vmov.32 r5, d17[0]
+ .long 0xe7d33006 // ldrb r3, [r3, r6]
+ .long 0xee336b90 // vmov.32 r6, d19[1]
+ .long 0xee283bf0 // vmov.16 d24[3], r3
+ .long 0xe7de5005 // ldrb r5, [lr, r5]
+ .long 0xf3c78b3f // vbic.i16 d24, #65280
+ .long 0xee275bb0 // vmov.16 d23[2], r5
+ .long 0xf3d00a38 // vmovl.u16 q8, d24
+ .long 0xee277bf0 // vmov.16 d23[3], r7
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3c77b3f // vbic.i16 d23, #65280
+ .long 0xf3d04a37 // vmovl.u16 q10, d23
+ .long 0xf3fb46e4 // vcvt.f32.u32 q10, q10
+ .long 0xe7d22006 // ldrb r2, [r2, r6]
+ .long 0xee262bf0 // vmov.16 d22[3], r2
+ .long 0xe28f2020 // add r2, pc, #32
+ .long 0xf3c76b3f // vbic.i16 d22, #65280
+ .long 0xf3d02a36 // vmovl.u16 q9, d22
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf3000df6 // vmul.f32 q0, q8, q11
+ .long 0xf3fb26e2 // vcvt.f32.u32 q9, q9
+ .long 0xf3044df6 // vmul.f32 q2, q10, q11
+ .long 0xf3022df6 // vmul.f32 q1, q9, q11
+ .long 0xe8bd48f0 // pop {r4, r5, r6, r7, fp, lr}
.long 0xe12fff1c // bx ip
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_table_r_vfp4
.globl _sk_table_r_vfp4
FUNCTION(_sk_table_r_vfp4)
_sk_table_r_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
.long 0xe2811008 // add r1, r1, #8
- .long 0xe59e4004 // ldr r4, [lr, #4]
- .long 0xe59e5000 // ldr r5, [lr]
- .long 0xe2444001 // sub r4, r4, #1
- .long 0xee804b90 // vdup.32 d16, r4
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf2401c30 // vfma.f32 d17, d0, d16
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xee304b90 // vmov.32 r4, d16[1]
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe0854104 // add r4, r5, r4, lsl #2
- .long 0xe085510e // add r5, r5, lr, lsl #2
- .long 0xedd40a00 // vldr s1, [r4]
- .long 0xed950a00 // vldr s0, [r5]
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe893000c // ldm r3, {r2, r3}
+ .long 0xe2433001 // sub r3, r3, #1
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf2402c70 // vfma.f32 q9, q0, q8
+ .long 0xf3fb07e2 // vcvt.u32.f32 q8, q9
+ .long 0xee313b90 // vmov.32 r3, d17[1]
+ .long 0xee114b90 // vmov.32 r4, d17[0]
+ .long 0xee30eb90 // vmov.32 lr, d16[1]
+ .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xedd31a00 // vldr s3, [r3]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe082510e // add r5, r2, lr, lsl #2
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0xed931a00 // vldr s2, [r3]
+ .long 0xedd50a00 // vldr s1, [r5]
+ .long 0xed920a00 // vldr s0, [r2]
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_table_g_vfp4
.globl _sk_table_g_vfp4
FUNCTION(_sk_table_g_vfp4)
_sk_table_g_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
.long 0xe2811008 // add r1, r1, #8
- .long 0xe59e4004 // ldr r4, [lr, #4]
- .long 0xe59e5000 // ldr r5, [lr]
- .long 0xe2444001 // sub r4, r4, #1
- .long 0xee804b90 // vdup.32 d16, r4
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf2411c30 // vfma.f32 d17, d1, d16
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xee304b90 // vmov.32 r4, d16[1]
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe0854104 // add r4, r5, r4, lsl #2
- .long 0xe085510e // add r5, r5, lr, lsl #2
- .long 0xedd41a00 // vldr s3, [r4]
- .long 0xed951a00 // vldr s2, [r5]
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe893000c // ldm r3, {r2, r3}
+ .long 0xe2433001 // sub r3, r3, #1
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf2422c70 // vfma.f32 q9, q1, q8
+ .long 0xf3fb07e2 // vcvt.u32.f32 q8, q9
+ .long 0xee313b90 // vmov.32 r3, d17[1]
+ .long 0xee114b90 // vmov.32 r4, d17[0]
+ .long 0xee30eb90 // vmov.32 lr, d16[1]
+ .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xedd33a00 // vldr s7, [r3]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe082510e // add r5, r2, lr, lsl #2
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0xed933a00 // vldr s6, [r3]
+ .long 0xedd52a00 // vldr s5, [r5]
+ .long 0xed922a00 // vldr s4, [r2]
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_table_b_vfp4
.globl _sk_table_b_vfp4
FUNCTION(_sk_table_b_vfp4)
_sk_table_b_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
.long 0xe2811008 // add r1, r1, #8
- .long 0xe59e4004 // ldr r4, [lr, #4]
- .long 0xe59e5000 // ldr r5, [lr]
- .long 0xe2444001 // sub r4, r4, #1
- .long 0xee804b90 // vdup.32 d16, r4
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf2421c30 // vfma.f32 d17, d2, d16
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xee304b90 // vmov.32 r4, d16[1]
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe0854104 // add r4, r5, r4, lsl #2
- .long 0xe085510e // add r5, r5, lr, lsl #2
- .long 0xedd42a00 // vldr s5, [r4]
- .long 0xed952a00 // vldr s4, [r5]
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe893000c // ldm r3, {r2, r3}
+ .long 0xe2433001 // sub r3, r3, #1
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf2442c70 // vfma.f32 q9, q2, q8
+ .long 0xf3fb07e2 // vcvt.u32.f32 q8, q9
+ .long 0xee313b90 // vmov.32 r3, d17[1]
+ .long 0xee114b90 // vmov.32 r4, d17[0]
+ .long 0xee30eb90 // vmov.32 lr, d16[1]
+ .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xedd35a00 // vldr s11, [r3]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe082510e // add r5, r2, lr, lsl #2
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0xed935a00 // vldr s10, [r3]
+ .long 0xedd54a00 // vldr s9, [r5]
+ .long 0xed924a00 // vldr s8, [r2]
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_table_a_vfp4
.globl _sk_table_a_vfp4
FUNCTION(_sk_table_a_vfp4)
_sk_table_a_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
.long 0xe2811008 // add r1, r1, #8
- .long 0xe59e4004 // ldr r4, [lr, #4]
- .long 0xe59e5000 // ldr r5, [lr]
- .long 0xe2444001 // sub r4, r4, #1
- .long 0xee804b90 // vdup.32 d16, r4
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xee304b90 // vmov.32 r4, d16[1]
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe0854104 // add r4, r5, r4, lsl #2
- .long 0xe085510e // add r5, r5, lr, lsl #2
- .long 0xedd43a00 // vldr s7, [r4]
- .long 0xed953a00 // vldr s6, [r5]
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe893000c // ldm r3, {r2, r3}
+ .long 0xe2433001 // sub r3, r3, #1
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf2462c70 // vfma.f32 q9, q3, q8
+ .long 0xf3fb07e2 // vcvt.u32.f32 q8, q9
+ .long 0xee313b90 // vmov.32 r3, d17[1]
+ .long 0xee114b90 // vmov.32 r4, d17[0]
+ .long 0xee30eb90 // vmov.32 lr, d16[1]
+ .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xedd37a00 // vldr s15, [r3]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe082510e // add r5, r2, lr, lsl #2
+ .long 0xe0822106 // add r2, r2, r6, lsl #2
+ .long 0xed937a00 // vldr s14, [r3]
+ .long 0xedd56a00 // vldr s13, [r5]
+ .long 0xed926a00 // vldr s12, [r2]
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_parametric_r_vfp4
.globl _sk_parametric_r_vfp4
FUNCTION(_sk_parametric_r_vfp4)
_sk_parametric_r_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xeddf3b41 // vldr d19, [pc, #260]
- .long 0xed9f8a4e // vldr s16, [pc, #312]
- .long 0xe1a0400e // mov r4, lr
- .long 0xeddf4b42 // vldr d20, [pc, #264]
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe8911004 // ldm r1, {r2, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf2412c90 // vfma.f32 d18, d17, d0
- .long 0xf2c71d1f // vmov.i32 d17, #8388607
- .long 0xf24211b1 // vand d17, d18, d17
- .long 0xf2c3171f // vorr.i32 d17, #1056964608
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf2019da3 // vadd.f32 d9, d17, d19
- .long 0xf2c33614 // vmov.i32 d19, #872415232
- .long 0xf3422db3 // vmul.f32 d18, d18, d19
- .long 0xeddf3b30 // vldr d19, [pc, #192]
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xed9f8a39 // vldr s16, [pc, #228]
- .long 0xf2422da4 // vadd.f32 d18, d18, d20
- .long 0xeddf4b2e // vldr d20, [pc, #184]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf2611d8a // vsub.f32 d17, d17, d10
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf3fb1720 // vcvt.s32.f32 d17, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3612ea0 // vcgt.f32 d18, d17, d16
- .long 0xf35421b3 // vbsl d18, d20, d19
- .long 0xeddf4b2b // vldr d20, [pc, #172]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xeddf2b25 // vldr d18, [pc, #148]
- .long 0xf2601da1 // vsub.f32 d17, d16, d17
- .long 0xf2400da4 // vadd.f32 d16, d16, d20
- .long 0xf2229da1 // vsub.f32 d9, d18, d17
- .long 0xeddf2b23 // vldr d18, [pc, #140]
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf2c4161b // vmov.i32 d17, #1258291200
- .long 0xf2400d8a // vadd.f32 d16, d16, d10
- .long 0xf2402cb1 // vfma.f32 d18, d16, d17
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf2401c90 // vfma.f32 d17, d16, d0
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf3400e80 // vcge.f32 d16, d16, d0
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf2442da2 // vadd.f32 d18, d20, d18
- .long 0xf35101b2 // vbsl d16, d17, d18
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xf2400fa3 // vmax.f32 d16, d16, d19
- .long 0xf2200fa1 // vmin.f32 d0, d16, d17
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed9fca65 // vldr s24, [pc, #404]
+ .long 0xe1a03002 // mov r3, r2
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf2424cd0 // vfma.f32 q10, q9, q0
+ .long 0xf2c72d5f // vmov.i32 q9, #8388607
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf24421f2 // vand q9, q10, q9
+ .long 0xf2c3275f // vorr.i32 q9, #1056964608
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf202ade6 // vadd.f32 q5, q9, q11
+ .long 0xf2c36654 // vmov.i32 q11, #872415232
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30fc // add r3, pc, #252
+ .long 0xeecc9a2b // vdiv.f32 s19, s24, s23
+ .long 0xee8c9a0b // vdiv.f32 s18, s24, s22
+ .long 0xeecc8a2a // vdiv.f32 s17, s24, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf2444de8 // vadd.f32 q10, q10, q12
+ .long 0xe28f30ec // add r3, pc, #236
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30f4 // add r3, pc, #244
+ .long 0xed9faa49 // vldr s20, [pc, #292]
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf2622dc8 // vsub.f32 q9, q9, q4
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf3fb0762 // vcvt.s32.f32 q8, q9
+ .long 0xf3fb4660 // vcvt.f32.s32 q10, q8
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xf3646ee2 // vcgt.f32 q11, q10, q9
+ .long 0xf35861f0 // vbsl q11, q12, q8
+ .long 0xf2644de6 // vsub.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf2624de4 // vsub.f32 q10, q9, q10
+ .long 0xf226cde4 // vsub.f32 q6, q11, q10
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf2422de6 // vadd.f32 q9, q9, q11
+ .long 0xe282300c // add r3, r2, #12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xeeca9a2d // vdiv.f32 s19, s20, s27
+ .long 0xee8a9a0d // vdiv.f32 s18, s20, s26
+ .long 0xeeca8a2c // vdiv.f32 s17, s20, s25
+ .long 0xee8a8a0c // vdiv.f32 s16, s20, s24
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2c4465b // vmov.i32 q10, #1258291200
+ .long 0xf2422dc8 // vadd.f32 q9, q9, q4
+ .long 0xf2426cf4 // vfma.f32 q11, q9, q10
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823018 // add r3, r2, #24
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xf2424cd0 // vfma.f32 q10, q9, q0
+ .long 0xe2822014 // add r2, r2, #20
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3fb27e6 // vcvt.u32.f32 q9, q11
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf3466ec0 // vcge.f32 q11, q11, q0
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf35461f2 // vbsl q11, q10, q9
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2460fe0 // vmax.f32 q8, q11, q8
+ .long 0xf2200fe2 // vmin.f32 q0, q8, q9
+ .long 0xecbd8b0c // vpop {d8-d13}
.long 0xe12fff1c // bx ip
.long 0x3eb444f9 // .word 0x3eb444f9
.long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
+ .long 0xc2f87377 // .word 0xc2f87377
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x409af5f8 // .word 0x409af5f8
.long 0x409af5f8 // .word 0x409af5f8
- .long 0x3fbebc8d // .word 0x3fbebc8d
- .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x42f28c51 // .word 0x42f28c51
+ .long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
.long 0x3fdce9a3 // .word 0x3fdce9a3
.long 0x41ddd2fe // .word 0x41ddd2fe
@@ -8208,90 +9102,112 @@ HIDDEN _sk_parametric_g_vfp4
.globl _sk_parametric_g_vfp4
FUNCTION(_sk_parametric_g_vfp4)
_sk_parametric_g_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xeddf3b41 // vldr d19, [pc, #260]
- .long 0xed9f8a4e // vldr s16, [pc, #312]
- .long 0xe1a0400e // mov r4, lr
- .long 0xeddf4b42 // vldr d20, [pc, #264]
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe8911004 // ldm r1, {r2, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf2412c91 // vfma.f32 d18, d17, d1
- .long 0xf2c71d1f // vmov.i32 d17, #8388607
- .long 0xf24211b1 // vand d17, d18, d17
- .long 0xf2c3171f // vorr.i32 d17, #1056964608
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf2019da3 // vadd.f32 d9, d17, d19
- .long 0xf2c33614 // vmov.i32 d19, #872415232
- .long 0xf3422db3 // vmul.f32 d18, d18, d19
- .long 0xeddf3b30 // vldr d19, [pc, #192]
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xed9f8a39 // vldr s16, [pc, #228]
- .long 0xf2422da4 // vadd.f32 d18, d18, d20
- .long 0xeddf4b2e // vldr d20, [pc, #184]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf2611d8a // vsub.f32 d17, d17, d10
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf3fb1720 // vcvt.s32.f32 d17, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3612ea0 // vcgt.f32 d18, d17, d16
- .long 0xf35421b3 // vbsl d18, d20, d19
- .long 0xeddf4b2b // vldr d20, [pc, #172]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xeddf2b25 // vldr d18, [pc, #148]
- .long 0xf2601da1 // vsub.f32 d17, d16, d17
- .long 0xf2400da4 // vadd.f32 d16, d16, d20
- .long 0xf2229da1 // vsub.f32 d9, d18, d17
- .long 0xeddf2b23 // vldr d18, [pc, #140]
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf2c4161b // vmov.i32 d17, #1258291200
- .long 0xf2400d8a // vadd.f32 d16, d16, d10
- .long 0xf2402cb1 // vfma.f32 d18, d16, d17
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf2401c91 // vfma.f32 d17, d16, d1
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf3400e81 // vcge.f32 d16, d16, d1
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf2442da2 // vadd.f32 d18, d20, d18
- .long 0xf35101b2 // vbsl d16, d17, d18
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xf2400fa3 // vmax.f32 d16, d16, d19
- .long 0xf2201fa1 // vmin.f32 d1, d16, d17
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed9fca65 // vldr s24, [pc, #404]
+ .long 0xe1a03002 // mov r3, r2
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf2424cd2 // vfma.f32 q10, q9, q1
+ .long 0xf2c72d5f // vmov.i32 q9, #8388607
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf24421f2 // vand q9, q10, q9
+ .long 0xf2c3275f // vorr.i32 q9, #1056964608
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf202ade6 // vadd.f32 q5, q9, q11
+ .long 0xf2c36654 // vmov.i32 q11, #872415232
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30fc // add r3, pc, #252
+ .long 0xeecc9a2b // vdiv.f32 s19, s24, s23
+ .long 0xee8c9a0b // vdiv.f32 s18, s24, s22
+ .long 0xeecc8a2a // vdiv.f32 s17, s24, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf2444de8 // vadd.f32 q10, q10, q12
+ .long 0xe28f30ec // add r3, pc, #236
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30f4 // add r3, pc, #244
+ .long 0xed9faa49 // vldr s20, [pc, #292]
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf2622dc8 // vsub.f32 q9, q9, q4
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf3fb0762 // vcvt.s32.f32 q8, q9
+ .long 0xf3fb4660 // vcvt.f32.s32 q10, q8
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xf3646ee2 // vcgt.f32 q11, q10, q9
+ .long 0xf35861f0 // vbsl q11, q12, q8
+ .long 0xf2644de6 // vsub.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf2624de4 // vsub.f32 q10, q9, q10
+ .long 0xf226cde4 // vsub.f32 q6, q11, q10
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf2422de6 // vadd.f32 q9, q9, q11
+ .long 0xe282300c // add r3, r2, #12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xeeca9a2d // vdiv.f32 s19, s20, s27
+ .long 0xee8a9a0d // vdiv.f32 s18, s20, s26
+ .long 0xeeca8a2c // vdiv.f32 s17, s20, s25
+ .long 0xee8a8a0c // vdiv.f32 s16, s20, s24
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2c4465b // vmov.i32 q10, #1258291200
+ .long 0xf2422dc8 // vadd.f32 q9, q9, q4
+ .long 0xf2426cf4 // vfma.f32 q11, q9, q10
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823018 // add r3, r2, #24
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xf2424cd2 // vfma.f32 q10, q9, q1
+ .long 0xe2822014 // add r2, r2, #20
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3fb27e6 // vcvt.u32.f32 q9, q11
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf3466ec2 // vcge.f32 q11, q11, q1
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf35461f2 // vbsl q11, q10, q9
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2460fe0 // vmax.f32 q8, q11, q8
+ .long 0xf2202fe2 // vmin.f32 q1, q8, q9
+ .long 0xecbd8b0c // vpop {d8-d13}
.long 0xe12fff1c // bx ip
.long 0x3eb444f9 // .word 0x3eb444f9
.long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
+ .long 0xc2f87377 // .word 0xc2f87377
+ .long 0xc2f87377 // .word 0xc2f87377
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x409af5f8 // .word 0x409af5f8
.long 0x409af5f8 // .word 0x409af5f8
- .long 0x3fbebc8d // .word 0x3fbebc8d
- .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
+ .long 0x42f28c51 // .word 0x42f28c51
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
.long 0x3fdce9a3 // .word 0x3fdce9a3
.long 0x41ddd2fe // .word 0x41ddd2fe
@@ -8299,90 +9215,112 @@ HIDDEN _sk_parametric_b_vfp4
.globl _sk_parametric_b_vfp4
FUNCTION(_sk_parametric_b_vfp4)
_sk_parametric_b_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xeddf3b41 // vldr d19, [pc, #260]
- .long 0xed9f8a4e // vldr s16, [pc, #312]
- .long 0xe1a0400e // mov r4, lr
- .long 0xeddf4b42 // vldr d20, [pc, #264]
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe8911004 // ldm r1, {r2, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf2412c92 // vfma.f32 d18, d17, d2
- .long 0xf2c71d1f // vmov.i32 d17, #8388607
- .long 0xf24211b1 // vand d17, d18, d17
- .long 0xf2c3171f // vorr.i32 d17, #1056964608
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf2019da3 // vadd.f32 d9, d17, d19
- .long 0xf2c33614 // vmov.i32 d19, #872415232
- .long 0xf3422db3 // vmul.f32 d18, d18, d19
- .long 0xeddf3b30 // vldr d19, [pc, #192]
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xed9f8a39 // vldr s16, [pc, #228]
- .long 0xf2422da4 // vadd.f32 d18, d18, d20
- .long 0xeddf4b2e // vldr d20, [pc, #184]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf2611d8a // vsub.f32 d17, d17, d10
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf3fb1720 // vcvt.s32.f32 d17, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3612ea0 // vcgt.f32 d18, d17, d16
- .long 0xf35421b3 // vbsl d18, d20, d19
- .long 0xeddf4b2b // vldr d20, [pc, #172]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xeddf2b25 // vldr d18, [pc, #148]
- .long 0xf2601da1 // vsub.f32 d17, d16, d17
- .long 0xf2400da4 // vadd.f32 d16, d16, d20
- .long 0xf2229da1 // vsub.f32 d9, d18, d17
- .long 0xeddf2b23 // vldr d18, [pc, #140]
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf2c4161b // vmov.i32 d17, #1258291200
- .long 0xf2400d8a // vadd.f32 d16, d16, d10
- .long 0xf2402cb1 // vfma.f32 d18, d16, d17
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf2401c92 // vfma.f32 d17, d16, d2
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf3400e82 // vcge.f32 d16, d16, d2
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf2442da2 // vadd.f32 d18, d20, d18
- .long 0xf35101b2 // vbsl d16, d17, d18
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xf2400fa3 // vmax.f32 d16, d16, d19
- .long 0xf2202fa1 // vmin.f32 d2, d16, d17
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed9fca65 // vldr s24, [pc, #404]
+ .long 0xe1a03002 // mov r3, r2
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf2424cd4 // vfma.f32 q10, q9, q2
+ .long 0xf2c72d5f // vmov.i32 q9, #8388607
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf24421f2 // vand q9, q10, q9
+ .long 0xf2c3275f // vorr.i32 q9, #1056964608
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf202ade6 // vadd.f32 q5, q9, q11
+ .long 0xf2c36654 // vmov.i32 q11, #872415232
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30fc // add r3, pc, #252
+ .long 0xeecc9a2b // vdiv.f32 s19, s24, s23
+ .long 0xee8c9a0b // vdiv.f32 s18, s24, s22
+ .long 0xeecc8a2a // vdiv.f32 s17, s24, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf2444de8 // vadd.f32 q10, q10, q12
+ .long 0xe28f30ec // add r3, pc, #236
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30f4 // add r3, pc, #244
+ .long 0xed9faa49 // vldr s20, [pc, #292]
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf2622dc8 // vsub.f32 q9, q9, q4
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf3fb0762 // vcvt.s32.f32 q8, q9
+ .long 0xf3fb4660 // vcvt.f32.s32 q10, q8
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xf3646ee2 // vcgt.f32 q11, q10, q9
+ .long 0xf35861f0 // vbsl q11, q12, q8
+ .long 0xf2644de6 // vsub.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf2624de4 // vsub.f32 q10, q9, q10
+ .long 0xf226cde4 // vsub.f32 q6, q11, q10
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf2422de6 // vadd.f32 q9, q9, q11
+ .long 0xe282300c // add r3, r2, #12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xeeca9a2d // vdiv.f32 s19, s20, s27
+ .long 0xee8a9a0d // vdiv.f32 s18, s20, s26
+ .long 0xeeca8a2c // vdiv.f32 s17, s20, s25
+ .long 0xee8a8a0c // vdiv.f32 s16, s20, s24
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2c4465b // vmov.i32 q10, #1258291200
+ .long 0xf2422dc8 // vadd.f32 q9, q9, q4
+ .long 0xf2426cf4 // vfma.f32 q11, q9, q10
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823018 // add r3, r2, #24
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xf2424cd4 // vfma.f32 q10, q9, q2
+ .long 0xe2822014 // add r2, r2, #20
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3fb27e6 // vcvt.u32.f32 q9, q11
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf3466ec4 // vcge.f32 q11, q11, q2
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf35461f2 // vbsl q11, q10, q9
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2460fe0 // vmax.f32 q8, q11, q8
+ .long 0xf2204fe2 // vmin.f32 q2, q8, q9
+ .long 0xecbd8b0c // vpop {d8-d13}
.long 0xe12fff1c // bx ip
.long 0x3eb444f9 // .word 0x3eb444f9
.long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0xc2f87377 // .word 0xc2f87377
+ .long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x409af5f8 // .word 0x409af5f8
.long 0x409af5f8 // .word 0x409af5f8
.long 0x409af5f8 // .word 0x409af5f8
- .long 0x3fbebc8d // .word 0x3fbebc8d
- .long 0x3fbebc8d // .word 0x3fbebc8d
.long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
+ .long 0x42f28c51 // .word 0x42f28c51
+ .long 0x42f28c51 // .word 0x42f28c51
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
.long 0x3fdce9a3 // .word 0x3fdce9a3
.long 0x41ddd2fe // .word 0x41ddd2fe
@@ -8390,90 +9328,112 @@ HIDDEN _sk_parametric_a_vfp4
.globl _sk_parametric_a_vfp4
FUNCTION(_sk_parametric_a_vfp4)
_sk_parametric_a_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xeddf3b41 // vldr d19, [pc, #260]
- .long 0xed9f8a4e // vldr s16, [pc, #312]
- .long 0xe1a0400e // mov r4, lr
- .long 0xeddf4b42 // vldr d20, [pc, #264]
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xe8911004 // ldm r1, {r2, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf2412c93 // vfma.f32 d18, d17, d3
- .long 0xf2c71d1f // vmov.i32 d17, #8388607
- .long 0xf24211b1 // vand d17, d18, d17
- .long 0xf2c3171f // vorr.i32 d17, #1056964608
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf2019da3 // vadd.f32 d9, d17, d19
- .long 0xf2c33614 // vmov.i32 d19, #872415232
- .long 0xf3422db3 // vmul.f32 d18, d18, d19
- .long 0xeddf3b30 // vldr d19, [pc, #192]
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xed9f8a39 // vldr s16, [pc, #228]
- .long 0xf2422da4 // vadd.f32 d18, d18, d20
- .long 0xeddf4b2e // vldr d20, [pc, #184]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf2611d8a // vsub.f32 d17, d17, d10
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf3fb1720 // vcvt.s32.f32 d17, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3612ea0 // vcgt.f32 d18, d17, d16
- .long 0xf35421b3 // vbsl d18, d20, d19
- .long 0xeddf4b2b // vldr d20, [pc, #172]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xeddf2b25 // vldr d18, [pc, #148]
- .long 0xf2601da1 // vsub.f32 d17, d16, d17
- .long 0xf2400da4 // vadd.f32 d16, d16, d20
- .long 0xf2229da1 // vsub.f32 d9, d18, d17
- .long 0xeddf2b23 // vldr d18, [pc, #140]
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xeec8aa29 // vdiv.f32 s21, s16, s19
- .long 0xee88aa09 // vdiv.f32 s20, s16, s18
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf2c4161b // vmov.i32 d17, #1258291200
- .long 0xf2400d8a // vadd.f32 d16, d16, d10
- .long 0xf2402cb1 // vfma.f32 d18, d16, d17
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf2401c93 // vfma.f32 d17, d16, d3
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf3400e83 // vcge.f32 d16, d16, d3
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xf2442da2 // vadd.f32 d18, d20, d18
- .long 0xf35101b2 // vbsl d16, d17, d18
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xf2400fa3 // vmax.f32 d16, d16, d19
- .long 0xf2203fa1 // vmin.f32 d3, d16, d17
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed9fca65 // vldr s24, [pc, #404]
+ .long 0xe1a03002 // mov r3, r2
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf2424cd6 // vfma.f32 q10, q9, q3
+ .long 0xf2c72d5f // vmov.i32 q9, #8388607
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f3f43 // add r3, pc, #268
+ .long 0xf24421f2 // vand q9, q10, q9
+ .long 0xf2c3275f // vorr.i32 q9, #1056964608
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf202ade6 // vadd.f32 q5, q9, q11
+ .long 0xf2c36654 // vmov.i32 q11, #872415232
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30fc // add r3, pc, #252
+ .long 0xeecc9a2b // vdiv.f32 s19, s24, s23
+ .long 0xee8c9a0b // vdiv.f32 s18, s24, s22
+ .long 0xeecc8a2a // vdiv.f32 s17, s24, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf2444de8 // vadd.f32 q10, q10, q12
+ .long 0xe28f30ec // add r3, pc, #236
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xe28f30f4 // add r3, pc, #244
+ .long 0xed9faa49 // vldr s20, [pc, #292]
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf2622dc8 // vsub.f32 q9, q9, q4
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf3fb0762 // vcvt.s32.f32 q8, q9
+ .long 0xf3fb4660 // vcvt.f32.s32 q10, q8
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xf3646ee2 // vcgt.f32 q11, q10, q9
+ .long 0xf35861f0 // vbsl q11, q12, q8
+ .long 0xf2644de6 // vsub.f32 q10, q10, q11
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf2624de4 // vsub.f32 q10, q9, q10
+ .long 0xf226cde4 // vsub.f32 q6, q11, q10
+ .long 0xf4636acf // vld1.64 {d22-d23}, [r3]
+ .long 0xe28f30d4 // add r3, pc, #212
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf2422de6 // vadd.f32 q9, q9, q11
+ .long 0xe282300c // add r3, r2, #12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xeeca9a2d // vdiv.f32 s19, s20, s27
+ .long 0xee8a9a0d // vdiv.f32 s18, s20, s26
+ .long 0xeeca8a2c // vdiv.f32 s17, s20, s25
+ .long 0xee8a8a0c // vdiv.f32 s16, s20, s24
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2c4465b // vmov.i32 q10, #1258291200
+ .long 0xf2422dc8 // vadd.f32 q9, q9, q4
+ .long 0xf2426cf4 // vfma.f32 q11, q9, q10
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe2823018 // add r3, r2, #24
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xf2424cd6 // vfma.f32 q10, q9, q3
+ .long 0xe2822014 // add r2, r2, #20
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3fb27e6 // vcvt.u32.f32 q9, q11
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf3466ec6 // vcge.f32 q11, q11, q3
+ .long 0xf2482de2 // vadd.f32 q9, q12, q9
+ .long 0xf35461f2 // vbsl q11, q10, q9
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2460fe0 // vmax.f32 q8, q11, q8
+ .long 0xf2206fe2 // vmin.f32 q3, q8, q9
+ .long 0xecbd8b0c // vpop {d8-d13}
.long 0xe12fff1c // bx ip
.long 0x3eb444f9 // .word 0x3eb444f9
.long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
+ .long 0x3eb444f9 // .word 0x3eb444f9
.long 0x3fbfbf75 // .word 0x3fbfbf75
.long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0x3fbfbf75 // .word 0x3fbfbf75
+ .long 0xc2f87377 // .word 0xc2f87377
+ .long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
.long 0xc2f87377 // .word 0xc2f87377
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x409af5f8 // .word 0x409af5f8
.long 0x409af5f8 // .word 0x409af5f8
- .long 0x3fbebc8d // .word 0x3fbebc8d
- .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x409af5f8 // .word 0x409af5f8
+ .long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
.long 0x42f28c51 // .word 0x42f28c51
+ .long 0x42f28c51 // .word 0x42f28c51
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
+ .long 0x3fbebc8d // .word 0x3fbebc8d
.long 0x3fdce9a3 // .word 0x3fdce9a3
.long 0x41ddd2fe // .word 0x41ddd2fe
@@ -8481,220 +9441,332 @@ HIDDEN _sk_lab_to_xyz_vfp4
.globl _sk_lab_to_xyz_vfp4
FUNCTION(_sk_lab_to_xyz_vfp4)
_sk_lab_to_xyz_vfp4:
- .long 0xeddf1b2e // vldr d17, [pc, #184]
- .long 0xf3c43613 // vmov.i32 d19, #-1023410176
- .long 0xeddf0b2a // vldr d16, [pc, #168]
- .long 0xf2c34f10 // vmov.f32 d20, #16
- .long 0xf3401d31 // vmul.f32 d17, d0, d17
- .long 0xeddf5b2f // vldr d21, [pc, #188]
- .long 0xf3412d30 // vmul.f32 d18, d1, d16
- .long 0xeddf6b2f // vldr d22, [pc, #188]
- .long 0xf3420d30 // vmul.f32 d16, d2, d16
- .long 0xeddf7b2f // vldr d23, [pc, #188]
- .long 0xeddf8b30 // vldr d24, [pc, #192]
- .long 0xf2411da4 // vadd.f32 d17, d17, d20
- .long 0xeddf4b24 // vldr d20, [pc, #144]
- .long 0xf2422da3 // vadd.f32 d18, d18, d19
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2400da3 // vadd.f32 d16, d16, d19
- .long 0xeddf3b22 // vldr d19, [pc, #136]
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf3422db4 // vmul.f32 d18, d18, d20
- .long 0xf3400db5 // vmul.f32 d16, d16, d21
- .long 0xf2412da2 // vadd.f32 d18, d17, d18
- .long 0xf2610da0 // vsub.f32 d16, d17, d16
- .long 0xf3415db1 // vmul.f32 d21, d17, d17
- .long 0xf3423db2 // vmul.f32 d19, d18, d18
- .long 0xf3404db0 // vmul.f32 d20, d16, d16
- .long 0xf3415db5 // vmul.f32 d21, d17, d21
- .long 0xf2411da6 // vadd.f32 d17, d17, d22
- .long 0xf3423db3 // vmul.f32 d19, d18, d19
- .long 0xf3404db4 // vmul.f32 d20, d16, d20
- .long 0xf2400da6 // vadd.f32 d16, d16, d22
- .long 0xf2422da6 // vadd.f32 d18, d18, d22
- .long 0xeddf6b1d // vldr d22, [pc, #116]
- .long 0xf3639ea7 // vcgt.f32 d25, d19, d23
- .long 0xf364aea7 // vcgt.f32 d26, d20, d23
- .long 0xf3400db8 // vmul.f32 d16, d16, d24
- .long 0xf3422db8 // vmul.f32 d18, d18, d24
- .long 0xf35391b2 // vbsl d25, d19, d18
- .long 0xeddf2b19 // vldr d18, [pc, #100]
- .long 0xf354a1b0 // vbsl d26, d20, d16
- .long 0xf3251ea7 // vcgt.f32 d1, d21, d23
- .long 0xf3090db6 // vmul.f32 d0, d25, d22
- .long 0xf30a2db2 // vmul.f32 d2, d26, d18
- .long 0xf3410db8 // vmul.f32 d16, d17, d24
- .long 0xf31511b0 // vbsl d1, d21, d16
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe28f20dc // add r2, pc, #220
+ .long 0xf3c46653 // vmov.i32 q11, #-1023410176
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f20e0 // add r2, pc, #224
+ .long 0xf2c38f50 // vmov.f32 q12, #16
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3424d70 // vmul.f32 q10, q1, q8
+ .long 0xf3440d70 // vmul.f32 q8, q2, q8
+ .long 0xe28f20dc // add r2, pc, #220
+ .long 0xf3402d72 // vmul.f32 q9, q0, q9
+ .long 0xf2444de6 // vadd.f32 q10, q10, q11
+ .long 0xf2422de8 // vadd.f32 q9, q9, q12
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f20d8 // add r2, pc, #216
+ .long 0xf2400de6 // vadd.f32 q8, q8, q11
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f20dc // add r2, pc, #220
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf3444dfa // vmul.f32 q10, q10, q13
+ .long 0xf3422df8 // vmul.f32 q9, q9, q12
+ .long 0xe28f20dc // add r2, pc, #220
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f20e4 // add r2, pc, #228
+ .long 0xf3400df6 // vmul.f32 q8, q8, q11
+ .long 0xf4228acf // vld1.64 {d8-d9}, [r2]
+ .long 0xe28f20e8 // add r2, pc, #232
+ .long 0xf2424de4 // vadd.f32 q10, q9, q10
+ .long 0xf2620de0 // vsub.f32 q8, q9, q8
+ .long 0xf3428df2 // vmul.f32 q12, q9, q9
+ .long 0xf244edea // vadd.f32 q15, q10, q13
+ .long 0xf3446df4 // vmul.f32 q11, q10, q10
+ .long 0xf340cdf0 // vmul.f32 q14, q8, q8
+ .long 0xf3428df8 // vmul.f32 q12, q9, q12
+ .long 0xf2422dea // vadd.f32 q9, q9, q13
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf2406dea // vadd.f32 q11, q8, q13
+ .long 0xf3400dfc // vmul.f32 q8, q8, q14
+ .long 0xf462cacf // vld1.64 {d28-d29}, [r2]
+ .long 0xf34eedd8 // vmul.f32 q15, q15, q4
+ .long 0xe28f20c0 // add r2, pc, #192
+ .long 0xf3240eec // vcgt.f32 q0, q10, q14
+ .long 0xf3282eec // vcgt.f32 q1, q12, q14
+ .long 0xf360aeec // vcgt.f32 q13, q8, q14
+ .long 0xf3466dd8 // vmul.f32 q11, q11, q4
+ .long 0xf31401fe // vbsl q0, q10, q15
+ .long 0xf4624acf // vld1.64 {d20-d21}, [r2]
+ .long 0xe28f20b4 // add r2, pc, #180
+ .long 0xf350a1f6 // vbsl q13, q8, q11
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xf3000d74 // vmul.f32 q0, q0, q10
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf30a4df0 // vmul.f32 q2, q13, q8
+ .long 0xf3420dd8 // vmul.f32 q8, q9, q4
+ .long 0xf31821f0 // vbsl q1, q12, q8
+ .long 0xecbd8b04 // vpop {d8-d9}
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
.long 0x42c80000 // .word 0x42c80000
.long 0x42c80000 // .word 0x42c80000
- .long 0x3b03126f // .word 0x3b03126f
- .long 0x3b03126f // .word 0x3b03126f
+ .long 0x42c80000 // .word 0x42c80000
+ .long 0x42c80000 // .word 0x42c80000
+ .long 0x3c0d3dcb // .word 0x3c0d3dcb
+ .long 0x3c0d3dcb // .word 0x3c0d3dcb
.long 0x3c0d3dcb // .word 0x3c0d3dcb
.long 0x3c0d3dcb // .word 0x3c0d3dcb
+ .long 0x3b03126f // .word 0x3b03126f
+ .long 0x3b03126f // .word 0x3b03126f
+ .long 0x3b03126f // .word 0x3b03126f
+ .long 0x3b03126f // .word 0x3b03126f
+ .long 0x3ba3d70a // .word 0x3ba3d70a
+ .long 0x3ba3d70a // .word 0x3ba3d70a
.long 0x3ba3d70a // .word 0x3ba3d70a
.long 0x3ba3d70a // .word 0x3ba3d70a
.long 0xbe0d3dcb // .word 0xbe0d3dcb
.long 0xbe0d3dcb // .word 0xbe0d3dcb
- .long 0x3c1118c2 // .word 0x3c1118c2
- .long 0x3c1118c2 // .word 0x3c1118c2
+ .long 0xbe0d3dcb // .word 0xbe0d3dcb
+ .long 0xbe0d3dcb // .word 0xbe0d3dcb
+ .long 0x3e038050 // .word 0x3e038050
.long 0x3e038050 // .word 0x3e038050
.long 0x3e038050 // .word 0x3e038050
+ .long 0x3e038050 // .word 0x3e038050
+ .long 0x3c1118c2 // .word 0x3c1118c2
+ .long 0x3c1118c2 // .word 0x3c1118c2
+ .long 0x3c1118c2 // .word 0x3c1118c2
+ .long 0x3c1118c2 // .word 0x3c1118c2
+ .long 0x3f76d71f // .word 0x3f76d71f
+ .long 0x3f76d71f // .word 0x3f76d71f
.long 0x3f76d71f // .word 0x3f76d71f
.long 0x3f76d71f // .word 0x3f76d71f
.long 0x3f5340f6 // .word 0x3f5340f6
.long 0x3f5340f6 // .word 0x3f5340f6
+ .long 0x3f5340f6 // .word 0x3f5340f6
+ .long 0x3f5340f6 // .word 0x3f5340f6
HIDDEN _sk_load_a8_vfp4
.globl _sk_load_a8_vfp4
FUNCTION(_sk_load_a8_vfp4)
_sk_load_a8_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de00c // ldr lr, [sp, #12]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000012 // beq 29c4 <sk_load_a8_vfp4+0x74>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b0 // strh ip, [sp]
- .long 0xe1a0c00d // mov ip, sp
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe24dd008 // sub sp, sp, #8
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0224392 // mla r2, r2, r3, r4
+ .long 0xe082200e // add r2, r2, lr
+ .long 0x1a000012 // bne 3948 <sk_load_a8_vfp4+0x78>
+ .long 0xe5922000 // ldr r2, [r2]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3900a30 // vmovl.u16 q0, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b0f // vldr d17, [pc, #60]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf2800050 // vmov.i32 q0, #0
+ .long 0xf2802050 // vmov.i32 q1, #0
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2400130 // vand d16, d0, d16
- .long 0xf2800010 // vmov.i32 d0, #0
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf2801010 // vmov.i32 d1, #0
- .long 0xf2802010 // vmov.i32 d2, #0
- .long 0xf3003db1 // vmul.f32 d3, d16, d17
- .long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf0a04 // vldr s1, [pc, #16]
- .long 0xee00ca10 // vmov s0, ip
- .long 0xeaffffee // b 2990 <sk_load_a8_vfp4+0x40>
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3006df2 // vmul.f32 q3, q8, q9
+ .long 0xe28dd008 // add sp, sp, #8
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000012 // beq 39a0 <sk_load_a8_vfp4+0xd0>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 3978 <sk_load_a8_vfp4+0xa8>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe9 // bne 3910 <sk_load_a8_vfp4+0x40>
+ .long 0xe3a04000 // mov r4, #0
+ .long 0xe5d23002 // ldrb r3, [r2, #2]
+ .long 0xee804bb0 // vdup.16 d16, r4
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xe1d220b0 // ldrh r2, [r2]
+ .long 0xe1cd20b4 // strh r2, [sp, #4]
+ .long 0xe28d2004 // add r2, sp, #4
+ .long 0xf4e2241f // vld1.16 {d18[0]}, [r2 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffdb // b 3910 <sk_load_a8_vfp4+0x40>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xe5d22000 // ldrb r2, [r2]
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xee002bb0 // vmov.16 d16[0], r2
+ .long 0xeaffffd6 // b 3910 <sk_load_a8_vfp4+0x40>
.long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_load_a8_dst_vfp4
.globl _sk_load_a8_dst_vfp4
FUNCTION(_sk_load_a8_dst_vfp4)
_sk_load_a8_dst_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de00c // ldr lr, [sp, #12]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000012 // beq 2a5c <sk_load_a8_dst_vfp4+0x74>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b0 // strh ip, [sp]
- .long 0xe1a0c00d // mov ip, sp
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe24dd008 // sub sp, sp, #8
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe590c000 // ldr ip, [r0]
+ .long 0xe2805030 // add r5, r0, #48
+ .long 0xe9904004 // ldmib r0, {r2, lr}
+ .long 0xe5934000 // ldr r4, [r3]
+ .long 0xe35e0000 // cmp lr, #0
+ .long 0xe5933004 // ldr r3, [r3, #4]
+ .long 0xf4450aef // vst1.64 {d16-d17}, [r5 :128]
+ .long 0xe0224293 // mla r2, r3, r2, r4
+ .long 0xe2803020 // add r3, r0, #32
+ .long 0xf4430aef // vst1.64 {d16-d17}, [r3 :128]
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0xf4430aef // vst1.64 {d16-d17}, [r3 :128]
+ .long 0xe082300c // add r3, r2, ip
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0x1a000011 // bne 3a5c <sk_load_a8_dst_vfp4+0x94>
+ .long 0xe5932000 // ldr r2, [r3]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3904a30 // vmovl.u16 q2, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b0f // vldr d17, [pc, #60]
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf2440130 // vand d16, d4, d16
- .long 0xf2804010 // vmov.i32 d4, #0
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf2805010 // vmov.i32 d5, #0
- .long 0xf2806010 // vmov.i32 d6, #0
- .long 0xf3007db1 // vmul.f32 d7, d16, d17
- .long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf4a04 // vldr s9, [pc, #16]
- .long 0xee04ca10 // vmov s8, ip
- .long 0xeaffffee // b 2a28 <sk_load_a8_dst_vfp4+0x40>
- .long 0xe320f000 // nop {0}
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe28f2094 // add r2, pc, #148
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3400df2 // vmul.f32 q8, q8, q9
+ .long 0xf44c0aef // vst1.64 {d16-d17}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe28dd008 // add sp, sp, #8
+ .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe20e2003 // and r2, lr, #3
+ .long 0xe3520001 // cmp r2, #1
+ .long 0x0a000012 // beq 3ab4 <sk_load_a8_dst_vfp4+0xec>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3520002 // cmp r2, #2
+ .long 0x0a000005 // beq 3a8c <sk_load_a8_dst_vfp4+0xc4>
+ .long 0xe3520003 // cmp r2, #3
+ .long 0x1affffea // bne 3a28 <sk_load_a8_dst_vfp4+0x60>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xe5d32002 // ldrb r2, [r3, #2]
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xee202bb0 // vmov.16 d16[2], r2
+ .long 0xe1d320b0 // ldrh r2, [r3]
+ .long 0xe1cd20b4 // strh r2, [sp, #4]
+ .long 0xe28d2004 // add r2, sp, #4
+ .long 0xf4e2241f // vld1.16 {d18[0]}, [r2 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffdc // b 3a28 <sk_load_a8_dst_vfp4+0x60>
+ .long 0xe5d32000 // ldrb r2, [r3]
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xee002bb0 // vmov.16 d16[0], r2
+ .long 0xeaffffd7 // b 3a28 <sk_load_a8_dst_vfp4+0x60>
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_gather_a8_vfp4
.globl _sk_gather_a8_vfp4
FUNCTION(_sk_gather_a8_vfp4)
_sk_gather_a8_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2800010 // vmov.i32 d0, #0
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xf2801010 // vmov.i32 d1, #0
- .long 0xf2802010 // vmov.i32 d2, #0
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee315b90 // vmov.32 r5, d17[1]
- .long 0xf3c7101f // vmov.i32 d17, #255
- .long 0xe7d4e00e // ldrb lr, [r4, lr]
- .long 0xe7d44005 // ldrb r4, [r4, r5]
- .long 0xee00eb90 // vmov.32 d16[0], lr
- .long 0xee204b90 // vmov.32 d16[1], r4
- .long 0xf24001b1 // vand d16, d16, d17
- .long 0xeddf1b04 // vldr d17, [pc, #16]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3003db1 // vmul.f32 d3, d16, d17
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf2800050 // vmov.i32 q0, #0
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf2802050 // vmov.i32 q1, #0
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xee123b90 // vmov.32 r3, d18[0]
+ .long 0xee32eb90 // vmov.32 lr, d18[1]
+ .long 0xee134b90 // vmov.32 r4, d19[0]
+ .long 0xee336b90 // vmov.32 r6, d19[1]
+ .long 0xe7d23003 // ldrb r3, [r2, r3]
+ .long 0xe7d2500e // ldrb r5, [r2, lr]
+ .long 0xee003bb0 // vmov.16 d16[0], r3
+ .long 0xe7d23004 // ldrb r3, [r2, r4]
+ .long 0xe7d22006 // ldrb r2, [r2, r6]
+ .long 0xee005bf0 // vmov.16 d16[1], r5
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xee202bf0 // vmov.16 d16[3], r2
+ .long 0xe28f201c // add r2, pc, #28
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3006df2 // vmul.f32 q3, q8, q9
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
.long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_store_a8_vfp4
.globl _sk_store_a8_vfp4
FUNCTION(_sk_store_a8_vfp4)
_sk_store_a8_vfp4:
.long 0xe92d4010 // push {r4, lr}
- .long 0xeddf0b15 // vldr d16, [pc, #84]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de008 // ldr lr, [sp, #8]
- .long 0xf3fb07a1 // vcvt.u32.f32 d16, d17
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000007 // beq 2b44 <sk_store_a8_vfp4+0x54>
- .long 0xee30eb90 // vmov.32 lr, d16[1]
- .long 0xee104b90 // vmov.32 r4, d16[0]
- .long 0xe5cce001 // strb lr, [ip, #1]
- .long 0xe5cc4000 // strb r4, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe28f2094 // add r2, pc, #148
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf2460c72 // vfma.f32 q8, q3, q9
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xf3fb07e0 // vcvt.u32.f32 q8, q8
+ .long 0xe0224392 // mla r2, r2, r3, r4
+ .long 0xe082200e // add r2, r2, lr
+ .long 0xf3f60220 // vmovn.i32 d16, q8
+ .long 0x1a000005 // bne 3bc0 <sk_store_a8_vfp4+0x58>
+ .long 0xf3f20121 // vuzp.8 d16, d17
+ .long 0xf4c2080f // vst1.32 {d16[0]}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
.long 0xe8bd4010 // pop {r4, lr}
- .long 0xe12fff1c // bx ip
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe5cce000 // strb lr, [ip]
- .long 0xeafffff8 // b 2b34 <sk_store_a8_vfp4+0x44>
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000a // beq 3bf8 <sk_store_a8_vfp4+0x90>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 3be4 <sk_store_a8_vfp4+0x7c>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1afffff4 // bne 3bb0 <sk_store_a8_vfp4+0x48>
+ .long 0xeeb03bb0 // vmov.u16 r3, d16[2]
+ .long 0xe5c23002 // strb r3, [r2, #2]
+ .long 0xee903bf0 // vmov.u16 r3, d16[1]
+ .long 0xee904bb0 // vmov.u16 r4, d16[0]
+ .long 0xe5c23001 // strb r3, [r2, #1]
+ .long 0xe5c24000 // strb r4, [r2]
+ .long 0xeaffffed // b 3bb0 <sk_store_a8_vfp4+0x48>
+ .long 0xee903bb0 // vmov.u16 r3, d16[0]
+ .long 0xe5c23000 // strb r3, [r2]
+ .long 0xeaffffea // b 3bb0 <sk_store_a8_vfp4+0x48>
+ .long 0xe320f000 // nop {0}
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
@@ -8702,316 +9774,492 @@ HIDDEN _sk_load_g8_vfp4
.globl _sk_load_g8_vfp4
FUNCTION(_sk_load_g8_vfp4)
_sk_load_g8_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de00c // ldr lr, [sp, #12]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000012 // beq 2bcc <sk_load_g8_vfp4+0x74>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b0 // strh ip, [sp]
- .long 0xe1a0c00d // mov ip, sp
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe24dd008 // sub sp, sp, #8
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0224392 // mla r2, r2, r3, r4
+ .long 0xe082200e // add r2, r2, lr
+ .long 0x1a000013 // bne 3c94 <sk_load_g8_vfp4+0x7c>
+ .long 0xe5922000 // ldr r2, [r2]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3900a30 // vmovl.u16 q0, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b0f // vldr d17, [pc, #60]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe28f20a4 // add r2, pc, #164
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2400130 // vand d16, d0, d16
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3000db1 // vmul.f32 d0, d16, d17
- .long 0xf2201110 // vorr d1, d0, d0
- .long 0xf2202110 // vorr d2, d0, d0
- .long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf0a04 // vldr s1, [pc, #16]
- .long 0xee00ca10 // vmov s0, ip
- .long 0xeaffffee // b 2b98 <sk_load_g8_vfp4+0x40>
- .long 0xe320f000 // nop {0}
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3000df2 // vmul.f32 q0, q8, q9
+ .long 0xf2202150 // vorr q1, q0, q0
+ .long 0xf2204150 // vorr q2, q0, q0
+ .long 0xe28dd008 // add sp, sp, #8
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000012 // beq 3cec <sk_load_g8_vfp4+0xd4>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 3cc4 <sk_load_g8_vfp4+0xac>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe8 // bne 3c58 <sk_load_g8_vfp4+0x40>
+ .long 0xe3a04000 // mov r4, #0
+ .long 0xe5d23002 // ldrb r3, [r2, #2]
+ .long 0xee804bb0 // vdup.16 d16, r4
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xe1d220b0 // ldrh r2, [r2]
+ .long 0xe1cd20b4 // strh r2, [sp, #4]
+ .long 0xe28d2004 // add r2, sp, #4
+ .long 0xf4e2241f // vld1.16 {d18[0]}, [r2 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffda // b 3c58 <sk_load_g8_vfp4+0x40>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xe5d22000 // ldrb r2, [r2]
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xee002bb0 // vmov.16 d16[0], r2
+ .long 0xeaffffd5 // b 3c58 <sk_load_g8_vfp4+0x40>
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_load_g8_dst_vfp4
.globl _sk_load_g8_dst_vfp4
FUNCTION(_sk_load_g8_dst_vfp4)
_sk_load_g8_dst_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe02ce39c // mla ip, ip, r3, lr
- .long 0xe59de00c // ldr lr, [sp, #12]
- .long 0xe35e0001 // cmp lr, #1
- .long 0xe08cc002 // add ip, ip, r2
- .long 0x0a000012 // beq 2c64 <sk_load_g8_dst_vfp4+0x74>
- .long 0xe1dcc0b0 // ldrh ip, [ip]
- .long 0xe1cdc0b0 // strh ip, [sp]
- .long 0xe1a0c00d // mov ip, sp
- .long 0xf4ec041f // vld1.16 {d16[0]}, [ip :16]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe24dd008 // sub sp, sp, #8
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0225492 // mla r2, r2, r4, r5
+ .long 0xe0824003 // add r4, r2, r3
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a000015 // bne 3db0 <sk_load_g8_dst_vfp4+0x90>
+ .long 0xe5944000 // ldr r4, [r4]
+ .long 0xe58d4000 // str r4, [sp]
+ .long 0xe1a0400d // mov r4, sp
+ .long 0xf4e4083f // vld1.32 {d16[0]}, [r4 :32]
.long 0xf3c80a30 // vmovl.u8 q8, d16
- .long 0xf3904a30 // vmovl.u16 q2, d16
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xeddf1b0f // vldr d17, [pc, #60]
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf2440130 // vand d16, d4, d16
- .long 0xf2877f10 // vmov.f32 d7, #1
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3004db1 // vmul.f32 d4, d16, d17
- .long 0xf2245114 // vorr d5, d4, d4
- .long 0xf2246114 // vorr d6, d4, d4
- .long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe5dcc000 // ldrb ip, [ip]
- .long 0xeddf4a04 // vldr s9, [pc, #16]
- .long 0xee04ca10 // vmov s8, ip
- .long 0xeaffffee // b 2c30 <sk_load_g8_dst_vfp4+0x40>
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xe28f40a8 // add r4, pc, #168
+ .long 0xf4642acf // vld1.64 {d18-d19}, [r4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3400df2 // vmul.f32 q8, q8, q9
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf44e0aef // vst1.64 {d16-d17}, [lr :128]
+ .long 0xf4420aef // vst1.64 {d16-d17}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf4430aef // vst1.64 {d16-d17}, [r3 :128]
+ .long 0xf44c2aef // vst1.64 {d18-d19}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe28dd008 // add sp, sp, #8
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe2065003 // and r5, r6, #3
+ .long 0xe3550001 // cmp r5, #1
+ .long 0x0a000012 // beq 3e08 <sk_load_g8_dst_vfp4+0xe8>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 3de0 <sk_load_g8_dst_vfp4+0xc0>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffe6 // bne 3d6c <sk_load_g8_dst_vfp4+0x4c>
+ .long 0xe3a06000 // mov r6, #0
+ .long 0xe5d45002 // ldrb r5, [r4, #2]
+ .long 0xee806bb0 // vdup.16 d16, r6
+ .long 0xee205bb0 // vmov.16 d16[2], r5
+ .long 0xe1d440b0 // ldrh r4, [r4]
+ .long 0xe1cd40b4 // strh r4, [sp, #4]
+ .long 0xe28d4004 // add r4, sp, #4
+ .long 0xf4e4241f // vld1.16 {d18[0]}, [r4 :16]
+ .long 0xf3c82a32 // vmovl.u8 q9, d18
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3f62124 // vuzp.16 d18, d20
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffd8 // b 3d6c <sk_load_g8_dst_vfp4+0x4c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xe5d44000 // ldrb r4, [r4]
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xee004bb0 // vmov.16 d16[0], r4
+ .long 0xeaffffd3 // b 3d6c <sk_load_g8_dst_vfp4+0x4c>
.long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_gather_g8_vfp4
.globl _sk_gather_g8_vfp4
FUNCTION(_sk_gather_g8_vfp4)
_sk_gather_g8_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee315b90 // vmov.32 r5, d17[1]
- .long 0xf3c7101f // vmov.i32 d17, #255
- .long 0xe7d4e00e // ldrb lr, [r4, lr]
- .long 0xe7d44005 // ldrb r4, [r4, r5]
- .long 0xee00eb90 // vmov.32 d16[0], lr
- .long 0xee204b90 // vmov.32 d16[1], r4
- .long 0xf24001b1 // vand d16, d16, d17
- .long 0xeddf1b06 // vldr d17, [pc, #24]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3000db1 // vmul.f32 d0, d16, d17
- .long 0xf2201110 // vorr d1, d0, d0
- .long 0xf2202110 // vorr d2, d0, d0
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xee123b90 // vmov.32 r3, d18[0]
+ .long 0xee32eb90 // vmov.32 lr, d18[1]
+ .long 0xee134b90 // vmov.32 r4, d19[0]
+ .long 0xee336b90 // vmov.32 r6, d19[1]
+ .long 0xe7d23003 // ldrb r3, [r2, r3]
+ .long 0xe7d2500e // ldrb r5, [r2, lr]
+ .long 0xee003bb0 // vmov.16 d16[0], r3
+ .long 0xe7d23004 // ldrb r3, [r2, r4]
+ .long 0xe7d22006 // ldrb r2, [r2, r6]
+ .long 0xee005bf0 // vmov.16 d16[1], r5
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xee202bf0 // vmov.16 d16[3], r2
+ .long 0xe28f2028 // add r2, pc, #40
+ .long 0xf3c70b3f // vbic.i16 d16, #65280
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe28f202c // add r2, pc, #44
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3000df2 // vmul.f32 q0, q8, q9
+ .long 0xf2202150 // vorr q1, q0, q0
+ .long 0xf2204150 // vorr q2, q0, q0
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
.long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_load_565_vfp4
.globl _sk_load_565_vfp4
FUNCTION(_sk_load_565_vfp4)
_sk_load_565_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe92d4010 // push {r4, lr}
.long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5014 // ldr r5, [sp, #20]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0x0a00001a // beq 2d90 <sk_load_565_vfp4+0x98>
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe58d5000 // str r5, [sp]
- .long 0xe1a0500d // mov r5, sp
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf3900a30 // vmovl.u16 q0, d16
- .long 0xf3c70218 // vmov.i32 d16, #63488
- .long 0xe3a05e7e // mov r5, #2016
- .long 0xf2c1101f // vmov.i32 d17, #31
- .long 0xee825b90 // vdup.32 d18, r5
- .long 0xf2400130 // vand d16, d0, d16
- .long 0xeddf3b13 // vldr d19, [pc, #76]
- .long 0xf2402132 // vand d18, d0, d18
- .long 0xeddf4b13 // vldr d20, [pc, #76]
- .long 0xf2401131 // vand d17, d0, d17
- .long 0xeddf5b13 // vldr d21, [pc, #76]
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xe082208e // add r2, r2, lr, lsl #1
+ .long 0x1a00001b // bne 3f70 <sk_load_565_vfp4+0xa0>
+ .long 0xf462074f // vld1.16 {d16}, [r2]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe3a02e7e // mov r2, #2016
+ .long 0xf3c74258 // vmov.i32 q10, #63488
+ .long 0xeea22b90 // vdup.32 q9, r2
+ .long 0xf2c1605f // vmov.i32 q11, #31
+ .long 0xe28f20b8 // add r2, pc, #184
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf24001f6 // vand q8, q8, q11
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xe28f20b0 // add r2, pc, #176
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f20b8 // add r2, pc, #184
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f20bc // add r2, pc, #188
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xf3040df6 // vmul.f32 q0, q10, q11
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf3022df8 // vmul.f32 q1, q9, q12
.long 0xe2811008 // add r1, r1, #8
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xf3000db3 // vmul.f32 d0, d16, d19
- .long 0xf3021db4 // vmul.f32 d1, d18, d20
- .long 0xf3012db5 // vmul.f32 d2, d17, d21
+ .long 0xf3004dfa // vmul.f32 q2, q8, q13
.long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe1dc50b0 // ldrh r5, [ip]
- .long 0xeddf0a07 // vldr s1, [pc, #28]
- .long 0xee005a10 // vmov s0, r5
- .long 0xeaffffe5 // b 2d38 <sk_load_565_vfp4+0x40>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000011 // beq 3fc4 <sk_load_565_vfp4+0xf4>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 3fa0 <sk_load_565_vfp4+0xd0>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffdc // bne 3f04 <sk_load_565_vfp4+0x34>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xe2823004 // add r3, r2, #4
+ .long 0xf4e3049f // vld1.16 {d16[2]}, [r3 :16]
+ .long 0xe5922000 // ldr r2, [r2]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2183f // vld1.32 {d17[0]}, [r2 :32]
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3f62121 // vuzp.16 d18, d17
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffcf // b 3f04 <sk_load_565_vfp4+0x34>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xf4e2041f // vld1.16 {d16[0]}, [r2 :16]
+ .long 0xeaffffcb // b 3f04 <sk_load_565_vfp4+0x34>
+ .long 0xe320f000 // nop {0}
+ .long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
+ .long 0x37842108 // .word 0x37842108
+ .long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
+ .long 0x3a020821 // .word 0x3a020821
+ .long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_load_565_dst_vfp4
.globl _sk_load_565_dst_vfp4
FUNCTION(_sk_load_565_dst_vfp4)
_sk_load_565_dst_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
.long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5014 // ldr r5, [sp, #20]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0x0a00001a // beq 2e58 <sk_load_565_dst_vfp4+0x98>
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe58d5000 // str r5, [sp]
- .long 0xe1a0500d // mov r5, sp
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf3904a30 // vmovl.u16 q2, d16
- .long 0xf3c70218 // vmov.i32 d16, #63488
- .long 0xe3a05e7e // mov r5, #2016
- .long 0xf2c1101f // vmov.i32 d17, #31
- .long 0xee825b90 // vdup.32 d18, r5
- .long 0xf2440130 // vand d16, d4, d16
- .long 0xeddf3b13 // vldr d19, [pc, #76]
- .long 0xf2442132 // vand d18, d4, d18
- .long 0xeddf4b13 // vldr d20, [pc, #76]
- .long 0xf2441131 // vand d17, d4, d17
- .long 0xeddf5b13 // vldr d21, [pc, #76]
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf2877f10 // vmov.f32 d7, #1
- .long 0xf3004db3 // vmul.f32 d4, d16, d19
- .long 0xf3025db4 // vmul.f32 d5, d18, d20
- .long 0xf3016db5 // vmul.f32 d6, d17, d21
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852082 // add r2, r5, r2, lsl #1
+ .long 0xe0824083 // add r4, r2, r3, lsl #1
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a00001f // bne 40d4 <sk_load_565_dst_vfp4+0xbc>
+ .long 0xf464074f // vld1.16 {d16}, [r4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe3a04e7e // mov r4, #2016
+ .long 0xf3c72258 // vmov.i32 q9, #63488
+ .long 0xeea44b90 // vdup.32 q10, r4
+ .long 0xf2c1605f // vmov.i32 q11, #31
+ .long 0xe28f40c4 // add r4, pc, #196
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf24001f6 // vand q8, q8, q11
+ .long 0xf4646acf // vld1.64 {d22-d23}, [r4]
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xe28f40bc // add r4, pc, #188
+ .long 0xf4648acf // vld1.64 {d24-d25}, [r4]
+ .long 0xe28f40c4 // add r4, pc, #196
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf4646acf // vld1.64 {d22-d23}, [r4]
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf3400df6 // vmul.f32 q8, q8, q11
+ .long 0xf2c76f50 // vmov.f32 q11, #1
+ .long 0xf4432aef // vst1.64 {d18-d19}, [r3 :128]
+ .long 0xf4424aef // vst1.64 {d20-d21}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf44e0aef // vst1.64 {d16-d17}, [lr :128]
+ .long 0xf44c6aef // vst1.64 {d22-d23}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
.long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe1dc50b0 // ldrh r5, [ip]
- .long 0xeddf4a07 // vldr s9, [pc, #28]
- .long 0xee045a10 // vmov s8, r5
- .long 0xeaffffe5 // b 2e00 <sk_load_565_dst_vfp4+0x40>
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe2065003 // and r5, r6, #3
+ .long 0xe3550001 // cmp r5, #1
+ .long 0x0a000011 // beq 4128 <sk_load_565_dst_vfp4+0x110>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 4104 <sk_load_565_dst_vfp4+0xec>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffd8 // bne 4058 <sk_load_565_dst_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xe2845004 // add r5, r4, #4
+ .long 0xf4e5049f // vld1.16 {d16[2]}, [r5 :16]
+ .long 0xe5944000 // ldr r4, [r4]
+ .long 0xe58d4000 // str r4, [sp]
+ .long 0xe1a0400d // mov r4, sp
+ .long 0xf4e4183f // vld1.32 {d17[0]}, [r4 :32]
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3f62121 // vuzp.16 d18, d17
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffcb // b 4058 <sk_load_565_dst_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xf4e4041f // vld1.16 {d16[0]}, [r4 :16]
+ .long 0xeaffffc7 // b 4058 <sk_load_565_dst_vfp4+0x40>
+ .long 0x37842108 // .word 0x37842108
+ .long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
.long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
+ .long 0x3a020821 // .word 0x3a020821
+ .long 0x3a020821 // .word 0x3a020821
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_gather_565_vfp4
.globl _sk_gather_565_vfp4
FUNCTION(_sk_gather_565_vfp4)
_sk_gather_565_vfp4:
- .long 0xe92d4070 // push {r4, r5, r6, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xeddf4b20 // vldr d20, [pc, #128]
- .long 0xeddf5b21 // vldr d21, [pc, #132]
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xf2c1201f // vmov.i32 d18, #31
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee316b90 // vmov.32 r6, d17[1]
- .long 0xf3c71218 // vmov.i32 d17, #63488
- .long 0xe084508e // add r5, r4, lr, lsl #1
- .long 0xe0846086 // add r6, r4, r6, lsl #1
- .long 0xe1d550b0 // ldrh r5, [r5]
- .long 0xe1d660b0 // ldrh r6, [r6]
- .long 0xee005b90 // vmov.32 d16[0], r5
- .long 0xee206b90 // vmov.32 d16[1], r6
- .long 0xe3a06e7e // mov r6, #2016
- .long 0xee836b90 // vdup.32 d19, r6
- .long 0xf24011b1 // vand d17, d16, d17
- .long 0xf24031b3 // vand d19, d16, d19
- .long 0xf24001b2 // vand d16, d16, d18
- .long 0xf3fb2623 // vcvt.f32.s32 d18, d19
- .long 0xeddf3b06 // vldr d19, [pc, #24]
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3021db4 // vmul.f32 d1, d18, d20
- .long 0xf3010db3 // vmul.f32 d0, d17, d19
- .long 0xf3002db5 // vmul.f32 d2, d16, d21
- .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf2c1605f // vmov.i32 q11, #31
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xf3c74258 // vmov.i32 q10, #63488
+ .long 0xee123b90 // vmov.32 r3, d18[0]
+ .long 0xee324b90 // vmov.32 r4, d18[1]
+ .long 0xee13eb90 // vmov.32 lr, d19[0]
+ .long 0xee335b90 // vmov.32 r5, d19[1]
+ .long 0xe0823083 // add r3, r2, r3, lsl #1
+ .long 0xe0824084 // add r4, r2, r4, lsl #1
+ .long 0xf4e3041f // vld1.16 {d16[0]}, [r3 :16]
+ .long 0xe082308e // add r3, r2, lr, lsl #1
+ .long 0xe0822085 // add r2, r2, r5, lsl #1
+ .long 0xf4e4045f // vld1.16 {d16[1]}, [r4 :16]
+ .long 0xe1d330b0 // ldrh r3, [r3]
+ .long 0xe1d220b0 // ldrh r2, [r2]
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xee202bf0 // vmov.16 d16[3], r2
+ .long 0xe3a02e7e // mov r2, #2016
+ .long 0xeea22b90 // vdup.32 q9, r2
+ .long 0xe28f2048 // add r2, pc, #72
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf24001f6 // vand q8, q8, q11
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xe28f203c // add r2, pc, #60
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f2044 // add r2, pc, #68
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f2048 // add r2, pc, #72
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xf3040df6 // vmul.f32 q0, q10, q11
+ .long 0xf3022df8 // vmul.f32 q1, q9, q12
+ .long 0xf3004dfa // vmul.f32 q2, q8, q13
+ .long 0xe8bd4830 // pop {r4, r5, fp, lr}
.long 0xe12fff1c // bx ip
.long 0x37842108 // .word 0x37842108
.long 0x37842108 // .word 0x37842108
+ .long 0x37842108 // .word 0x37842108
+ .long 0x37842108 // .word 0x37842108
+ .long 0x3a020821 // .word 0x3a020821
+ .long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
.long 0x3a020821 // .word 0x3a020821
.long 0x3d042108 // .word 0x3d042108
.long 0x3d042108 // .word 0x3d042108
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3d042108 // .word 0x3d042108
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_store_565_vfp4
.globl _sk_store_565_vfp4
FUNCTION(_sk_store_565_vfp4)
_sk_store_565_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xf2c30f1f // vmov.f32 d16, #31
- .long 0xeddf1b1e // vldr d17, [pc, #120]
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2413c31 // vfma.f32 d19, d1, d17
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2401c30 // vfma.f32 d17, d0, d16
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf2422c30 // vfma.f32 d18, d2, d16
- .long 0xe3550001 // cmp r5, #1
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf3fb07a3 // vcvt.u32.f32 d16, d19
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xf3fb27a2 // vcvt.u32.f32 d18, d18
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xf2e50530 // vshl.s32 d16, d16, #5
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0xf2eb1531 // vshl.s32 d17, d17, #11
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0xf26001b2 // vorr d16, d16, d18
- .long 0x0a000005 // beq 2fac <sk_store_565_vfp4+0x7c>
- .long 0xf3f60121 // vuzp.16 d16, d17
- .long 0xf4cc080f // vst1.32 {d16[0]}, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe28f20c4 // add r2, pc, #196
+ .long 0xf2c30f5f // vmov.f32 q8, #31
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xf2404c70 // vfma.f32 q10, q0, q8
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xf2428c76 // vfma.f32 q12, q1, q11
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xf2442c70 // vfma.f32 q9, q2, q8
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xf3fb07e4 // vcvt.u32.f32 q8, q10
+ .long 0xf3fb47e8 // vcvt.u32.f32 q10, q12
+ .long 0xf3fb27e2 // vcvt.u32.f32 q9, q9
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xe082208e // add r2, r2, lr, lsl #1
+ .long 0xf2eb0570 // vshl.s32 q8, q8, #11
+ .long 0xf2e54574 // vshl.s32 q10, q10, #5
+ .long 0xf26401f0 // vorr q8, q10, q8
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xf3f60220 // vmovn.i32 d16, q8
+ .long 0x1a000004 // bne 42e4 <sk_store_565_vfp4+0x84>
+ .long 0xf442074f // vst1.16 {d16}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xee105b90 // vmov.32 r5, d16[0]
- .long 0xe1cc50b0 // strh r5, [ip]
- .long 0xeafffff8 // b 2f9c <sk_store_565_vfp4+0x6c>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000c // beq 4324 <sk_store_565_vfp4+0xc4>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 4308 <sk_store_565_vfp4+0xa8>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1afffff4 // bne 42d4 <sk_store_565_vfp4+0x74>
+ .long 0xe2823004 // add r3, r2, #4
+ .long 0xf4c3049f // vst1.16 {d16[2]}, [r3 :16]
+ .long 0xee903bb0 // vmov.u16 r3, d16[0]
+ .long 0xee904bf0 // vmov.u16 r4, d16[1]
+ .long 0xee003b90 // vmov.32 d16[0], r3
+ .long 0xee204b90 // vmov.32 d16[1], r4
+ .long 0xf3f60121 // vuzp.16 d16, d17
+ .long 0xf4c2080f // vst1.32 {d16[0]}, [r2]
+ .long 0xeaffffeb // b 42d4 <sk_store_565_vfp4+0x74>
+ .long 0xf4c2041f // vst1.16 {d16[0]}, [r2 :16]
+ .long 0xeaffffe9 // b 42d4 <sk_store_565_vfp4+0x74>
+ .long 0xe320f000 // nop {0}
+ .long 0x427c0000 // .word 0x427c0000
+ .long 0x427c0000 // .word 0x427c0000
.long 0x427c0000 // .word 0x427c0000
.long 0x427c0000 // .word 0x427c0000
@@ -9019,174 +10267,256 @@ HIDDEN _sk_load_4444_vfp4
.globl _sk_load_4444_vfp4
FUNCTION(_sk_load_4444_vfp4)
_sk_load_4444_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe92d4010 // push {r4, lr}
.long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5014 // ldr r5, [sp, #20]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0x0a00001d // beq 3064 <sk_load_4444_vfp4+0xa4>
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe58d5000 // str r5, [sp]
- .long 0xe1a0500d // mov r5, sp
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf3900a30 // vmovl.u16 q0, d16
- .long 0xf3c70210 // vmov.i32 d16, #61440
- .long 0xeddf4b1b // vldr d20, [pc, #108]
- .long 0xf2c0121f // vmov.i32 d17, #3840
- .long 0xeddf5b1b // vldr d21, [pc, #108]
- .long 0xf3c72010 // vmov.i32 d18, #240
- .long 0xeddf6b1b // vldr d22, [pc, #108]
- .long 0xf2400130 // vand d16, d0, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2c0301f // vmov.i32 d19, #15
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xe082208e // add r2, r2, lr, lsl #1
+ .long 0x1a00001e // bne 43ec <sk_load_4444_vfp4+0xac>
+ .long 0xf462074f // vld1.16 {d16}, [r2]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe28f20d0 // add r2, pc, #208
+ .long 0xf3c72250 // vmov.i32 q9, #61440
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf3c74050 // vmov.i32 q10, #240
+ .long 0xe28f20d0 // add r2, pc, #208
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf2c0625f // vmov.i32 q11, #3840
+ .long 0xf2c0805f // vmov.i32 q12, #15
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf24061f6 // vand q11, q8, q11
+ .long 0xf24001f8 // vand q8, q8, q12
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xe28f20bc // add r2, pc, #188
+ .long 0xf462cacf // vld1.64 {d28-d29}, [r2]
+ .long 0xe28f20c4 // add r2, pc, #196
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3020df8 // vmul.f32 q0, q9, q12
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3062dfc // vmul.f32 q1, q11, q14
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf3044dfa // vmul.f32 q2, q10, q13
+ .long 0xf3006df2 // vmul.f32 q3, q8, q9
.long 0xe2811008 // add r1, r1, #8
- .long 0xf2401131 // vand d17, d0, d17
- .long 0xf2402132 // vand d18, d0, d18
- .long 0xf2403133 // vand d19, d0, d19
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3000db4 // vmul.f32 d0, d16, d20
- .long 0xeddf0b10 // vldr d16, [pc, #64]
- .long 0xf3011db5 // vmul.f32 d1, d17, d21
- .long 0xf3022db6 // vmul.f32 d2, d18, d22
- .long 0xf3033db0 // vmul.f32 d3, d19, d16
.long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe1dc50b0 // ldrh r5, [ip]
- .long 0xeddf0a0a // vldr s1, [pc, #40]
- .long 0xee005a10 // vmov s0, r5
- .long 0xeaffffe2 // b 3000 <sk_load_4444_vfp4+0x40>
- .long 0xe320f000 // nop {0}
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000011 // beq 4440 <sk_load_4444_vfp4+0x100>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 441c <sk_load_4444_vfp4+0xdc>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffd9 // bne 4374 <sk_load_4444_vfp4+0x34>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xe2823004 // add r3, r2, #4
+ .long 0xf4e3049f // vld1.16 {d16[2]}, [r3 :16]
+ .long 0xe5922000 // ldr r2, [r2]
+ .long 0xe58d2000 // str r2, [sp]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xf4e2183f // vld1.32 {d17[0]}, [r2 :32]
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3f62121 // vuzp.16 d18, d17
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffcc // b 4374 <sk_load_4444_vfp4+0x34>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xee803bb0 // vdup.16 d16, r3
+ .long 0xf4e2041f // vld1.16 {d16[0]}, [r2 :16]
+ .long 0xeaffffc8 // b 4374 <sk_load_4444_vfp4+0x34>
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x37888889 // .word 0x37888889
+ .long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x39888889 // .word 0x39888889
.long 0x39888889 // .word 0x39888889
- .long 0x3b888889 // .word 0x3b888889
- .long 0x3b888889 // .word 0x3b888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x3d888889 // .word 0x3d888889
+ .long 0x3d888889 // .word 0x3d888889
.long 0x3d888889 // .word 0x3d888889
.long 0x3d888889 // .word 0x3d888889
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_load_4444_dst_vfp4
.globl _sk_load_4444_dst_vfp4
FUNCTION(_sk_load_4444_dst_vfp4)
_sk_load_4444_dst_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
.long 0xe24dd004 // sub sp, sp, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5014 // ldr r5, [sp, #20]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0x0a00001d // beq 3144 <sk_load_4444_dst_vfp4+0xa4>
- .long 0xe59c5000 // ldr r5, [ip]
- .long 0xe58d5000 // str r5, [sp]
- .long 0xe1a0500d // mov r5, sp
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf3904a30 // vmovl.u16 q2, d16
- .long 0xf3c70210 // vmov.i32 d16, #61440
- .long 0xeddf4b1b // vldr d20, [pc, #108]
- .long 0xf2c0121f // vmov.i32 d17, #3840
- .long 0xeddf5b1b // vldr d21, [pc, #108]
- .long 0xf3c72010 // vmov.i32 d18, #240
- .long 0xeddf6b1b // vldr d22, [pc, #108]
- .long 0xf2440130 // vand d16, d4, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2c0301f // vmov.i32 d19, #15
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf2441131 // vand d17, d4, d17
- .long 0xf2442132 // vand d18, d4, d18
- .long 0xf2443133 // vand d19, d4, d19
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3004db4 // vmul.f32 d4, d16, d20
- .long 0xeddf0b10 // vldr d16, [pc, #64]
- .long 0xf3015db5 // vmul.f32 d5, d17, d21
- .long 0xf3026db6 // vmul.f32 d6, d18, d22
- .long 0xf3037db0 // vmul.f32 d7, d19, d16
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852082 // add r2, r5, r2, lsl #1
+ .long 0xe0824083 // add r4, r2, r3, lsl #1
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a000023 // bne 455c <sk_load_4444_dst_vfp4+0xcc>
+ .long 0xf464074f // vld1.16 {d16}, [r4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xe28f40e4 // add r4, pc, #228
+ .long 0xf3c72250 // vmov.i32 q9, #61440
+ .long 0xf464aacf // vld1.64 {d26-d27}, [r4]
+ .long 0xf2c0425f // vmov.i32 q10, #3840
+ .long 0xe28f40e4 // add r4, pc, #228
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf3c76050 // vmov.i32 q11, #240
+ .long 0xf2c0805f // vmov.i32 q12, #15
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf24061f6 // vand q11, q8, q11
+ .long 0xf24001f8 // vand q8, q8, q12
+ .long 0xf4648acf // vld1.64 {d24-d25}, [r4]
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xe28f40cc // add r4, pc, #204
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3422dfa // vmul.f32 q9, q9, q13
+ .long 0xf464aacf // vld1.64 {d26-d27}, [r4]
+ .long 0xe28f40c8 // add r4, pc, #200
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf4648acf // vld1.64 {d24-d25}, [r4]
+ .long 0xf3466dfa // vmul.f32 q11, q11, q13
+ .long 0xf3400df8 // vmul.f32 q8, q8, q12
+ .long 0xf4432aef // vst1.64 {d18-d19}, [r3 :128]
+ .long 0xf4424aef // vst1.64 {d20-d21}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf44e6aef // vst1.64 {d22-d23}, [lr :128]
+ .long 0xf44c0aef // vst1.64 {d16-d17}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
.long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe1dc50b0 // ldrh r5, [ip]
- .long 0xeddf4a0a // vldr s9, [pc, #40]
- .long 0xee045a10 // vmov s8, r5
- .long 0xeaffffe2 // b 30e0 <sk_load_4444_dst_vfp4+0x40>
- .long 0xe320f000 // nop {0}
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe2065003 // and r5, r6, #3
+ .long 0xe3550001 // cmp r5, #1
+ .long 0x0a000011 // beq 45b0 <sk_load_4444_dst_vfp4+0x120>
+ .long 0xf2c00010 // vmov.i32 d16, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 458c <sk_load_4444_dst_vfp4+0xfc>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffd4 // bne 44d0 <sk_load_4444_dst_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xe2845004 // add r5, r4, #4
+ .long 0xf4e5049f // vld1.16 {d16[2]}, [r5 :16]
+ .long 0xe5944000 // ldr r4, [r4]
+ .long 0xe58d4000 // str r4, [sp]
+ .long 0xe1a0400d // mov r4, sp
+ .long 0xf4e4183f // vld1.32 {d17[0]}, [r4 :32]
+ .long 0xf3d02a31 // vmovl.u16 q9, d17
+ .long 0xf3f62121 // vuzp.16 d18, d17
+ .long 0xf2f004a2 // vext.8 d16, d16, d18, #4
+ .long 0xf2f004a0 // vext.8 d16, d16, d16, #4
+ .long 0xeaffffc7 // b 44d0 <sk_load_4444_dst_vfp4+0x40>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xee805bb0 // vdup.16 d16, r5
+ .long 0xf4e4041f // vld1.16 {d16[0]}, [r4 :16]
+ .long 0xeaffffc3 // b 44d0 <sk_load_4444_dst_vfp4+0x40>
+ .long 0x37888889 // .word 0x37888889
+ .long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x39888889 // .word 0x39888889
.long 0x39888889 // .word 0x39888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
.long 0x3b888889 // .word 0x3b888889
.long 0x3b888889 // .word 0x3b888889
.long 0x3d888889 // .word 0x3d888889
.long 0x3d888889 // .word 0x3d888889
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
+ .long 0x3d888889 // .word 0x3d888889
+ .long 0x3d888889 // .word 0x3d888889
HIDDEN _sk_gather_4444_vfp4
.globl _sk_gather_4444_vfp4
FUNCTION(_sk_gather_4444_vfp4)
_sk_gather_4444_vfp4:
- .long 0xe92d4070 // push {r4, r5, r6, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xeddf5b24 // vldr d21, [pc, #144]
- .long 0xf3c73010 // vmov.i32 d19, #240
- .long 0xeddf6b24 // vldr d22, [pc, #144]
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xf2c0401f // vmov.i32 d20, #15
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xf2c0221f // vmov.i32 d18, #3840
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee316b90 // vmov.32 r6, d17[1]
- .long 0xf3c71210 // vmov.i32 d17, #61440
- .long 0xe084508e // add r5, r4, lr, lsl #1
- .long 0xe0846086 // add r6, r4, r6, lsl #1
- .long 0xe1d550b0 // ldrh r5, [r5]
- .long 0xe1d660b0 // ldrh r6, [r6]
- .long 0xee005b90 // vmov.32 d16[0], r5
- .long 0xee206b90 // vmov.32 d16[1], r6
- .long 0xf24011b1 // vand d17, d16, d17
- .long 0xf24021b2 // vand d18, d16, d18
- .long 0xf24031b3 // vand d19, d16, d19
- .long 0xf24001b4 // vand d16, d16, d20
- .long 0xeddf4b0b // vldr d20, [pc, #44]
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3010db4 // vmul.f32 d0, d17, d20
- .long 0xeddf1b0b // vldr d17, [pc, #44]
- .long 0xf3021db5 // vmul.f32 d1, d18, d21
- .long 0xf3032db6 // vmul.f32 d2, d19, d22
- .long 0xf3003db1 // vmul.f32 d3, d16, d17
- .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf2c0625f // vmov.i32 q11, #3840
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf2c0805f // vmov.i32 q12, #15
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xf3c74050 // vmov.i32 q10, #240
+ .long 0xee123b90 // vmov.32 r3, d18[0]
+ .long 0xee324b90 // vmov.32 r4, d18[1]
+ .long 0xee13eb90 // vmov.32 lr, d19[0]
+ .long 0xee335b90 // vmov.32 r5, d19[1]
+ .long 0xf3c72250 // vmov.i32 q9, #61440
+ .long 0xe0823083 // add r3, r2, r3, lsl #1
+ .long 0xe0824084 // add r4, r2, r4, lsl #1
+ .long 0xf4e3041f // vld1.16 {d16[0]}, [r3 :16]
+ .long 0xe082308e // add r3, r2, lr, lsl #1
+ .long 0xe0822085 // add r2, r2, r5, lsl #1
+ .long 0xf4e4045f // vld1.16 {d16[1]}, [r4 :16]
+ .long 0xe1d330b0 // ldrh r3, [r3]
+ .long 0xe1d220b0 // ldrh r2, [r2]
+ .long 0xee203bb0 // vmov.16 d16[2], r3
+ .long 0xee202bf0 // vmov.16 d16[3], r2
+ .long 0xe28f2058 // add r2, pc, #88
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xe28f2060 // add r2, pc, #96
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf24021f2 // vand q9, q8, q9
+ .long 0xf24041f4 // vand q10, q8, q10
+ .long 0xf24061f6 // vand q11, q8, q11
+ .long 0xf24001f8 // vand q8, q8, q12
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xe28f2050 // add r2, pc, #80
+ .long 0xf462cacf // vld1.64 {d28-d29}, [r2]
+ .long 0xe28f2058 // add r2, pc, #88
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3020df8 // vmul.f32 q0, q9, q12
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3062dfc // vmul.f32 q1, q11, q14
+ .long 0xf3044dfa // vmul.f32 q2, q10, q13
+ .long 0xf3006df2 // vmul.f32 q3, q8, q9
+ .long 0xe8bd4830 // pop {r4, r5, fp, lr}
.long 0xe12fff1c // bx ip
.long 0xe320f000 // nop {0}
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x3b888889 // .word 0x3b888889
+ .long 0x37888889 // .word 0x37888889
+ .long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x37888889 // .word 0x37888889
.long 0x39888889 // .word 0x39888889
.long 0x39888889 // .word 0x39888889
- .long 0x3b888889 // .word 0x3b888889
- .long 0x3b888889 // .word 0x3b888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x39888889 // .word 0x39888889
+ .long 0x3d888889 // .word 0x3d888889
+ .long 0x3d888889 // .word 0x3d888889
.long 0x3d888889 // .word 0x3d888889
.long 0x3d888889 // .word 0x3d888889
@@ -9194,212 +10524,300 @@ HIDDEN _sk_store_4444_vfp4
.globl _sk_store_4444_vfp4
FUNCTION(_sk_store_4444_vfp4)
_sk_store_4444_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xf2c20f1e // vmov.f32 d16, #15
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xf2402c30 // vfma.f32 d18, d0, d16
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xf2413c30 // vfma.f32 d19, d1, d16
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xe3550001 // cmp r5, #1
- .long 0xf2424c30 // vfma.f32 d20, d2, d16
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xf3fb07a2 // vcvt.u32.f32 d16, d18
- .long 0xf3fb27a3 // vcvt.u32.f32 d18, d19
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xf3fb37a4 // vcvt.u32.f32 d19, d20
- .long 0xe084c082 // add ip, r4, r2, lsl #1
- .long 0xf2ec0530 // vshl.s32 d16, d16, #12
- .long 0xf2e82532 // vshl.s32 d18, d18, #8
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xf2e43533 // vshl.s32 d19, d19, #4
- .long 0xf26201b0 // vorr d16, d18, d16
- .long 0xf26001b3 // vorr d16, d16, d19
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0x0a000005 // beq 32cc <sk_store_4444_vfp4+0x8c>
- .long 0xf3f60121 // vuzp.16 d16, d17
- .long 0xf4cc080f // vst1.32 {d16[0]}, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xf2c20f5e // vmov.f32 q8, #15
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xf2404c70 // vfma.f32 q10, q0, q8
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xf2426c70 // vfma.f32 q11, q1, q8
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xf2448c70 // vfma.f32 q12, q2, q8
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
+ .long 0xf2462c70 // vfma.f32 q9, q3, q8
+ .long 0xf3fb07e4 // vcvt.u32.f32 q8, q10
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xf3fb47e6 // vcvt.u32.f32 q10, q11
+ .long 0xe082208e // add r2, r2, lr, lsl #1
+ .long 0xf3fb67e8 // vcvt.u32.f32 q11, q12
+ .long 0xf2ec0570 // vshl.s32 q8, q8, #12
+ .long 0xf3fb27e2 // vcvt.u32.f32 q9, q9
+ .long 0xf2e84574 // vshl.s32 q10, q10, #8
+ .long 0xf2e46576 // vshl.s32 q11, q11, #4
+ .long 0xf26401f0 // vorr q8, q10, q8
+ .long 0xf26001f6 // vorr q8, q8, q11
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xf3f60220 // vmovn.i32 d16, q8
+ .long 0x1a000004 // bne 4798 <sk_store_4444_vfp4+0x90>
+ .long 0xf442074f // vst1.16 {d16}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xee105b90 // vmov.32 r5, d16[0]
- .long 0xe1cc50b0 // strh r5, [ip]
- .long 0xeafffff8 // b 32bc <sk_store_4444_vfp4+0x7c>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000c // beq 47d8 <sk_store_4444_vfp4+0xd0>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 47bc <sk_store_4444_vfp4+0xb4>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1afffff4 // bne 4788 <sk_store_4444_vfp4+0x80>
+ .long 0xe2823004 // add r3, r2, #4
+ .long 0xf4c3049f // vst1.16 {d16[2]}, [r3 :16]
+ .long 0xee903bb0 // vmov.u16 r3, d16[0]
+ .long 0xee904bf0 // vmov.u16 r4, d16[1]
+ .long 0xee003b90 // vmov.32 d16[0], r3
+ .long 0xee204b90 // vmov.32 d16[1], r4
+ .long 0xf3f60121 // vuzp.16 d16, d17
+ .long 0xf4c2080f // vst1.32 {d16[0]}, [r2]
+ .long 0xeaffffeb // b 4788 <sk_store_4444_vfp4+0x80>
+ .long 0xf4c2041f // vst1.16 {d16[0]}, [r2 :16]
+ .long 0xeaffffe9 // b 4788 <sk_store_4444_vfp4+0x80>
HIDDEN _sk_load_8888_vfp4
.globl _sk_load_8888_vfp4
FUNCTION(_sk_load_8888_vfp4)
_sk_load_8888_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0x0a000014 // beq 3354 <sk_load_8888_vfp4+0x7c>
- .long 0xed9c0b00 // vldr d0, [ip]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3f81010 // vshr.u32 d17, d0, #8
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082210e // add r2, r2, lr, lsl #2
+ .long 0x1a000015 // bne 4864 <sk_load_8888_vfp4+0x84>
+ .long 0xf4620a8f // vld1.32 {d16-d17}, [r2]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf3f84070 // vshr.u32 q10, q8, #8
+ .long 0xf3f08070 // vshr.u32 q12, q8, #16
+ .long 0xf3e86070 // vshr.u32 q11, q8, #24
+ .long 0xf24001f2 // vand q8, q8, q9
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24821f2 // vand q9, q12, q9
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf3f03010 // vshr.u32 d19, d0, #16
- .long 0xf3e82010 // vshr.u32 d18, d0, #24
- .long 0xf24111b0 // vand d17, d17, d16
- .long 0xf2404130 // vand d20, d0, d16
- .long 0xf24301b0 // vand d16, d19, d16
- .long 0xf3fb3624 // vcvt.f32.s32 d19, d20
- .long 0xeddf4b0b // vldr d20, [pc, #44]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3030db4 // vmul.f32 d0, d19, d20
- .long 0xf3023db4 // vmul.f32 d3, d18, d20
- .long 0xf3011db4 // vmul.f32 d1, d17, d20
- .long 0xf3002db4 // vmul.f32 d2, d16, d20
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf0a03 // vldr s1, [pc, #12]
- .long 0xed9c0a00 // vldr s0, [ip]
- .long 0xeaffffe8 // b 3304 <sk_load_8888_vfp4+0x2c>
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf3066df8 // vmul.f32 q3, q11, q12
+ .long 0xf3000df8 // vmul.f32 q0, q8, q12
+ .long 0xf3042df8 // vmul.f32 q1, q10, q12
+ .long 0xf3024df8 // vmul.f32 q2, q9, q12
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000c // beq 48a4 <sk_load_8888_vfp4+0xc4>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 4894 <sk_load_8888_vfp4+0xb4>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe2 // bne 4810 <sk_load_8888_vfp4+0x30>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e3183f // vld1.32 {d17[0]}, [r3 :32]
+ .long 0xedd22b00 // vldr d18, [r2]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffda // b 4810 <sk_load_8888_vfp4+0x30>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffd6 // b 4810 <sk_load_8888_vfp4+0x30>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_load_8888_dst_vfp4
.globl _sk_load_8888_dst_vfp4
FUNCTION(_sk_load_8888_dst_vfp4)
_sk_load_8888_dst_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852102 // add r2, r5, r2, lsl #2
+ .long 0xe0824103 // add r4, r2, r3, lsl #2
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a00001a // bne 496c <sk_load_8888_dst_vfp4+0xa4>
+ .long 0xf4640a8f // vld1.32 {d16-d17}, [r4]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe28f40b0 // add r4, pc, #176
+ .long 0xf3f84070 // vshr.u32 q10, q8, #8
+ .long 0xf3f08070 // vshr.u32 q12, q8, #16
+ .long 0xf24061f2 // vand q11, q8, q9
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24821f2 // vand q9, q12, q9
+ .long 0xf4648acf // vld1.64 {d24-d25}, [r4]
+ .long 0xf3e80070 // vshr.u32 q8, q8, #24
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3466df8 // vmul.f32 q11, q11, q12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf3422df8 // vmul.f32 q9, q9, q12
+ .long 0xf3400df8 // vmul.f32 q8, q8, q12
+ .long 0xf4436aef // vst1.64 {d22-d23}, [r3 :128]
+ .long 0xf4424aef // vst1.64 {d20-d21}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf44e2aef // vst1.64 {d18-d19}, [lr :128]
+ .long 0xf44c0aef // vst1.64 {d16-d17}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe2065003 // and r5, r6, #3
.long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0x0a000014 // beq 33ec <sk_load_8888_dst_vfp4+0x7c>
- .long 0xed9c4b00 // vldr d4, [ip]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3f81014 // vshr.u32 d17, d4, #8
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf3f03014 // vshr.u32 d19, d4, #16
- .long 0xf3e82014 // vshr.u32 d18, d4, #24
- .long 0xf24111b0 // vand d17, d17, d16
- .long 0xf2444130 // vand d20, d4, d16
- .long 0xf24301b0 // vand d16, d19, d16
- .long 0xf3fb3624 // vcvt.f32.s32 d19, d20
- .long 0xeddf4b0b // vldr d20, [pc, #44]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3034db4 // vmul.f32 d4, d19, d20
- .long 0xf3027db4 // vmul.f32 d7, d18, d20
- .long 0xf3015db4 // vmul.f32 d5, d17, d20
- .long 0xf3006db4 // vmul.f32 d6, d16, d20
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf4a03 // vldr s9, [pc, #12]
- .long 0xed9c4a00 // vldr s8, [ip]
- .long 0xeaffffe8 // b 339c <sk_load_8888_dst_vfp4+0x2c>
+ .long 0x0a00000c // beq 49ac <sk_load_8888_dst_vfp4+0xe4>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 499c <sk_load_8888_dst_vfp4+0xd4>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffdd // bne 4904 <sk_load_8888_dst_vfp4+0x3c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xeea05b90 // vdup.32 q8, r5
+ .long 0xe2845008 // add r5, r4, #8
+ .long 0xf4e5183f // vld1.32 {d17[0]}, [r5 :32]
+ .long 0xedd42b00 // vldr d18, [r4]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffd5 // b 4904 <sk_load_8888_dst_vfp4+0x3c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xeea05b90 // vdup.32 q8, r5
+ .long 0xf4e4083f // vld1.32 {d16[0]}, [r4 :32]
+ .long 0xeaffffd1 // b 4904 <sk_load_8888_dst_vfp4+0x3c>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_gather_8888_vfp4
.globl _sk_gather_8888_vfp4
FUNCTION(_sk_gather_8888_vfp4)
_sk_gather_8888_vfp4:
- .long 0xe92d4070 // push {r4, r5, r6, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee316b90 // vmov.32 r6, d17[1]
- .long 0xf3c7101f // vmov.i32 d17, #255
- .long 0xe084510e // add r5, r4, lr, lsl #2
- .long 0xe0846106 // add r6, r4, r6, lsl #2
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf4e608bf // vld1.32 {d16[1]}, [r6 :32]
- .long 0xf24021b1 // vand d18, d16, d17
- .long 0xf3f83030 // vshr.u32 d19, d16, #8
- .long 0xf3e84030 // vshr.u32 d20, d16, #24
- .long 0xf3f00030 // vshr.u32 d16, d16, #16
- .long 0xf24331b1 // vand d19, d19, d17
- .long 0xf24001b1 // vand d16, d16, d17
- .long 0xeddf1b0a // vldr d17, [pc, #40]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb4624 // vcvt.f32.s32 d20, d20
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3020db1 // vmul.f32 d0, d18, d17
- .long 0xf3043db1 // vmul.f32 d3, d20, d17
- .long 0xf3031db1 // vmul.f32 d1, d19, d17
- .long 0xf3002db1 // vmul.f32 d2, d16, d17
- .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xee133b90 // vmov.32 r3, d19[0]
+ .long 0xee12eb90 // vmov.32 lr, d18[0]
+ .long 0xee334b90 // vmov.32 r4, d19[1]
+ .long 0xee325b90 // vmov.32 r5, d18[1]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xf4e3183f // vld1.32 {d17[0]}, [r3 :32]
+ .long 0xe082310e // add r3, r2, lr, lsl #2
+ .long 0xf4e3083f // vld1.32 {d16[0]}, [r3 :32]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe0822105 // add r2, r2, r5, lsl #2
+ .long 0xf4e318bf // vld1.32 {d17[1]}, [r3 :32]
+ .long 0xf4e208bf // vld1.32 {d16[1]}, [r2 :32]
+ .long 0xe28f2044 // add r2, pc, #68
+ .long 0xf3f84070 // vshr.u32 q10, q8, #8
+ .long 0xf24061f2 // vand q11, q8, q9
+ .long 0xf3e88070 // vshr.u32 q12, q8, #24
+ .long 0xf3f00070 // vshr.u32 q8, q8, #16
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24001f2 // vand q8, q8, q9
+ .long 0xf3fb2664 // vcvt.f32.s32 q9, q10
+ .long 0xf4624acf // vld1.64 {d20-d21}, [r2]
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb8668 // vcvt.f32.s32 q12, q12
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3060df4 // vmul.f32 q0, q11, q10
+ .long 0xf3086df4 // vmul.f32 q3, q12, q10
+ .long 0xf3022df4 // vmul.f32 q1, q9, q10
+ .long 0xf3004df4 // vmul.f32 q2, q8, q10
+ .long 0xe8bd4830 // pop {r4, r5, fp, lr}
.long 0xe12fff1c // bx ip
.long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_store_8888_vfp4
.globl _sk_store_8888_vfp4
FUNCTION(_sk_store_8888_vfp4)
_sk_store_8888_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xeddf0b21 // vldr d16, [pc, #132]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2412c30 // vfma.f32 d18, d1, d16
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2423c30 // vfma.f32 d19, d2, d16
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf2401c30 // vfma.f32 d17, d0, d16
- .long 0xe3550001 // cmp r5, #1
- .long 0xf2434c30 // vfma.f32 d20, d3, d16
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf3fb07a2 // vcvt.u32.f32 d16, d18
- .long 0xf3fb27a3 // vcvt.u32.f32 d18, d19
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xf3fb37a4 // vcvt.u32.f32 d19, d20
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0xf2e80530 // vshl.s32 d16, d16, #8
- .long 0xf2f02532 // vshl.s32 d18, d18, #16
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0xf2f81533 // vshl.s32 d17, d19, #24
- .long 0xf26001b2 // vorr d16, d16, d18
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0x0a000004 // beq 3520 <sk_store_8888_vfp4+0x88>
- .long 0xedcc0b00 // vstr d16, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe28f20bc // add r2, pc, #188
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xf2444c72 // vfma.f32 q10, q2, q9
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2426c72 // vfma.f32 q11, q1, q9
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xf2400c72 // vfma.f32 q8, q0, q9
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xf2468c72 // vfma.f32 q12, q3, q9
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xf3fb27e4 // vcvt.u32.f32 q9, q10
+ .long 0xf3fb47e6 // vcvt.u32.f32 q10, q11
+ .long 0xf3fb07e0 // vcvt.u32.f32 q8, q8
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082210e // add r2, r2, lr, lsl #2
+ .long 0xf3fb67e8 // vcvt.u32.f32 q11, q12
+ .long 0xf2e84574 // vshl.s32 q10, q10, #8
+ .long 0xf2f02572 // vshl.s32 q9, q9, #16
+ .long 0xf26401f0 // vorr q8, q10, q8
+ .long 0xf2f84576 // vshl.s32 q10, q11, #24
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xf26001f4 // vorr q8, q8, q10
+ .long 0x1a000004 // bne 4b10 <sk_store_8888_vfp4+0x90>
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xf4cc083f // vst1.32 {d16[0]}, [ip :32]
- .long 0xeafffff9 // b 3510 <sk_store_8888_vfp4+0x78>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000007 // beq 4b3c <sk_store_8888_vfp4+0xbc>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 4b34 <sk_store_8888_vfp4+0xb4>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1afffff4 // bne 4b00 <sk_store_8888_vfp4+0x80>
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4c3183f // vst1.32 {d17[0]}, [r3 :32]
+ .long 0xedc20b00 // vstr d16, [r2]
+ .long 0xeafffff0 // b 4b00 <sk_store_8888_vfp4+0x80>
+ .long 0xf4c2083f // vst1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffee // b 4b00 <sk_store_8888_vfp4+0x80>
+ .long 0xe320f000 // nop {0}
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
@@ -9407,169 +10825,241 @@ HIDDEN _sk_load_bgra_vfp4
.globl _sk_load_bgra_vfp4
FUNCTION(_sk_load_bgra_vfp4)
_sk_load_bgra_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0x0a000014 // beq 35ac <sk_load_bgra_vfp4+0x7c>
- .long 0xed9c0b00 // vldr d0, [ip]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3f01010 // vshr.u32 d17, d0, #16
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082210e // add r2, r2, lr, lsl #2
+ .long 0x1a000015 // bne 4bdc <sk_load_bgra_vfp4+0x84>
+ .long 0xf4620a8f // vld1.32 {d16-d17}, [r2]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe28f209c // add r2, pc, #156
+ .long 0xf3f04070 // vshr.u32 q10, q8, #16
+ .long 0xf3f88070 // vshr.u32 q12, q8, #8
+ .long 0xf3e86070 // vshr.u32 q11, q8, #24
+ .long 0xf24001f2 // vand q8, q8, q9
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24821f2 // vand q9, q12, q9
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf3f83010 // vshr.u32 d19, d0, #8
- .long 0xf3e82010 // vshr.u32 d18, d0, #24
- .long 0xf24111b0 // vand d17, d17, d16
- .long 0xf2404130 // vand d20, d0, d16
- .long 0xf24301b0 // vand d16, d19, d16
- .long 0xf3fb3624 // vcvt.f32.s32 d19, d20
- .long 0xeddf4b0b // vldr d20, [pc, #44]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3032db4 // vmul.f32 d2, d19, d20
- .long 0xf3023db4 // vmul.f32 d3, d18, d20
- .long 0xf3010db4 // vmul.f32 d0, d17, d20
- .long 0xf3001db4 // vmul.f32 d1, d16, d20
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf0a03 // vldr s1, [pc, #12]
- .long 0xed9c0a00 // vldr s0, [ip]
- .long 0xeaffffe8 // b 355c <sk_load_bgra_vfp4+0x2c>
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf3066df8 // vmul.f32 q3, q11, q12
+ .long 0xf3004df8 // vmul.f32 q2, q8, q12
+ .long 0xf3040df8 // vmul.f32 q0, q10, q12
+ .long 0xf3022df8 // vmul.f32 q1, q9, q12
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a00000c // beq 4c1c <sk_load_bgra_vfp4+0xc4>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000005 // beq 4c0c <sk_load_bgra_vfp4+0xb4>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1affffe2 // bne 4b88 <sk_load_bgra_vfp4+0x30>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4e3183f // vld1.32 {d17[0]}, [r3 :32]
+ .long 0xedd22b00 // vldr d18, [r2]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffda // b 4b88 <sk_load_bgra_vfp4+0x30>
+ .long 0xe3a03000 // mov r3, #0
+ .long 0xeea03b90 // vdup.32 q8, r3
+ .long 0xf4e2083f // vld1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffd6 // b 4b88 <sk_load_bgra_vfp4+0x30>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_load_bgra_dst_vfp4
.globl _sk_load_bgra_dst_vfp4
FUNCTION(_sk_load_bgra_dst_vfp4)
_sk_load_bgra_dst_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852102 // add r2, r5, r2, lsl #2
+ .long 0xe0824103 // add r4, r2, r3, lsl #2
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a00001a // bne 4ce4 <sk_load_bgra_dst_vfp4+0xa4>
+ .long 0xf4640a8f // vld1.32 {d16-d17}, [r4]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe28f40b0 // add r4, pc, #176
+ .long 0xf3f84070 // vshr.u32 q10, q8, #8
+ .long 0xf3f08070 // vshr.u32 q12, q8, #16
+ .long 0xf24061f2 // vand q11, q8, q9
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24821f2 // vand q9, q12, q9
+ .long 0xf4648acf // vld1.64 {d24-d25}, [r4]
+ .long 0xf3e80070 // vshr.u32 q8, q8, #24
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb2662 // vcvt.f32.s32 q9, q9
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3466df8 // vmul.f32 q11, q11, q12
+ .long 0xf3444df8 // vmul.f32 q10, q10, q12
+ .long 0xf3422df8 // vmul.f32 q9, q9, q12
+ .long 0xf3400df8 // vmul.f32 q8, q8, q12
+ .long 0xf44e6aef // vst1.64 {d22-d23}, [lr :128]
+ .long 0xf4424aef // vst1.64 {d20-d21}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf4432aef // vst1.64 {d18-d19}, [r3 :128]
+ .long 0xf44c0aef // vst1.64 {d16-d17}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xe2065003 // and r5, r6, #3
.long 0xe3550001 // cmp r5, #1
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0x0a000014 // beq 3644 <sk_load_bgra_dst_vfp4+0x7c>
- .long 0xed9c4b00 // vldr d4, [ip]
- .long 0xf3c7001f // vmov.i32 d16, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3f01014 // vshr.u32 d17, d4, #16
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf3f83014 // vshr.u32 d19, d4, #8
- .long 0xf3e82014 // vshr.u32 d18, d4, #24
- .long 0xf24111b0 // vand d17, d17, d16
- .long 0xf2444130 // vand d20, d4, d16
- .long 0xf24301b0 // vand d16, d19, d16
- .long 0xf3fb3624 // vcvt.f32.s32 d19, d20
- .long 0xeddf4b0b // vldr d20, [pc, #44]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb1621 // vcvt.f32.s32 d17, d17
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3036db4 // vmul.f32 d6, d19, d20
- .long 0xf3027db4 // vmul.f32 d7, d18, d20
- .long 0xf3014db4 // vmul.f32 d4, d17, d20
- .long 0xf3005db4 // vmul.f32 d5, d16, d20
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xeddf4a03 // vldr s9, [pc, #12]
- .long 0xed9c4a00 // vldr s8, [ip]
- .long 0xeaffffe8 // b 35f4 <sk_load_bgra_dst_vfp4+0x2c>
+ .long 0x0a00000c // beq 4d24 <sk_load_bgra_dst_vfp4+0xe4>
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe3550002 // cmp r5, #2
+ .long 0x0a000005 // beq 4d14 <sk_load_bgra_dst_vfp4+0xd4>
+ .long 0xe3550003 // cmp r5, #3
+ .long 0x1affffdd // bne 4c7c <sk_load_bgra_dst_vfp4+0x3c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xeea05b90 // vdup.32 q8, r5
+ .long 0xe2845008 // add r5, r4, #8
+ .long 0xf4e5183f // vld1.32 {d17[0]}, [r5 :32]
+ .long 0xedd42b00 // vldr d18, [r4]
+ .long 0xf2f008e2 // vext.8 q8, q8, q9, #8
+ .long 0xf2f008e0 // vext.8 q8, q8, q8, #8
+ .long 0xeaffffd5 // b 4c7c <sk_load_bgra_dst_vfp4+0x3c>
+ .long 0xe3a05000 // mov r5, #0
+ .long 0xeea05b90 // vdup.32 q8, r5
+ .long 0xf4e4083f // vld1.32 {d16[0]}, [r4 :32]
+ .long 0xeaffffd1 // b 4c7c <sk_load_bgra_dst_vfp4+0x3c>
+ .long 0xe320f000 // nop {0}
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
- .long 0x00000000 // .word 0x00000000
- .long 0xe320f000 // .word 0xe320f000
HIDDEN _sk_gather_bgra_vfp4
.globl _sk_gather_bgra_vfp4
FUNCTION(_sk_gather_bgra_vfp4)
_sk_gather_bgra_vfp4:
- .long 0xe92d4070 // push {r4, r5, r6, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4830 // push {r4, r5, fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xe49e4004 // ldr r4, [lr], #4
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xee11eb90 // vmov.32 lr, d17[0]
- .long 0xee316b90 // vmov.32 r6, d17[1]
- .long 0xf3c7101f // vmov.i32 d17, #255
- .long 0xe084510e // add r5, r4, lr, lsl #2
- .long 0xe0846106 // add r6, r4, r6, lsl #2
- .long 0xf4e5083f // vld1.32 {d16[0]}, [r5 :32]
- .long 0xf4e608bf // vld1.32 {d16[1]}, [r6 :32]
- .long 0xf24021b1 // vand d18, d16, d17
- .long 0xf3f03030 // vshr.u32 d19, d16, #16
- .long 0xf3e84030 // vshr.u32 d20, d16, #24
- .long 0xf3f80030 // vshr.u32 d16, d16, #8
- .long 0xf24331b1 // vand d19, d19, d17
- .long 0xf24001b1 // vand d16, d16, d17
- .long 0xeddf1b0a // vldr d17, [pc, #40]
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb4624 // vcvt.f32.s32 d20, d20
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3022db1 // vmul.f32 d2, d18, d17
- .long 0xf3043db1 // vmul.f32 d3, d20, d17
- .long 0xf3030db1 // vmul.f32 d0, d19, d17
- .long 0xf3001db1 // vmul.f32 d1, d16, d17
- .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4932004 // ldr r2, [r3], #4
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xee133b90 // vmov.32 r3, d19[0]
+ .long 0xee12eb90 // vmov.32 lr, d18[0]
+ .long 0xee334b90 // vmov.32 r4, d19[1]
+ .long 0xee325b90 // vmov.32 r5, d18[1]
+ .long 0xf3c7205f // vmov.i32 q9, #255
+ .long 0xe0823103 // add r3, r2, r3, lsl #2
+ .long 0xf4e3183f // vld1.32 {d17[0]}, [r3 :32]
+ .long 0xe082310e // add r3, r2, lr, lsl #2
+ .long 0xf4e3083f // vld1.32 {d16[0]}, [r3 :32]
+ .long 0xe0823104 // add r3, r2, r4, lsl #2
+ .long 0xe0822105 // add r2, r2, r5, lsl #2
+ .long 0xf4e318bf // vld1.32 {d17[1]}, [r3 :32]
+ .long 0xf4e208bf // vld1.32 {d16[1]}, [r2 :32]
+ .long 0xe28f2044 // add r2, pc, #68
+ .long 0xf3f04070 // vshr.u32 q10, q8, #16
+ .long 0xf24061f2 // vand q11, q8, q9
+ .long 0xf3e88070 // vshr.u32 q12, q8, #24
+ .long 0xf3f80070 // vshr.u32 q8, q8, #8
+ .long 0xf24441f2 // vand q10, q10, q9
+ .long 0xf24001f2 // vand q8, q8, q9
+ .long 0xf3fb2664 // vcvt.f32.s32 q9, q10
+ .long 0xf4624acf // vld1.64 {d20-d21}, [r2]
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3fb8668 // vcvt.f32.s32 q12, q12
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3064df4 // vmul.f32 q2, q11, q10
+ .long 0xf3086df4 // vmul.f32 q3, q12, q10
+ .long 0xf3020df4 // vmul.f32 q0, q9, q10
+ .long 0xf3002df4 // vmul.f32 q1, q8, q10
+ .long 0xe8bd4830 // pop {r4, r5, fp, lr}
.long 0xe12fff1c // bx ip
.long 0xe320f000 // nop {0}
.long 0x3b808081 // .word 0x3b808081
.long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
+ .long 0x3b808081 // .word 0x3b808081
HIDDEN _sk_store_bgra_vfp4
.globl _sk_store_bgra_vfp4
FUNCTION(_sk_store_bgra_vfp4)
_sk_store_bgra_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xeddf0b21 // vldr d16, [pc, #132]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2402c30 // vfma.f32 d18, d0, d16
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2413c30 // vfma.f32 d19, d1, d16
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf2421c30 // vfma.f32 d17, d2, d16
- .long 0xe3550001 // cmp r5, #1
- .long 0xf2434c30 // vfma.f32 d20, d3, d16
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf3fb07a2 // vcvt.u32.f32 d16, d18
- .long 0xf3fb27a3 // vcvt.u32.f32 d18, d19
- .long 0xf3fb17a1 // vcvt.u32.f32 d17, d17
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xf3fb37a4 // vcvt.u32.f32 d19, d20
- .long 0xe084c102 // add ip, r4, r2, lsl #2
- .long 0xf2f00530 // vshl.s32 d16, d16, #16
- .long 0xf2e82532 // vshl.s32 d18, d18, #8
- .long 0xf26101b0 // vorr d16, d17, d16
- .long 0xf2f81533 // vshl.s32 d17, d19, #24
- .long 0xf26001b2 // vorr d16, d16, d18
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0x0a000004 // beq 3778 <sk_store_bgra_vfp4+0x88>
- .long 0xedcc0b00 // vstr d16, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe28f20bc // add r2, pc, #188
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xf2424c72 // vfma.f32 q10, q1, q9
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2406c72 // vfma.f32 q11, q0, q9
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xf2440c72 // vfma.f32 q8, q2, q9
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xf2468c72 // vfma.f32 q12, q3, q9
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xf3fb27e4 // vcvt.u32.f32 q9, q10
+ .long 0xf3fb47e6 // vcvt.u32.f32 q10, q11
+ .long 0xf3fb07e0 // vcvt.u32.f32 q8, q8
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082210e // add r2, r2, lr, lsl #2
+ .long 0xf3fb67e8 // vcvt.u32.f32 q11, q12
+ .long 0xf2f04574 // vshl.s32 q10, q10, #16
+ .long 0xf2e82572 // vshl.s32 q9, q9, #8
+ .long 0xf26001f4 // vorr q8, q8, q10
+ .long 0xf2f84576 // vshl.s32 q10, q11, #24
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xf26001f4 // vorr q8, q8, q10
+ .long 0x1a000004 // bne 4e88 <sk_store_bgra_vfp4+0x90>
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xf4cc083f // vst1.32 {d16[0]}, [ip :32]
- .long 0xeafffff9 // b 3768 <sk_store_bgra_vfp4+0x78>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe20c3003 // and r3, ip, #3
+ .long 0xe3530001 // cmp r3, #1
+ .long 0x0a000007 // beq 4eb4 <sk_store_bgra_vfp4+0xbc>
+ .long 0xe3530002 // cmp r3, #2
+ .long 0x0a000003 // beq 4eac <sk_store_bgra_vfp4+0xb4>
+ .long 0xe3530003 // cmp r3, #3
+ .long 0x1afffff4 // bne 4e78 <sk_store_bgra_vfp4+0x80>
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xf4c3183f // vst1.32 {d17[0]}, [r3 :32]
+ .long 0xedc20b00 // vstr d16, [r2]
+ .long 0xeafffff0 // b 4e78 <sk_store_bgra_vfp4+0x80>
+ .long 0xf4c2083f // vst1.32 {d16[0]}, [r2 :32]
+ .long 0xeaffffee // b 4e78 <sk_store_bgra_vfp4+0x80>
+ .long 0xe320f000 // nop {0}
+ .long 0x437f0000 // .word 0x437f0000
+ .long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
.long 0x437f0000 // .word 0x437f0000
@@ -9577,57 +11067,79 @@ HIDDEN _sk_load_f16_vfp4
.globl _sk_load_f16_vfp4
FUNCTION(_sk_load_f16_vfp4)
_sk_load_f16_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08ec18c // add ip, lr, ip, lsl #3
- .long 0xe59de008 // ldr lr, [sp, #8]
- .long 0xe08cc182 // add ip, ip, r2, lsl #3
- .long 0xe35e0000 // cmp lr, #0
- .long 0xf4ec070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [ip]
- .long 0x1a000001 // bne 37bc <sk_load_f16_vfp4+0x34>
- .long 0xe28cc008 // add ip, ip, #8
- .long 0xf4ec074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [ip]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901004 // ldmib r0, {r2, ip}
+ .long 0xe5934000 // ldr r4, [r3]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5933004 // ldr r3, [r3, #4]
+ .long 0xe0020293 // mul r2, r3, r2
+ .long 0xe0842182 // add r2, r4, r2, lsl #3
+ .long 0xe082318e // add r3, r2, lr, lsl #3
+ .long 0x1a000008 // bne 4f20 <sk_load_f16_vfp4+0x50>
+ .long 0xf463004f // vld4.16 {d16-d19}, [r3]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xf3b60720 // vcvt.f32.f16 q0, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf3b62722 // vcvt.f32.f16 q1, d18
- .long 0xf3f64721 // vcvt.f32.f16 q10, d17
- .long 0xf3f60723 // vcvt.f32.f16 q8, d19
- .long 0xf22411b4 // vorr d1, d20, d20
- .long 0xf22031b0 // vorr d3, d16, d16
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf3b62721 // vcvt.f32.f16 q1, d17
+ .long 0xf3b64722 // vcvt.f32.f16 q2, d18
+ .long 0xf3b66723 // vcvt.f32.f16 q3, d19
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xf4e3070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [r3]
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0x0afffff4 // beq 4f00 <sk_load_f16_vfp4+0x30>
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4e2074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r2]
+ .long 0x3afffff0 // bcc 4f00 <sk_load_f16_vfp4+0x30>
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4e2078f // vld4.16 {d16[2],d17[2],d18[2],d19[2]}, [r2]
+ .long 0xeaffffed // b 4f00 <sk_load_f16_vfp4+0x30>
HIDDEN _sk_load_f16_dst_vfp4
.globl _sk_load_f16_dst_vfp4
FUNCTION(_sk_load_f16_dst_vfp4)
_sk_load_f16_dst_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08ec18c // add ip, lr, ip, lsl #3
- .long 0xe59de008 // ldr lr, [sp, #8]
- .long 0xe08cc182 // add ip, ip, r2, lsl #3
- .long 0xe35e0000 // cmp lr, #0
- .long 0xf4ec070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [ip]
- .long 0x1a000001 // bne 3818 <sk_load_f16_dst_vfp4+0x34>
- .long 0xe28cc008 // add ip, ip, #8
- .long 0xf4ec074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [ip]
- .long 0xf3b64720 // vcvt.f32.f16 q2, d16
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xf3b66722 // vcvt.f32.f16 q3, d18
- .long 0xf3f64721 // vcvt.f32.f16 q10, d17
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900068 // ldm r0, {r3, r5, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020592 // mul r2, r2, r5
+ .long 0xe0842182 // add r2, r4, r2, lsl #3
+ .long 0xe0825183 // add r5, r2, r3, lsl #3
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a00000d // bne 4fb8 <sk_load_f16_dst_vfp4+0x70>
+ .long 0xf465004f // vld4.16 {d16-d19}, [r5]
+ .long 0xf3f64720 // vcvt.f32.f16 q10, d16
+ .long 0xf3f66721 // vcvt.f32.f16 q11, d17
+ .long 0xf3f68722 // vcvt.f32.f16 q12, d18
.long 0xf3f60723 // vcvt.f32.f16 q8, d19
- .long 0xf22451b4 // vorr d5, d20, d20
- .long 0xf22071b0 // vorr d7, d16, d16
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4434aef // vst1.64 {d20-d21}, [r3 :128]
+ .long 0xf4426aef // vst1.64 {d22-d23}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf44e8aef // vst1.64 {d24-d25}, [lr :128]
+ .long 0xf44c0aef // vst1.64 {d16-d17}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xf4e5070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [r5]
+ .long 0xe3560001 // cmp r6, #1
+ .long 0x0affffef // beq 4f84 <sk_load_f16_dst_vfp4+0x3c>
+ .long 0xe2854008 // add r4, r5, #8
+ .long 0xe3560003 // cmp r6, #3
+ .long 0xf4e4074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r4]
+ .long 0x3affffeb // bcc 4f84 <sk_load_f16_dst_vfp4+0x3c>
+ .long 0xe2854010 // add r4, r5, #16
+ .long 0xf4e4078f // vld4.16 {d16[2],d17[2],d18[2],d19[2]}, [r4]
+ .long 0xeaffffe8 // b 4f84 <sk_load_f16_dst_vfp4+0x3c>
HIDDEN _sk_gather_f16_vfp4
.globl _sk_gather_f16_vfp4
@@ -9635,36 +11147,38 @@ FUNCTION(_sk_gather_f16_vfp4)
_sk_gather_f16_vfp4:
.long 0xe92d4c10 // push {r4, sl, fp, lr}
.long 0xe28db008 // add fp, sp, #8
- .long 0xe24dd020 // sub sp, sp, #32
- .long 0xe7c3d01f // bfc sp, #0, #4
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf3fb0701 // vcvt.s32.f32 d16, d1
- .long 0xf3fb1700 // vcvt.s32.f32 d17, d0
- .long 0xe49ce004 // ldr lr, [ip], #4
- .long 0xf4ec2c9f // vld1.32 {d18[]}, [ip :32]
- .long 0xf26219a0 // vmla.i32 d17, d18, d16
- .long 0xee314b90 // vmov.32 r4, d17[1]
- .long 0xee11cb90 // vmov.32 ip, d17[0]
- .long 0xe08e4184 // add r4, lr, r4, lsl #3
- .long 0xe08ec18c // add ip, lr, ip, lsl #3
- .long 0xedd41b00 // vldr d17, [r4]
- .long 0xe28d4010 // add r4, sp, #16
- .long 0xeddc0b00 // vldr d16, [ip]
- .long 0xe59bc008 // ldr ip, [fp, #8]
- .long 0xf4440aef // vst1.64 {d16-d17}, [r4 :128]
- .long 0xf4e4071f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [r4 :64]
- .long 0xe3844008 // orr r4, r4, #8
- .long 0xf4e4075f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r4 :64]
+ .long 0xe24dd030 // sub sp, sp, #48
+ .long 0xe7c4d01f // bfc sp, #0, #5
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf3fb0742 // vcvt.s32.f32 q8, q1
+ .long 0xf3fb2740 // vcvt.s32.f32 q9, q0
+ .long 0xe4923004 // ldr r3, [r2], #4
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xf26429e0 // vmla.i32 q9, q10, q8
+ .long 0xee33cb90 // vmov.32 ip, d19[1]
+ .long 0xee322b90 // vmov.32 r2, d18[1]
+ .long 0xee13eb90 // vmov.32 lr, d19[0]
+ .long 0xee124b90 // vmov.32 r4, d18[0]
+ .long 0xe083c18c // add ip, r3, ip, lsl #3
+ .long 0xe0832182 // add r2, r3, r2, lsl #3
+ .long 0xe083e18e // add lr, r3, lr, lsl #3
+ .long 0xeddc3b00 // vldr d19, [ip]
+ .long 0xedd21b00 // vldr d17, [r2]
+ .long 0xe0832184 // add r2, r3, r4, lsl #3
+ .long 0xedde2b00 // vldr d18, [lr]
+ .long 0xedd20b00 // vldr d16, [r2]
+ .long 0xe1a0200d // mov r2, sp
+ .long 0xe3823010 // orr r3, r2, #16
+ .long 0xf4432aef // vst1.64 {d18-d19}, [r3 :128]
+ .long 0xf4420aef // vst1.64 {d16-d17}, [r2 :128]
+ .long 0xf462007f // vld4.16 {d16-d19}, [r2 :256]
.long 0xf3b60720 // vcvt.f32.f16 q0, d16
- .long 0xf3b62722 // vcvt.f32.f16 q1, d18
- .long 0xe5914004 // ldr r4, [r1, #4]
+ .long 0xf3b62721 // vcvt.f32.f16 q1, d17
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe58dc000 // str ip, [sp]
- .long 0xf3f64721 // vcvt.f32.f16 q10, d17
- .long 0xf3f60723 // vcvt.f32.f16 q8, d19
- .long 0xf22411b4 // vorr d1, d20, d20
- .long 0xf22031b0 // vorr d3, d16, d16
- .long 0xe12fff34 // blx r4
+ .long 0xf3b64722 // vcvt.f32.f16 q2, d18
+ .long 0xf3b66723 // vcvt.f32.f16 q3, d19
+ .long 0xe12fff32 // blx r2
.long 0xe24bd008 // sub sp, fp, #8
.long 0xe8bd8c10 // pop {r4, sl, fp, pc}
@@ -9672,101 +11186,95 @@ HIDDEN _sk_store_f16_vfp4
.globl _sk_store_f16_vfp4
FUNCTION(_sk_store_f16_vfp4)
_sk_store_f16_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2630113 // vorr d16, d3, d3
- .long 0xf2612111 // vorr d18, d1, d1
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf3f67620 // vcvt.f16.f32 d23, q8
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550000 // cmp r5, #0
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf3f66602 // vcvt.f16.f32 d22, q1
- .long 0xf3f65622 // vcvt.f16.f32 d21, q9
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf3f64600 // vcvt.f16.f32 d20, q0
- .long 0xe08e418c // add r4, lr, ip, lsl #3
- .long 0xe084c182 // add ip, r4, r2, lsl #3
- .long 0xf4cc470f // vst4.16 {d20[0],d21[0],d22[0],d23[0]}, [ip]
- .long 0x1a000001 // bne 3914 <sk_store_f16_vfp4+0x4c>
- .long 0xe28c5008 // add r5, ip, #8
- .long 0xf4c5474f // vst4.16 {d20[1],d21[1],d22[1],d23[1]}, [r5]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf3f63606 // vcvt.f16.f32 d19, q3
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xf3f62604 // vcvt.f16.f32 d18, q2
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xf3f61602 // vcvt.f16.f32 d17, q1
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xf3f60600 // vcvt.f16.f32 d16, q0
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842182 // add r2, r4, r2, lsl #3
+ .long 0xe082218e // add r2, r2, lr, lsl #3
+ .long 0x1a000004 // bne 50c0 <sk_store_f16_vfp4+0x50>
+ .long 0xf442004f // vst4.16 {d16-d19}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf22211b2 // vorr d1, d18, d18
- .long 0xf22031b0 // vorr d3, d16, d16
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0xf4c2070f // vst4.16 {d16[0],d17[0],d18[0],d19[0]}, [r2]
+ .long 0x0afffff8 // beq 50b0 <sk_store_f16_vfp4+0x40>
+ .long 0xe2823008 // add r3, r2, #8
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4c3074f // vst4.16 {d16[1],d17[1],d18[1],d19[1]}, [r3]
+ .long 0x3afffff4 // bcc 50b0 <sk_store_f16_vfp4+0x40>
+ .long 0xe2822010 // add r2, r2, #16
+ .long 0xf4c2078f // vst4.16 {d16[2],d17[2],d18[2],d19[2]}, [r2]
+ .long 0xeafffff1 // b 50b0 <sk_store_f16_vfp4+0x40>
HIDDEN _sk_load_u16_be_vfp4
.globl _sk_load_u16_be_vfp4
FUNCTION(_sk_load_u16_be_vfp4)
_sk_load_u16_be_vfp4:
- .long 0xe92d4bf0 // push {r4, r5, r6, r7, r8, r9, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08ec08c // add ip, lr, ip, lsl #1
- .long 0xe59de020 // ldr lr, [sp, #32]
- .long 0xe08cc182 // add ip, ip, r2, lsl #3
- .long 0xe35e0000 // cmp lr, #0
- .long 0xf4ec070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [ip]
- .long 0x1a000001 // bne 3964 <sk_load_u16_be_vfp4+0x34>
- .long 0xe28cc008 // add ip, ip, #8
- .long 0xf4ec074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [ip]
- .long 0xee90cbb0 // vmov.u16 ip, d16[0]
- .long 0xee937bb0 // vmov.u16 r7, d19[0]
- .long 0xee92ebb0 // vmov.u16 lr, d18[0]
- .long 0xee914bb0 // vmov.u16 r4, d17[0]
- .long 0xee905bf0 // vmov.u16 r5, d16[1]
- .long 0xee939bf0 // vmov.u16 r9, d19[1]
- .long 0xf3c73c1f // vmov.i32 d19, #65535
- .long 0xee926bf0 // vmov.u16 r6, d18[1]
- .long 0xee918bf0 // vmov.u16 r8, d17[1]
- .long 0xee00cb90 // vmov.32 d16[0], ip
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901004 // ldmib r0, {r2, ip}
+ .long 0xe5934000 // ldr r4, [r3]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5933004 // ldr r3, [r3, #4]
+ .long 0xe0020293 // mul r2, r3, r2
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xe082318e // add r3, r2, lr, lsl #3
+ .long 0x1a00001e // bne 5190 <sk_load_u16_be_vfp4+0xa8>
+ .long 0xf463004f // vld4.16 {d16-d19}, [r3]
+ .long 0xf3d84030 // vshr.u16 d20, d16, #8
+ .long 0xe28f2094 // add r2, pc, #148
+ .long 0xf2d85530 // vshl.s16 d21, d16, #8
+ .long 0xf3d86031 // vshr.u16 d22, d17, #8
+ .long 0xf2d87531 // vshl.s16 d23, d17, #8
+ .long 0xf2d80533 // vshl.s16 d16, d19, #8
+ .long 0xf3d8a033 // vshr.u16 d26, d19, #8
+ .long 0xf3d88032 // vshr.u16 d24, d18, #8
+ .long 0xf2d89532 // vshl.s16 d25, d18, #8
+ .long 0xf26511b4 // vorr d17, d21, d20
+ .long 0xf26721b6 // vorr d18, d23, d22
+ .long 0xf26931b8 // vorr d19, d25, d24
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xf26001ba // vorr d16, d16, d26
+ .long 0xf3d04a31 // vmovl.u16 q10, d17
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf3d06a32 // vmovl.u16 q11, d18
.long 0xe2811008 // add r1, r1, #8
- .long 0xee01eb90 // vmov.32 d17[0], lr
- .long 0xee024b90 // vmov.32 d18[0], r4
- .long 0xee047b90 // vmov.32 d20[0], r7
- .long 0xee205b90 // vmov.32 d16[1], r5
- .long 0xf24051b3 // vand d21, d16, d19
- .long 0xee216b90 // vmov.32 d17[1], r6
- .long 0xf2e80530 // vshl.s32 d16, d16, #8
- .long 0xee228b90 // vmov.32 d18[1], r8
- .long 0xf24161b3 // vand d22, d17, d19
- .long 0xf3f85035 // vshr.u32 d21, d21, #8
- .long 0xee249b90 // vmov.32 d20[1], r9
- .long 0xf24271b3 // vand d23, d18, d19
- .long 0xf26001b5 // vorr d16, d16, d21
- .long 0xf24481b3 // vand d24, d20, d19
- .long 0xf2e82532 // vshl.s32 d18, d18, #8
- .long 0xf3f87037 // vshr.u32 d23, d23, #8
- .long 0xf2e81531 // vshl.s32 d17, d17, #8
- .long 0xf3f86036 // vshr.u32 d22, d22, #8
- .long 0xf2e84534 // vshl.s32 d20, d20, #8
- .long 0xf3f85038 // vshr.u32 d21, d24, #8
- .long 0xf26221b7 // vorr d18, d18, d23
- .long 0xf26111b6 // vorr d17, d17, d22
- .long 0xf26441b5 // vorr d20, d20, d21
- .long 0xf24001b3 // vand d16, d16, d19
- .long 0xf24221b3 // vand d18, d18, d19
- .long 0xf24111b3 // vand d17, d17, d19
- .long 0xf24431b3 // vand d19, d20, d19
- .long 0xeddf4b0a // vldr d20, [pc, #40]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3fb26a2 // vcvt.f32.u32 d18, d18
- .long 0xf3fb16a1 // vcvt.f32.u32 d17, d17
- .long 0xf3fb36a3 // vcvt.f32.u32 d19, d19
- .long 0xf3000db4 // vmul.f32 d0, d16, d20
- .long 0xf3021db4 // vmul.f32 d1, d18, d20
- .long 0xf3012db4 // vmul.f32 d2, d17, d20
- .long 0xf3033db4 // vmul.f32 d3, d19, d20
- .long 0xe8bd4bf0 // pop {r4, r5, r6, r7, r8, r9, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf3d02a33 // vmovl.u16 q9, d19
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3fb46e4 // vcvt.f32.u32 q10, q10
+ .long 0xf3fb66e6 // vcvt.f32.u32 q11, q11
+ .long 0xf3fb26e2 // vcvt.f32.u32 q9, q9
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3040df8 // vmul.f32 q0, q10, q12
+ .long 0xf3062df8 // vmul.f32 q1, q11, q12
+ .long 0xf3024df8 // vmul.f32 q2, q9, q12
+ .long 0xf3006df8 // vmul.f32 q3, q8, q12
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xf4e3070f // vld4.16 {d16[0],d17[0],d18[0],d19[0]}, [r3]
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0x0affffde // beq 5118 <sk_load_u16_be_vfp4+0x30>
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4e2074f // vld4.16 {d16[1],d17[1],d18[1],d19[1]}, [r2]
+ .long 0x3affffda // bcc 5118 <sk_load_u16_be_vfp4+0x30>
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4e2078f // vld4.16 {d16[2],d17[2],d18[2],d19[2]}, [r2]
+ .long 0xeaffffd7 // b 5118 <sk_load_u16_be_vfp4+0x30>
+ .long 0x37800080 // .word 0x37800080
+ .long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
@@ -9774,119 +11282,127 @@ HIDDEN _sk_load_rgb_u16_be_vfp4
.globl _sk_load_rgb_u16_be_vfp4
FUNCTION(_sk_load_rgb_u16_be_vfp4)
_sk_load_rgb_u16_be_vfp4:
- .long 0xe92d48f0 // push {r4, r5, r6, r7, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08ec08c // add ip, lr, ip, lsl #1
- .long 0xe082e082 // add lr, r2, r2, lsl #1
- .long 0xe08cc08e // add ip, ip, lr, lsl #1
- .long 0xe59de018 // ldr lr, [sp, #24]
- .long 0xf4ec060f // vld3.16 {d16[0],d17[0],d18[0]}, [ip]
- .long 0xe35e0000 // cmp lr, #0
- .long 0x1a000001 // bne 3a70 <sk_load_rgb_u16_be_vfp4+0x38>
- .long 0xe28cc006 // add ip, ip, #6
- .long 0xf4ec064f // vld3.16 {d16[1],d17[1],d18[1]}, [ip]
- .long 0xee90cbb0 // vmov.u16 ip, d16[0]
- .long 0xf2873f10 // vmov.f32 d3, #1
- .long 0xee91ebb0 // vmov.u16 lr, d17[0]
- .long 0xee924bb0 // vmov.u16 r4, d18[0]
- .long 0xee927bf0 // vmov.u16 r7, d18[1]
- .long 0xf3c73c1f // vmov.i32 d19, #65535
- .long 0xee905bf0 // vmov.u16 r5, d16[1]
- .long 0xee916bf0 // vmov.u16 r6, d17[1]
- .long 0xee00cb90 // vmov.32 d16[0], ip
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901004 // ldmib r0, {r2, ip}
+ .long 0xe5934000 // ldr r4, [r3]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5933004 // ldr r3, [r3, #4]
+ .long 0xe0020293 // mul r2, r3, r2
+ .long 0xe08e308e // add r3, lr, lr, lsl #1
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xe0823083 // add r3, r2, r3, lsl #1
+ .long 0x1a00001a // bne 5264 <sk_load_rgb_u16_be_vfp4+0x9c>
+ .long 0xf463044f // vld3.16 {d16-d18}, [r3]
+ .long 0xf3d84030 // vshr.u16 d20, d16, #8
+ .long 0xe28f2088 // add r2, pc, #136
+ .long 0xf2d85530 // vshl.s16 d21, d16, #8
+ .long 0xf3d86031 // vshr.u16 d22, d17, #8
+ .long 0xf2d87531 // vshl.s16 d23, d17, #8
+ .long 0xf2d80532 // vshl.s16 d16, d18, #8
+ .long 0xf3d88032 // vshr.u16 d24, d18, #8
+ .long 0xf26721b6 // vorr d18, d23, d22
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf26511b4 // vorr d17, d21, d20
+ .long 0xe28f2074 // add r2, pc, #116
+ .long 0xf26001b8 // vorr d16, d16, d24
+ .long 0xf4226acf // vld1.64 {d6-d7}, [r2]
+ .long 0xf3d02a32 // vmovl.u16 q9, d18
+ .long 0xf3d04a31 // vmovl.u16 q10, d17
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
.long 0xe2811008 // add r1, r1, #8
- .long 0xee01eb90 // vmov.32 d17[0], lr
- .long 0xee024b90 // vmov.32 d18[0], r4
- .long 0xee205b90 // vmov.32 d16[1], r5
- .long 0xee216b90 // vmov.32 d17[1], r6
- .long 0xf24041b3 // vand d20, d16, d19
- .long 0xf2e80530 // vshl.s32 d16, d16, #8
- .long 0xee227b90 // vmov.32 d18[1], r7
- .long 0xf24151b3 // vand d21, d17, d19
- .long 0xf3f84034 // vshr.u32 d20, d20, #8
- .long 0xf24261b3 // vand d22, d18, d19
- .long 0xf2e81531 // vshl.s32 d17, d17, #8
- .long 0xf3f85035 // vshr.u32 d21, d21, #8
- .long 0xf2e82532 // vshl.s32 d18, d18, #8
- .long 0xf3f86036 // vshr.u32 d22, d22, #8
- .long 0xf26001b4 // vorr d16, d16, d20
- .long 0xf26111b5 // vorr d17, d17, d21
- .long 0xf26221b6 // vorr d18, d18, d22
- .long 0xf24001b3 // vand d16, d16, d19
- .long 0xf24111b3 // vand d17, d17, d19
- .long 0xf24221b3 // vand d18, d18, d19
- .long 0xeddf3b07 // vldr d19, [pc, #28]
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3fb16a1 // vcvt.f32.u32 d17, d17
- .long 0xf3fb26a2 // vcvt.f32.u32 d18, d18
- .long 0xf3000db3 // vmul.f32 d0, d16, d19
- .long 0xf3011db3 // vmul.f32 d1, d17, d19
- .long 0xf3022db3 // vmul.f32 d2, d18, d19
- .long 0xe8bd48f0 // pop {r4, r5, r6, r7, fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf3fb26e2 // vcvt.f32.u32 q9, q9
+ .long 0xf3fb46e4 // vcvt.f32.u32 q10, q10
+ .long 0xf3fb06e0 // vcvt.f32.u32 q8, q8
+ .long 0xf3022df6 // vmul.f32 q1, q9, q11
+ .long 0xf3040df6 // vmul.f32 q0, q10, q11
+ .long 0xf3004df6 // vmul.f32 q2, q8, q11
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xf4e3060f // vld3.16 {d16[0],d17[0],d18[0]}, [r3]
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0x0affffe2 // beq 51fc <sk_load_rgb_u16_be_vfp4+0x34>
+ .long 0xe2832006 // add r2, r3, #6
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4e2064f // vld3.16 {d16[1],d17[1],d18[1]}, [r2]
+ .long 0x3affffde // bcc 51fc <sk_load_rgb_u16_be_vfp4+0x34>
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf4e2068f // vld3.16 {d16[2],d17[2],d18[2]}, [r2]
+ .long 0xeaffffdb // b 51fc <sk_load_rgb_u16_be_vfp4+0x34>
+ .long 0xe320f000 // nop {0}
+ .long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
+ .long 0x37800080 // .word 0x37800080
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
HIDDEN _sk_store_u16_be_vfp4
.globl _sk_store_u16_be_vfp4
FUNCTION(_sk_store_u16_be_vfp4)
_sk_store_u16_be_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xeddf0b31 // vldr d16, [pc, #196]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2422c30 // vfma.f32 d18, d2, d16
- .long 0xf2433c30 // vfma.f32 d19, d3, d16
- .long 0xf2c3461f // vmov.i32 d20, #1056964608
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xf2414c30 // vfma.f32 d20, d1, d16
- .long 0xf2401c30 // vfma.f32 d17, d0, d16
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xf3fb07a2 // vcvt.u32.f32 d16, d18
- .long 0xf3fb27a3 // vcvt.u32.f32 d18, d19
- .long 0xf3c73c1f // vmov.i32 d19, #65535
- .long 0xf3fb47a4 // vcvt.u32.f32 d20, d20
- .long 0xe08e408c // add r4, lr, ip, lsl #1
- .long 0xf3fb57a1 // vcvt.u32.f32 d21, d17
- .long 0xe084c182 // add ip, r4, r2, lsl #3
- .long 0xf24261b3 // vand d22, d18, d19
- .long 0xf24011b3 // vand d17, d16, d19
- .long 0xf24471b3 // vand d23, d20, d19
- .long 0xf24581b3 // vand d24, d21, d19
- .long 0xf2e89530 // vshl.s32 d25, d16, #8
- .long 0xf3f80036 // vshr.u32 d16, d22, #8
- .long 0xf2e82532 // vshl.s32 d18, d18, #8
- .long 0xf3f8a031 // vshr.u32 d26, d17, #8
- .long 0xf26231b0 // vorr d19, d18, d16
- .long 0xf3f86037 // vshr.u32 d22, d23, #8
- .long 0xf2e84534 // vshl.s32 d20, d20, #8
- .long 0xf26921ba // vorr d18, d25, d26
- .long 0xf2e85535 // vshl.s32 d21, d21, #8
- .long 0xf3f87038 // vshr.u32 d23, d24, #8
- .long 0xf26411b6 // vorr d17, d20, d22
- .long 0xf26501b7 // vorr d16, d21, d23
- .long 0xf3f63124 // vuzp.16 d19, d20
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xf3f62124 // vuzp.16 d18, d20
- .long 0xe3550000 // cmp r5, #0
- .long 0xf3f61124 // vuzp.16 d17, d20
- .long 0xf3f60124 // vuzp.16 d16, d20
- .long 0xf4cc070f // vst4.16 {d16[0],d17[0],d18[0],d19[0]}, [ip]
- .long 0x1a000001 // bne 3bd4 <sk_store_u16_be_vfp4+0xbc>
- .long 0xe28c5008 // add r5, ip, #8
- .long 0xf4c5074f // vst4.16 {d16[1],d17[1],d18[1],d19[1]}, [r5]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe28f20d4 // add r2, pc, #212
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xf2440c72 // vfma.f32 q8, q2, q9
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xf2424c72 // vfma.f32 q10, q1, q9
+ .long 0xe9901004 // ldmib r0, {r2, ip}
+ .long 0xf2466c72 // vfma.f32 q11, q3, q9
+ .long 0xe5934000 // ldr r4, [r3]
+ .long 0xe5933004 // ldr r3, [r3, #4]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xf2c3865f // vmov.i32 q12, #1056964608
+ .long 0xf2408c72 // vfma.f32 q12, q0, q9
+ .long 0xe0020293 // mul r2, r3, r2
+ .long 0xf3fb07e0 // vcvt.u32.f32 q8, q8
+ .long 0xf3fb27e4 // vcvt.u32.f32 q9, q10
+ .long 0xf3fb47e6 // vcvt.u32.f32 q10, q11
+ .long 0xe0842082 // add r2, r4, r2, lsl #1
+ .long 0xf3f60220 // vmovn.i32 d16, q8
+ .long 0xe082318e // add r3, r2, lr, lsl #3
+ .long 0xf3fb67e8 // vcvt.u32.f32 q11, q12
+ .long 0xf3f62222 // vmovn.i32 d18, q9
+ .long 0xf3f63224 // vmovn.i32 d19, q10
+ .long 0xf3d85030 // vshr.u16 d21, d16, #8
+ .long 0xf3d81033 // vshr.u16 d17, d19, #8
+ .long 0xf3f64226 // vmovn.i32 d20, q11
+ .long 0xf2d86530 // vshl.s16 d22, d16, #8
+ .long 0xf2d80533 // vshl.s16 d16, d19, #8
+ .long 0xf3d87032 // vshr.u16 d23, d18, #8
+ .long 0xf2d88532 // vshl.s16 d24, d18, #8
+ .long 0xf26031b1 // vorr d19, d16, d17
+ .long 0xf26621b5 // vorr d18, d22, d21
+ .long 0xf3d89034 // vshr.u16 d25, d20, #8
+ .long 0xf2d84534 // vshl.s16 d20, d20, #8
+ .long 0xf26811b7 // vorr d17, d24, d23
+ .long 0xf26401b9 // vorr d16, d20, d25
+ .long 0x1a000004 // bne 5368 <sk_store_u16_be_vfp4+0xb8>
+ .long 0xf443004f // vst4.16 {d16-d19}, [r3]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0xf4c3070f // vst4.16 {d16[0],d17[0],d18[0],d19[0]}, [r3]
+ .long 0x0afffff8 // beq 5358 <sk_store_u16_be_vfp4+0xa8>
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4c2074f // vst4.16 {d16[1],d17[1],d18[1],d19[1]}, [r2]
+ .long 0x3afffff4 // bcc 5358 <sk_store_u16_be_vfp4+0xa8>
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4c2078f // vst4.16 {d16[2],d17[2],d18[2],d19[2]}, [r2]
+ .long 0xeafffff1 // b 5358 <sk_store_u16_be_vfp4+0xa8>
+ .long 0x477fff00 // .word 0x477fff00
+ .long 0x477fff00 // .word 0x477fff00
.long 0x477fff00 // .word 0x477fff00
.long 0x477fff00 // .word 0x477fff00
@@ -9894,129 +11410,171 @@ HIDDEN _sk_load_f32_vfp4
.globl _sk_load_f32_vfp4
FUNCTION(_sk_load_f32_vfp4)
_sk_load_f32_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550000 // cmp r5, #0
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c202 // add ip, r4, r2, lsl #4
- .long 0x1a000004 // bne 3c2c <sk_load_f32_vfp4+0x3c>
- .long 0xf42c008f // vld4.32 {d0-d3}, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082220e // add r2, r2, lr, lsl #4
+ .long 0x1a000009 // bne 53f4 <sk_load_f32_vfp4+0x54>
+ .long 0xf462018d // vld4.32 {d16,d18,d20,d22}, [r2]!
+ .long 0xf462118f // vld4.32 {d17,d19,d21,d23}, [r2]
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22441f4 // vorr q2, q10, q10
+ .long 0xf22661f6 // vorr q3, q11, q11
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xf4ac0f8f // vld4.32 {d0[]-d3[]}, [ip]
- .long 0xeafffff9 // b 3c1c <sk_load_f32_vfp4+0x2c>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xf4a20b4f // vld4.32 {d0[0],d2[0],d4[0],d6[0]}, [r2]
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0x0afffff8 // beq 53e4 <sk_load_f32_vfp4+0x44>
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4a30bcf // vld4.32 {d0[1],d2[1],d4[1],d6[1]}, [r3]
+ .long 0x3afffff4 // bcc 53e4 <sk_load_f32_vfp4+0x44>
+ .long 0xe2822020 // add r2, r2, #32
+ .long 0xf4a21b4f // vld4.32 {d1[0],d3[0],d5[0],d7[0]}, [r2]
+ .long 0xeafffff1 // b 53e4 <sk_load_f32_vfp4+0x44>
HIDDEN _sk_load_f32_dst_vfp4
.globl _sk_load_f32_dst_vfp4
FUNCTION(_sk_load_f32_dst_vfp4)
_sk_load_f32_dst_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550000 // cmp r5, #0
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c202 // add ip, r4, r2, lsl #4
- .long 0x1a000004 // bne 3c70 <sk_load_f32_dst_vfp4+0x3c>
- .long 0xf42c408f // vld4.32 {d4-d7}, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xf4ac4f8f // vld4.32 {d4[]-d7[]}, [ip]
- .long 0xeafffff9 // b 3c60 <sk_load_f32_dst_vfp4+0x2c>
+ .long 0xe92d4070 // push {r4, r5, r6, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe280c040 // add ip, r0, #64
+ .long 0xe8900058 // ldm r0, {r3, r4, r6}
+ .long 0xe280e030 // add lr, r0, #48
+ .long 0xe5925000 // ldr r5, [r2]
+ .long 0xe3560000 // cmp r6, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020492 // mul r2, r2, r4
+ .long 0xe0852102 // add r2, r5, r2, lsl #2
+ .long 0xe0824203 // add r4, r2, r3, lsl #4
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xe2803010 // add r3, r0, #16
+ .long 0x1a00000e // bne 5490 <sk_load_f32_dst_vfp4+0x74>
+ .long 0xf464818d // vld4.32 {d24,d26,d28,d30}, [r4]!
+ .long 0xf464918f // vld4.32 {d25,d27,d29,d31}, [r4]
+ .long 0xf26801f8 // vorr q8, q12, q12
+ .long 0xf26a21fa // vorr q9, q13, q13
+ .long 0xf26c41fc // vorr q10, q14, q14
+ .long 0xf26e61fe // vorr q11, q15, q15
+ .long 0xf4430aef // vst1.64 {d16-d17}, [r3 :128]
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xf44e4aef // vst1.64 {d20-d21}, [lr :128]
+ .long 0xf44c6aef // vst1.64 {d22-d23}, [ip :128]
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe8bd4070 // pop {r4, r5, r6, lr}
+ .long 0xe12fff13 // bx r3
+ .long 0xf4e40b4f // vld4.32 {d16[0],d18[0],d20[0],d22[0]}, [r4]
+ .long 0xe3560001 // cmp r6, #1
+ .long 0x0afffff3 // beq 546c <sk_load_f32_dst_vfp4+0x50>
+ .long 0xe2845010 // add r5, r4, #16
+ .long 0xe3560003 // cmp r6, #3
+ .long 0xf4e50bcf // vld4.32 {d16[1],d18[1],d20[1],d22[1]}, [r5]
+ .long 0x3affffef // bcc 546c <sk_load_f32_dst_vfp4+0x50>
+ .long 0xe2844020 // add r4, r4, #32
+ .long 0xf4e41b4f // vld4.32 {d17[0],d19[0],d21[0],d23[0]}, [r4]
+ .long 0xeaffffec // b 546c <sk_load_f32_dst_vfp4+0x50>
HIDDEN _sk_store_f32_vfp4
.globl _sk_store_f32_vfp4
FUNCTION(_sk_store_f32_vfp4)
_sk_store_f32_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59d5010 // ldr r5, [sp, #16]
- .long 0xe59ce000 // ldr lr, [ip]
- .long 0xe3550000 // cmp r5, #0
- .long 0xe59cc004 // ldr ip, [ip, #4]
- .long 0xe00c039c // mul ip, ip, r3
- .long 0xe08e410c // add r4, lr, ip, lsl #2
- .long 0xe084c202 // add ip, r4, r2, lsl #4
- .long 0x1a000004 // bne 3cb4 <sk_store_f32_vfp4+0x3c>
- .long 0xf40c008f // vst4.32 {d0-d3}, [ip]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4010 // push {r4, lr}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe590e000 // ldr lr, [r0]
+ .long 0xe9901008 // ldmib r0, {r3, ip}
+ .long 0xe5924000 // ldr r4, [r2]
+ .long 0xe35c0000 // cmp ip, #0
+ .long 0xe5922004 // ldr r2, [r2, #4]
+ .long 0xe0020392 // mul r2, r2, r3
+ .long 0xe0842102 // add r2, r4, r2, lsl #2
+ .long 0xe082220e // add r2, r2, lr, lsl #4
+ .long 0x1a000005 // bne 54fc <sk_store_f32_vfp4+0x44>
+ .long 0xf402018d // vst4.32 {d0,d2,d4,d6}, [r2]!
+ .long 0xf402118f // vst4.32 {d1,d3,d5,d7}, [r2]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xf48c0b0f // vst4.32 {d0[0],d1[0],d2[0],d3[0]}, [ip]
- .long 0xeafffff9 // b 3ca4 <sk_store_f32_vfp4+0x2c>
+ .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe12fff12 // bx r2
+ .long 0xe35c0001 // cmp ip, #1
+ .long 0xf4820b4f // vst4.32 {d0[0],d2[0],d4[0],d6[0]}, [r2]
+ .long 0x0afffff8 // beq 54ec <sk_store_f32_vfp4+0x34>
+ .long 0xe2823010 // add r3, r2, #16
+ .long 0xe35c0003 // cmp ip, #3
+ .long 0xf4830bcf // vst4.32 {d0[1],d2[1],d4[1],d6[1]}, [r3]
+ .long 0x3afffff4 // bcc 54ec <sk_store_f32_vfp4+0x34>
+ .long 0xe2822020 // add r2, r2, #32
+ .long 0xf4821b4f // vst4.32 {d1[0],d3[0],d5[0],d7[0]}, [r2]
+ .long 0xeafffff1 // b 54ec <sk_store_f32_vfp4+0x34>
HIDDEN _sk_clamp_x_vfp4
.globl _sk_clamp_x_vfp4
FUNCTION(_sk_clamp_x_vfp4)
_sk_clamp_x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3c71e1f // vmov.i8 d17, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2400f80 // vmax.f32 d16, d16, d0
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf3c72e5f // vmov.i8 q9, #255
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf2400fc0 // vmax.f32 q8, q8, q0
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26218a1 // vadd.i32 d17, d18, d17
- .long 0xf2200fa1 // vmin.f32 d0, d16, d17
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26428e2 // vadd.i32 q9, q10, q9
+ .long 0xf2200fe2 // vmin.f32 q0, q8, q9
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_clamp_y_vfp4
.globl _sk_clamp_y_vfp4
FUNCTION(_sk_clamp_y_vfp4)
_sk_clamp_y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3c71e1f // vmov.i8 d17, #255
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2400f81 // vmax.f32 d16, d16, d1
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf3c72e5f // vmov.i8 q9, #255
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf2400fc2 // vmax.f32 q8, q8, q1
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xf26218a1 // vadd.i32 d17, d18, d17
- .long 0xf2201fa1 // vmin.f32 d1, d16, d17
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xf26428e2 // vadd.i32 q9, q10, q9
+ .long 0xf2202fe2 // vmin.f32 q1, q8, q9
+ .long 0xe12fff12 // bx r2
.long 0xe320f000 // nop {0}
HIDDEN _sk_repeat_x_vfp4
.globl _sk_repeat_x_vfp4
FUNCTION(_sk_repeat_x_vfp4)
_sk_repeat_x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xeddf4b11 // vldr d20, [pc, #68]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf2c06050 // vmov.i32 q11, #0
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee0c9d // vld1.32 {d16[]}, [lr :32]!
- .long 0xf4ee1c9f // vld1.32 {d17[]}, [lr :32]
- .long 0xf3411d90 // vmul.f32 d17, d17, d0
- .long 0xf3fb2721 // vcvt.s32.f32 d18, d17
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3621ea1 // vcgt.f32 d17, d18, d17
- .long 0xf35411b3 // vbsl d17, d20, d19
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf3c72e1f // vmov.i8 d18, #255
- .long 0xf3401db1 // vmul.f32 d17, d16, d17
- .long 0xf26008a2 // vadd.i32 d16, d16, d18
- .long 0xf2601d21 // vsub.f32 d17, d0, d17
- .long 0xf2210fa0 // vmin.f32 d0, d17, d16
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe28f3030 // add r3, pc, #48
+ .long 0xf3422dd0 // vmul.f32 q9, q9, q0
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3fb4762 // vcvt.s32.f32 q10, q9
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3642ee2 // vcgt.f32 q9, q10, q9
+ .long 0xf35821f6 // vbsl q9, q12, q11
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf3c74e5f // vmov.i8 q10, #255
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf26008e4 // vadd.i32 q8, q8, q10
+ .long 0xf2602d62 // vsub.f32 q9, q0, q9
+ .long 0xf2220fe0 // vmin.f32 q0, q9, q8
+ .long 0xe12fff12 // bx r2
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10024,28 +11582,28 @@ HIDDEN _sk_repeat_y_vfp4
.globl _sk_repeat_y_vfp4
FUNCTION(_sk_repeat_y_vfp4)
_sk_repeat_y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c03010 // vmov.i32 d19, #0
- .long 0xeddf4b11 // vldr d20, [pc, #68]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf2c06050 // vmov.i32 q11, #0
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee0c9d // vld1.32 {d16[]}, [lr :32]!
- .long 0xf4ee1c9f // vld1.32 {d17[]}, [lr :32]
- .long 0xf3411d91 // vmul.f32 d17, d17, d1
- .long 0xf3fb2721 // vcvt.s32.f32 d18, d17
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3621ea1 // vcgt.f32 d17, d18, d17
- .long 0xf35411b3 // vbsl d17, d20, d19
- .long 0xf2621da1 // vsub.f32 d17, d18, d17
- .long 0xf3c72e1f // vmov.i8 d18, #255
- .long 0xf3401db1 // vmul.f32 d17, d16, d17
- .long 0xf26008a2 // vadd.i32 d16, d16, d18
- .long 0xf2611d21 // vsub.f32 d17, d1, d17
- .long 0xf2211fa0 // vmin.f32 d1, d17, d16
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xe28f3030 // add r3, pc, #48
+ .long 0xf3422dd2 // vmul.f32 q9, q9, q1
+ .long 0xf4638acf // vld1.64 {d24-d25}, [r3]
+ .long 0xf3fb4762 // vcvt.s32.f32 q10, q9
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3642ee2 // vcgt.f32 q9, q10, q9
+ .long 0xf35821f6 // vbsl q9, q12, q11
+ .long 0xf2642de2 // vsub.f32 q9, q10, q9
+ .long 0xf3c74e5f // vmov.i8 q10, #255
+ .long 0xf3402df2 // vmul.f32 q9, q8, q9
+ .long 0xf26008e4 // vadd.i32 q8, q8, q10
+ .long 0xf2622d62 // vsub.f32 q9, q1, q9
+ .long 0xf2222fe0 // vmin.f32 q1, q9, q8
+ .long 0xe12fff12 // bx r2
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10053,36 +11611,38 @@ HIDDEN _sk_mirror_x_vfp4
.globl _sk_mirror_x_vfp4
FUNCTION(_sk_mirror_x_vfp4)
_sk_mirror_x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
.long 0xed2d8b06 // vpush {d8-d10}
- .long 0xeeb68a00 // vmov.f32 s16, #96
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c04010 // vmov.i32 d20, #0
- .long 0xeddf5b17 // vldr d21, [pc, #92]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xeeb6aa00 // vmov.f32 s20, #96
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf2c08050 // vmov.i32 q12, #0
.long 0xe2811008 // add r1, r1, #8
- .long 0xed9e9a00 // vldr s18, [lr]
- .long 0xed9eaa01 // vldr s20, [lr, #4]
- .long 0xf3f40c09 // vdup.32 d16, d9[0]
- .long 0xf2601d20 // vsub.f32 d17, d0, d16
- .long 0xee2a0a08 // vmul.f32 s0, s20, s16
- .long 0xf2e129c0 // vmul.f32 d18, d17, d0[0]
- .long 0xee390a09 // vadd.f32 s0, s18, s18
- .long 0xf3fb3722 // vcvt.s32.f32 d19, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3632ea2 // vcgt.f32 d18, d19, d18
- .long 0xf35521b4 // vbsl d18, d21, d20
- .long 0xf2632da2 // vsub.f32 d18, d19, d18
- .long 0xf2e229c0 // vmul.f32 d18, d18, d0[0]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xf3c72e1f // vmov.i8 d18, #255
- .long 0xf2611da0 // vsub.f32 d17, d17, d16
- .long 0xf26008a2 // vadd.i32 d16, d16, d18
- .long 0xf3f91721 // vabs.f32 d17, d17
- .long 0xf2210fa0 // vmin.f32 d0, d17, d16
+ .long 0xed938a00 // vldr s16, [r3]
+ .long 0xed939a01 // vldr s18, [r3, #4]
+ .long 0xe28f3050 // add r3, pc, #80
+ .long 0xf3f40c48 // vdup.32 q8, d8[0]
+ .long 0xf2602d60 // vsub.f32 q9, q0, q8
+ .long 0xf463aacf // vld1.64 {d26-d27}, [r3]
+ .long 0xee290a0a // vmul.f32 s0, s18, s20
+ .long 0xf3e249c0 // vmul.f32 q10, q9, d0[0]
+ .long 0xee380a08 // vadd.f32 s0, s16, s16
+ .long 0xf3fb6764 // vcvt.s32.f32 q11, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3664ee4 // vcgt.f32 q10, q11, q10
+ .long 0xf35a41f8 // vbsl q10, q13, q12
+ .long 0xf2664de4 // vsub.f32 q10, q11, q10
+ .long 0xf3e449c0 // vmul.f32 q10, q10, d0[0]
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf3c74e5f // vmov.i8 q10, #255
+ .long 0xf2622de0 // vsub.f32 q9, q9, q8
+ .long 0xf26008e4 // vadd.i32 q8, q8, q10
+ .long 0xf3f92762 // vabs.f32 q9, q9
+ .long 0xf2220fe0 // vmin.f32 q0, q9, q8
.long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10090,36 +11650,38 @@ HIDDEN _sk_mirror_y_vfp4
.globl _sk_mirror_y_vfp4
FUNCTION(_sk_mirror_y_vfp4)
_sk_mirror_y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
.long 0xed2d8b06 // vpush {d8-d10}
- .long 0xeeb68a00 // vmov.f32 s16, #96
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2c04010 // vmov.i32 d20, #0
- .long 0xeddf5b17 // vldr d21, [pc, #92]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xeeb6aa00 // vmov.f32 s20, #96
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xf2c08050 // vmov.i32 q12, #0
.long 0xe2811008 // add r1, r1, #8
- .long 0xed9e9a00 // vldr s18, [lr]
- .long 0xed9eaa01 // vldr s20, [lr, #4]
- .long 0xf3f40c09 // vdup.32 d16, d9[0]
- .long 0xf2611d20 // vsub.f32 d17, d1, d16
- .long 0xee2a1a08 // vmul.f32 s2, s20, s16
- .long 0xf2e129c1 // vmul.f32 d18, d17, d1[0]
- .long 0xee391a09 // vadd.f32 s2, s18, s18
- .long 0xf3fb3722 // vcvt.s32.f32 d19, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3632ea2 // vcgt.f32 d18, d19, d18
- .long 0xf35521b4 // vbsl d18, d21, d20
- .long 0xf2632da2 // vsub.f32 d18, d19, d18
- .long 0xf2e229c1 // vmul.f32 d18, d18, d1[0]
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xf3c72e1f // vmov.i8 d18, #255
- .long 0xf2611da0 // vsub.f32 d17, d17, d16
- .long 0xf26008a2 // vadd.i32 d16, d16, d18
- .long 0xf3f91721 // vabs.f32 d17, d17
- .long 0xf2211fa0 // vmin.f32 d1, d17, d16
+ .long 0xed938a00 // vldr s16, [r3]
+ .long 0xed939a01 // vldr s18, [r3, #4]
+ .long 0xe28f3050 // add r3, pc, #80
+ .long 0xf3f40c48 // vdup.32 q8, d8[0]
+ .long 0xf2622d60 // vsub.f32 q9, q1, q8
+ .long 0xf463aacf // vld1.64 {d26-d27}, [r3]
+ .long 0xee292a0a // vmul.f32 s4, s18, s20
+ .long 0xf3e249c2 // vmul.f32 q10, q9, d2[0]
+ .long 0xee382a08 // vadd.f32 s4, s16, s16
+ .long 0xf3fb6764 // vcvt.s32.f32 q11, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3664ee4 // vcgt.f32 q10, q11, q10
+ .long 0xf35a41f8 // vbsl q10, q13, q12
+ .long 0xf2664de4 // vsub.f32 q10, q11, q10
+ .long 0xf3e449c2 // vmul.f32 q10, q10, d2[0]
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf3c74e5f // vmov.i8 q10, #255
+ .long 0xf2622de0 // vsub.f32 q9, q9, q8
+ .long 0xf26008e4 // vadd.i32 q8, q8, q10
+ .long 0xf3f92762 // vabs.f32 q9, q9
+ .long 0xf2222fe0 // vmin.f32 q1, q9, q8
.long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10127,27 +11689,31 @@ HIDDEN _sk_clamp_x_1_vfp4
.globl _sk_clamp_x_1_vfp4
FUNCTION(_sk_clamp_x_1_vfp4)
_sk_clamp_x_1_vfp4:
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2c71f10 // vmov.f32 d17, #1
- .long 0xf2400f80 // vmax.f32 d16, d16, d0
- .long 0xf2200fa1 // vmin.f32 d0, d16, d17
- .long 0xe12fff1c // bx ip
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2c72f50 // vmov.f32 q9, #1
+ .long 0xf2400fc0 // vmax.f32 q8, q8, q0
+ .long 0xf2200fe2 // vmin.f32 q0, q8, q9
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_repeat_x_1_vfp4
.globl _sk_repeat_x_1_vfp4
FUNCTION(_sk_repeat_x_1_vfp4)
_sk_repeat_x_1_vfp4:
- .long 0xf3fb0700 // vcvt.s32.f32 d16, d0
- .long 0xeddf3b07 // vldr d19, [pc, #28]
- .long 0xf2c02010 // vmov.i32 d18, #0
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3fb0620 // vcvt.f32.s32 d16, d16
- .long 0xf3601e80 // vcgt.f32 d17, d16, d0
- .long 0xf35311b2 // vbsl d17, d19, d18
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf2200d20 // vsub.f32 d0, d0, d16
- .long 0xe12fff1c // bx ip
+ .long 0xf3fb0740 // vcvt.s32.f32 q8, q0
+ .long 0xe28f2024 // add r2, pc, #36
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xf2c04050 // vmov.i32 q10, #0
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3fb0660 // vcvt.f32.s32 q8, q8
+ .long 0xf3602ec0 // vcgt.f32 q9, q8, q0
+ .long 0xf35621f4 // vbsl q9, q11, q10
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf2200d60 // vsub.f32 q0, q0, q8
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10155,24 +11721,26 @@ HIDDEN _sk_mirror_x_1_vfp4
.globl _sk_mirror_x_1_vfp4
FUNCTION(_sk_mirror_x_1_vfp4)
_sk_mirror_x_1_vfp4:
- .long 0xf3c70f10 // vmov.f32 d16, #-1
- .long 0xeddf5b0f // vldr d21, [pc, #60]
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2401d20 // vadd.f32 d17, d0, d16
- .long 0xf2c04010 // vmov.i32 d20, #0
- .long 0xf3412db2 // vmul.f32 d18, d17, d18
- .long 0xf3fb3722 // vcvt.s32.f32 d19, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3632ea2 // vcgt.f32 d18, d19, d18
- .long 0xf35521b4 // vbsl d18, d21, d20
- .long 0xf2632da2 // vsub.f32 d18, d19, d18
- .long 0xf2422da2 // vadd.f32 d18, d18, d18
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf3b90720 // vabs.f32 d0, d16
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf3c70f50 // vmov.f32 q8, #-1
+ .long 0xe28f203c // add r2, pc, #60
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf462aacf // vld1.64 {d26-d27}, [r2]
+ .long 0xf2402d60 // vadd.f32 q9, q0, q8
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2c08050 // vmov.i32 q12, #0
+ .long 0xf3424df4 // vmul.f32 q10, q9, q10
+ .long 0xf3fb6764 // vcvt.s32.f32 q11, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3664ee4 // vcgt.f32 q10, q11, q10
+ .long 0xf35a41f8 // vbsl q10, q13, q12
+ .long 0xf2664de4 // vsub.f32 q10, q11, q10
+ .long 0xf2444de4 // vadd.f32 q10, q10, q10
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf3b90760 // vabs.f32 q0, q8
+ .long 0xe12fff12 // bx r2
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10180,22 +11748,32 @@ HIDDEN _sk_luminance_to_alpha_vfp4
.globl _sk_luminance_to_alpha_vfp4
FUNCTION(_sk_luminance_to_alpha_vfp4)
_sk_luminance_to_alpha_vfp4:
- .long 0xeddf0b0a // vldr d16, [pc, #40]
- .long 0xeddf1b0b // vldr d17, [pc, #44]
- .long 0xf3410d30 // vmul.f32 d16, d1, d16
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3401d31 // vmul.f32 d17, d0, d17
- .long 0xf2800010 // vmov.i32 d0, #0
- .long 0xf2801010 // vmov.i32 d1, #0
- .long 0xf2013da0 // vadd.f32 d3, d17, d16
- .long 0xeddf0b06 // vldr d16, [pc, #24]
- .long 0xf2023c30 // vfma.f32 d3, d2, d16
- .long 0xf2802010 // vmov.i32 d2, #0
- .long 0xe12fff1c // bx ip
+ .long 0xe28f2038 // add r2, pc, #56
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f2040 // add r2, pc, #64
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xf3420d70 // vmul.f32 q8, q1, q8
+ .long 0xe28f2044 // add r2, pc, #68
+ .long 0xf2802050 // vmov.i32 q1, #0
+ .long 0xf3402d72 // vmul.f32 q9, q0, q9
+ .long 0xf2800050 // vmov.i32 q0, #0
+ .long 0xf2026de0 // vadd.f32 q3, q9, q8
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2046c70 // vfma.f32 q3, q2, q8
+ .long 0xf2804050 // vmov.i32 q2, #0
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0x3f371759 // .word 0x3f371759
.long 0x3f371759 // .word 0x3f371759
.long 0x3f371759 // .word 0x3f371759
+ .long 0x3f371759 // .word 0x3f371759
+ .long 0x3e59b3d0 // .word 0x3e59b3d0
.long 0x3e59b3d0 // .word 0x3e59b3d0
.long 0x3e59b3d0 // .word 0x3e59b3d0
+ .long 0x3e59b3d0 // .word 0x3e59b3d0
+ .long 0x3d93dd98 // .word 0x3d93dd98
+ .long 0x3d93dd98 // .word 0x3d93dd98
.long 0x3d93dd98 // .word 0x3d93dd98
.long 0x3d93dd98 // .word 0x3d93dd98
@@ -10203,262 +11781,250 @@ HIDDEN _sk_matrix_translate_vfp4
.globl _sk_matrix_translate_vfp4
FUNCTION(_sk_matrix_translate_vfp4)
_sk_matrix_translate_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xf4ee0c9d // vld1.32 {d16[]}, [lr :32]!
- .long 0xf2000d80 // vadd.f32 d0, d16, d0
- .long 0xf4ee1c9f // vld1.32 {d17[]}, [lr :32]
- .long 0xf2011d81 // vadd.f32 d1, d17, d1
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4e30cbd // vld1.32 {d16[]-d17[]}, [r3 :32]!
+ .long 0xf2000dc0 // vadd.f32 q0, q8, q0
+ .long 0xf4e32cbf // vld1.32 {d18[]-d19[]}, [r3 :32]
+ .long 0xf2022dc2 // vadd.f32 q1, q9, q1
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_matrix_scale_translate_vfp4
.globl _sk_matrix_scale_translate_vfp4
FUNCTION(_sk_matrix_scale_translate_vfp4)
_sk_matrix_scale_translate_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4e51c9f // vld1.32 {d17[]}, [r5 :32]
- .long 0xe28e500c // add r5, lr, #12
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xf2400c31 // vfma.f32 d16, d0, d17
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xf2411c32 // vfma.f32 d17, d1, d18
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf4ee0cbd // vld1.32 {d16[]-d17[]}, [lr :32]!
+ .long 0xf2400c72 // vfma.f32 q8, q0, q9
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xf4ee2cbf // vld1.32 {d18[]-d19[]}, [lr :32]
+ .long 0xf2422c74 // vfma.f32 q9, q1, q10
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_matrix_2x3_vfp4
.globl _sk_matrix_2x3_vfp4
FUNCTION(_sk_matrix_2x3_vfp4)
_sk_matrix_2x3_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf2410c31 // vfma.f32 d16, d1, d17
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xf2411c32 // vfma.f32 d17, d1, d18
- .long 0xf4ee2c9d // vld1.32 {d18[]}, [lr :32]!
- .long 0xf4ee3c9f // vld1.32 {d19[]}, [lr :32]
- .long 0xf2400c32 // vfma.f32 d16, d0, d18
- .long 0xf2401c33 // vfma.f32 d17, d0, d19
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf2420c72 // vfma.f32 q8, q1, q9
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xf2422c74 // vfma.f32 q9, q1, q10
+ .long 0xf4e34cbd // vld1.32 {d20[]-d21[]}, [r3 :32]!
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf2400c74 // vfma.f32 q8, q0, q10
+ .long 0xf2402c76 // vfma.f32 q9, q0, q11
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
.long 0xe12fff1c // bx ip
HIDDEN _sk_matrix_3x4_vfp4
.globl _sk_matrix_3x4_vfp4
FUNCTION(_sk_matrix_3x4_vfp4)
_sk_matrix_3x4_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e4020 // add r4, lr, #32
- .long 0xf4e43c9f // vld1.32 {d19[]}, [r4 :32]
- .long 0xe28e402c // add r4, lr, #44
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e401c // add r4, lr, #28
- .long 0xf2420c33 // vfma.f32 d16, d2, d19
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e4024 // add r4, lr, #36
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4028 // add r4, lr, #40
- .long 0xf2421c32 // vfma.f32 d17, d2, d18
- .long 0xf4e42c9f // vld1.32 {d18[]}, [r4 :32]
- .long 0xe28e4010 // add r4, lr, #16
- .long 0xf2422c34 // vfma.f32 d18, d2, d20
- .long 0xf4e43c9f // vld1.32 {d19[]}, [r4 :32]
- .long 0xe28e400c // add r4, lr, #12
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf2411c34 // vfma.f32 d17, d1, d20
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf2410c34 // vfma.f32 d16, d1, d20
- .long 0xe28e4008 // add r4, lr, #8
- .long 0xf2412c33 // vfma.f32 d18, d1, d19
- .long 0xf4ee3c9d // vld1.32 {d19[]}, [lr :32]!
- .long 0xf4ee4c9f // vld1.32 {d20[]}, [lr :32]
- .long 0xf2401c33 // vfma.f32 d17, d0, d19
- .long 0xf4e43c9f // vld1.32 {d19[]}, [r4 :32]
- .long 0xf2400c33 // vfma.f32 d16, d0, d19
- .long 0xf2402c34 // vfma.f32 d18, d0, d20
- .long 0xf22101b1 // vorr d0, d17, d17
- .long 0xf22021b0 // vorr d2, d16, d16
- .long 0xf22211b2 // vorr d1, d18, d18
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe283201c // add r2, r3, #28
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832018 // add r2, r3, #24
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe2832024 // add r2, r3, #36
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832028 // add r2, r3, #40
+ .long 0xf2440c72 // vfma.f32 q8, q2, q9
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe283202c // add r2, r3, #44
+ .long 0xf2442c74 // vfma.f32 q9, q2, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf2444c76 // vfma.f32 q10, q2, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf2420c76 // vfma.f32 q8, q1, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf2422c76 // vfma.f32 q9, q1, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf2424c76 // vfma.f32 q10, q1, q11
+ .long 0xf4e36cbd // vld1.32 {d22[]-d23[]}, [r3 :32]!
+ .long 0xf4e38cbf // vld1.32 {d24[]-d25[]}, [r3 :32]
+ .long 0xf2400c76 // vfma.f32 q8, q0, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xf2402c78 // vfma.f32 q9, q0, q12
+ .long 0xf2404c76 // vfma.f32 q10, q0, q11
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xf22441f4 // vorr q2, q10, q10
.long 0xe12fff1c // bx ip
HIDDEN _sk_matrix_4x5_vfp4
.globl _sk_matrix_4x5_vfp4
FUNCTION(_sk_matrix_4x5_vfp4)
_sk_matrix_4x5_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf2620112 // vorr d16, d2, d2
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf2620152 // vorr q8, q1, q1
+ .long 0xf2666156 // vorr q11, q3, q3
+ .long 0xe2832030 // add r2, r3, #48
+ .long 0xf2644154 // vorr q10, q2, q2
+ .long 0xe1a0e003 // mov lr, r3
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e5014 // add r5, lr, #20
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4e55c9f // vld1.32 {d21[]}, [r5 :32]
- .long 0xe28e5028 // add r5, lr, #40
- .long 0xf4e56c9f // vld1.32 {d22[]}, [r5 :32]
- .long 0xe28e5038 // add r5, lr, #56
- .long 0xf4e57c9f // vld1.32 {d23[]}, [r5 :32]
- .long 0xe28e5048 // add r5, lr, #72
- .long 0xf4a52c9f // vld1.32 {d2[]}, [r5 :32]
- .long 0xe28e5034 // add r5, lr, #52
- .long 0xf2032c37 // vfma.f32 d2, d3, d23
- .long 0xf4e58c9f // vld1.32 {d24[]}, [r5 :32]
- .long 0xe28e5044 // add r5, lr, #68
- .long 0xf4e51c9f // vld1.32 {d17[]}, [r5 :32]
- .long 0xe28e5030 // add r5, lr, #48
- .long 0xf2431c38 // vfma.f32 d17, d3, d24
- .long 0xf4e59c9f // vld1.32 {d25[]}, [r5 :32]
- .long 0xe28e503c // add r5, lr, #60
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e504c // add r5, lr, #76
- .long 0xf2002cb6 // vfma.f32 d2, d16, d22
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xe28e5040 // add r5, lr, #64
- .long 0xf2432c33 // vfma.f32 d18, d3, d19
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e5020 // add r5, lr, #32
- .long 0xf2433c39 // vfma.f32 d19, d3, d25
- .long 0xf4e57c9f // vld1.32 {d23[]}, [r5 :32]
- .long 0xe28e502c // add r5, lr, #44
- .long 0xf4e58c9f // vld1.32 {d24[]}, [r5 :32]
- .long 0xe28e5024 // add r5, lr, #36
- .long 0xf2402cb8 // vfma.f32 d18, d16, d24
- .long 0xf4e58c9f // vld1.32 {d24[]}, [r5 :32]
- .long 0xf2401cb8 // vfma.f32 d17, d16, d24
- .long 0xe28e5010 // add r5, lr, #16
- .long 0xf2403cb7 // vfma.f32 d19, d16, d23
- .long 0xf4e44c9d // vld1.32 {d20[]}, [r4 :32]!
- .long 0xf4e50c9f // vld1.32 {d16[]}, [r5 :32]
- .long 0xe28e501c // add r5, lr, #28
- .long 0xf4e56c9f // vld1.32 {d22[]}, [r5 :32]
- .long 0xe28e5018 // add r5, lr, #24
- .long 0xf2412c36 // vfma.f32 d18, d1, d22
- .long 0xf2411c35 // vfma.f32 d17, d1, d21
- .long 0xf4e45c9f // vld1.32 {d21[]}, [r4 :32]
- .long 0xf2413c30 // vfma.f32 d19, d1, d16
- .long 0xf4e50c9f // vld1.32 {d16[]}, [r5 :32]
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xf2012c30 // vfma.f32 d2, d1, d16
- .long 0xf4e50c9f // vld1.32 {d16[]}, [r5 :32]
- .long 0xe28e500c // add r5, lr, #12
- .long 0xf2401c35 // vfma.f32 d17, d0, d21
- .long 0xf2403c34 // vfma.f32 d19, d0, d20
- .long 0xf4e54c9f // vld1.32 {d20[]}, [r5 :32]
- .long 0xf2402c34 // vfma.f32 d18, d0, d20
- .long 0xf2002c30 // vfma.f32 d2, d0, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xf22301b3 // vorr d0, d19, d19
- .long 0xf22231b2 // vorr d3, d18, d18
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xf4e2acbf // vld1.32 {d26[]-d27[]}, [r2 :32]
+ .long 0xe2832038 // add r2, r3, #56
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe283203c // add r2, r3, #60
+ .long 0xf4e2ccbf // vld1.32 {d28[]-d29[]}, [r2 :32]
+ .long 0xe2832034 // add r2, r3, #52
+ .long 0xf4e2ecbf // vld1.32 {d30[]-d31[]}, [r2 :32]
+ .long 0xe2832044 // add r2, r3, #68
+ .long 0xf4a22cbf // vld1.32 {d2[]-d3[]}, [r2 :32]
+ .long 0xe283204c // add r2, r3, #76
+ .long 0xf2062cfe // vfma.f32 q1, q11, q15
+ .long 0xf4a26cbf // vld1.32 {d6[]-d7[]}, [r2 :32]
+ .long 0xe2832048 // add r2, r3, #72
+ .long 0xf2066cfc // vfma.f32 q3, q11, q14
+ .long 0xf4a24cbf // vld1.32 {d4[]-d5[]}, [r2 :32]
+ .long 0xe2832040 // add r2, r3, #64
+ .long 0xf2064cf2 // vfma.f32 q2, q11, q9
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe283202c // add r2, r3, #44
+ .long 0xf2462cfa // vfma.f32 q9, q11, q13
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832028 // add r2, r3, #40
+ .long 0xf4ee8cbd // vld1.32 {d24[]-d25[]}, [lr :32]!
+ .long 0xf2046cf6 // vfma.f32 q3, q10, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf2044cf6 // vfma.f32 q2, q10, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832024 // add r2, r3, #36
+ .long 0xf2442cf6 // vfma.f32 q9, q10, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832018 // add r2, r3, #24
+ .long 0xf2042cf6 // vfma.f32 q1, q10, q11
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf2004cf4 // vfma.f32 q2, q8, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf2402cf4 // vfma.f32 q9, q8, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe283201c // add r2, r3, #28
+ .long 0xf2002cf4 // vfma.f32 q1, q8, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf2006cf4 // vfma.f32 q3, q8, q10
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf2004c70 // vfma.f32 q2, q0, q8
+ .long 0xf4ee4cbf // vld1.32 {d20[]-d21[]}, [lr :32]
+ .long 0xf2402c78 // vfma.f32 q9, q0, q12
+ .long 0xf2002c74 // vfma.f32 q1, q0, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xf2006c74 // vfma.f32 q3, q0, q10
+ .long 0xf22201f2 // vorr q0, q9, q9
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_matrix_4x3_vfp4
.globl _sk_matrix_4x3_vfp4
FUNCTION(_sk_matrix_4x3_vfp4)
_sk_matrix_4x3_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e5018 // add r5, lr, #24
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e5028 // add r5, lr, #40
- .long 0xf4a52c9f // vld1.32 {d2[]}, [r5 :32]
- .long 0xe28e5014 // add r5, lr, #20
- .long 0xf2012c33 // vfma.f32 d2, d1, d19
- .long 0xf4e54c9f // vld1.32 {d20[]}, [r5 :32]
- .long 0xe28e5010 // add r5, lr, #16
- .long 0xf4e51c9f // vld1.32 {d17[]}, [r5 :32]
- .long 0xe28e5020 // add r5, lr, #32
- .long 0xf4e50c9f // vld1.32 {d16[]}, [r5 :32]
- .long 0xe28e501c // add r5, lr, #28
- .long 0xf2410c31 // vfma.f32 d16, d1, d17
- .long 0xf4e55c9f // vld1.32 {d21[]}, [r5 :32]
- .long 0xe28e502c // add r5, lr, #44
- .long 0xf4a53c9f // vld1.32 {d3[]}, [r5 :32]
- .long 0xe28e5024 // add r5, lr, #36
- .long 0xf2013c35 // vfma.f32 d3, d1, d21
- .long 0xf4e51c9f // vld1.32 {d17[]}, [r5 :32]
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xf2411c34 // vfma.f32 d17, d1, d20
- .long 0xf4e42c9d // vld1.32 {d18[]}, [r4 :32]!
- .long 0xf2400c32 // vfma.f32 d16, d0, d18
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e500c // add r5, lr, #12
- .long 0xf2002c33 // vfma.f32 d2, d0, d19
- .long 0xf2401c34 // vfma.f32 d17, d0, d20
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xf2003c32 // vfma.f32 d3, d0, d18
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xf22111b1 // vorr d1, d17, d17
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe283201c // add r2, r3, #28
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe2832018 // add r2, r3, #24
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832028 // add r2, r3, #40
+ .long 0xf4a24cbf // vld1.32 {d4[]-d5[]}, [r2 :32]
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf2024c70 // vfma.f32 q2, q1, q8
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832024 // add r2, r3, #36
+ .long 0xf2420c72 // vfma.f32 q8, q1, q9
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe283202c // add r2, r3, #44
+ .long 0xf2422c78 // vfma.f32 q9, q1, q12
+ .long 0xf4ee4cbd // vld1.32 {d20[]-d21[]}, [lr :32]!
+ .long 0xf4a26cbf // vld1.32 {d6[]-d7[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf2026c76 // vfma.f32 q3, q1, q11
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf2400c74 // vfma.f32 q8, q0, q10
+ .long 0xf4ee4cbf // vld1.32 {d20[]-d21[]}, [lr :32]
+ .long 0xf2402c74 // vfma.f32 q9, q0, q10
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xf2004c76 // vfma.f32 q2, q0, q11
+ .long 0xf2006c74 // vfma.f32 q3, q0, q10
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xf22221f2 // vorr q1, q9, q9
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_matrix_perspective_vfp4
.globl _sk_matrix_perspective_vfp4
FUNCTION(_sk_matrix_perspective_vfp4)
_sk_matrix_perspective_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e401c // add r4, lr, #28
- .long 0xe28e5010 // add r5, lr, #16
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe28e4020 // add r4, lr, #32
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xe28e4018 // add r4, lr, #24
- .long 0xf2411c30 // vfma.f32 d17, d1, d16
- .long 0xf4e40c9f // vld1.32 {d16[]}, [r4 :32]
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e500c // add r5, lr, #12
- .long 0xf2401c30 // vfma.f32 d17, d0, d16
- .long 0xf4e40c9d // vld1.32 {d16[]}, [r4 :32]!
- .long 0xf4e45c9f // vld1.32 {d21[]}, [r4 :32]
- .long 0xe28e4014 // add r4, lr, #20
- .long 0xf2413c35 // vfma.f32 d19, d1, d21
- .long 0xf4e45c9f // vld1.32 {d21[]}, [r4 :32]
- .long 0xf2415c32 // vfma.f32 d21, d1, d18
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xf3fb4521 // vrecpe.f32 d20, d17
- .long 0xf2403c30 // vfma.f32 d19, d0, d16
- .long 0xf2411fb4 // vrecps.f32 d17, d17, d20
- .long 0xf2405c32 // vfma.f32 d21, d0, d18
- .long 0xf3440db1 // vmul.f32 d16, d20, d17
- .long 0xf3030db0 // vmul.f32 d0, d19, d16
- .long 0xf3051db0 // vmul.f32 d1, d21, d16
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe283201c // add r2, r3, #28
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf4e22cbf // vld1.32 {d18[]-d19[]}, [r2 :32]
+ .long 0xe2832018 // add r2, r3, #24
+ .long 0xf2422c70 // vfma.f32 q9, q1, q8
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf2402c70 // vfma.f32 q9, q0, q8
+ .long 0xf4ee0cbd // vld1.32 {d16[]-d17[]}, [lr :32]!
+ .long 0xf4eeacbf // vld1.32 {d26[]-d27[]}, [lr :32]
+ .long 0xf2424c7a // vfma.f32 q10, q1, q13
+ .long 0xf4e2acbf // vld1.32 {d26[]-d27[]}, [r2 :32]
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xf242ac78 // vfma.f32 q13, q1, q12
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3fb6562 // vrecpe.f32 q11, q9
+ .long 0xf2404c70 // vfma.f32 q10, q0, q8
+ .long 0xf240ac78 // vfma.f32 q13, q0, q12
+ .long 0xf2422ff6 // vrecps.f32 q9, q9, q11
+ .long 0xf3460df2 // vmul.f32 q8, q11, q9
+ .long 0xf3040df0 // vmul.f32 q0, q10, q8
+ .long 0xf30a2df0 // vmul.f32 q1, q13, q8
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
HIDDEN _sk_evenly_spaced_gradient_vfp4
@@ -10467,92 +12033,148 @@ FUNCTION(_sk_evenly_spaced_gradient_vfp4)
_sk_evenly_spaced_gradient_vfp4:
.long 0xe92d4ff0 // push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
.long 0xe24dd004 // sub sp, sp, #4
- .long 0xed2d8b0a // vpush {d8-d12}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xe89e0720 // ldm lr, {r5, r8, r9, sl}
- .long 0xe2455001 // sub r5, r5, #1
- .long 0xe59e4010 // ldr r4, [lr, #16]
- .long 0xe59eb020 // ldr fp, [lr, #32]
- .long 0xee805b90 // vdup.32 d16, r5
- .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
- .long 0xf3400d90 // vmul.f32 d16, d16, d0
- .long 0xf3fb0720 // vcvt.s32.f32 d16, d16
- .long 0xee305b90 // vmov.32 r5, d16[1]
- .long 0xe0846105 // add r6, r4, r5, lsl #2
- .long 0xe08b7105 // add r7, fp, r5, lsl #2
- .long 0xedd69a00 // vldr s19, [r6]
- .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xed2d8b10 // vpush {d8-d15}
+ .long 0xe24dd008 // sub sp, sp, #8
+ .long 0xe2812004 // add r2, r1, #4
+ .long 0xe58d2004 // str r2, [sp, #4]
+ .long 0xe1a0c001 // mov ip, r1
+ .long 0xf2600150 // vorr q8, q0, q0
+ .long 0xe49c4008 // ldr r4, [ip], #8
+ .long 0xe8944204 // ldm r4, {r2, r9, lr}
+ .long 0xe2422001 // sub r2, r2, #1
+ .long 0xe5943010 // ldr r3, [r4, #16]
+ .long 0xe5948020 // ldr r8, [r4, #32]
+ .long 0xeea22b90 // vdup.32 q9, r2
+ .long 0xe594700c // ldr r7, [r4, #12]
+ .long 0xf3fb26e2 // vcvt.f32.u32 q9, q9
+ .long 0xe594a01c // ldr sl, [r4, #28]
+ .long 0xf3422df0 // vmul.f32 q9, q9, q8
+ .long 0xf3fb2762 // vcvt.s32.f32 q9, q9
+ .long 0xee336b90 // vmov.32 r6, d19[1]
+ .long 0xee32bb90 // vmov.32 fp, d18[1]
+ .long 0xe0832106 // add r2, r3, r6, lsl #2
+ .long 0xedd2ba00 // vldr s23, [r2]
+ .long 0xee132b90 // vmov.32 r2, d19[0]
+ .long 0xe0835102 // add r5, r3, r2, lsl #2
+ .long 0xed95ba00 // vldr s22, [r5]
+ .long 0xe083510b // add r5, r3, fp, lsl #2
+ .long 0xedd5aa00 // vldr s21, [r5]
+ .long 0xee125b90 // vmov.32 r5, d18[0]
+ .long 0xe0833105 // add r3, r3, r5, lsl #2
+ .long 0xed93aa00 // vldr s20, [r3]
+ .long 0xe0883106 // add r3, r8, r6, lsl #2
+ .long 0xedd37a00 // vldr s15, [r3]
+ .long 0xe0883102 // add r3, r8, r2, lsl #2
+ .long 0xed937a00 // vldr s14, [r3]
+ .long 0xe0873106 // add r3, r7, r6, lsl #2
+ .long 0xedd3da00 // vldr s27, [r3]
+ .long 0xe0873102 // add r3, r7, r2, lsl #2
+ .long 0xed93da00 // vldr s26, [r3]
+ .long 0xe087310b // add r3, r7, fp, lsl #2
+ .long 0xedd3ca00 // vldr s25, [r3]
+ .long 0xe0873105 // add r3, r7, r5, lsl #2
+ .long 0xed93ca00 // vldr s24, [r3]
+ .long 0xe08a3106 // add r3, sl, r6, lsl #2
+ .long 0xedd35a00 // vldr s11, [r3]
+ .long 0xe5943018 // ldr r3, [r4, #24]
+ .long 0xe5944014 // ldr r4, [r4, #20]
+ .long 0xe0837106 // add r7, r3, r6, lsl #2
.long 0xedd73a00 // vldr s7, [r7]
- .long 0xe08a7105 // add r7, sl, r5, lsl #2
- .long 0xedd7aa00 // vldr s21, [r7]
- .long 0xe08a7106 // add r7, sl, r6, lsl #2
- .long 0xe0844106 // add r4, r4, r6, lsl #2
- .long 0xe59ea018 // ldr sl, [lr, #24]
- .long 0xed97aa00 // vldr s20, [r7]
- .long 0xe59e701c // ldr r7, [lr, #28]
- .long 0xed949a00 // vldr s18, [r4]
- .long 0xe0874105 // add r4, r7, r5, lsl #2
- .long 0xedd42a00 // vldr s5, [r4]
- .long 0xe0894105 // add r4, r9, r5, lsl #2
- .long 0xedd4ba00 // vldr s23, [r4]
- .long 0xe0894106 // add r4, r9, r6, lsl #2
- .long 0xe08b9106 // add r9, fp, r6, lsl #2
- .long 0xe087b106 // add fp, r7, r6, lsl #2
- .long 0xed94ba00 // vldr s22, [r4]
- .long 0xe08a4105 // add r4, sl, r5, lsl #2
- .long 0xe0887105 // add r7, r8, r5, lsl #2
- .long 0xed9b2a00 // vldr s4, [fp]
- .long 0xedd41a00 // vldr s3, [r4]
- .long 0xe59e4014 // ldr r4, [lr, #20]
- .long 0xf2002c1a // vfma.f32 d2, d0, d10
- .long 0xedd7ca00 // vldr s25, [r7]
- .long 0xe0887106 // add r7, r8, r6, lsl #2
- .long 0xe0845105 // add r5, r4, r5, lsl #2
- .long 0xed993a00 // vldr s6, [r9]
- .long 0xed97ca00 // vldr s24, [r7]
+ .long 0xe0837102 // add r7, r3, r2, lsl #2
+ .long 0xed973a00 // vldr s6, [r7]
+ .long 0xe083710b // add r7, r3, fp, lsl #2
+ .long 0xe0833105 // add r3, r3, r5, lsl #2
+ .long 0xedd72a00 // vldr s5, [r7]
.long 0xe0847106 // add r7, r4, r6, lsl #2
- .long 0xedd58a00 // vldr s17, [r5]
- .long 0xf2003c19 // vfma.f32 d3, d0, d9
- .long 0xed978a00 // vldr s16, [r7]
- .long 0xe08a7106 // add r7, sl, r6, lsl #2
- .long 0xf2008c1c // vfma.f32 d8, d0, d12
- .long 0xed971a00 // vldr s2, [r7]
- .long 0xf2001c1b // vfma.f32 d1, d0, d11
- .long 0xf2280118 // vorr d0, d8, d8
- .long 0xecbd8b0a // vpop {d8-d12}
+ .long 0xedd79a00 // vldr s19, [r7]
+ .long 0xe0847102 // add r7, r4, r2, lsl #2
+ .long 0xed932a00 // vldr s4, [r3]
+ .long 0xe08a310b // add r3, sl, fp, lsl #2
+ .long 0xed979a00 // vldr s18, [r7]
+ .long 0xe08e7106 // add r7, lr, r6, lsl #2
+ .long 0xe0896106 // add r6, r9, r6, lsl #2
+ .long 0xedd7fa00 // vldr s31, [r7]
+ .long 0xe08e7105 // add r7, lr, r5, lsl #2
+ .long 0xedd61a00 // vldr s3, [r6]
+ .long 0xe0896102 // add r6, r9, r2, lsl #2
+ .long 0xed961a00 // vldr s2, [r6]
+ .long 0xe089610b // add r6, r9, fp, lsl #2
+ .long 0xedd60a00 // vldr s1, [r6]
+ .long 0xe0896105 // add r6, r9, r5, lsl #2
+ .long 0xed960a00 // vldr s0, [r6]
+ .long 0xe084610b // add r6, r4, fp, lsl #2
+ .long 0xe0844105 // add r4, r4, r5, lsl #2
+ .long 0xedd68a00 // vldr s17, [r6]
+ .long 0xe08a6105 // add r6, sl, r5, lsl #2
+ .long 0xed948a00 // vldr s16, [r4]
+ .long 0xe08e4102 // add r4, lr, r2, lsl #2
+ .long 0xe08a2102 // add r2, sl, r2, lsl #2
+ .long 0xf2008cd0 // vfma.f32 q4, q8, q0
+ .long 0xed94fa00 // vldr s30, [r4]
+ .long 0xed925a00 // vldr s10, [r2]
+ .long 0xe08e410b // add r4, lr, fp, lsl #2
+ .long 0xe088210b // add r2, r8, fp, lsl #2
+ .long 0xedd4ea00 // vldr s29, [r4]
+ .long 0xe0884105 // add r4, r8, r5, lsl #2
+ .long 0xedd26a00 // vldr s13, [r2]
+ .long 0xedd34a00 // vldr s9, [r3]
+ .long 0xed946a00 // vldr s12, [r4]
+ .long 0xed964a00 // vldr s8, [r6]
+ .long 0xed97ea00 // vldr s28, [r7]
+ .long 0xf2006cda // vfma.f32 q3, q8, q5
+ .long 0xe5912004 // ldr r2, [r1, #4]
+ .long 0xe1a0100c // mov r1, ip
+ .long 0xf2002cde // vfma.f32 q1, q8, q7
+ .long 0xf2004cdc // vfma.f32 q2, q8, q6
+ .long 0xf2280158 // vorr q0, q4, q4
+ .long 0xe28dd008 // add sp, sp, #8
+ .long 0xecbd8b10 // vpop {d8-d15}
.long 0xe28dd004 // add sp, sp, #4
.long 0xe8bd4ff0 // pop {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_gauss_a_to_rgba_vfp4
.globl _sk_gauss_a_to_rgba_vfp4
FUNCTION(_sk_gauss_a_to_rgba_vfp4)
_sk_gauss_a_to_rgba_vfp4:
- .long 0xeddf0b0c // vldr d16, [pc, #48]
- .long 0xeddf1b0d // vldr d17, [pc, #52]
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xeddf0b0d // vldr d16, [pc, #52]
- .long 0xed9f0b10 // vldr d0, [pc, #64]
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2430c31 // vfma.f32 d16, d3, d17
- .long 0xeddf1b0b // vldr d17, [pc, #44]
- .long 0xf2431c30 // vfma.f32 d17, d3, d16
- .long 0xf2030c31 // vfma.f32 d0, d3, d17
- .long 0xf2201110 // vorr d1, d0, d0
- .long 0xf2202110 // vorr d2, d0, d0
- .long 0xf2203110 // vorr d3, d0, d0
- .long 0xe12fff1c // bx ip
+ .long 0xe28f2048 // add r2, pc, #72
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f2050 // add r2, pc, #80
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe28f2058 // add r2, pc, #88
+ .long 0xf2462c70 // vfma.f32 q9, q3, q8
+ .long 0xf4620acf // vld1.64 {d16-d17}, [r2]
+ .long 0xe28f205c // add r2, pc, #92
+ .long 0xf2460c72 // vfma.f32 q8, q3, q9
+ .long 0xf4622acf // vld1.64 {d18-d19}, [r2]
+ .long 0xe28f2060 // add r2, pc, #96
+ .long 0xf4220acf // vld1.64 {d0-d1}, [r2]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2462c70 // vfma.f32 q9, q3, q8
+ .long 0xf2060c72 // vfma.f32 q0, q3, q9
+ .long 0xf2202150 // vorr q1, q0, q0
+ .long 0xf2204150 // vorr q2, q0, q0
+ .long 0xf2206150 // vorr q3, q0, q0
+ .long 0xe12fff12 // bx r2
+ .long 0xe320f000 // nop {0}
+ .long 0xc011102d // .word 0xc011102d
.long 0xc011102d // .word 0xc011102d
.long 0xc011102d // .word 0xc011102d
+ .long 0xc011102d // .word 0xc011102d
+ .long 0x40397812 // .word 0x40397812
+ .long 0x40397812 // .word 0x40397812
.long 0x40397812 // .word 0x40397812
.long 0x40397812 // .word 0x40397812
.long 0x3e5a9420 // .word 0x3e5a9420
.long 0x3e5a9420 // .word 0x3e5a9420
+ .long 0x3e5a9420 // .word 0x3e5a9420
+ .long 0x3e5a9420 // .word 0x3e5a9420
.long 0x3e1e9d04 // .word 0x3e1e9d04
.long 0x3e1e9d04 // .word 0x3e1e9d04
+ .long 0x3e1e9d04 // .word 0x3e1e9d04
+ .long 0x3e1e9d04 // .word 0x3e1e9d04
+ .long 0x39a11800 // .word 0x39a11800
+ .long 0x39a11800 // .word 0x39a11800
.long 0x39a11800 // .word 0x39a11800
.long 0x39a11800 // .word 0x39a11800
@@ -10560,113 +12182,145 @@ HIDDEN _sk_gradient_vfp4
.globl _sk_gradient_vfp4
FUNCTION(_sk_gradient_vfp4)
_sk_gradient_vfp4:
- .long 0xe92d4ff0 // push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- .long 0xe24dd004 // sub sp, sp, #4
- .long 0xed2d8b0a // vpush {d8-d12}
+ .long 0xe92d47f0 // push {r4, r5, r6, r7, r8, r9, sl, lr}
+ .long 0xed2d8b10 // vpush {d8-d15}
.long 0xe24dd008 // sub sp, sp, #8
- .long 0xe58d3004 // str r3, [sp, #4]
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xe59c4000 // ldr r4, [ip]
- .long 0xe3540002 // cmp r4, #2
- .long 0x3a00000b // bcc 44f8 <sk_gradient_vfp4+0x58>
- .long 0xe59c5024 // ldr r5, [ip, #36]
- .long 0xf2c01010 // vmov.i32 d17, #0
- .long 0xf2c02011 // vmov.i32 d18, #1
- .long 0xe244e001 // sub lr, r4, #1
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe2854004 // add r4, r5, #4
- .long 0xf4e43c9d // vld1.32 {d19[]}, [r4 :32]!
- .long 0xe25ee001 // subs lr, lr, #1
- .long 0xf3403e23 // vcge.f32 d19, d0, d19
- .long 0xf35231b1 // vbsl d19, d18, d17
- .long 0xf26308a0 // vadd.i32 d16, d19, d16
- .long 0x1afffff9 // bne 44e0 <sk_gradient_vfp4+0x40>
- .long 0xee304b90 // vmov.32 r4, d16[1]
- .long 0xe59c6010 // ldr r6, [ip, #16]
- .long 0xee10eb90 // vmov.32 lr, d16[0]
- .long 0xe59c700c // ldr r7, [ip, #12]
- .long 0xe59ca020 // ldr sl, [ip, #32]
- .long 0xe59c9004 // ldr r9, [ip, #4]
- .long 0xe59c8008 // ldr r8, [ip, #8]
- .long 0xe0865104 // add r5, r6, r4, lsl #2
- .long 0xe089310e // add r3, r9, lr, lsl #2
- .long 0xe0899104 // add r9, r9, r4, lsl #2
- .long 0xedd59a00 // vldr s19, [r5]
- .long 0xe086510e // add r5, r6, lr, lsl #2
- .long 0xedd9ca00 // vldr s25, [r9]
- .long 0xed959a00 // vldr s18, [r5]
- .long 0xe0875104 // add r5, r7, r4, lsl #2
- .long 0xed93ca00 // vldr s24, [r3]
- .long 0xedd5aa00 // vldr s21, [r5]
- .long 0xe087510e // add r5, r7, lr, lsl #2
- .long 0xed95aa00 // vldr s20, [r5]
- .long 0xe08a5104 // add r5, sl, r4, lsl #2
- .long 0xe08aa10e // add sl, sl, lr, lsl #2
- .long 0xedd53a00 // vldr s7, [r5]
- .long 0xe59c501c // ldr r5, [ip, #28]
- .long 0xed9a3a00 // vldr s6, [sl]
- .long 0xe0856104 // add r6, r5, r4, lsl #2
- .long 0xe085b10e // add fp, r5, lr, lsl #2
- .long 0xe0885104 // add r5, r8, r4, lsl #2
- .long 0xe088810e // add r8, r8, lr, lsl #2
- .long 0xedd62a00 // vldr s5, [r6]
- .long 0xf2003c19 // vfma.f32 d3, d0, d9
- .long 0xedd5ba00 // vldr s23, [r5]
- .long 0xe59c6014 // ldr r6, [ip, #20]
- .long 0xe59c5018 // ldr r5, [ip, #24]
- .long 0xe0863104 // add r3, r6, r4, lsl #2
- .long 0xed9b2a00 // vldr s4, [fp]
- .long 0xe0857104 // add r7, r5, r4, lsl #2
- .long 0xed98ba00 // vldr s22, [r8]
- .long 0xedd38a00 // vldr s17, [r3]
- .long 0xe085310e // add r3, r5, lr, lsl #2
- .long 0xedd71a00 // vldr s3, [r7]
- .long 0xe086710e // add r7, r6, lr, lsl #2
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf2002c1a // vfma.f32 d2, d0, d10
+ .long 0xe2812004 // add r2, r1, #4
+ .long 0xe58d2004 // str r2, [sp, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf2606150 // vorr q11, q0, q0
+ .long 0xf2c02050 // vmov.i32 q9, #0
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe5931000 // ldr r1, [r3]
+ .long 0xe3510002 // cmp r1, #2
+ .long 0x3a00000a // bcc 5e54 <sk_gradient_vfp4+0x5c>
+ .long 0xe5932024 // ldr r2, [r3, #36]
+ .long 0xf2c04051 // vmov.i32 q10, #1
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe2411001 // sub r1, r1, #1
+ .long 0xe2822004 // add r2, r2, #4
+ .long 0xf4e28cbd // vld1.32 {d24[]-d25[]}, [r2 :32]!
+ .long 0xe2511001 // subs r1, r1, #1
+ .long 0xf3468ee8 // vcge.f32 q12, q11, q12
+ .long 0xf35481f2 // vbsl q12, q10, q9
+ .long 0xf26808e0 // vadd.i32 q8, q12, q8
+ .long 0x1afffff9 // bne 5e3c <sk_gradient_vfp4+0x44>
+ .long 0xee315b90 // vmov.32 r5, d17[1]
+ .long 0xe5937010 // ldr r7, [r3, #16]
+ .long 0xee112b90 // vmov.32 r2, d17[0]
+ .long 0xe593c020 // ldr ip, [r3, #32]
+ .long 0xee301b90 // vmov.32 r1, d16[1]
+ .long 0xe593400c // ldr r4, [r3, #12]
+ .long 0xe593801c // ldr r8, [r3, #28]
+ .long 0xe5939008 // ldr r9, [r3, #8]
+ .long 0xe593e004 // ldr lr, [r3, #4]
+ .long 0xe0876105 // add r6, r7, r5, lsl #2
+ .long 0xedd6ba00 // vldr s23, [r6]
+ .long 0xe0876102 // add r6, r7, r2, lsl #2
+ .long 0xed96ba00 // vldr s22, [r6]
+ .long 0xe0876101 // add r6, r7, r1, lsl #2
+ .long 0xedd6aa00 // vldr s21, [r6]
+ .long 0xee106b90 // vmov.32 r6, d16[0]
+ .long 0xe0877106 // add r7, r7, r6, lsl #2
+ .long 0xe088a106 // add sl, r8, r6, lsl #2
+ .long 0xed97aa00 // vldr s20, [r7]
+ .long 0xe08c7105 // add r7, ip, r5, lsl #2
+ .long 0xedd77a00 // vldr s15, [r7]
+ .long 0xe08c7102 // add r7, ip, r2, lsl #2
+ .long 0xed977a00 // vldr s14, [r7]
+ .long 0xe0847105 // add r7, r4, r5, lsl #2
+ .long 0xedd7da00 // vldr s27, [r7]
+ .long 0xe0847102 // add r7, r4, r2, lsl #2
+ .long 0xed97da00 // vldr s26, [r7]
+ .long 0xe0847101 // add r7, r4, r1, lsl #2
+ .long 0xe0844106 // add r4, r4, r6, lsl #2
+ .long 0xedd7ca00 // vldr s25, [r7]
+ .long 0xed94ca00 // vldr s24, [r4]
+ .long 0xe0884105 // add r4, r8, r5, lsl #2
+ .long 0xedd45a00 // vldr s11, [r4]
+ .long 0xe5934018 // ldr r4, [r3, #24]
+ .long 0xe5933014 // ldr r3, [r3, #20]
+ .long 0xe0847105 // add r7, r4, r5, lsl #2
+ .long 0xedd73a00 // vldr s7, [r7]
+ .long 0xe0897105 // add r7, r9, r5, lsl #2
+ .long 0xedd7fa00 // vldr s31, [r7]
+ .long 0xe0897102 // add r7, r9, r2, lsl #2
+ .long 0xed97fa00 // vldr s30, [r7]
+ .long 0xe0897101 // add r7, r9, r1, lsl #2
+ .long 0xedd7ea00 // vldr s29, [r7]
+ .long 0xe0837105 // add r7, r3, r5, lsl #2
+ .long 0xe08e5105 // add r5, lr, r5, lsl #2
+ .long 0xedd79a00 // vldr s19, [r7]
+ .long 0xe0837102 // add r7, r3, r2, lsl #2
+ .long 0xedd51a00 // vldr s3, [r5]
+ .long 0xe08e5102 // add r5, lr, r2, lsl #2
+ .long 0xed979a00 // vldr s18, [r7]
+ .long 0xe0837101 // add r7, r3, r1, lsl #2
+ .long 0xed951a00 // vldr s2, [r5]
+ .long 0xe08e5101 // add r5, lr, r1, lsl #2
+ .long 0xedd78a00 // vldr s17, [r7]
+ .long 0xe0837106 // add r7, r3, r6, lsl #2
+ .long 0xe0893106 // add r3, r9, r6, lsl #2
+ .long 0xedd50a00 // vldr s1, [r5]
+ .long 0xe08c9106 // add r9, ip, r6, lsl #2
+ .long 0xe0845106 // add r5, r4, r6, lsl #2
+ .long 0xe08e6106 // add r6, lr, r6, lsl #2
.long 0xed978a00 // vldr s16, [r7]
- .long 0xe2811008 // add r1, r1, #8
- .long 0xed931a00 // vldr s2, [r3]
- .long 0xf2008c1c // vfma.f32 d8, d0, d12
- .long 0xe59d3004 // ldr r3, [sp, #4]
- .long 0xf2001c1b // vfma.f32 d1, d0, d11
- .long 0xf2280118 // vorr d0, d8, d8
+ .long 0xe0847102 // add r7, r4, r2, lsl #2
+ .long 0xe0882102 // add r2, r8, r2, lsl #2
+ .long 0xed960a00 // vldr s0, [r6]
+ .long 0xed93ea00 // vldr s28, [r3]
+ .long 0xe0843101 // add r3, r4, r1, lsl #2
+ .long 0xf2068cd0 // vfma.f32 q4, q11, q0
+ .long 0xed973a00 // vldr s6, [r7]
+ .long 0xe0887101 // add r7, r8, r1, lsl #2
+ .long 0xed925a00 // vldr s10, [r2]
+ .long 0xe08c1101 // add r1, ip, r1, lsl #2
+ .long 0xedd32a00 // vldr s5, [r3]
+ .long 0xedd74a00 // vldr s9, [r7]
+ .long 0xedd16a00 // vldr s13, [r1]
+ .long 0xe59d1004 // ldr r1, [sp, #4]
+ .long 0xed952a00 // vldr s4, [r5]
+ .long 0xed9a4a00 // vldr s8, [sl]
+ .long 0xed996a00 // vldr s12, [r9]
+ .long 0xf2062cde // vfma.f32 q1, q11, q7
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2064cdc // vfma.f32 q2, q11, q6
+ .long 0xf2066cda // vfma.f32 q3, q11, q5
+ .long 0xf2280158 // vorr q0, q4, q4
.long 0xe28dd008 // add sp, sp, #8
- .long 0xecbd8b0a // vpop {d8-d12}
- .long 0xe28dd004 // add sp, sp, #4
- .long 0xe8bd4ff0 // pop {r4, r5, r6, r7, r8, r9, sl, fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xecbd8b10 // vpop {d8-d15}
+ .long 0xe8bd47f0 // pop {r4, r5, r6, r7, r8, r9, sl, lr}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_evenly_spaced_2_stop_gradient_vfp4
.globl _sk_evenly_spaced_2_stop_gradient_vfp4
FUNCTION(_sk_evenly_spaced_2_stop_gradient_vfp4)
_sk_evenly_spaced_2_stop_gradient_vfp4:
- .long 0xe92d4830 // push {r4, r5, fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe92d4800 // push {fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
.long 0xe2811008 // add r1, r1, #8
- .long 0xe28e500c // add r5, lr, #12
- .long 0xe1a0400e // mov r4, lr
- .long 0xf4e52c9f // vld1.32 {d18[]}, [r5 :32]
- .long 0xe28e5008 // add r5, lr, #8
- .long 0xf4e53c9f // vld1.32 {d19[]}, [r5 :32]
- .long 0xe28e5018 // add r5, lr, #24
- .long 0xf4a52c9f // vld1.32 {d2[]}, [r5 :32]
- .long 0xe28e5010 // add r5, lr, #16
- .long 0xf2002c33 // vfma.f32 d2, d0, d19
- .long 0xf4e50c9f // vld1.32 {d16[]}, [r5 :32]
- .long 0xe28e501c // add r5, lr, #28
- .long 0xf4e41c9d // vld1.32 {d17[]}, [r4 :32]!
- .long 0xf2400c31 // vfma.f32 d16, d0, d17
- .long 0xf4a53c9f // vld1.32 {d3[]}, [r5 :32]
- .long 0xe28e5014 // add r5, lr, #20
- .long 0xf2003c32 // vfma.f32 d3, d0, d18
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xf4a51c9f // vld1.32 {d1[]}, [r5 :32]
- .long 0xf2001c31 // vfma.f32 d1, d0, d17
- .long 0xf22001b0 // vorr d0, d16, d16
- .long 0xe8bd4830 // pop {r4, r5, fp, lr}
+ .long 0xe283200c // add r2, r3, #12
+ .long 0xe1a0e003 // mov lr, r3
+ .long 0xf4e24cbf // vld1.32 {d20[]-d21[]}, [r2 :32]
+ .long 0xe283201c // add r2, r3, #28
+ .long 0xf4a26cbf // vld1.32 {d6[]-d7[]}, [r2 :32]
+ .long 0xe2832008 // add r2, r3, #8
+ .long 0xf2006c74 // vfma.f32 q3, q0, q10
+ .long 0xf4e26cbf // vld1.32 {d22[]-d23[]}, [r2 :32]
+ .long 0xe2832018 // add r2, r3, #24
+ .long 0xf4a24cbf // vld1.32 {d4[]-d5[]}, [r2 :32]
+ .long 0xe2832010 // add r2, r3, #16
+ .long 0xf2004c76 // vfma.f32 q2, q0, q11
+ .long 0xf4e20cbf // vld1.32 {d16[]-d17[]}, [r2 :32]
+ .long 0xe2832014 // add r2, r3, #20
+ .long 0xf4ee2cbd // vld1.32 {d18[]-d19[]}, [lr :32]!
+ .long 0xf2400c72 // vfma.f32 q8, q0, q9
+ .long 0xf4ee2cbf // vld1.32 {d18[]-d19[]}, [lr :32]
+ .long 0xf4a22cbf // vld1.32 {d2[]-d3[]}, [r2 :32]
+ .long 0xf2002c72 // vfma.f32 q1, q0, q9
+ .long 0xf22001f0 // vorr q0, q8, q8
+ .long 0xe8bd4800 // pop {fp, lr}
.long 0xe12fff1c // bx ip
.long 0xe320f000 // nop {0}
@@ -10674,52 +12328,66 @@ HIDDEN _sk_xy_to_unit_angle_vfp4
.globl _sk_xy_to_unit_angle_vfp4
FUNCTION(_sk_xy_to_unit_angle_vfp4)
_sk_xy_to_unit_angle_vfp4:
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xf3f90701 // vabs.f32 d16, d1
- .long 0xeddf3b24 // vldr d19, [pc, #144]
- .long 0xf3f91700 // vabs.f32 d17, d0
- .long 0xeddf4b24 // vldr d20, [pc, #144]
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf2018fa0 // vmax.f32 d8, d17, d16
- .long 0xf2219fa0 // vmin.f32 d9, d17, d16
- .long 0xf3600ea1 // vcgt.f32 d16, d16, d17
- .long 0xeec9aaa8 // vdiv.f32 s21, s19, s17
- .long 0xee89aa08 // vdiv.f32 s20, s18, s16
- .long 0xf34a2d1a // vmul.f32 d18, d10, d10
- .long 0xf3423db3 // vmul.f32 d19, d18, d19
- .long 0xf2433da4 // vadd.f32 d19, d19, d20
- .long 0xeddf4b1c // vldr d20, [pc, #112]
- .long 0xf3423db3 // vmul.f32 d19, d18, d19
- .long 0xf2433da4 // vadd.f32 d19, d19, d20
- .long 0xf3422db3 // vmul.f32 d18, d18, d19
- .long 0xeddf3b1a // vldr d19, [pc, #104]
- .long 0xf2422da3 // vadd.f32 d18, d18, d19
- .long 0xf2c53f10 // vmov.f32 d19, #0.25
- .long 0xf34a2d32 // vmul.f32 d18, d10, d18
- .long 0xf2631da2 // vsub.f32 d17, d19, d18
- .long 0xf2c3361f // vmov.i32 d19, #1056964608
- .long 0xf35101b2 // vbsl d16, d17, d18
- .long 0xf2c72f10 // vmov.f32 d18, #1
- .long 0xf2631da0 // vsub.f32 d17, d19, d16
- .long 0xf3f93600 // vclt.f32 d19, d0, #0
- .long 0xf35131b0 // vbsl d19, d17, d16
- .long 0xf2c01010 // vmov.i32 d17, #0
- .long 0xf2620da3 // vsub.f32 d16, d18, d19
- .long 0xf3f92601 // vclt.f32 d18, d1, #0
- .long 0xf35021b3 // vbsl d18, d16, d19
- .long 0xf3420ea1 // vcge.f32 d16, d18, d17
- .long 0xf3613ea2 // vcgt.f32 d19, d17, d18
- .long 0xf26301b0 // vorr d16, d19, d16
- .long 0xf3b005a0 // vmvn d0, d16
- .long 0xf31101b2 // vbsl d0, d17, d18
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe12fff1c // bx ip
+ .long 0xed2d8b0c // vpush {d8-d13}
+ .long 0xf3f90742 // vabs.f32 q8, q1
+ .long 0xe28f20a8 // add r2, pc, #168
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xe28f20b0 // add r2, pc, #176
+ .long 0xf3f92740 // vabs.f32 q9, q0
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f20b4 // add r2, pc, #180
+ .long 0xf202afe0 // vmax.f32 q5, q9, q8
+ .long 0xf222cfe0 // vmin.f32 q6, q9, q8
+ .long 0xf3600ee2 // vcgt.f32 q8, q8, q9
+ .long 0xeecd9aab // vdiv.f32 s19, s27, s23
+ .long 0xee8d9a0b // vdiv.f32 s18, s26, s22
+ .long 0xeecc8aaa // vdiv.f32 s17, s25, s21
+ .long 0xee8c8a0a // vdiv.f32 s16, s24, s20
+ .long 0xf3484d58 // vmul.f32 q10, q4, q4
+ .long 0xf3446df6 // vmul.f32 q11, q10, q11
+ .long 0xf2466de8 // vadd.f32 q11, q11, q12
+ .long 0xf4628acf // vld1.64 {d24-d25}, [r2]
+ .long 0xe28f2094 // add r2, pc, #148
+ .long 0xf3446df6 // vmul.f32 q11, q10, q11
+ .long 0xf2466de8 // vadd.f32 q11, q11, q12
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf4626acf // vld1.64 {d22-d23}, [r2]
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf2444de6 // vadd.f32 q10, q10, q11
+ .long 0xf2c56f50 // vmov.f32 q11, #0.25
+ .long 0xf3484d74 // vmul.f32 q10, q4, q10
+ .long 0xf2662de4 // vsub.f32 q9, q11, q10
+ .long 0xf35201f4 // vbsl q8, q9, q10
+ .long 0xf3f94640 // vclt.f32 q10, q0, #0
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
+ .long 0xf2622de0 // vsub.f32 q9, q9, q8
+ .long 0xf35241f0 // vbsl q10, q9, q8
+ .long 0xf3f92642 // vclt.f32 q9, q1, #0
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xf2600de4 // vsub.f32 q8, q8, q10
+ .long 0xf35021f4 // vbsl q9, q8, q10
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xf3424ee0 // vcge.f32 q10, q9, q8
+ .long 0xf3606ee2 // vcgt.f32 q11, q8, q9
+ .long 0xf26641f4 // vorr q10, q11, q10
+ .long 0xf3b005e4 // vmvn q0, q10
+ .long 0xf31001f2 // vbsl q0, q8, q9
+ .long 0xecbd8b0c // vpop {d8-d13}
+ .long 0xe12fff12 // bx r2
.long 0xbbe72b6f // .word 0xbbe72b6f
.long 0xbbe72b6f // .word 0xbbe72b6f
+ .long 0xbbe72b6f // .word 0xbbe72b6f
+ .long 0xbbe72b6f // .word 0xbbe72b6f
+ .long 0x3ccad79f // .word 0x3ccad79f
+ .long 0x3ccad79f // .word 0x3ccad79f
.long 0x3ccad79f // .word 0x3ccad79f
.long 0x3ccad79f // .word 0x3ccad79f
.long 0xbd5464d4 // .word 0xbd5464d4
.long 0xbd5464d4 // .word 0xbd5464d4
+ .long 0xbd5464d4 // .word 0xbd5464d4
+ .long 0xbd5464d4 // .word 0xbd5464d4
+ .long 0x3e22f0a9 // .word 0x3e22f0a9
+ .long 0x3e22f0a9 // .word 0x3e22f0a9
.long 0x3e22f0a9 // .word 0x3e22f0a9
.long 0x3e22f0a9 // .word 0x3e22f0a9
@@ -10727,224 +12395,222 @@ HIDDEN _sk_xy_to_radius_vfp4
.globl _sk_xy_to_radius_vfp4
FUNCTION(_sk_xy_to_radius_vfp4)
_sk_xy_to_radius_vfp4:
- .long 0xf3410d11 // vmul.f32 d16, d1, d1
- .long 0xe491c004 // ldr ip, [r1], #4
- .long 0xf3401d10 // vmul.f32 d17, d0, d0
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf3fb15a0 // vrsqrte.f32 d17, d16
- .long 0xf3412db1 // vmul.f32 d18, d17, d17
- .long 0xf2602fb2 // vrsqrts.f32 d18, d16, d18
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf3412db1 // vmul.f32 d18, d17, d17
- .long 0xf2602fb2 // vrsqrts.f32 d18, d16, d18
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xf3000db1 // vmul.f32 d0, d16, d17
- .long 0xe12fff1c // bx ip
+ .long 0xf3420d52 // vmul.f32 q8, q1, q1
+ .long 0xe4912004 // ldr r2, [r1], #4
+ .long 0xf3402d50 // vmul.f32 q9, q0, q0
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf3fb25e0 // vrsqrte.f32 q9, q8
+ .long 0xf3424df2 // vmul.f32 q10, q9, q9
+ .long 0xf2604ff4 // vrsqrts.f32 q10, q8, q10
+ .long 0xf3422df4 // vmul.f32 q9, q9, q10
+ .long 0xf3424df2 // vmul.f32 q10, q9, q9
+ .long 0xf2604ff4 // vrsqrts.f32 q10, q8, q10
+ .long 0xf3422df4 // vmul.f32 q9, q9, q10
+ .long 0xf3000df2 // vmul.f32 q0, q8, q9
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_xy_to_2pt_conical_quadratic_max_vfp4
.globl _sk_xy_to_2pt_conical_quadratic_max_vfp4
FUNCTION(_sk_xy_to_2pt_conical_quadratic_max_vfp4)
_sk_xy_to_2pt_conical_quadratic_max_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3410d11 // vmul.f32 d16, d1, d1
- .long 0xf3401d10 // vmul.f32 d17, d0, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3c12f10 // vmov.f32 d18, #-4
- .long 0xe28e4020 // add r4, lr, #32
- .long 0xed9e8a0a // vldr s16, [lr, #40]
- .long 0xf3c44610 // vmov.i32 d20, #-1073741824
- .long 0xed9e9a0b // vldr s18, [lr, #44]
+ .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3420d52 // vmul.f32 q8, q1, q1
+ .long 0xf3402d50 // vmul.f32 q9, q0, q0
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf3c14f50 // vmov.f32 q10, #-4
+ .long 0xed938a0a // vldr s16, [r3, #40]
.long 0xe2811008 // add r1, r1, #8
- .long 0xee28aa08 // vmul.f32 s20, s16, s16
- .long 0xee298a08 // vmul.f32 s16, s18, s16
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf3f41c0a // vdup.32 d17, d10[0]
- .long 0xf3f43c08 // vdup.32 d19, d8[0]
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xf2433d80 // vadd.f32 d19, d19, d0
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xe28e4024 // add r4, lr, #36
- .long 0xf3432db4 // vmul.f32 d18, d19, d20
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2420cb2 // vfma.f32 d16, d18, d18
- .long 0xf3fb15a0 // vrsqrte.f32 d17, d16
- .long 0xf3413db1 // vmul.f32 d19, d17, d17
- .long 0xf2603fb3 // vrsqrts.f32 d19, d16, d19
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf3413db1 // vmul.f32 d19, d17, d17
- .long 0xf2603fb3 // vrsqrts.f32 d19, d16, d19
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf3f937a2 // vneg.f32 d19, d18
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2633da0 // vsub.f32 d19, d19, d16
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xf3441db1 // vmul.f32 d17, d20, d17
- .long 0xf3412db3 // vmul.f32 d18, d17, d19
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2000fa2 // vmax.f32 d0, d16, d18
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed939a0b // vldr s18, [r3, #44]
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3484df4 // vmul.f32 q10, q12, q10
+ .long 0xe2832024 // add r2, r3, #36
+ .long 0xee299a08 // vmul.f32 s18, s18, s16
+ .long 0xee288a08 // vmul.f32 s16, s16, s16
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf3f42c49 // vdup.32 q9, d9[0]
+ .long 0xf3f46c48 // vdup.32 q11, d8[0]
+ .long 0xf2422dc0 // vadd.f32 q9, q9, q0
+ .long 0xf2600de6 // vsub.f32 q8, q8, q11
+ .long 0xf3c46650 // vmov.i32 q11, #-1073741824
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2420cf2 // vfma.f32 q8, q9, q9
+ .long 0xf3fb45e0 // vrsqrte.f32 q10, q8
+ .long 0xf3446df4 // vmul.f32 q11, q10, q10
+ .long 0xf2606ff6 // vrsqrts.f32 q11, q8, q11
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf3446df4 // vmul.f32 q11, q10, q10
+ .long 0xf2606ff6 // vrsqrts.f32 q11, q8, q11
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf3f967e2 // vneg.f32 q11, q9
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf3484df4 // vmul.f32 q10, q12, q10
+ .long 0xf2666de0 // vsub.f32 q11, q11, q8
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf3442df6 // vmul.f32 q9, q10, q11
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2000fe2 // vmax.f32 q0, q8, q9
+ .long 0xecbd8b04 // vpop {d8-d9}
.long 0xe12fff1c // bx ip
HIDDEN _sk_xy_to_2pt_conical_quadratic_min_vfp4
.globl _sk_xy_to_2pt_conical_quadratic_min_vfp4
FUNCTION(_sk_xy_to_2pt_conical_quadratic_min_vfp4)
_sk_xy_to_2pt_conical_quadratic_min_vfp4:
- .long 0xe92d4010 // push {r4, lr}
- .long 0xed2d8b06 // vpush {d8-d10}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3410d11 // vmul.f32 d16, d1, d1
- .long 0xf3401d10 // vmul.f32 d17, d0, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3c12f10 // vmov.f32 d18, #-4
- .long 0xe28e4020 // add r4, lr, #32
- .long 0xed9e8a0a // vldr s16, [lr, #40]
- .long 0xf3c44610 // vmov.i32 d20, #-1073741824
- .long 0xed9e9a0b // vldr s18, [lr, #44]
+ .long 0xed2d8b04 // vpush {d8-d9}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xf3420d52 // vmul.f32 q8, q1, q1
+ .long 0xf3402d50 // vmul.f32 q9, q0, q0
+ .long 0xe2832020 // add r2, r3, #32
+ .long 0xf3c14f50 // vmov.f32 q10, #-4
+ .long 0xed938a0a // vldr s16, [r3, #40]
.long 0xe2811008 // add r1, r1, #8
- .long 0xee28aa08 // vmul.f32 s20, s16, s16
- .long 0xee298a08 // vmul.f32 s16, s18, s16
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xf3f41c0a // vdup.32 d17, d10[0]
- .long 0xf3f43c08 // vdup.32 d19, d8[0]
- .long 0xf2600da1 // vsub.f32 d16, d16, d17
- .long 0xf4e41c9f // vld1.32 {d17[]}, [r4 :32]
- .long 0xf2433d80 // vadd.f32 d19, d19, d0
- .long 0xf3411db2 // vmul.f32 d17, d17, d18
- .long 0xe28e4024 // add r4, lr, #36
- .long 0xf3432db4 // vmul.f32 d18, d19, d20
- .long 0xf4e44c9f // vld1.32 {d20[]}, [r4 :32]
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2420cb2 // vfma.f32 d16, d18, d18
- .long 0xf3fb15a0 // vrsqrte.f32 d17, d16
- .long 0xf3413db1 // vmul.f32 d19, d17, d17
- .long 0xf2603fb3 // vrsqrts.f32 d19, d16, d19
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf3413db1 // vmul.f32 d19, d17, d17
- .long 0xf2603fb3 // vrsqrts.f32 d19, d16, d19
- .long 0xf3411db3 // vmul.f32 d17, d17, d19
- .long 0xf3f937a2 // vneg.f32 d19, d18
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2c3161f // vmov.i32 d17, #1056964608
- .long 0xf2633da0 // vsub.f32 d19, d19, d16
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xf3441db1 // vmul.f32 d17, d20, d17
- .long 0xf3412db3 // vmul.f32 d18, d17, d19
- .long 0xf3410db0 // vmul.f32 d16, d17, d16
- .long 0xf2200fa2 // vmin.f32 d0, d16, d18
- .long 0xecbd8b06 // vpop {d8-d10}
- .long 0xe8bd4010 // pop {r4, lr}
+ .long 0xed939a0b // vldr s18, [r3, #44]
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf3484df4 // vmul.f32 q10, q12, q10
+ .long 0xe2832024 // add r2, r3, #36
+ .long 0xee299a08 // vmul.f32 s18, s18, s16
+ .long 0xee288a08 // vmul.f32 s16, s16, s16
+ .long 0xf4e28cbf // vld1.32 {d24[]-d25[]}, [r2 :32]
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf3f42c49 // vdup.32 q9, d9[0]
+ .long 0xf3f46c48 // vdup.32 q11, d8[0]
+ .long 0xf2422dc0 // vadd.f32 q9, q9, q0
+ .long 0xf2600de6 // vsub.f32 q8, q8, q11
+ .long 0xf3c46650 // vmov.i32 q11, #-1073741824
+ .long 0xf3422df6 // vmul.f32 q9, q9, q11
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2420cf2 // vfma.f32 q8, q9, q9
+ .long 0xf3fb45e0 // vrsqrte.f32 q10, q8
+ .long 0xf3446df4 // vmul.f32 q11, q10, q10
+ .long 0xf2606ff6 // vrsqrts.f32 q11, q8, q11
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf3446df4 // vmul.f32 q11, q10, q10
+ .long 0xf2606ff6 // vrsqrts.f32 q11, q8, q11
+ .long 0xf3444df6 // vmul.f32 q10, q10, q11
+ .long 0xf3f967e2 // vneg.f32 q11, q9
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf3484df4 // vmul.f32 q10, q12, q10
+ .long 0xf2666de0 // vsub.f32 q11, q11, q8
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf3442df6 // vmul.f32 q9, q10, q11
+ .long 0xf3440df0 // vmul.f32 q8, q10, q8
+ .long 0xf2200fe2 // vmin.f32 q0, q8, q9
+ .long 0xecbd8b04 // vpop {d8-d9}
.long 0xe12fff1c // bx ip
HIDDEN _sk_xy_to_2pt_conical_linear_vfp4
.globl _sk_xy_to_2pt_conical_linear_vfp4
FUNCTION(_sk_xy_to_2pt_conical_linear_vfp4)
_sk_xy_to_2pt_conical_linear_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xed2d8b04 // vpush {d8-d9}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xf3410d11 // vmul.f32 d16, d1, d1
- .long 0xf3401d10 // vmul.f32 d17, d0, d0
- .long 0xe591c004 // ldr ip, [r1, #4]
- .long 0xf3c43610 // vmov.i32 d19, #-1073741824
+ .long 0xed2d8b08 // vpush {d8-d11}
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xf3420d52 // vmul.f32 q8, q1, q1
+ .long 0xf3402d50 // vmul.f32 q9, q0, q0
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xed9e8a0a // vldr s16, [lr, #40]
- .long 0xed9e9a0b // vldr s18, [lr, #44]
- .long 0xf2410da0 // vadd.f32 d16, d17, d16
- .long 0xee299a08 // vmul.f32 s18, s18, s16
- .long 0xee288a08 // vmul.f32 s16, s16, s16
- .long 0xf3f41c09 // vdup.32 d17, d9[0]
- .long 0xf3f42c08 // vdup.32 d18, d8[0]
- .long 0xf2411d80 // vadd.f32 d17, d17, d0
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xf3018db3 // vmul.f32 d8, d17, d19
- .long 0xf3b997a0 // vneg.f32 d9, d16
- .long 0xeec90aa8 // vdiv.f32 s1, s19, s17
- .long 0xee890a08 // vdiv.f32 s0, s18, s16
- .long 0xecbd8b04 // vpop {d8-d9}
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xed938a0a // vldr s16, [r3, #40]
+ .long 0xed939a0b // vldr s18, [r3, #44]
+ .long 0xee28aa08 // vmul.f32 s20, s16, s16
+ .long 0xee298a08 // vmul.f32 s16, s18, s16
+ .long 0xf2420de0 // vadd.f32 q8, q9, q8
+ .long 0xf3f42c4a // vdup.32 q9, d10[0]
+ .long 0xf3f44c48 // vdup.32 q10, d8[0]
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf2442dc0 // vadd.f32 q9, q10, q0
+ .long 0xf3c44650 // vmov.i32 q10, #-1073741824
+ .long 0xf3b987e0 // vneg.f32 q4, q8
+ .long 0xf302adf4 // vmul.f32 q5, q9, q10
+ .long 0xeec91aab // vdiv.f32 s3, s19, s23
+ .long 0xee891a0b // vdiv.f32 s2, s18, s22
+ .long 0xeec80aaa // vdiv.f32 s1, s17, s21
+ .long 0xee880a0a // vdiv.f32 s0, s16, s20
+ .long 0xecbd8b08 // vpop {d8-d11}
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_mask_2pt_conical_degenerates_vfp4
.globl _sk_mask_2pt_conical_degenerates_vfp4
FUNCTION(_sk_mask_2pt_conical_degenerates_vfp4)
_sk_mask_2pt_conical_degenerates_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xf2c00010 // vmov.i32 d16, #0
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf3401e20 // vcge.f32 d17, d0, d16
- .long 0xe28ce02c // add lr, ip, #44
- .long 0xf3600e80 // vcgt.f32 d16, d16, d0
- .long 0xf4ee2c9f // vld1.32 {d18[]}, [lr :32]
- .long 0xe28ce028 // add lr, ip, #40
- .long 0xf26001b1 // vorr d16, d16, d17
- .long 0xf4ee1c9f // vld1.32 {d17[]}, [lr :32]
- .long 0xf2401c32 // vfma.f32 d17, d0, d18
- .long 0xf3f914a1 // vcge.f32 d17, d17, #0
- .long 0xf24101b0 // vand d16, d17, d16
- .long 0xedcc0b00 // vstr d16, [ip]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf2c00050 // vmov.i32 q8, #0
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf3402e60 // vcge.f32 q9, q0, q8
+ .long 0xe282302c // add r3, r2, #44
+ .long 0xf3600ec0 // vcgt.f32 q8, q8, q0
+ .long 0xf4e34cbf // vld1.32 {d20[]-d21[]}, [r3 :32]
+ .long 0xe2823028 // add r3, r2, #40
+ .long 0xf4e36cbf // vld1.32 {d22[]-d23[]}, [r3 :32]
+ .long 0xf2406c74 // vfma.f32 q11, q0, q10
+ .long 0xf26001f2 // vorr q8, q8, q9
+ .long 0xf3f924e6 // vcge.f32 q9, q11, #0
+ .long 0xf3f62222 // vmovn.i32 d18, q9
+ .long 0xf3f60220 // vmovn.i32 d16, q8
+ .long 0xf24201b0 // vand d16, d18, d16
+ .long 0xf2c1205f // vmov.i32 q9, #31
+ .long 0xf3d00a30 // vmovl.u16 q8, d16
+ .long 0xf3f923e2 // vneg.s32 q9, q9
+ .long 0xf2ff0570 // vshl.s32 q8, q8, #31
+ .long 0xf26204e0 // vshl.s32 q8, q8, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
HIDDEN _sk_apply_vector_mask_vfp4
.globl _sk_apply_vector_mask_vfp4
FUNCTION(_sk_apply_vector_mask_vfp4)
_sk_apply_vector_mask_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5913000 // ldr r3, [r1]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xedde0b00 // vldr d16, [lr]
- .long 0xf2000190 // vand d0, d16, d0
- .long 0xf2001191 // vand d1, d16, d1
- .long 0xf2002192 // vand d2, d16, d2
- .long 0xf2003193 // vand d3, d16, d3
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xf4630a8f // vld1.32 {d16-d17}, [r3]
+ .long 0xf20001d0 // vand q0, q8, q0
+ .long 0xf20021d2 // vand q1, q8, q1
+ .long 0xf20041d4 // vand q2, q8, q2
+ .long 0xf20061d6 // vand q3, q8, q3
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_save_xy_vfp4
.globl _sk_save_xy_vfp4
FUNCTION(_sk_save_xy_vfp4)
_sk_save_xy_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xeddf7b1a // vldr d23, [pc, #104]
- .long 0xf2c06010 // vmov.i32 d22, #0
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2401d20 // vadd.f32 d17, d0, d16
- .long 0xf2410d20 // vadd.f32 d16, d1, d16
- .long 0xed8c0b00 // vstr d0, [ip]
- .long 0xed8c1b08 // vstr d1, [ip, #32]
- .long 0xf3fb2721 // vcvt.s32.f32 d18, d17
- .long 0xf3fb3720 // vcvt.s32.f32 d19, d16
- .long 0xf3fb2622 // vcvt.f32.s32 d18, d18
- .long 0xf3fb3623 // vcvt.f32.s32 d19, d19
- .long 0xf3624ea1 // vcgt.f32 d20, d18, d17
- .long 0xf3635ea0 // vcgt.f32 d21, d19, d16
- .long 0xf35741b6 // vbsl d20, d23, d22
- .long 0xf35751b6 // vbsl d21, d23, d22
- .long 0xf2622da4 // vsub.f32 d18, d18, d20
- .long 0xf2633da5 // vsub.f32 d19, d19, d21
- .long 0xf2611da2 // vsub.f32 d17, d17, d18
- .long 0xf2600da3 // vsub.f32 d16, d16, d19
- .long 0xedcc1b10 // vstr d17, [ip, #64]
- .long 0xedcc0b18 // vstr d16, [ip, #96]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xe28f206c // add r2, pc, #108
+ .long 0xf462cacf // vld1.64 {d28-d29}, [r2]
+ .long 0xf2c0a050 // vmov.i32 q13, #0
+ .long 0xf2402d60 // vadd.f32 q9, q0, q8
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2420d60 // vadd.f32 q8, q1, q8
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xf4020a8f // vst1.32 {d0-d1}, [r2]
+ .long 0xf3fb4762 // vcvt.s32.f32 q10, q9
+ .long 0xf4032a8f // vst1.32 {d2-d3}, [r3]
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf3fb6760 // vcvt.s32.f32 q11, q8
+ .long 0xe2822060 // add r2, r2, #96
+ .long 0xf3fb4664 // vcvt.f32.s32 q10, q10
+ .long 0xf3fb6666 // vcvt.f32.s32 q11, q11
+ .long 0xf3648ee2 // vcgt.f32 q12, q10, q9
+ .long 0xf366eee0 // vcgt.f32 q15, q11, q8
+ .long 0xf35c81fa // vbsl q12, q14, q13
+ .long 0xf35ce1fa // vbsl q15, q14, q13
+ .long 0xf2644de8 // vsub.f32 q10, q10, q12
+ .long 0xf2666dee // vsub.f32 q11, q11, q15
+ .long 0xf2622de4 // vsub.f32 q9, q9, q10
+ .long 0xf2600de6 // vsub.f32 q8, q8, q11
+ .long 0xf4432a8f // vst1.32 {d18-d19}, [r3]
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0x3f800000 // .word 0x3f800000
+ .long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
.long 0x3f800000 // .word 0x3f800000
@@ -10952,123 +12618,139 @@ HIDDEN _sk_accumulate_vfp4
.globl _sk_accumulate_vfp4
FUNCTION(_sk_accumulate_vfp4)
_sk_accumulate_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591e000 // ldr lr, [r1]
- .long 0xe591c004 // ldr ip, [r1, #4]
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe28230a0 // add r3, r2, #160
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf4630a8f // vld1.32 {d16-d17}, [r3]
+ .long 0xf4622a8f // vld1.32 {d18-d19}, [r2]
+ .long 0xe2802010 // add r2, r0, #16
+ .long 0xf3420df0 // vmul.f32 q8, q9, q8
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2402cd0 // vfma.f32 q9, q8, q0
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802020 // add r2, r0, #32
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2402cd2 // vfma.f32 q9, q8, q1
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802030 // add r2, r0, #48
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2402cd4 // vfma.f32 q9, q8, q2
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe2802040 // add r2, r0, #64
+ .long 0xf4622aef // vld1.64 {d18-d19}, [r2 :128]
+ .long 0xf2402cd6 // vfma.f32 q9, q8, q3
+ .long 0xf4422aef // vst1.64 {d18-d19}, [r2 :128]
+ .long 0xe5912004 // ldr r2, [r1, #4]
.long 0xe2811008 // add r1, r1, #8
- .long 0xedde1b28 // vldr d17, [lr, #160]
- .long 0xedde0b20 // vldr d16, [lr, #128]
- .long 0xf3400db1 // vmul.f32 d16, d16, d17
- .long 0xf2004c90 // vfma.f32 d4, d16, d0
- .long 0xf2005c91 // vfma.f32 d5, d16, d1
- .long 0xf2006c92 // vfma.f32 d6, d16, d2
- .long 0xf2007c93 // vfma.f32 d7, d16, d3
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe12fff12 // bx r2
HIDDEN _sk_bilinear_nx_vfp4
.globl _sk_bilinear_nx_vfp4
FUNCTION(_sk_bilinear_nx_vfp4)
_sk_bilinear_nx_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xeddc2b10 // vldr d18, [ip, #64]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddc1b00 // vldr d17, [ip]
- .long 0xf3c3261f // vmov.i32 d18, #-1090519040
- .long 0xf2010da2 // vadd.f32 d0, d17, d18
- .long 0xedcc0b20 // vstr d16, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf4624a8f // vld1.32 {d20-d21}, [r2]
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf3c3265f // vmov.i32 q9, #-1090519040
+ .long 0xf2040de2 // vadd.f32 q0, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
HIDDEN _sk_bilinear_px_vfp4
.globl _sk_bilinear_px_vfp4
FUNCTION(_sk_bilinear_px_vfp4)
_sk_bilinear_px_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xeddc2b10 // vldr d18, [ip, #64]
- .long 0xeddc1b00 // vldr d17, [ip]
- .long 0xedcc2b20 // vstr d18, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xf2010da0 // vadd.f32 d0, d17, d16
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf4622a8f // vld1.32 {d18-d19}, [r2]
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf2020de0 // vadd.f32 q0, q9, q8
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf4630a8f // vld1.32 {d16-d17}, [r3]
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
HIDDEN _sk_bilinear_ny_vfp4
.globl _sk_bilinear_ny_vfp4
FUNCTION(_sk_bilinear_ny_vfp4)
_sk_bilinear_ny_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xeddc2b18 // vldr d18, [ip, #96]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddc1b08 // vldr d17, [ip, #32]
- .long 0xf3c3261f // vmov.i32 d18, #-1090519040
- .long 0xf2011da2 // vadd.f32 d1, d17, d18
- .long 0xedcc0b28 // vstr d16, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf3c3265f // vmov.i32 q9, #-1090519040
+ .long 0xf2042de2 // vadd.f32 q1, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
HIDDEN _sk_bilinear_py_vfp4
.globl _sk_bilinear_py_vfp4
FUNCTION(_sk_bilinear_py_vfp4)
_sk_bilinear_py_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xeddc2b18 // vldr d18, [ip, #96]
- .long 0xeddc1b08 // vldr d17, [ip, #32]
- .long 0xedcc2b28 // vstr d18, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xf2011da0 // vadd.f32 d1, d17, d16
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c3265f // vmov.i32 q9, #1056964608
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf4630a8f // vld1.32 {d16-d17}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf2042de2 // vadd.f32 q1, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
.long 0xe320f000 // nop {0}
HIDDEN _sk_bicubic_n3x_vfp4
.globl _sk_bicubic_n3x_vfp4
FUNCTION(_sk_bicubic_n3x_vfp4)
_sk_bicubic_n3x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xeddf3b11 // vldr d19, [pc, #68]
- .long 0xeddc2b10 // vldr d18, [ip, #64]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddf2b0c // vldr d18, [pc, #48]
- .long 0xeddc1b00 // vldr d17, [ip]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf3400db0 // vmul.f32 d16, d16, d16
- .long 0xf3c72f18 // vmov.f32 d18, #-1.5
- .long 0xf2010da2 // vadd.f32 d0, d17, d18
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xedcc0b20 // vstr d16, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3040 // add r3, pc, #64
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xf2404cf2 // vfma.f32 q10, q8, q9
+ .long 0xf3400df0 // vmul.f32 q8, q8, q8
+ .long 0xf3c72f58 // vmov.f32 q9, #-1.5
+ .long 0xf3400df4 // vmul.f32 q8, q8, q10
+ .long 0xf4624a8f // vld1.32 {d20-d21}, [r2]
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf2040de2 // vadd.f32 q0, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0xe320f000 // nop {0}
+ .long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
@@ -11076,30 +12758,36 @@ HIDDEN _sk_bicubic_n1x_vfp4
.globl _sk_bicubic_n1x_vfp4
FUNCTION(_sk_bicubic_n1x_vfp4)
_sk_bicubic_n1x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xf2c73f18 // vmov.f32 d19, #1.5
- .long 0xeddc2b10 // vldr d18, [ip, #64]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddf2b0e // vldr d18, [pc, #56]
- .long 0xeddc1b00 // vldr d17, [ip]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2402cb3 // vfma.f32 d18, d16, d19
- .long 0xeddf3b0b // vldr d19, [pc, #44]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf3c3061f // vmov.i32 d16, #-1090519040
- .long 0xf2010da0 // vadd.f32 d0, d17, d16
- .long 0xedcc3b20 // vstr d19, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3048 // add r3, pc, #72
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xe28f304c // add r3, pc, #76
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xf2402cf4 // vfma.f32 q9, q8, q10
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf2404cf2 // vfma.f32 q10, q8, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xf2402cf4 // vfma.f32 q9, q8, q10
+ .long 0xf4624a8f // vld1.32 {d20-d21}, [r2]
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf3c3065f // vmov.i32 q8, #-1090519040
+ .long 0xf2040de0 // vadd.f32 q0, q10, q8
+ .long 0xf4422a8f // vst1.32 {d18-d19}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0xe320f000 // nop {0}
+ .long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
+ .long 0xbf955555 // .word 0xbf955555
+ .long 0x3d638e39 // .word 0x3d638e39
+ .long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
@@ -11107,28 +12795,34 @@ HIDDEN _sk_bicubic_p1x_vfp4
.globl _sk_bicubic_p1x_vfp4
FUNCTION(_sk_bicubic_p1x_vfp4)
_sk_bicubic_p1x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c71f18 // vmov.f32 d17, #1.5
- .long 0xeddf0b0f // vldr d16, [pc, #60]
- .long 0xeddc3b10 // vldr d19, [ip, #64]
- .long 0xf2431cb0 // vfma.f32 d17, d19, d16
- .long 0xeddc2b00 // vldr d18, [ip]
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xf2020da0 // vadd.f32 d0, d18, d16
- .long 0xf2430cb1 // vfma.f32 d16, d19, d17
- .long 0xeddf1b0a // vldr d17, [pc, #40]
- .long 0xf2431cb0 // vfma.f32 d17, d19, d16
- .long 0xedcc1b20 // vstr d17, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe28f304c // add r3, pc, #76
+ .long 0xf4630acf // vld1.64 {d16-d17}, [r3]
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf2442cf0 // vfma.f32 q9, q10, q8
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2446cf2 // vfma.f32 q11, q10, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xf2442cf6 // vfma.f32 q9, q10, q11
+ .long 0xf4624a8f // vld1.32 {d20-d21}, [r2]
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf2040de0 // vadd.f32 q0, q10, q8
+ .long 0xf4422a8f // vst1.32 {d18-d19}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
.long 0xe320f000 // nop {0}
.long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
+ .long 0xbf955555 // .word 0xbf955555
+ .long 0xbf955555 // .word 0xbf955555
+ .long 0x3d638e39 // .word 0x3d638e39
+ .long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
@@ -11136,55 +12830,67 @@ HIDDEN _sk_bicubic_p3x_vfp4
.globl _sk_bicubic_p3x_vfp4
FUNCTION(_sk_bicubic_p3x_vfp4)
_sk_bicubic_p3x_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xeddf0b0e // vldr d16, [pc, #56]
- .long 0xeddf3b0f // vldr d19, [pc, #60]
- .long 0xeddc2b10 // vldr d18, [ip, #64]
- .long 0xf2423cb0 // vfma.f32 d19, d18, d16
- .long 0xeddc1b00 // vldr d17, [ip]
- .long 0xf3420db2 // vmul.f32 d16, d18, d18
- .long 0xf2c72f18 // vmov.f32 d18, #1.5
- .long 0xf2010da2 // vadd.f32 d0, d17, d18
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xedcc0b20 // vstr d16, [ip, #128]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4630acf // vld1.64 {d16-d17}, [r3]
+ .long 0xe2823040 // add r3, r2, #64
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xf2424cf0 // vfma.f32 q10, q9, q8
+ .long 0xf3420df2 // vmul.f32 q8, q9, q9
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xf3400df4 // vmul.f32 q8, q8, q10
+ .long 0xf4624a8f // vld1.32 {d20-d21}, [r2]
+ .long 0xe2822080 // add r2, r2, #128
+ .long 0xf2040de2 // vadd.f32 q0, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0xe320f000 // nop {0}
+ .long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
HIDDEN _sk_bicubic_n3y_vfp4
.globl _sk_bicubic_n3y_vfp4
FUNCTION(_sk_bicubic_n3y_vfp4)
_sk_bicubic_n3y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xeddf3b11 // vldr d19, [pc, #68]
- .long 0xeddc2b18 // vldr d18, [ip, #96]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddf2b0c // vldr d18, [pc, #48]
- .long 0xeddc1b08 // vldr d17, [ip, #32]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf3400db0 // vmul.f32 d16, d16, d16
- .long 0xf3c72f18 // vmov.f32 d18, #-1.5
- .long 0xf2011da2 // vadd.f32 d1, d17, d18
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xedcc0b28 // vstr d16, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3040 // add r3, pc, #64
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf2404cf2 // vfma.f32 q10, q8, q9
+ .long 0xf3400df0 // vmul.f32 q8, q8, q8
+ .long 0xf3c72f58 // vmov.f32 q9, #-1.5
+ .long 0xf3400df4 // vmul.f32 q8, q8, q10
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf2042de2 // vadd.f32 q1, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
@@ -11192,30 +12898,36 @@ HIDDEN _sk_bicubic_n1y_vfp4
.globl _sk_bicubic_n1y_vfp4
FUNCTION(_sk_bicubic_n1y_vfp4)
_sk_bicubic_n1y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c70f10 // vmov.f32 d16, #1
- .long 0xf2c73f18 // vmov.f32 d19, #1.5
- .long 0xeddc2b18 // vldr d18, [ip, #96]
- .long 0xf2600da2 // vsub.f32 d16, d16, d18
- .long 0xeddf2b0e // vldr d18, [pc, #56]
- .long 0xeddc1b08 // vldr d17, [ip, #32]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf2c3261f // vmov.i32 d18, #1056964608
- .long 0xf2402cb3 // vfma.f32 d18, d16, d19
- .long 0xeddf3b0b // vldr d19, [pc, #44]
- .long 0xf2403cb2 // vfma.f32 d19, d16, d18
- .long 0xf3c3061f // vmov.i32 d16, #-1090519040
- .long 0xf2011da0 // vadd.f32 d1, d17, d16
- .long 0xedcc3b28 // vstr d19, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xf2c70f50 // vmov.f32 q8, #1
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3048 // add r3, pc, #72
+ .long 0xf2600de2 // vsub.f32 q8, q8, q9
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xe28f304c // add r3, pc, #76
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xf2402cf4 // vfma.f32 q9, q8, q10
+ .long 0xf2c3465f // vmov.i32 q10, #1056964608
+ .long 0xf2404cf2 // vfma.f32 q10, q8, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf2402cf4 // vfma.f32 q9, q8, q10
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf3c3065f // vmov.i32 q8, #-1090519040
+ .long 0xf2042de0 // vadd.f32 q1, q10, q8
+ .long 0xf4422a8f // vst1.32 {d18-d19}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
+ .long 0xbf955555 // .word 0xbf955555
+ .long 0x3d638e39 // .word 0x3d638e39
+ .long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
@@ -11223,28 +12935,34 @@ HIDDEN _sk_bicubic_p1y_vfp4
.globl _sk_bicubic_p1y_vfp4
FUNCTION(_sk_bicubic_p1y_vfp4)
_sk_bicubic_p1y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xf2c71f18 // vmov.f32 d17, #1.5
- .long 0xeddf0b0f // vldr d16, [pc, #60]
- .long 0xeddc3b18 // vldr d19, [ip, #96]
- .long 0xf2431cb0 // vfma.f32 d17, d19, d16
- .long 0xeddc2b08 // vldr d18, [ip, #32]
- .long 0xf2c3061f // vmov.i32 d16, #1056964608
- .long 0xf2021da0 // vadd.f32 d1, d18, d16
- .long 0xf2430cb1 // vfma.f32 d16, d19, d17
- .long 0xeddf1b0a // vldr d17, [pc, #40]
- .long 0xf2431cb0 // vfma.f32 d17, d19, d16
- .long 0xedcc1b28 // vstr d17, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
- .long 0xe320f000 // nop {0}
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe28f304c // add r3, pc, #76
+ .long 0xf4630acf // vld1.64 {d16-d17}, [r3]
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf2c3665f // vmov.i32 q11, #1056964608
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf2442cf0 // vfma.f32 q9, q10, q8
+ .long 0xf2c3065f // vmov.i32 q8, #1056964608
+ .long 0xf2446cf2 // vfma.f32 q11, q10, q9
+ .long 0xf4632acf // vld1.64 {d18-d19}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf2442cf6 // vfma.f32 q9, q10, q11
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf2042de0 // vadd.f32 q1, q10, q8
+ .long 0xf4422a8f // vst1.32 {d18-d19}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
.long 0xbf955555 // .word 0xbf955555
+ .long 0xbf955555 // .word 0xbf955555
+ .long 0x3d638e39 // .word 0x3d638e39
+ .long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
.long 0x3d638e39 // .word 0x3d638e39
@@ -11252,67 +12970,61 @@ HIDDEN _sk_bicubic_p3y_vfp4
.globl _sk_bicubic_p3y_vfp4
FUNCTION(_sk_bicubic_p3y_vfp4)
_sk_bicubic_p3y_vfp4:
- .long 0xe92d4800 // push {fp, lr}
- .long 0xe591c000 // ldr ip, [r1]
- .long 0xeddf0b0e // vldr d16, [pc, #56]
- .long 0xeddf3b0f // vldr d19, [pc, #60]
- .long 0xeddc2b18 // vldr d18, [ip, #96]
- .long 0xf2423cb0 // vfma.f32 d19, d18, d16
- .long 0xeddc1b08 // vldr d17, [ip, #32]
- .long 0xf3420db2 // vmul.f32 d16, d18, d18
- .long 0xf2c72f18 // vmov.f32 d18, #1.5
- .long 0xf2011da2 // vadd.f32 d1, d17, d18
- .long 0xf3400db3 // vmul.f32 d16, d16, d19
- .long 0xedcc0b28 // vstr d16, [ip, #160]
- .long 0xe281c008 // add ip, r1, #8
- .long 0xe591e004 // ldr lr, [r1, #4]
- .long 0xe1a0100c // mov r1, ip
- .long 0xe1a0c00e // mov ip, lr
- .long 0xe8bd4800 // pop {fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5912000 // ldr r2, [r1]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4630acf // vld1.64 {d16-d17}, [r3]
+ .long 0xe2823060 // add r3, r2, #96
+ .long 0xf4632a8f // vld1.32 {d18-d19}, [r3]
+ .long 0xe28f3044 // add r3, pc, #68
+ .long 0xf4634acf // vld1.64 {d20-d21}, [r3]
+ .long 0xe2823020 // add r3, r2, #32
+ .long 0xf2424cf0 // vfma.f32 q10, q9, q8
+ .long 0xe28220a0 // add r2, r2, #160
+ .long 0xf3420df2 // vmul.f32 q8, q9, q9
+ .long 0xf2c72f58 // vmov.f32 q9, #1.5
+ .long 0xf3400df4 // vmul.f32 q8, q8, q10
+ .long 0xf4634a8f // vld1.32 {d20-d21}, [r3]
+ .long 0xf2042de2 // vadd.f32 q1, q10, q9
+ .long 0xf4420a8f // vst1.32 {d16-d17}, [r2]
+ .long 0xe2812008 // add r2, r1, #8
+ .long 0xe5913004 // ldr r3, [r1, #4]
+ .long 0xe1a01002 // mov r1, r2
+ .long 0xe12fff13 // bx r3
+ .long 0x3ec71c72 // .word 0x3ec71c72
+ .long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0x3ec71c72 // .word 0x3ec71c72
.long 0xbeaaaaab // .word 0xbeaaaaab
.long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
+ .long 0xbeaaaaab // .word 0xbeaaaaab
HIDDEN _sk_callback_vfp4
.globl _sk_callback_vfp4
FUNCTION(_sk_callback_vfp4)
_sk_callback_vfp4:
- .long 0xe92d4df0 // push {r4, r5, r6, r7, r8, sl, fp, lr}
- .long 0xe28db018 // add fp, sp, #24
- .long 0xed2d8b08 // vpush {d8-d11}
- .long 0xe1a06001 // mov r6, r1
- .long 0xe1a07000 // mov r7, r0
- .long 0xe5964000 // ldr r4, [r6]
- .long 0xe1a05002 // mov r5, r2
- .long 0xe59b1008 // ldr r1, [fp, #8]
- .long 0xeeb08b47 // vmov.f64 d8, d7
- .long 0xe2840004 // add r0, r4, #4
- .long 0xe1a08003 // mov r8, r3
+ .long 0xe92d4c70 // push {r4, r5, r6, sl, fp, lr}
+ .long 0xe28db010 // add fp, sp, #16
+ .long 0xe1a04001 // mov r4, r1
+ .long 0xe1a05000 // mov r5, r0
+ .long 0xe5946000 // ldr r6, [r4]
+ .long 0xe5951008 // ldr r1, [r5, #8]
+ .long 0xe2860004 // add r0, r6, #4
.long 0xe3510000 // cmp r1, #0
- .long 0x03a01002 // moveq r1, #2
- .long 0xf400008f // vst4.32 {d0-d3}, [r0]
- .long 0xe1a00004 // mov r0, r4
- .long 0xe5942000 // ldr r2, [r4]
- .long 0xeeb09b46 // vmov.f64 d9, d6
- .long 0xeeb0ab45 // vmov.f64 d10, d5
- .long 0xeeb0bb44 // vmov.f64 d11, d4
+ .long 0xf400018d // vst4.32 {d0,d2,d4,d6}, [r0]!
+ .long 0x03a01004 // moveq r1, #4
+ .long 0xf400118f // vst4.32 {d1,d3,d5,d7}, [r0]
+ .long 0xe1a00006 // mov r0, r6
+ .long 0xe5962000 // ldr r2, [r6]
.long 0xe12fff32 // blx r2
- .long 0xe5940084 // ldr r0, [r4, #132]
- .long 0xe2861008 // add r1, r6, #8
- .long 0xe596c004 // ldr ip, [r6, #4]
- .long 0xe1a02005 // mov r2, r5
- .long 0xe1a03008 // mov r3, r8
- .long 0xeeb04b4b // vmov.f64 d4, d11
- .long 0xf420008f // vld4.32 {d0-d3}, [r0]
- .long 0xe1a00007 // mov r0, r7
- .long 0xeeb05b4a // vmov.f64 d5, d10
- .long 0xeeb06b49 // vmov.f64 d6, d9
- .long 0xeeb07b48 // vmov.f64 d7, d8
- .long 0xecbd8b08 // vpop {d8-d11}
- .long 0xe8bd4df0 // pop {r4, r5, r6, r7, r8, sl, fp, lr}
- .long 0xe12fff1c // bx ip
+ .long 0xe5960084 // ldr r0, [r6, #132]
+ .long 0xe2841008 // add r1, r4, #8
+ .long 0xf420018d // vld4.32 {d0,d2,d4,d6}, [r0]!
+ .long 0xf420118f // vld4.32 {d1,d3,d5,d7}, [r0]
+ .long 0xe1a00005 // mov r0, r5
+ .long 0xe5942004 // ldr r2, [r4, #4]
+ .long 0xe8bd4c70 // pop {r4, r5, r6, sl, fp, lr}
+ .long 0xe12fff12 // bx r2
#elif defined(__x86_64__)
BALIGN32
diff --git a/src/jumper/SkJumper_stages.cpp b/src/jumper/SkJumper_stages.cpp
index 47e3ad22ea..30d137e6eb 100644
--- a/src/jumper/SkJumper_stages.cpp
+++ b/src/jumper/SkJumper_stages.cpp
@@ -43,10 +43,11 @@ using K = const SkJumper_constants;
// tail != 0 ~~> work on only the first tail pixels
// tail is always < kStride.
-#if defined(__i386__) || defined(_M_IX86)
+#if defined(__i386__) || defined(_M_IX86) || defined(__arm__)
// On 32-bit x86 we've only got 8 xmm registers, so we keep the 4 hottest (r,g,b,a)
// in registers and the d-registers on the stack (giving us 4 temporary registers).
// General-purpose registers are also tight, so we put most of those on the stack too.
+ // On ARMv7, we do the same so that we can make the r,g,b,a vectors wider.
struct Params {
size_t x, y, tail;
K* k;
@@ -75,7 +76,7 @@ extern "C" void WRAP(start_pipeline)(size_t x, size_t y, size_t xlimit, size_t y
auto start = (Stage*)load_and_inc(program);
const size_t x0 = x;
for (; y < ylimit; y++) {
- #if defined(__i386__) || defined(_M_IX86)
+ #if defined(__i386__) || defined(_M_IX86) || defined(__arm__)
Params params = { x0,y,0,k, v,v,v,v };
while (params.x + kStride <= xlimit) {
start(&params,program, v,v,v,v);
@@ -98,7 +99,7 @@ extern "C" void WRAP(start_pipeline)(size_t x, size_t y, size_t xlimit, size_t y
}
}
-#if defined(__i386__) || defined(_M_IX86)
+#if defined(__i386__) || defined(_M_IX86) || defined(__arm__)
#define STAGE(name) \
SI void name##_k(K* k, LazyCtx ctx, size_t x, size_t y, size_t tail, \
F& r, F& g, F& b, F& a, F& dr, F& dg, F& db, F& da); \
@@ -130,7 +131,7 @@ extern "C" void WRAP(start_pipeline)(size_t x, size_t y, size_t xlimit, size_t y
// just_return() is a simple no-op stage that only exists to end the chain,
// returning back up to start_pipeline(), and from there to the caller.
-#if defined(__i386__) || defined(_M_IX86)
+#if defined(__i386__) || defined(_M_IX86) || defined(__arm__)
extern "C" void WRAP(just_return)(Params*, void**, F,F,F,F) {}
#else
extern "C" void WRAP(just_return)(K*, void**, size_t,size_t,size_t, F,F,F,F, F,F,F,F) {}
diff --git a/src/jumper/SkJumper_vectors.h b/src/jumper/SkJumper_vectors.h
index a7898398a6..dabf3efefb 100644
--- a/src/jumper/SkJumper_vectors.h
+++ b/src/jumper/SkJumper_vectors.h
@@ -75,7 +75,7 @@
ptr[3] = a;
}
-#elif defined(__aarch64__)
+#elif defined(__aarch64__) || defined(__arm__)
#include <arm_neon.h>
// Since we know we're using Clang, we can use its vector extensions.
@@ -92,16 +92,36 @@
SI F min(F a, F b) { return vminq_f32(a,b); }
SI F max(F a, F b) { return vmaxq_f32(a,b); }
SI F abs_ (F v) { return vabsq_f32(v); }
- SI F floor_(F v) { return vrndmq_f32(v); }
SI F rcp (F v) { auto e = vrecpeq_f32 (v); return vrecpsq_f32 (v,e ) * e; }
SI F rsqrt (F v) { auto e = vrsqrteq_f32(v); return vrsqrtsq_f32(v,e*e) * e; }
- SI F sqrt_(F v) { return vsqrtq_f32(v); }
- SI U32 round (F v, F scale) { return vcvtnq_u32_f32(v*scale); }
SI U16 pack(U32 v) { return __builtin_convertvector(v, U16); }
SI U8 pack(U16 v) { return __builtin_convertvector(v, U8); }
SI F if_then_else(I32 c, F t, F e) { return vbslq_f32((U32)c,t,e); }
+ #if defined(__aarch64__)
+ SI F floor_(F v) { return vrndmq_f32(v); }
+ SI F sqrt_(F v) { return vsqrtq_f32(v); }
+ SI U32 round(F v, F scale) { return vcvtnq_u32_f32(v*scale); }
+ #else
+ SI F floor_(F v) {
+ F roundtrip = vcvtq_f32_s32(vcvtq_s32_f32(v));
+ return roundtrip - if_then_else(roundtrip > v, 1, 0);
+ }
+
+ SI F sqrt_(F v) {
+ auto e = vrsqrteq_f32(v); // Estimate and two refinement steps for e = rsqrt(v).
+ e *= vrsqrtsq_f32(v,e*e);
+ e *= vrsqrtsq_f32(v,e*e);
+ return v*e; // sqrt(v) == v*rsqrt(v).
+ }
+
+ SI U32 round(F v, F scale) {
+ return vcvtq_u32_f32(mad(v,scale,0.5f));
+ }
+ #endif
+
+
template <typename T>
SI V<T> gather(const T* p, U32 ix) {
return {p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]]};
@@ -167,114 +187,6 @@
}
}
-#elif defined(__arm__)
- #if defined(__thumb2__) || !defined(__ARM_ARCH_7A__) || !defined(__ARM_VFPV4__)
- #error On ARMv7, compile with -march=armv7-a -mfpu=neon-vfp4, without -mthumb.
- #endif
- #include <arm_neon.h>
-
- // We can pass {s0-s15} as arguments under AAPCS-VFP. We'll slice that as 8 d-registers.
- template <typename T> using V = T __attribute__((ext_vector_type(2)));
- using F = V<float >;
- using I32 = V< int32_t>;
- using U64 = V<uint64_t>;
- using U32 = V<uint32_t>;
- using U16 = V<uint16_t>;
- using U8 = V<uint8_t >;
-
- SI F mad(F f, F m, F a) { return vfma_f32(a,f,m); }
- SI F min(F a, F b) { return vmin_f32(a,b); }
- SI F max(F a, F b) { return vmax_f32(a,b); }
- SI F abs_ (F v) { return vabs_f32(v); }
- SI F rcp (F v) { auto e = vrecpe_f32 (v); return vrecps_f32 (v,e ) * e; }
- SI F rsqrt(F v) { auto e = vrsqrte_f32(v); return vrsqrts_f32(v,e*e) * e; }
- SI U32 round(F v, F scale) { return vcvt_u32_f32(mad(v,scale,0.5f)); }
- SI U16 pack(U32 v) { return __builtin_convertvector(v, U16); }
- SI U8 pack(U16 v) { return __builtin_convertvector(v, U8); }
-
- SI F sqrt_(F v) {
- auto e = vrsqrte_f32(v); // Estimate and two refinement steps for e = rsqrt(v).
- e *= vrsqrts_f32(v,e*e);
- e *= vrsqrts_f32(v,e*e);
- return v*e; // sqrt(v) == v*rsqrt(v).
- }
-
- SI F if_then_else(I32 c, F t, F e) { return vbsl_f32((U32)c,t,e); }
-
- SI F floor_(F v) {
- F roundtrip = vcvt_f32_s32(vcvt_s32_f32(v));
- return roundtrip - if_then_else(roundtrip > v, 1, 0);
- }
-
- template <typename T>
- SI V<T> gather(const T* p, U32 ix) {
- return {p[ix[0]], p[ix[1]]};
- }
-
- SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
- uint16x4x3_t rgb;
- rgb = vld3_lane_u16(ptr + 0, rgb, 0);
- if (__builtin_expect(tail, 0)) {
- vset_lane_u16(0, rgb.val[0], 1);
- vset_lane_u16(0, rgb.val[1], 1);
- vset_lane_u16(0, rgb.val[2], 1);
- } else {
- rgb = vld3_lane_u16(ptr + 3, rgb, 1);
- }
- *r = unaligned_load<U16>(rgb.val+0);
- *g = unaligned_load<U16>(rgb.val+1);
- *b = unaligned_load<U16>(rgb.val+2);
- }
- SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
- uint16x4x4_t rgba;
- rgba = vld4_lane_u16(ptr + 0, rgba, 0);
- if (__builtin_expect(tail, 0)) {
- vset_lane_u16(0, rgba.val[0], 1);
- vset_lane_u16(0, rgba.val[1], 1);
- vset_lane_u16(0, rgba.val[2], 1);
- vset_lane_u16(0, rgba.val[3], 1);
- } else {
- rgba = vld4_lane_u16(ptr + 4, rgba, 1);
- }
- *r = unaligned_load<U16>(rgba.val+0);
- *g = unaligned_load<U16>(rgba.val+1);
- *b = unaligned_load<U16>(rgba.val+2);
- *a = unaligned_load<U16>(rgba.val+3);
- }
- SI void store4(uint16_t* ptr, size_t tail, U16 r, U16 g, U16 b, U16 a) {
- uint16x4x4_t rgba = {{
- widen_cast<uint16x4_t>(r),
- widen_cast<uint16x4_t>(g),
- widen_cast<uint16x4_t>(b),
- widen_cast<uint16x4_t>(a),
- }};
- vst4_lane_u16(ptr + 0, rgba, 0);
- if (__builtin_expect(tail == 0, true)) {
- vst4_lane_u16(ptr + 4, rgba, 1);
- }
- }
-
- SI void load4(const float* ptr, size_t tail, F* r, F* g, F* b, F* a) {
- float32x2x4_t rgba;
- if (__builtin_expect(tail, 0)) {
- rgba = vld4_dup_f32(ptr);
- } else {
- rgba = vld4_f32(ptr);
- }
- *r = rgba.val[0];
- *g = rgba.val[1];
- *b = rgba.val[2];
- *a = rgba.val[3];
- }
- SI void store4(float* ptr, size_t tail, F r, F g, F b, F a) {
- if (__builtin_expect(tail, 0)) {
- vst4_lane_f32(ptr, (float32x2x4_t{{r,g,b,a}}), 0);
- } else {
- vst4_f32(ptr, (float32x2x4_t{{r,g,b,a}}));
- }
- }
-
-
#elif defined(__AVX__)
#include <immintrin.h>
@@ -713,13 +625,9 @@ SI F approx_powf(F x, F y) {
}
SI F from_half(U16 h) {
-#if defined(JUMPER) && defined(__aarch64__)
+#if defined(JUMPER) && (defined(__aarch64__) || defined(__arm__))
return vcvt_f32_f16(h);
-#elif defined(JUMPER) && defined(__arm__)
- auto v = widen_cast<uint16x4_t>(h);
- return vget_low_f32(vcvt_f32_f16(v));
-
#elif defined(JUMPER) && defined(__AVX2__)
return _mm256_cvtph_ps(h);
@@ -737,14 +645,9 @@ SI F from_half(U16 h) {
}
SI U16 to_half(F f) {
-#if defined(JUMPER) && defined(__aarch64__)
+#if defined(JUMPER) && (defined(__aarch64__) || defined(__arm__))
return vcvt_f16_f32(f);
-#elif defined(JUMPER) && defined(__arm__)
- auto v = widen_cast<float32x4_t>(f);
- uint16x4_t h = vcvt_f16_f32(v);
- return unaligned_load<U16>(&h);
-
#elif defined(JUMPER) && defined(__AVX2__)
return _mm256_cvtps_ph(f, _MM_FROUND_CUR_DIRECTION);