Add arm tail code.

CQ_INCLUDE_TRYBOTS=skia.primary:Test-Android-Clang-Nexus10-CPU-Exynos5250-arm-Release-Android

Change-Id: Ia0e9f32d0324e66c9d4812dbb156a2b858d49a13
Reviewed-on: https://skia-review.googlesource.com/18127
Commit-Queue: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/src/jumper/SkJumper.cpp b/src/jumper/SkJumper.cpp
index c8d9815..428a724 100644
--- a/src/jumper/SkJumper.cpp
+++ b/src/jumper/SkJumper.cpp
@@ -131,7 +131,7 @@
         return {
         #define M(stage) ASM(stage, vfp4),
             { SK_RASTER_PIPELINE_STAGES(M) },
-            2, M(start_pipeline) M(just_return)
+            1, M(start_pipeline) M(just_return)
         #undef M
         };
     }
diff --git a/src/jumper/SkJumper_generated.S b/src/jumper/SkJumper_generated.S
index e94b7f7..35f8a34 100644
--- a/src/jumper/SkJumper_generated.S
+++ b/src/jumper/SkJumper_generated.S
@@ -4288,30 +4288,44 @@
 FUNCTION(_sk_start_pipeline_vfp4)
 _sk_start_pipeline_vfp4:
   .long  0xe92d41f0                          // push          {r4, r5, r6, r7, r8, lr}
-  .long  0xe1a04000                          // mov           r4, r0
-  .long  0xe2840002                          // add           r0, r4, #2
-  .long  0xe1a05003                          // mov           r5, r3
-  .long  0xe1a08002                          // mov           r8, r2
-  .long  0xe1a07001                          // mov           r7, r1
-  .long  0xe1500005                          // cmp           r0, r5
-  .long  0x8a000010                          // bhi           64 <sk_start_pipeline_vfp4+0x64>
-  .long  0xe4976004                          // ldr           r6, [r7], #4
+  .long  0xe1a06001                          // mov           r6, r1
+  .long  0xe1a07000                          // mov           r7, r0
+  .long  0xe1a04003                          // mov           r4, r3
+  .long  0xe1a05002                          // mov           r5, r2
+  .long  0xe4968004                          // ldr           r8, [r6], #4
+  .long  0xe2870002                          // add           r0, r7, #2
+  .long  0xea00000e                          // b             5c <sk_start_pipeline_vfp4+0x5c>
   .long  0xf2800010                          // vmov.i32      d0, #0
-  .long  0xe1a00004                          // mov           r0, r4
+  .long  0xe1a00007                          // mov           r0, r7
   .long  0xf2801010                          // vmov.i32      d1, #0
-  .long  0xe1a01007                          // mov           r1, r7
+  .long  0xe1a01006                          // mov           r1, r6
   .long  0xf2802010                          // vmov.i32      d2, #0
-  .long  0xe1a02008                          // mov           r2, r8
+  .long  0xe1a02005                          // mov           r2, r5
+  .long  0xf2803010                          // vmov.i32      d3, #0
+  .long  0xe3a03000                          // mov           r3, #0
+  .long  0xf2804010                          // vmov.i32      d4, #0
+  .long  0xf2805010                          // vmov.i32      d5, #0
+  .long  0xf2806010                          // vmov.i32      d6, #0
+  .long  0xf2807010                          // vmov.i32      d7, #0
+  .long  0xe12fff38                          // blx           r8
+  .long  0xe2870004                          // add           r0, r7, #4
+  .long  0xe2877002                          // add           r7, r7, #2
+  .long  0xe1500004                          // cmp           r0, r4
+  .long  0x9affffee                          // bls           20 <sk_start_pipeline_vfp4+0x20>
+  .long  0xe0543007                          // subs          r3, r4, r7
+  .long  0x0a00000b                          // beq           9c <sk_start_pipeline_vfp4+0x9c>
+  .long  0xf2800010                          // vmov.i32      d0, #0
+  .long  0xe1a00007                          // mov           r0, r7
+  .long  0xf2801010                          // vmov.i32      d1, #0
+  .long  0xe1a01006                          // mov           r1, r6
+  .long  0xf2802010                          // vmov.i32      d2, #0
+  .long  0xe1a02005                          // mov           r2, r5
   .long  0xf2803010                          // vmov.i32      d3, #0
   .long  0xf2804010                          // vmov.i32      d4, #0
   .long  0xf2805010                          // vmov.i32      d5, #0
   .long  0xf2806010                          // vmov.i32      d6, #0
   .long  0xf2807010                          // vmov.i32      d7, #0
-  .long  0xe12fff36                          // blx           r6
-  .long  0xe2840004                          // add           r0, r4, #4
-  .long  0xe2844002                          // add           r4, r4, #2
-  .long  0xe1500005                          // cmp           r0, r5
-  .long  0x9affffef                          // bls           24 <sk_start_pipeline_vfp4+0x24>
+  .long  0xe12fff38                          // blx           r8
   .long  0xe1a00004                          // mov           r0, r4
   .long  0xe8bd81f0                          // pop           {r4, r5, r6, r7, r8, pc}
 
@@ -4325,44 +4339,49 @@
 .globl _sk_seed_shader_vfp4
 FUNCTION(_sk_seed_shader_vfp4)
 _sk_seed_shader_vfp4:
+  .long  0xe92d4800                          // push          {fp, lr}
   .long  0xee800b90                          // vdup.32       d16, r0
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xf3fb0620                          // vcvt.f32.s32  d16, d16
-  .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xedd23b00                          // vldr          d19, [r2]
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xf2872f10                          // vmov.f32      d2, #1
-  .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
+  .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .long  0xf4ee2c9f                          // vld1.32       {d18[]}, [lr :32]
   .long  0xe2811008                          // add           r1, r1, #8
+  .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
   .long  0xf2400da1                          // vadd.f32      d16, d16, d17
+  .long  0xf2872f10                          // vmov.f32      d2, #1
   .long  0xf2803010                          // vmov.i32      d3, #0
-  .long  0xf2804010                          // vmov.i32      d4, #0
   .long  0xf2021da1                          // vadd.f32      d1, d18, d17
   .long  0xf2000da3                          // vadd.f32      d0, d16, d19
+  .long  0xf2804010                          // vmov.i32      d4, #0
   .long  0xf2805010                          // vmov.i32      d5, #0
   .long  0xf2806010                          // vmov.i32      d6, #0
   .long  0xf2807010                          // vmov.i32      d7, #0
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_dither_vfp4
 .globl _sk_dither_vfp4
 FUNCTION(_sk_dither_vfp4)
 _sk_dither_vfp4:
   .long  0xe92d4010                          // push          {r4, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xee800b90                          // vdup.32       d16, r0
   .long  0xedd21b08                          // vldr          d17, [r2, #32]
   .long  0xf2c02011                          // vmov.i32      d18, #1
-  .long  0xe8911010                          // ldm           r1, {r4, ip}
-  .long  0xee800b90                          // vdup.32       d16, r0
   .long  0xf26108a0                          // vadd.i32      d16, d17, d16
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xf2c01012                          // vmov.i32      d17, #2
-  .long  0xe3a035f2                          // mov           r3, #1015021568
-  .long  0xe494e004                          // ldr           lr, [r4], #4
+  .long  0xe49e4004                          // ldr           r4, [lr], #4
   .long  0xf24041b2                          // vand          d20, d16, d18
-  .long  0xf24051b1                          // vand          d21, d16, d17
   .long  0xe2811008                          // add           r1, r1, #8
+  .long  0xf24051b1                          // vand          d21, d16, d17
   .long  0xf2c03014                          // vmov.i32      d19, #4
-  .long  0xf4ee7c9f                          // vld1.32       {d23[]}, [lr :32]
+  .long  0xf4e47c9f                          // vld1.32       {d23[]}, [r4 :32]
   .long  0xf2e44534                          // vshl.s32      d20, d20, #4
+  .long  0xe3a045f2                          // mov           r4, #1015021568
   .long  0xf24061b3                          // vand          d22, d16, d19
   .long  0xf34001b7                          // veor          d16, d16, d23
   .long  0xf2e15535                          // vshl.s32      d21, d21, #1
@@ -4379,12 +4398,12 @@
   .long  0xf26211b1                          // vorr          d17, d18, d17
   .long  0xf2c03010                          // vmov.i32      d19, #0
   .long  0xf26101b0                          // vorr          d16, d17, d16
-  .long  0xee813b90                          // vdup.32       d17, r3
+  .long  0xee814b90                          // vdup.32       d17, r4
   .long  0xf3fb0620                          // vcvt.f32.s32  d16, d16
   .long  0xf3400db1                          // vmul.f32      d16, d16, d17
-  .long  0xeddf1b0e                          // vldr          d17, [pc, #56]
+  .long  0xeddf1b0d                          // vldr          d17, [pc, #52]
   .long  0xf2400da1                          // vadd.f32      d16, d16, d17
-  .long  0xf4e41c9f                          // vld1.32       {d17[]}, [r4 :32]
+  .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
@@ -4397,7 +4416,6 @@
   .long  0xf2032fa0                          // vmax.f32      d2, d19, d16
   .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0xbefc0000                          // .word         0xbefc0000
   .long  0xbefc0000                          // .word         0xbefc0000
 
@@ -4405,66 +4423,71 @@
 .globl _sk_constant_color_vfp4
 FUNCTION(_sk_constant_color_vfp4)
 _sk_constant_color_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4830                          // push          {r4, r5, fp, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe283400c                          // add           r4, r3, #12
-  .long  0xe1a0e003                          // mov           lr, r3
-  .long  0xe2833008                          // add           r3, r3, #8
-  .long  0xf4ae0c9d                          // vld1.32       {d0[]}, [lr :32]!
-  .long  0xf4a43c9f                          // vld1.32       {d3[]}, [r4 :32]
-  .long  0xf4a32c9f                          // vld1.32       {d2[]}, [r3 :32]
-  .long  0xf4ae1c9f                          // vld1.32       {d1[]}, [lr :32]
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_load_rgba_vfp4
 .globl _sk_load_rgba_vfp4
 FUNCTION(_sk_load_rgba_vfp4)
 _sk_load_rgba_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4010                          // push          {r4, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe1a0e003                          // mov           lr, r3
-  .long  0xed932b04                          // vldr          d2, [r3, #16]
-  .long  0xf42e078d                          // vld1.32       {d0}, [lr]!
-  .long  0xed933b06                          // vldr          d3, [r3, #24]
-  .long  0xed9e1b00                          // vldr          d1, [lr]
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .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  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  0xe1a0300c                          // mov           r3, ip
-  .long  0xf403078d                          // vst1.32       {d0}, [r3]!
-  .long  0xed831b00                          // vstr          d1, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .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  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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
 
 HIDDEN _sk_clear_vfp4
 .globl _sk_clear_vfp4
 FUNCTION(_sk_clear_vfp4)
 _sk_clear_vfp4:
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_srcatop_vfp4
 .globl _sk_srcatop_vfp4
 FUNCTION(_sk_srcatop_vfp4)
 _sk_srcatop_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4477,14 +4500,14 @@
   .long  0xf22001b0                          // vorr          d0, d16, d16
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_dstatop_vfp4
 .globl _sk_dstatop_vfp4
 FUNCTION(_sk_dstatop_vfp4)
 _sk_dstatop_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4498,75 +4521,75 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xf22331b3                          // vorr          d3, d19, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_srcin_vfp4
 .globl _sk_srcin_vfp4
 FUNCTION(_sk_srcin_vfp4)
 _sk_srcin_vfp4:
   .long  0xf3000d17                          // vmul.f32      d0, d0, d7
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_dstin_vfp4
 .globl _sk_dstin_vfp4
 FUNCTION(_sk_dstin_vfp4)
 _sk_dstin_vfp4:
   .long  0xf3030d14                          // vmul.f32      d0, d3, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_srcout_vfp4
 .globl _sk_srcout_vfp4
 FUNCTION(_sk_srcout_vfp4)
 _sk_srcout_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_dstout_vfp4
 .globl _sk_dstout_vfp4
 FUNCTION(_sk_dstout_vfp4)
 _sk_dstout_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_srcover_vfp4
 .globl _sk_srcover_vfp4
 FUNCTION(_sk_srcover_vfp4)
 _sk_srcover_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_dstover_vfp4
 .globl _sk_dstover_vfp4
 FUNCTION(_sk_dstover_vfp4)
 _sk_dstover_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4580,25 +4603,25 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xf22331b3                          // vorr          d3, d19, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_modulate_vfp4
 .globl _sk_modulate_vfp4
 FUNCTION(_sk_modulate_vfp4)
 _sk_modulate_vfp4:
   .long  0xf3000d14                          // vmul.f32      d0, d0, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_multiply_vfp4
 .globl _sk_multiply_vfp4
 FUNCTION(_sk_multiply_vfp4)
 _sk_multiply_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4621,25 +4644,25 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xf22331b3                          // vorr          d3, d19, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_plus__vfp4
 .globl _sk_plus__vfp4
 FUNCTION(_sk_plus__vfp4)
 _sk_plus__vfp4:
   .long  0xf2000d04                          // vadd.f32      d0, d0, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_screen_vfp4
 .globl _sk_screen_vfp4
 FUNCTION(_sk_screen_vfp4)
 _sk_screen_vfp4:
   .long  0xf2400d04                          // vadd.f32      d16, d0, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4651,14 +4674,14 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xf22331b3                          // vorr          d3, d19, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_xor__vfp4
 .globl _sk_xor__vfp4
 FUNCTION(_sk_xor__vfp4)
 _sk_xor__vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4673,14 +4696,14 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xf22331b3                          // vorr          d3, d19, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_darken_vfp4
 .globl _sk_darken_vfp4
 FUNCTION(_sk_darken_vfp4)
 _sk_darken_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4698,14 +4721,14 @@
   .long  0xf2270da1                          // vsub.f32      d0, d23, d17
   .long  0xf2221da3                          // vsub.f32      d1, d18, d19
   .long  0xf2242da5                          // vsub.f32      d2, d20, d21
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_lighten_vfp4
 .globl _sk_lighten_vfp4
 FUNCTION(_sk_lighten_vfp4)
 _sk_lighten_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4723,14 +4746,14 @@
   .long  0xf2270da1                          // vsub.f32      d0, d23, d17
   .long  0xf2221da3                          // vsub.f32      d1, d18, d19
   .long  0xf2242da5                          // vsub.f32      d2, d20, d21
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_difference_vfp4
 .globl _sk_difference_vfp4
 FUNCTION(_sk_difference_vfp4)
 _sk_difference_vfp4:
   .long  0xf3430d14                          // vmul.f32      d16, d3, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4751,14 +4774,14 @@
   .long  0xf2240da0                          // vsub.f32      d0, d20, d16
   .long  0xf2251da1                          // vsub.f32      d1, d21, d17
   .long  0xf2262da2                          // vsub.f32      d2, d22, d18
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_exclusion_vfp4
 .globl _sk_exclusion_vfp4
 FUNCTION(_sk_exclusion_vfp4)
 _sk_exclusion_vfp4:
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4773,7 +4796,7 @@
   .long  0xf2240da1                          // vsub.f32      d0, d20, d17
   .long  0xf2251da2                          // vsub.f32      d1, d21, d18
   .long  0xf2262da3                          // vsub.f32      d2, d22, d19
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_colorburn_vfp4
 .globl _sk_colorburn_vfp4
@@ -4781,7 +4804,7 @@
 _sk_colorburn_vfp4:
   .long  0xed2d8b08                          // vpush         {d8-d11}
   .long  0xf2670d04                          // vsub.f32      d16, d7, d4
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4840,7 +4863,7 @@
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
   .long  0xecbd8b08                          // vpop          {d8-d11}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_colordodge_vfp4
 .globl _sk_colordodge_vfp4
@@ -4848,7 +4871,7 @@
 _sk_colordodge_vfp4:
   .long  0xed2d8b0e                          // vpush         {d8-d14}
   .long  0xf2238d02                          // vsub.f32      d8, d3, d2
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4901,14 +4924,14 @@
   .long  0xf31211ba                          // vbsl          d1, d18, d26
   .long  0xf31521be                          // vbsl          d2, d21, d30
   .long  0xecbd8b0e                          // vpop          {d8-d14}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_hardlight_vfp4
 .globl _sk_hardlight_vfp4
 FUNCTION(_sk_hardlight_vfp4)
 _sk_hardlight_vfp4:
   .long  0xf2c71f10                          // vmov.f32      d17, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -4955,14 +4978,14 @@
   .long  0xf20b0da4                          // vadd.f32      d0, d27, d20
   .long  0xf20d1da6                          // vadd.f32      d1, d29, d22
   .long  0xf2012da9                          // vadd.f32      d2, d17, d25
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_overlay_vfp4
 .globl _sk_overlay_vfp4
 FUNCTION(_sk_overlay_vfp4)
 _sk_overlay_vfp4:
   .long  0xf2c71f10                          // vmov.f32      d17, #1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5009,7 +5032,7 @@
   .long  0xf20b0da4                          // vadd.f32      d0, d27, d20
   .long  0xf20d1da6                          // vadd.f32      d1, d29, d22
   .long  0xf2012da9                          // vadd.f32      d2, d17, d25
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_softlight_vfp4
 .globl _sk_softlight_vfp4
@@ -5018,7 +5041,7 @@
   .long  0xed2d8b06                          // vpush         {d8-d10}
   .long  0xeec58aa7                          // vdiv.f32      s17, s11, s15
   .long  0xf3f90407                          // vcgt.f32      d16, d7, #0
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5145,7 +5168,8 @@
   .long  0xf2091da4                          // vadd.f32      d1, d25, d20
   .long  0xf2082daa                          // vadd.f32      d2, d24, d26
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_hue_vfp4
 .globl _sk_hue_vfp4
@@ -5153,7 +5177,7 @@
 _sk_hue_vfp4:
   .long  0xed2d8b0c                          // vpush         {d8-d13}
   .long  0xf3420d13                          // vmul.f32      d16, d2, d3
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5280,7 +5304,7 @@
   .long  0xf2031da7                          // vadd.f32      d1, d19, d23
   .long  0xf2042da0                          // vadd.f32      d2, d20, d16
   .long  0xecbd8b0c                          // vpop          {d8-d13}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3e99999a                          // .word         0x3e99999a
@@ -5296,7 +5320,7 @@
   .long  0xf3430d16                          // vmul.f32      d16, d3, d6
   .long  0xeddf7b82                          // vldr          d23, [pc, #520]
   .long  0xf3431d15                          // vmul.f32      d17, d3, d5
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5421,7 +5445,7 @@
   .long  0xf2031da7                          // vadd.f32      d1, d19, d23
   .long  0xf2042da0                          // vadd.f32      d2, d20, d16
   .long  0xecbd8b0c                          // vpop          {d8-d13}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3e99999a                          // .word         0x3e99999a
@@ -5441,7 +5465,7 @@
   .long  0xf3454d30                          // vmul.f32      d20, d5, d16
   .long  0xeddf7b62                          // vldr          d23, [pc, #392]
   .long  0xf3446d33                          // vmul.f32      d22, d4, d19
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5533,7 +5557,7 @@
   .long  0xf2021da6                          // vadd.f32      d1, d18, d22
   .long  0xf2032da4                          // vadd.f32      d2, d19, d20
   .long  0xecbd8b0e                          // vpop          {d8-d14}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3f170a3d                          // .word         0x3f170a3d
@@ -5554,7 +5578,7 @@
   .long  0xf3414d30                          // vmul.f32      d20, d1, d16
   .long  0xeddf7b62                          // vldr          d23, [pc, #392]
   .long  0xf3406d33                          // vmul.f32      d22, d0, d19
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5646,7 +5670,7 @@
   .long  0xf2021da6                          // vadd.f32      d1, d18, d22
   .long  0xf2032da4                          // vadd.f32      d2, d19, d20
   .long  0xecbd8b0e                          // vpop          {d8-d14}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x3f170a3d                          // .word         0x3f170a3d
   .long  0x3f170a3d                          // .word         0x3f170a3d
@@ -5659,32 +5683,35 @@
 .globl _sk_srcover_rgba_8888_vfp4
 FUNCTION(_sk_srcover_rgba_8888_vfp4)
 _sk_srcover_rgba_8888_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
-  .long  0xf2c72f10                          // vmov.f32      d18, #1
-  .long  0xf3c7101f                          // vmov.i32      d17, #255
-  .long  0xeddf6b29                          // vldr          d22, [pc, #164]
-  .long  0xf2622d83                          // vsub.f32      d18, d18, d3
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xf3033d36                          // vmul.f32      d3, d3, d22
-  .long  0xf3011d36                          // vmul.f32      d1, d1, d22
-  .long  0xe0833100                          // add           r3, r3, r0, lsl #2
-  .long  0xf3000d36                          // vmul.f32      d0, d0, d22
-  .long  0xf3022d36                          // vmul.f32      d2, d2, d22
-  .long  0xedd30b00                          // vldr          d16, [r3]
-  .long  0xf3f83030                          // vshr.u32      d19, d16, #8
-  .long  0xf3e84030                          // vshr.u32      d20, d16, #24
-  .long  0xf3f05030                          // vshr.u32      d21, d16, #16
-  .long  0xf24331b1                          // vand          d19, d19, d17
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc100                          // add           ip, ip, r0, lsl #2
+  .long  0x0a00002b                          // beq           13ec <sk_srcover_rgba_8888_vfp4+0xc4>
+  .long  0xed9c4b00                          // vldr          d4, [ip]
+  .long  0xf2c71f10                          // vmov.f32      d17, #1
+  .long  0xeddf6b2d                          // vldr          d22, [pc, #180]
+  .long  0xf3c7001f                          // vmov.i32      d16, #255
+  .long  0xe3530001                          // cmp           r3, #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  0xf24001b1                          // vand          d16, d16, d17
-  .long  0xf24511b1                          // vand          d17, d21, d17
-  .long  0xf3bb5623                          // vcvt.f32.s32  d5, d19
-  .long  0xf3bb4620                          // vcvt.f32.s32  d4, d16
-  .long  0xf3bb6621                          // vcvt.f32.s32  d6, d17
-  .long  0xf2073c32                          // vfma.f32      d3, d7, d18
-  .long  0xf2051c32                          // vfma.f32      d1, d5, d18
-  .long  0xf2040c32                          // vfma.f32      d0, d4, d18
-  .long  0xf2062c32                          // vfma.f32      d2, d6, d18
+  .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
@@ -5700,62 +5727,69 @@
   .long  0xf2f00530                          // vshl.s32      d16, d16, #16
   .long  0xf26111b2                          // vorr          d17, d17, d18
   .long  0xf26101b0                          // vorr          d16, d17, d16
-  .long  0xedc30b00                          // vstr          d16, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0x0a000006                          // beq           13f8 <sk_srcover_rgba_8888_vfp4+0xd0>
+  .long  0xedcc0b00                          // vstr          d16, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
+  .long  0xeddf4a05                          // vldr          s9, [pc, #20]
+  .long  0xed9c4a00                          // vldr          s8, [ip]
+  .long  0xeaffffd1                          // b             1340 <sk_srcover_rgba_8888_vfp4+0x18>
+  .long  0xf4cc083f                          // vst1.32       {d16[0]}, [ip :32]
+  .long  0xeafffff7                          // b             13e0 <sk_srcover_rgba_8888_vfp4+0xb8>
   .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  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 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  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 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  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_set_rgb_vfp4
 .globl _sk_set_rgb_vfp4
 FUNCTION(_sk_set_rgb_vfp4)
 _sk_set_rgb_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4010                          // push          {r4, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe283e008                          // add           lr, r3, #8
-  .long  0xf4a30c9d                          // vld1.32       {d0[]}, [r3 :32]!
-  .long  0xf4ae2c9f                          // vld1.32       {d2[]}, [lr :32]
-  .long  0xf4a31c9f                          // vld1.32       {d1[]}, [r3 :32]
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_swap_rb_vfp4
@@ -5763,17 +5797,17 @@
 FUNCTION(_sk_swap_rb_vfp4)
 _sk_swap_rb_vfp4:
   .long  0xeef00b40                          // vmov.f64      d16, d0
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .long  0xe491c004                          // ldr           ip, [r1], #4
   .long  0xeeb00b42                          // vmov.f64      d0, d2
   .long  0xeeb02b60                          // vmov.f64      d2, d16
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_swap_vfp4
 .globl _sk_swap_vfp4
 FUNCTION(_sk_swap_vfp4)
 _sk_swap_vfp4:
   .long  0xeef00b43                          // vmov.f64      d16, d3
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .long  0xe491c004                          // ldr           ip, [r1], #4
   .long  0xeef01b42                          // vmov.f64      d17, d2
   .long  0xeef02b41                          // vmov.f64      d18, d1
   .long  0xeef03b40                          // vmov.f64      d19, d0
@@ -5785,39 +5819,39 @@
   .long  0xeeb05b62                          // vmov.f64      d5, d18
   .long  0xeeb06b61                          // vmov.f64      d6, d17
   .long  0xeeb07b60                          // vmov.f64      d7, d16
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 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  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 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  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_premul_vfp4
 .globl _sk_premul_vfp4
 FUNCTION(_sk_premul_vfp4)
 _sk_premul_vfp4:
   .long  0xf3000d13                          // vmul.f32      d0, d0, d3
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .long  0xe491c004                          // ldr           ip, [r1], #4
   .long  0xf3011d13                          // vmul.f32      d1, d1, d3
   .long  0xf3022d13                          // vmul.f32      d2, d2, d3
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_unpremul_vfp4
 .globl _sk_unpremul_vfp4
@@ -5827,7 +5861,7 @@
   .long  0xeeb78a00                          // vmov.f32      s16, #112
   .long  0xf3f91503                          // vceq.f32      d17, d3, #0
   .long  0xf2c00010                          // vmov.i32      d16, #0
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5835,7 +5869,7 @@
   .long  0xf3011d91                          // vmul.f32      d1, d17, d1
   .long  0xf3012d92                          // vmul.f32      d2, d17, d2
   .long  0xecbd8b04                          // vpop          {d8-d9}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_from_srgb_vfp4
@@ -5853,7 +5887,7 @@
   .long  0xf2415c30                          // vfma.f32      d21, d1, d16
   .long  0xeddfcb1d                          // vldr          d28, [pc, #116]
   .long  0xf2423c30                          // vfma.f32      d19, d2, d16
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5873,7 +5907,7 @@
   .long  0xf22001b0                          // vorr          d0, d16, d16
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0x3e99999a                          // .word         0x3e99999a
   .long  0x3e99999a                          // .word         0x3e99999a
   .long  0x3f328f5c                          // .word         0x3f328f5c
@@ -5894,7 +5928,7 @@
   .long  0xf3fb1581                          // vrsqrte.f32   d17, d1
   .long  0xeddf7b37                          // vldr          d23, [pc, #220]
   .long  0xf3fb2582                          // vrsqrte.f32   d18, d2
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -5945,7 +5979,7 @@
   .long  0xf22001b0                          // vorr          d0, d16, d16
   .long  0xf22111b1                          // vorr          d1, d17, d17
   .long  0xf22221b2                          // vorr          d2, d18, d18
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x3e10c64c                          // .word         0x3e10c64c
   .long  0x3e10c64c                          // .word         0x3e10c64c
@@ -5968,7 +6002,7 @@
   .long  0xf2401f01                          // vmax.f32      d17, d0, d1
   .long  0xeddf9b2c                          // vldr          d25, [pc, #176]
   .long  0xf2600f01                          // vmin.f32      d16, d0, d1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -6010,7 +6044,7 @@
   .long  0xf3020db1                          // vmul.f32      d0, d18, d17
   .long  0xf22021b0                          // vorr          d2, d16, d16
   .long  0xecbd8b08                          // vpop          {d8-d11}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x40c00000                          // .word         0x40c00000
   .long  0x40c00000                          // .word         0x40c00000
@@ -6029,7 +6063,7 @@
   .long  0xf2401d21                          // vadd.f32      d17, d0, d17
   .long  0xeddfab50                          // vldr          d26, [pc, #320]
   .long  0xf3416d12                          // vmul.f32      d22, d1, d2
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -6104,7 +6138,7 @@
   .long  0xf3120131                          // vbsl          d0, d2, d17
   .long  0xf22021b0                          // vorr          d2, d16, d16
   .long  0xecbd8b02                          // vpop          {d8}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
   .long  0x3eaaaaab                          // .word         0x3eaaaaab
@@ -6120,53 +6154,72 @@
 .globl _sk_scale_1_float_vfp4
 FUNCTION(_sk_scale_1_float_vfp4)
 _sk_scale_1_float_vfp4:
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
+  .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  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_scale_u8_vfp4
 .globl _sk_scale_u8_vfp4
 FUNCTION(_sk_scale_u8_vfp4)
 _sk_scale_u8_vfp4:
-  .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833000                          // add           r3, r3, r0
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1cd30b0                          // strh          r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3041f                          // vld1.16       {d16[0]}, [r3 :16]
+  .long  0xed2d8b04                          // vpush         {d8-d9}
+  .long  0xe24dd008                          // sub           sp, sp, #8
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc000                          // add           ip, ip, r0
+  .long  0x0a000013                          // beq           19f4 <sk_scale_u8_vfp4+0x6c>
+  .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  0xf3c80a30                          // vmovl.u8      q8, d16
-  .long  0xf3d00a30                          // vmovl.u16     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  0xe2811008                          // add           r1, r1, #8
+  .long  0xf2480130                          // vand          d16, d8, d16
   .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
-  .long  0xeddf1b06                          // vldr          d17, [pc, #24]
   .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  0xe28dd004                          // add           sp, sp, #4
+  .long  0xe28dd008                          // add           sp, sp, #8
+  .long  0xecbd8b04                          // vpop          {d8-d9}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe5dcc000                          // ldrb          ip, [ip]
+  .long  0xeddf8a04                          // vldr          s17, [pc, #16]
+  .long  0xee08ca10                          // vmov          s16, ip
+  .long  0xeaffffed                          // b             19bc <sk_scale_u8_vfp4+0x34>
+  .long  0xe320f000                          // nop           {0}
   .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  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
   .long  0xf2633d07                          // vsub.f32      d19, d3, d7
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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
@@ -6175,92 +6228,125 @@
   .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_lerp_u8_vfp4
 .globl _sk_lerp_u8_vfp4
 FUNCTION(_sk_lerp_u8_vfp4)
 _sk_lerp_u8_vfp4:
-  .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xed2d8b04                          // vpush         {d8-d9}
+  .long  0xe24dd008                          // sub           sp, sp, #8
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc000                          // add           ip, ip, r0
+  .long  0x0a00001e                          // beq           1afc <sk_lerp_u8_vfp4+0x9c>
+  .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  0xf3c80a30                          // vmovl.u8      q8, d16
+  .long  0xf3908a30                          // vmovl.u16     q4, d16
+  .long  0xf3c7001f                          // vmov.i32      d16, #255
+  .long  0xeddf1b1b                          // vldr          d17, [pc, #108]
   .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe1a0c00e                          // mov           ip, lr
   .long  0xf2240114                          // vorr          d0, d4, d4
   .long  0xf2262116                          // vorr          d2, d6, d6
-  .long  0xe0833000                          // add           r3, r3, r0
-  .long  0xf2273117                          // vorr          d3, d7, d7
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1cd30b0                          // strh          r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3041f                          // vld1.16       {d16[0]}, [r3 :16]
-  .long  0xf3c80a30                          // vmovl.u8      q8, d16
-  .long  0xf3d00a30                          // vmovl.u16     q8, d16
-  .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
-  .long  0xeddf1b08                          // vldr          d17, [pc, #32]
   .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  0xe28dd004                          // add           sp, sp, #4
+  .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  0xeddf8a04                          // vldr          s17, [pc, #16]
+  .long  0xee08ca10                          // vmov          s16, ip
+  .long  0xeaffffe2                          // b             1a98 <sk_lerp_u8_vfp4+0x38>
+  .long  0xe320f000                          // nop           {0}
   .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  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xf2c1201f                          // vmov.i32      d18, #31
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xed2d8b04                          // vpush         {d8-d9}
+  .long  0xe24dd008                          // sub           sp, sp, #8
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc080                          // add           ip, ip, r0, lsl #1
+  .long  0x0a00002e                          // beq           1bfc <sk_lerp_565_vfp4+0xdc>
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe58dc004                          // str           ip, [sp, #4]
+  .long  0xe28dc004                          // add           ip, sp, #4
+  .long  0xf4ec083f                          // vld1.32       {d16[0]}, [ip :32]
+  .long  0xf3908a30                          // vmovl.u16     q4, d16
+  .long  0xf2c1001f                          // vmov.i32      d16, #31
+  .long  0xe3a0ce7e                          // mov           ip, #2016
+  .long  0xee82cb90                          // vdup.32       d18, ip
   .long  0xf3c71218                          // vmov.i32      d17, #63488
+  .long  0xf2480130                          // vand          d16, d8, d16
   .long  0xeddf3b28                          // vldr          d19, [pc, #160]
-  .long  0xf2679117                          // vorr          d25, d7, d7
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xf2617d05                          // vsub.f32      d23, d1, d5
-  .long  0xf2251115                          // vorr          d1, d5, d5
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf2606d04                          // vsub.f32      d22, d0, d4
-  .long  0xe7933080                          // ldr           r3, [r3, r0, lsl #1]
-  .long  0xf2628d06                          // vsub.f32      d24, d2, d6
-  .long  0xf2240114                          // vorr          d0, d4, d4
-  .long  0xe58d3000                          // str           r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3083f                          // vld1.32       {d16[0]}, [r3 :32]
-  .long  0xe3a03e7e                          // mov           r3, #2016
-  .long  0xf2262116                          // vorr          d2, d6, d6
-  .long  0xf3d04a30                          // vmovl.u16     q10, d16
-  .long  0xee803b90                          // vdup.32       d16, r3
-  .long  0xf24421b2                          // vand          d18, d20, d18
-  .long  0xf24401b0                          // vand          d16, d20, d16
-  .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
+  .long  0xf2482132                          // vand          d18, d8, d18
+  .long  0xeddf4b28                          // vldr          d20, [pc, #160]
   .long  0xf3fb0620                          // vcvt.f32.s32  d16, d16
-  .long  0xf24411b1                          // vand          d17, d20, d17
-  .long  0xeddf4b14                          // vldr          d20, [pc, #80]
+  .long  0xe591e004                          // ldr           lr, [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  0xf3422db3                          // vmul.f32      d18, d18, d19
-  .long  0xeddf3b12                          // vldr          d19, [pc, #72]
-  .long  0xf3400db4                          // vmul.f32      d16, d16, d20
+  .long  0xe1a0c00e                          // mov           ip, lr
+  .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  0xf2453cb2                          // vfma.f32      d19, d21, d18
-  .long  0xf2454cb0                          // vfma.f32      d20, d21, d16
+  .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  0xf2071cb0                          // vfma.f32      d1, d23, d16
-  .long  0xf2060cb1                          // vfma.f32      d0, d22, d17
-  .long  0xf2082cb2                          // vfma.f32      d2, d24, d18
+  .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  0xe28dd004                          // add           sp, sp, #4
+  .long  0xe28dd008                          // add           sp, sp, #8
+  .long  0xecbd8b04                          // vpop          {d8-d9}
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe1dcc0b0                          // ldrh          ip, [ip]
+  .long  0xeddf8a08                          // vldr          s17, [pc, #32]
+  .long  0xee08ca10                          // vmov          s16, ip
+  .long  0xeaffffd1                          // b             1b54 <sk_lerp_565_vfp4+0x34>
   .long  0xe320f000                          // nop           {0}
   .long  0x3d042108                          // .word         0x3d042108
   .long  0x3d042108                          // .word         0x3d042108
@@ -6268,112 +6354,130 @@
   .long  0x3a020821                          // .word         0x3a020821
   .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  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d47f0                          // push          {r4, r5, r6, r7, r8, r9, sl, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59ce000                          // ldr           lr, [ip]
+  .long  0xe08ee100                          // add           lr, lr, r0, lsl #2
+  .long  0x0a000023                          // beq           1cd8 <sk_load_tables_vfp4+0xa8>
+  .long  0xed9e0b00                          // vldr          d0, [lr]
   .long  0xf3c7001f                          // vmov.i32      d16, #255
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe99300b0                          // ldmib         r3, {r4, r5, r7}
-  .long  0xe08e3100                          // add           r3, lr, r0, lsl #2
-  .long  0xedd31b00                          // vldr          d17, [r3]
-  .long  0xf24121b0                          // vand          d18, d17, d16
-  .long  0xf3f83031                          // vshr.u32      d19, d17, #8
-  .long  0xee323b90                          // vmov.32       r3, d18[1]
-  .long  0xee126b90                          // vmov.32       r6, d18[0]
-  .long  0xf3f02031                          // vshr.u32      d18, d17, #16
+  .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  0xf24301b0                          // vand          d16, d19, d16
-  .long  0xe0843103                          // add           r3, r4, r3, lsl #2
-  .long  0xedd30a00                          // vldr          s1, [r3]
-  .long  0xe0843106                          // add           r3, r4, r6, lsl #2
-  .long  0xee326b90                          // vmov.32       r6, d18[1]
-  .long  0xed930a00                          // vldr          s0, [r3]
-  .long  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xee104b90                          // vmov.32       r4, d16[0]
-  .long  0xf3e80031                          // vshr.u32      d16, d17, #24
-  .long  0xeddf1b0d                          // vldr          d17, [pc, #52]
+  .long  0xf2400130                          // vand          d16, d0, d16
+  .long  0xee31eb90                          // vmov.32       lr, d17[1]
+  .long  0xee329b90                          // vmov.32       r9, 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  0xeddf1b14                          // vldr          d17, [pc, #80]
   .long  0xf3003db1                          // vmul.f32      d3, d16, d17
-  .long  0xe087e106                          // add           lr, r7, r6, lsl #2
-  .long  0xee126b90                          // vmov.32       r6, d18[0]
-  .long  0xe0853103                          // add           r3, r5, r3, lsl #2
+  .long  0xe084e10e                          // add           lr, r4, lr, lsl #2
+  .long  0xe0869109                          // add           r9, r6, r9, lsl #2
+  .long  0xe0875105                          // add           r5, r7, r5, lsl #2
   .long  0xedde2a00                          // vldr          s5, [lr]
-  .long  0xedd31a00                          // vldr          s3, [r3]
-  .long  0xe0853104                          // add           r3, r5, r4, lsl #2
-  .long  0xed931a00                          // vldr          s2, [r3]
-  .long  0xe0873106                          // add           r3, r7, r6, lsl #2
-  .long  0xed932a00                          // vldr          s4, [r3]
-  .long  0xe8bd48f0                          // pop           {r4, r5, r6, r7, fp, lr}
+  .long  0xedd91a00                          // vldr          s3, [r9]
+  .long  0xedd50a00                          // vldr          s1, [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  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  0xeddf0a04                          // vldr          s1, [pc, #16]
+  .long  0xed9e0a00                          // vldr          s0, [lr]
+  .long  0xeaffffd9                          // b             1c4c <sk_load_tables_vfp4+0x1c>
   .long  0xe320f000                          // nop           {0}
   .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  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xf3c7801f                          // vmov.i32      d24, #255
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5936000                          // ldr           r6, [r3]
-  .long  0xe9934030                          // ldmib         r3, {r4, r5, lr}
-  .long  0xe0863180                          // add           r3, r6, r0, lsl #3
-  .long  0xf4e3070d                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [r3]!
-  .long  0xf4e3074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [r3]
-  .long  0xee903bb0                          // vmov.u16      r3, d16[0]
-  .long  0xee926bb0                          // vmov.u16      r6, d18[0]
-  .long  0xee043b90                          // vmov.32       d20[0], r3
-  .long  0xee913bb0                          // vmov.u16      r3, d17[0]
-  .long  0xee056b90                          // vmov.32       d21[0], r6
-  .long  0xee906bf0                          // vmov.u16      r6, d16[1]
-  .long  0xee063b90                          // vmov.32       d22[0], r3
-  .long  0xee933bb0                          // vmov.u16      r3, d19[0]
-  .long  0xee246b90                          // vmov.32       d20[1], r6
+  .long  0xe92d47f0                          // push          {r4, r5, r6, r7, r8, r9, sl, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59ce000                          // ldr           lr, [ip]
+  .long  0xe08ee180                          // add           lr, lr, r0, lsl #3
+  .long  0xf4ee070f                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [lr]
+  .long  0x1a000001                          // bne           1d1c <sk_load_tables_u16_be_vfp4+0x24>
+  .long  0xe28ee008                          // add           lr, lr, #8
+  .long  0xf4ee074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [lr]
+  .long  0xee92ebb0                          // vmov.u16      lr, d18[0]
+  .long  0xf3c7701f                          // vmov.i32      d23, #255
+  .long  0xee905bb0                          // vmov.u16      r5, d16[0]
+  .long  0xee914bb0                          // vmov.u16      r4, d17[0]
   .long  0xee926bf0                          // vmov.u16      r6, d18[1]
-  .long  0xf24441b8                          // vand          d20, d20, d24
-  .long  0xee073b90                          // vmov.32       d23[0], r3
-  .long  0xee913bf0                          // vmov.u16      r3, d17[1]
-  .long  0xee256b90                          // vmov.32       d21[1], r6
-  .long  0xee936bf0                          // vmov.u16      r6, d19[1]
-  .long  0xf24501b8                          // vand          d16, d21, d24
-  .long  0xee107b90                          // vmov.32       r7, d16[0]
-  .long  0xee263b90                          // vmov.32       d22[1], r3
-  .long  0xee343b90                          // vmov.32       r3, d20[1]
-  .long  0xf24611b8                          // vand          d17, d22, d24
-  .long  0xee276b90                          // vmov.32       d23[1], r6
-  .long  0xee146b90                          // vmov.32       r6, d20[0]
-  .long  0xf2e82537                          // vshl.s32      d18, d23, #8
-  .long  0xe0843103                          // add           r3, r4, r3, lsl #2
-  .long  0xedd30a00                          // vldr          s1, [r3]
-  .long  0xe0843106                          // add           r3, r4, r6, lsl #2
-  .long  0xee304b90                          // vmov.32       r4, d16[1]
-  .long  0xee116b90                          // vmov.32       r6, d17[0]
-  .long  0xf3c70c1f                          // vmov.i32      d16, #65535
-  .long  0xed930a00                          // vldr          s0, [r3]
-  .long  0xee313b90                          // vmov.32       r3, d17[1]
-  .long  0xf24711b0                          // vand          d17, d23, d16
+  .long  0xee908bf0                          // vmov.u16      r8, d16[1]
+  .long  0xee917bf0                          // vmov.u16      r7, d17[1]
+  .long  0xee04eb90                          // vmov.32       d20[0], lr
+  .long  0xee065b90                          // vmov.32       d22[0], r5
+  .long  0xee054b90                          // vmov.32       d21[0], r4
+  .long  0xe59c400c                          // ldr           r4, [ip, #12]
+  .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  0xf26211b1                          // vorr          d17, d18, d17
-  .long  0xf24101b0                          // vand          d16, d17, d16
-  .long  0xeddf1b0c                          // vldr          d17, [pc, #48]
+  .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  0xeddf1b0d                          // vldr          d17, [pc, #52]
+  .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  0xe08e4104                          // add           r4, lr, r4, lsl #2
-  .long  0xedd42a00                          // vldr          s5, [r4]
-  .long  0xe0853103                          // add           r3, r5, r3, lsl #2
-  .long  0xedd31a00                          // vldr          s3, [r3]
-  .long  0xe0853106                          // add           r3, r5, r6, lsl #2
-  .long  0xed931a00                          // vldr          s2, [r3]
-  .long  0xe08e3107                          // add           r3, lr, r7, lsl #2
-  .long  0xed932a00                          // vldr          s4, [r3]
-  .long  0xe8bd48f0                          // pop           {r4, r5, r6, r7, fp, lr}
+  .long  0xe086710c                          // add           r7, r6, ip, lsl #2
+  .long  0xe591c004                          // ldr           ip, [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  0xe320f000                          // nop           {0}
   .long  0x37800080                          // .word         0x37800080
@@ -6383,115 +6487,119 @@
 .globl _sk_load_tables_rgb_u16_be_vfp4
 FUNCTION(_sk_load_tables_rgb_u16_be_vfp4)
 _sk_load_tables_rgb_u16_be_vfp4:
-  .long  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xf3c7601f                          // vmov.i32      d22, #255
-  .long  0xe2811008                          // add           r1, r1, #8
+  .long  0xe92d47f0                          // push          {r4, r5, r6, r7, r8, r9, sl, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe0804080                          // add           r4, r0, r0, lsl #1
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59ce000                          // ldr           lr, [ip]
+  .long  0xe08ee084                          // add           lr, lr, r4, lsl #1
+  .long  0xf4ee060f                          // vld3.16       {d16[0],d17[0],d18[0]}, [lr]
+  .long  0x1a000001                          // bne           1e28 <sk_load_tables_rgb_u16_be_vfp4+0x28>
+  .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  0xe5936000                          // ldr           r6, [r3]
-  .long  0xe9934030                          // ldmib         r3, {r4, r5, lr}
-  .long  0xe0803080                          // add           r3, r0, r0, lsl #1
-  .long  0xe0863083                          // add           r3, r6, r3, lsl #1
-  .long  0xf4e3060d                          // vld3.16       {d16[0],d17[0],d18[0]}, [r3]!
-  .long  0xf4e3064f                          // vld3.16       {d16[1],d17[1],d18[1]}, [r3]
-  .long  0xee903bb0                          // vmov.u16      r3, d16[0]
-  .long  0xee926bb0                          // vmov.u16      r6, d18[0]
-  .long  0xee043b90                          // vmov.32       d20[0], r3
-  .long  0xee903bf0                          // vmov.u16      r3, d16[1]
-  .long  0xee056b90                          // vmov.32       d21[0], r6
-  .long  0xee916bb0                          // vmov.u16      r6, d17[0]
-  .long  0xee243b90                          // vmov.32       d20[1], r3
-  .long  0xee923bf0                          // vmov.u16      r3, d18[1]
-  .long  0xf24441b6                          // vand          d20, d20, d22
-  .long  0xee076b90                          // vmov.32       d23[0], r6
-  .long  0xee916bf0                          // vmov.u16      r6, d17[1]
-  .long  0xee253b90                          // vmov.32       d21[1], r3
-  .long  0xee343b90                          // vmov.32       r3, d20[1]
-  .long  0xf24501b6                          // vand          d16, d21, d22
-  .long  0xee276b90                          // vmov.32       d23[1], r6
-  .long  0xee146b90                          // vmov.32       r6, d20[0]
-  .long  0xf24711b6                          // vand          d17, d23, d22
-  .long  0xee107b90                          // vmov.32       r7, d16[0]
-  .long  0xe0843103                          // add           r3, r4, r3, lsl #2
-  .long  0xedd30a00                          // vldr          s1, [r3]
-  .long  0xe0843106                          // add           r3, r4, r6, lsl #2
-  .long  0xee304b90                          // vmov.32       r4, d16[1]
-  .long  0xee116b90                          // vmov.32       r6, d17[0]
-  .long  0xed930a00                          // vldr          s0, [r3]
-  .long  0xee313b90                          // vmov.32       r3, d17[1]
-  .long  0xe08e4104                          // add           r4, lr, r4, lsl #2
-  .long  0xedd42a00                          // vldr          s5, [r4]
-  .long  0xe0853103                          // add           r3, r5, r3, lsl #2
-  .long  0xedd31a00                          // vldr          s3, [r3]
-  .long  0xe0853106                          // add           r3, r5, r6, lsl #2
-  .long  0xed931a00                          // vldr          s2, [r3]
-  .long  0xe08e3107                          // add           r3, lr, r7, lsl #2
-  .long  0xed932a00                          // vldr          s4, [r3]
-  .long  0xe8bd48f0                          // pop           {r4, r5, r6, r7, fp, lr}
+  .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  0xed970a00                          // vldr          s0, [r7]
+  .long  0xe085710c                          // add           r7, r5, ip, lsl #2
+  .long  0xe591c004                          // ldr           ip, [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
 
 HIDDEN _sk_byte_tables_vfp4
 .globl _sk_byte_tables_vfp4
 FUNCTION(_sk_byte_tables_vfp4)
 _sk_byte_tables_vfp4:
-  .long  0xe92d4bf0                          // push          {r4, r5, r6, r7, r8, r9, fp, lr}
+  .long  0xe92d47f0                          // push          {r4, r5, r6, r7, r8, r9, sl, lr}
   .long  0xeddf0b37                          // vldr          d16, [pc, #220]
-  .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
   .long  0xf2c3361f                          // vmov.i32      d19, #1056964608
-  .long  0xe8911010                          // ldm           r1, {r4, ip}
-  .long  0xf2422c30                          // vfma.f32      d18, d2, d16
   .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  0xe2811008                          // add           r1, r1, #8
   .long  0xf2c3461f                          // vmov.i32      d20, #1056964608
-  .long  0xe89402e0                          // ldm           r4, {r5, r6, r7, r9}
+  .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  0xf3fb27a2                          // vcvt.u32.f32  d18, d18
   .long  0xf3fb37a3                          // vcvt.u32.f32  d19, d19
+  .long  0xf3fb27a2                          // vcvt.u32.f32  d18, d18
   .long  0xf3fb47a4                          // vcvt.u32.f32  d20, d20
-  .long  0xee123b90                          // vmov.32       r3, d18[0]
+  .long  0xee138b90                          // vmov.32       r8, d19[0]
   .long  0xf3fb07a1                          // vcvt.u32.f32  d16, d17
-  .long  0xee13eb90                          // vmov.32       lr, d19[0]
+  .long  0xee12eb90                          // vmov.32       lr, d18[0]
   .long  0xee144b90                          // vmov.32       r4, d20[0]
-  .long  0xe7d78003                          // ldrb          r8, [r7, r3]
-  .long  0xe7d6300e                          // ldrb          r3, [r6, lr]
-  .long  0xee053b90                          // vmov.32       d21[0], r3
-  .long  0xe7d53004                          // ldrb          r3, [r5, r4]
-  .long  0xee344b90                          // vmov.32       r4, d20[1]
-  .long  0xee013b90                          // vmov.32       d17[0], r3
-  .long  0xee103b90                          // vmov.32       r3, d16[0]
-  .long  0xee048b90                          // vmov.32       d20[0], r8
-  .long  0xe7d5e004                          // ldrb          lr, [r5, r4]
-  .long  0xee334b90                          // vmov.32       r4, d19[1]
-  .long  0xee325b90                          // vmov.32       r5, d18[1]
+  .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  0xe7d93003                          // ldrb          r3, [r9, r3]
   .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  0xe7d64004                          // ldrb          r4, [r6, r4]
-  .long  0xee306b90                          // vmov.32       r6, d16[1]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
-  .long  0xee254b90                          // vmov.32       d21[1], r4
-  .long  0xe7d74005                          // ldrb          r4, [r7, r5]
+  .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  0xee244b90                          // vmov.32       d20[1], r4
+  .long  0xee245b90                          // vmov.32       d20[1], r5
   .long  0xf24441b2                          // vand          d20, d20, d18
   .long  0xf3fb46a4                          // vcvt.f32.u32  d20, d20
-  .long  0xe7d93006                          // ldrb          r3, [r9, r6]
-  .long  0xee203b90                          // vmov.32       d16[1], r3
+  .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  0xeddf3b09                          // vldr          d19, [pc, #36]
+  .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  0xe8bd4bf0                          // pop           {r4, r5, r6, r7, r8, r9, fp, lr}
+  .long  0xe8bd47f0                          // pop           {r4, r5, r6, r7, r8, r9, sl, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0x437f0000                          // .word         0x437f0000
   .long  0x437f0000                          // .word         0x437f0000
   .long  0x3b808081                          // .word         0x3b808081
@@ -6501,56 +6609,56 @@
 .globl _sk_byte_tables_rgb_vfp4
 FUNCTION(_sk_byte_tables_rgb_vfp4)
 _sk_byte_tables_rgb_vfp4:
-  .long  0xe92d41f0                          // push          {r4, r5, r6, r7, r8, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe9930110                          // ldmib         r3, {r4, r8}
-  .long  0xe593300c                          // ldr           r3, [r3, #12]
-  .long  0xe2433001                          // sub           r3, r3, #1
-  .long  0xee803b90                          // vdup.32       d16, r3
+  .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  0xee123b90                          // vmov.32       r3, d18[0]
-  .long  0xee326b90                          // vmov.32       r6, d18[1]
+  .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  0xee107b90                          // vmov.32       r7, d16[0]
-  .long  0xee305b90                          // vmov.32       r5, d16[1]
-  .long  0xe7de3003                          // ldrb          r3, [lr, r3]
-  .long  0xe7dee006                          // ldrb          lr, [lr, r6]
+  .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  0xee023b90                          // vmov.32       d18[0], r3
-  .long  0xee313b90                          // vmov.32       r3, d17[1]
+  .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  0xe7d87007                          // ldrb          r7, [r8, r7]
-  .long  0xee017b90                          // vmov.32       d17[0], r7
-  .long  0xe7d46006                          // ldrb          r6, [r4, r6]
-  .long  0xe7d43003                          // ldrb          r3, [r4, r3]
+  .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  0xe7d84005                          // ldrb          r4, [r8, r5]
-  .long  0xee203b90                          // vmov.32       d16[1], r3
-  .long  0xee214b90                          // vmov.32       d17[1], r4
-  .long  0xf24001b3                          // vand          d16, d16, d19
+  .long  0xee215b90                          // vmov.32       d17[1], r5
+  .long  0xee204b90                          // vmov.32       d16[1], r4
   .long  0xf24111b3                          // vand          d17, d17, d19
-  .long  0xeddf3b07                          // vldr          d19, [pc, #28]
-  .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
+  .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  0xf3001db3                          // vmul.f32      d1, d16, d19
   .long  0xf3012db3                          // vmul.f32      d2, d17, d19
-  .long  0xe8bd41f0                          // pop           {r4, r5, r6, r7, r8, lr}
+  .long  0xf3001db3                          // vmul.f32      d1, d16, d19
+  .long  0xe8bd4bf0                          // pop           {r4, r5, r6, r7, r8, r9, fp, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
 
@@ -6558,116 +6666,120 @@
 .globl _sk_table_r_vfp4
 FUNCTION(_sk_table_r_vfp4)
 _sk_table_r_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe5933004                          // ldr           r3, [r3, #4]
-  .long  0xe2433001                          // sub           r3, r3, #1
-  .long  0xee803b90                          // vdup.32       d16, r3
+  .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  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xee104b90                          // vmov.32       r4, d16[0]
-  .long  0xe08e3103                          // add           r3, lr, r3, lsl #2
-  .long  0xedd30a00                          // vldr          s1, [r3]
-  .long  0xe08e3104                          // add           r3, lr, r4, lsl #2
-  .long  0xed930a00                          // vldr          s0, [r3]
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_table_g_vfp4
 .globl _sk_table_g_vfp4
 FUNCTION(_sk_table_g_vfp4)
 _sk_table_g_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe5933004                          // ldr           r3, [r3, #4]
-  .long  0xe2433001                          // sub           r3, r3, #1
-  .long  0xee803b90                          // vdup.32       d16, r3
+  .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  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xee104b90                          // vmov.32       r4, d16[0]
-  .long  0xe08e3103                          // add           r3, lr, r3, lsl #2
-  .long  0xedd31a00                          // vldr          s3, [r3]
-  .long  0xe08e3104                          // add           r3, lr, r4, lsl #2
-  .long  0xed931a00                          // vldr          s2, [r3]
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_table_b_vfp4
 .globl _sk_table_b_vfp4
 FUNCTION(_sk_table_b_vfp4)
 _sk_table_b_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe5933004                          // ldr           r3, [r3, #4]
-  .long  0xe2433001                          // sub           r3, r3, #1
-  .long  0xee803b90                          // vdup.32       d16, r3
+  .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  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xee104b90                          // vmov.32       r4, d16[0]
-  .long  0xe08e3103                          // add           r3, lr, r3, lsl #2
-  .long  0xedd32a00                          // vldr          s5, [r3]
-  .long  0xe08e3104                          // add           r3, lr, r4, lsl #2
-  .long  0xed932a00                          // vldr          s4, [r3]
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_table_a_vfp4
 .globl _sk_table_a_vfp4
 FUNCTION(_sk_table_a_vfp4)
 _sk_table_a_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe5933004                          // ldr           r3, [r3, #4]
-  .long  0xe2433001                          // sub           r3, r3, #1
-  .long  0xee803b90                          // vdup.32       d16, r3
+  .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  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xee104b90                          // vmov.32       r4, d16[0]
-  .long  0xe08e3103                          // add           r3, lr, r3, lsl #2
-  .long  0xedd33a00                          // vldr          s7, [r3]
-  .long  0xe08e3104                          // add           r3, lr, r4, lsl #2
-  .long  0xed933a00                          // vldr          s6, [r3]
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .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  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_parametric_r_vfp4
 .globl _sk_parametric_r_vfp4
 FUNCTION(_sk_parametric_r_vfp4)
 _sk_parametric_r_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .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  0xe1a0300e                          // mov           r3, lr
+  .long  0xe1a0400e                          // mov           r4, lr
   .long  0xeddf4b42                          // vldr          d20, [pc, #264]
-  .long  0xf4e30c9d                          // vld1.32       {d16[]}, [r3 :32]!
+  .long  0xf4e40c9d                          // vld1.32       {d16[]}, [r4 :32]!
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3008                          // add           r3, lr, #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
+  .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
@@ -6706,15 +6818,15 @@
   .long  0xf2c4161b                          // vmov.i32      d17, #1258291200
   .long  0xf2400d8a                          // vadd.f32      d16, d16, d10
   .long  0xf2402cb1                          // vfma.f32      d18, d16, d17
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
+  .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  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
+  .long  0xe28e4014                          // add           r4, lr, #20
   .long  0xf3400e80                          // vcge.f32      d16, d16, d0
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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
@@ -6722,7 +6834,7 @@
   .long  0xf2400fa3                          // vmax.f32      d16, d16, d19
   .long  0xf2200fa1                          // vmin.f32      d0, d16, d17
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
   .long  0x3eb444f9                          // .word         0x3eb444f9
   .long  0x3eb444f9                          // .word         0x3eb444f9
@@ -6745,20 +6857,20 @@
 .globl _sk_parametric_g_vfp4
 FUNCTION(_sk_parametric_g_vfp4)
 _sk_parametric_g_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .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  0xe1a0300e                          // mov           r3, lr
+  .long  0xe1a0400e                          // mov           r4, lr
   .long  0xeddf4b42                          // vldr          d20, [pc, #264]
-  .long  0xf4e30c9d                          // vld1.32       {d16[]}, [r3 :32]!
+  .long  0xf4e40c9d                          // vld1.32       {d16[]}, [r4 :32]!
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3008                          // add           r3, lr, #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
+  .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
@@ -6797,15 +6909,15 @@
   .long  0xf2c4161b                          // vmov.i32      d17, #1258291200
   .long  0xf2400d8a                          // vadd.f32      d16, d16, d10
   .long  0xf2402cb1                          // vfma.f32      d18, d16, d17
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
+  .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  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
+  .long  0xe28e4014                          // add           r4, lr, #20
   .long  0xf3400e81                          // vcge.f32      d16, d16, d1
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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
@@ -6813,7 +6925,7 @@
   .long  0xf2400fa3                          // vmax.f32      d16, d16, d19
   .long  0xf2201fa1                          // vmin.f32      d1, d16, d17
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
   .long  0x3eb444f9                          // .word         0x3eb444f9
   .long  0x3eb444f9                          // .word         0x3eb444f9
@@ -6836,20 +6948,20 @@
 .globl _sk_parametric_b_vfp4
 FUNCTION(_sk_parametric_b_vfp4)
 _sk_parametric_b_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .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  0xe1a0300e                          // mov           r3, lr
+  .long  0xe1a0400e                          // mov           r4, lr
   .long  0xeddf4b42                          // vldr          d20, [pc, #264]
-  .long  0xf4e30c9d                          // vld1.32       {d16[]}, [r3 :32]!
+  .long  0xf4e40c9d                          // vld1.32       {d16[]}, [r4 :32]!
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3008                          // add           r3, lr, #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
+  .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
@@ -6888,15 +7000,15 @@
   .long  0xf2c4161b                          // vmov.i32      d17, #1258291200
   .long  0xf2400d8a                          // vadd.f32      d16, d16, d10
   .long  0xf2402cb1                          // vfma.f32      d18, d16, d17
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
+  .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  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
+  .long  0xe28e4014                          // add           r4, lr, #20
   .long  0xf3400e82                          // vcge.f32      d16, d16, d2
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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
@@ -6904,7 +7016,7 @@
   .long  0xf2400fa3                          // vmax.f32      d16, d16, d19
   .long  0xf2202fa1                          // vmin.f32      d2, d16, d17
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
   .long  0x3eb444f9                          // .word         0x3eb444f9
   .long  0x3eb444f9                          // .word         0x3eb444f9
@@ -6927,20 +7039,20 @@
 .globl _sk_parametric_a_vfp4
 FUNCTION(_sk_parametric_a_vfp4)
 _sk_parametric_a_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .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  0xe1a0300e                          // mov           r3, lr
+  .long  0xe1a0400e                          // mov           r4, lr
   .long  0xeddf4b42                          // vldr          d20, [pc, #264]
-  .long  0xf4e30c9d                          // vld1.32       {d16[]}, [r3 :32]!
+  .long  0xf4e40c9d                          // vld1.32       {d16[]}, [r4 :32]!
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3008                          // add           r3, lr, #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
+  .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
@@ -6979,15 +7091,15 @@
   .long  0xf2c4161b                          // vmov.i32      d17, #1258291200
   .long  0xf2400d8a                          // vadd.f32      d16, d16, d10
   .long  0xf2402cb1                          // vfma.f32      d18, d16, d17
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
+  .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  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
+  .long  0xe28e4014                          // add           r4, lr, #20
   .long  0xf3400e83                          // vcge.f32      d16, d16, d3
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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
@@ -6995,7 +7107,7 @@
   .long  0xf2400fa3                          // vmax.f32      d16, d16, d19
   .long  0xf2203fa1                          // vmin.f32      d3, d16, d17
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
   .long  0x3eb444f9                          // .word         0x3eb444f9
   .long  0x3eb444f9                          // .word         0x3eb444f9
@@ -7032,7 +7144,7 @@
   .long  0xf2411da4                          // vadd.f32      d17, d17, d20
   .long  0xeddf4b24                          // vldr          d20, [pc, #144]
   .long  0xf2422da3                          // vadd.f32      d18, d18, d19
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -7062,7 +7174,7 @@
   .long  0xf30a2db2                          // vmul.f32      d2, d26, d18
   .long  0xf3410db8                          // vmul.f32      d16, d17, d24
   .long  0xf31511b0                          // vbsl          d1, d21, d16
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x437f0000                          // .word         0x437f0000
   .long  0x437f0000                          // .word         0x437f0000
@@ -7089,57 +7201,69 @@
 .globl _sk_load_a8_vfp4
 FUNCTION(_sk_load_a8_vfp4)
 _sk_load_a8_vfp4:
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc000                          // add           ip, ip, r0
+  .long  0x0a000012                          // beq           2898 <sk_load_a8_vfp4+0x60>
   .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe1dcc0b0                          // ldrh          ip, [ip]
+  .long  0xe1cdc0b0                          // strh          ip, [sp]
+  .long  0xe1a0c00d                          // mov           ip, sp
+  .long  0xf4ec041f                          // vld1.16       {d16[0]}, [ip :16]
+  .long  0xf3c80a30                          // vmovl.u8      q8, d16
+  .long  0xf3900a30                          // vmovl.u16     q0, d16
+  .long  0xe28dd004                          // add           sp, sp, #4
+  .long  0xf3c7001f                          // vmov.i32      d16, #255
+  .long  0xeddf1b0c                          // vldr          d17, [pc, #48]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .long  0xf2802010                          // vmov.i32      d2, #0
+  .long  0xf2400130                          // vand          d16, d0, d16
   .long  0xe2811008                          // add           r1, r1, #8
   .long  0xf2800010                          // vmov.i32      d0, #0
-  .long  0xf2801010                          // vmov.i32      d1, #0
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xf2802010                          // vmov.i32      d2, #0
-  .long  0xe0833000                          // add           r3, r3, r0
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1cd30b0                          // strh          r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3041f                          // vld1.16       {d16[0]}, [r3 :16]
-  .long  0xf3c80a30                          // vmovl.u8      q8, d16
-  .long  0xf3d00a30                          // vmovl.u16     q8, d16
   .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
-  .long  0xeddf1b03                          // vldr          d17, [pc, #12]
+  .long  0xf2801010                          // vmov.i32      d1, #0
   .long  0xf3003db1                          // vmul.f32      d3, d16, d17
-  .long  0xe28dd004                          // add           sp, sp, #4
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
+  .long  0xe5dcc000                          // ldrb          ip, [ip]
+  .long  0xeddf0a03                          // vldr          s1, [pc, #12]
+  .long  0xee00ca10                          // vmov          s0, ip
+  .long  0xeafffff0                          // b             286c <sk_load_a8_vfp4+0x34>
   .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  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
   .long  0xf2800010                          // vmov.i32      d0, #0
-  .long  0xe493e008                          // ldr           lr, [r3], #8
+  .long  0xe49e4008                          // ldr           r4, [lr], #8
   .long  0xf2801010                          // vmov.i32      d1, #0
   .long  0xf2802010                          // vmov.i32      d2, #0
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xf4ee2c9f                          // vld1.32       {d18[]}, [lr :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee11eb90                          // vmov.32       lr, d17[0]
+  .long  0xee315b90                          // vmov.32       r5, d17[1]
   .long  0xf3c7101f                          // vmov.i32      d17, #255
-  .long  0xe7de3003                          // ldrb          r3, [lr, r3]
-  .long  0xe7de4004                          // ldrb          r4, [lr, r4]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
+  .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  0xeddf1b03                          // vldr          d17, [pc, #12]
+  .long  0xeddf1b04                          // vldr          d17, [pc, #16]
   .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
   .long  0xf3003db1                          // vmul.f32      d3, d16, d17
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
 
@@ -7147,22 +7271,28 @@
 .globl _sk_store_a8_vfp4
 FUNCTION(_sk_store_a8_vfp4)
 _sk_store_a8_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
-  .long  0xeddf0b0d                          // vldr          d16, [pc, #52]
+  .long  0xe92d4010                          // push          {r4, lr}
+  .long  0xeddf0b13                          // vldr          d16, [pc, #76]
   .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2431c30                          // vfma.f32      d17, d3, d16
-  .long  0xe5913000                          // ldr           r3, [r1]
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc000                          // add           ip, ip, r0
   .long  0xf3fb07a1                          // vcvt.u32.f32  d16, d17
-  .long  0xee10eb90                          // vmov.32       lr, d16[0]
-  .long  0xee30cb90                          // vmov.32       ip, d16[1]
-  .long  0xe7e3e000                          // strb          lr, [r3, r0]!
-  .long  0xe5c3c001                          // strb          ip, [r3, #1]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0x0a000007                          // beq           2970 <sk_store_a8_vfp4+0x48>
+  .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  0xe1a01003                          // mov           r1, r3
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .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             2960 <sk_store_a8_vfp4+0x38>
+  .long  0xe320f000                          // nop           {0}
   .long  0x437f0000                          // .word         0x437f0000
   .long  0x437f0000                          // .word         0x437f0000
 
@@ -7170,57 +7300,69 @@
 .globl _sk_load_g8_vfp4
 FUNCTION(_sk_load_g8_vfp4)
 _sk_load_g8_vfp4:
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc000                          // add           ip, ip, r0
+  .long  0x0a000012                          // beq           29e8 <sk_load_g8_vfp4+0x60>
   .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf2873f10                          // vmov.f32      d3, #1
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833000                          // add           r3, r3, r0
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1cd30b0                          // strh          r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3041f                          // vld1.16       {d16[0]}, [r3 :16]
+  .long  0xe1dcc0b0                          // ldrh          ip, [ip]
+  .long  0xe1cdc0b0                          // strh          ip, [sp]
+  .long  0xe1a0c00d                          // mov           ip, sp
+  .long  0xf4ec041f                          // vld1.16       {d16[0]}, [ip :16]
   .long  0xf3c80a30                          // vmovl.u8      q8, d16
-  .long  0xf3d00a30                          // vmovl.u16     q8, d16
+  .long  0xf3900a30                          // vmovl.u16     q0, d16
+  .long  0xe28dd004                          // add           sp, sp, #4
+  .long  0xf3c7001f                          // vmov.i32      d16, #255
+  .long  0xeddf1b0c                          // vldr          d17, [pc, #48]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .long  0xf2873f10                          // vmov.f32      d3, #1
+  .long  0xf2400130                          // vand          d16, d0, d16
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xf3fb06a0                          // vcvt.f32.u32  d16, d16
-  .long  0xeddf1b05                          // vldr          d17, [pc, #20]
   .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  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
+  .long  0xe5dcc000                          // ldrb          ip, [ip]
+  .long  0xeddf0a03                          // vldr          s1, [pc, #12]
+  .long  0xee00ca10                          // vmov          s0, ip
+  .long  0xeafffff0                          // b             29bc <sk_load_g8_vfp4+0x34>
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
+  .long  0x00000000                          // .word         0x00000000
+  .long  0xe320f000                          // .word         0xe320f000
 
 HIDDEN _sk_gather_g8_vfp4
 .globl _sk_gather_g8_vfp4
 FUNCTION(_sk_gather_g8_vfp4)
 _sk_gather_g8_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
   .long  0xf2873f10                          // vmov.f32      d3, #1
-  .long  0xe493e008                          // ldr           lr, [r3], #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xe49e4008                          // ldr           r4, [lr], #8
+  .long  0xf4ee2c9f                          // vld1.32       {d18[]}, [lr :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee11eb90                          // vmov.32       lr, d17[0]
+  .long  0xee315b90                          // vmov.32       r5, d17[1]
   .long  0xf3c7101f                          // vmov.i32      d17, #255
-  .long  0xe7de3003                          // ldrb          r3, [lr, r3]
-  .long  0xe7de4004                          // ldrb          r4, [lr, r4]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
+  .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  0xeddf1b05                          // vldr          d17, [pc, #20]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
 
@@ -7228,37 +7370,37 @@
 .globl _sk_gather_i8_vfp4
 FUNCTION(_sk_gather_i8_vfp4)
 _sk_gather_i8_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe1a0e001                          // mov           lr, r1
-  .long  0xe491c004                          // ldr           ip, [r1], #4
+  .long  0xe92d4830                          // push          {r4, r5, fp, lr}
+  .long  0xe1a0c001                          // mov           ip, r1
+  .long  0xe491e004                          // ldr           lr, [r1], #4
   .long  0xf3fb0701                          // vcvt.s32.f32  d16, d1
-  .long  0xe35c0000                          // cmp           ip, #0
+  .long  0xe35e0000                          // cmp           lr, #0
   .long  0xf3fb1700                          // vcvt.s32.f32  d17, d0
-  .long  0xe1a0300c                          // mov           r3, ip
-  .long  0x028e1008                          // addeq         r1, lr, #8
-  .long  0x059e3004                          // ldreq         r3, [lr, #4]
-  .long  0xe493e008                          // ldr           lr, [r3], #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xe1a0400e                          // mov           r4, lr
+  .long  0x028c1008                          // addeq         r1, ip, #8
+  .long  0x059c4004                          // ldreq         r4, [ip, #4]
+  .long  0xe494c008                          // ldr           ip, [r4], #8
+  .long  0xf4e42c9f                          // vld1.32       {d18[]}, [r4 :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee114b90                          // vmov.32       r4, d17[0]
+  .long  0xee315b90                          // vmov.32       r5, d17[1]
   .long  0xf3c7101f                          // vmov.i32      d17, #255
-  .long  0xe7de3003                          // ldrb          r3, [lr, r3]
-  .long  0xe7de4004                          // ldrb          r4, [lr, r4]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
-  .long  0xee204b90                          // vmov.32       d16[1], r4
-  .long  0xe59c4004                          // ldr           r4, [ip, #4]
+  .long  0xe7dc4004                          // ldrb          r4, [ip, r4]
+  .long  0xe7dc5005                          // ldrb          r5, [ip, r5]
+  .long  0xee004b90                          // vmov.32       d16[0], r4
+  .long  0xe59e4004                          // ldr           r4, [lr, #4]
+  .long  0xee205b90                          // vmov.32       d16[1], r5
   .long  0xf24001b1                          // vand          d16, d16, d17
-  .long  0xee103b90                          // vmov.32       r3, d16[0]
-  .long  0xee30eb90                          // vmov.32       lr, d16[1]
-  .long  0xe0843103                          // add           r3, r4, r3, lsl #2
-  .long  0xf4e3083f                          // vld1.32       {d16[0]}, [r3 :32]
-  .long  0xe084310e                          // add           r3, r4, lr, lsl #2
-  .long  0xf4e308bf                          // vld1.32       {d16[1]}, [r3 :32]
+  .long  0xee105b90                          // vmov.32       r5, d16[0]
+  .long  0xee30cb90                          // vmov.32       ip, d16[1]
+  .long  0xe0845105                          // add           r5, r4, r5, lsl #2
+  .long  0xf4e5083f                          // vld1.32       {d16[0]}, [r5 :32]
+  .long  0xe084510c                          // add           r5, r4, ip, lsl #2
+  .long  0xf4e508bf                          // vld1.32       {d16[1]}, [r5 :32]
   .long  0xf24021b1                          // vand          d18, d16, d17
   .long  0xf3f83030                          // vshr.u32      d19, d16, #8
   .long  0xf3e84030                          // vshr.u32      d20, d16, #24
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .long  0xe491c004                          // ldr           ip, [r1], #4
   .long  0xf3f00030                          // vshr.u32      d16, d16, #16
   .long  0xf24331b1                          // vand          d19, d19, d17
   .long  0xf24001b1                          // vand          d16, d16, d17
@@ -7271,8 +7413,8 @@
   .long  0xf3043db1                          // vmul.f32      d3, d20, d17
   .long  0xf3031db1                          // vmul.f32      d1, d19, d17
   .long  0xf3002db1                          // vmul.f32      d2, d16, d17
-  .long  0xe8bd4010                          // pop           {r4, lr}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe8bd4830                          // pop           {r4, r5, fp, lr}
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
@@ -7281,81 +7423,91 @@
 .globl _sk_load_565_vfp4
 FUNCTION(_sk_load_565_vfp4)
 _sk_load_565_vfp4:
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc080                          // add           ip, ip, r0, lsl #1
+  .long  0x0a00001a                          // beq           2bb8 <sk_load_565_vfp4+0x80>
   .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xf2c1101f                          // vmov.i32      d17, #31
-  .long  0xf3c72218                          // vmov.i32      d18, #63488
-  .long  0xeddf3b16                          // vldr          d19, [pc, #88]
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xf2873f10                          // vmov.f32      d3, #1
-  .long  0xe7933080                          // ldr           r3, [r3, r0, lsl #1]
-  .long  0xe58d3000                          // str           r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3083f                          // vld1.32       {d16[0]}, [r3 :32]
-  .long  0xe3a03e7e                          // mov           r3, #2016
-  .long  0xf3d04a30                          // vmovl.u16     q10, d16
-  .long  0xee803b90                          // vdup.32       d16, r3
-  .long  0xf24411b1                          // vand          d17, d20, d17
-  .long  0xeddf5b0e                          // vldr          d21, [pc, #56]
-  .long  0xf24421b2                          // vand          d18, d20, d18
-  .long  0xf24401b0                          // vand          d16, d20, d16
-  .long  0xeddf4b09                          // vldr          d20, [pc, #36]
-  .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
-  .long  0xf3fb0620                          // vcvt.f32.s32  d16, d16
-  .long  0xf3fb1621                          // vcvt.f32.s32  d17, d17
-  .long  0xf3020db3                          // vmul.f32      d0, d18, d19
-  .long  0xf3001db4                          // vmul.f32      d1, d16, d20
-  .long  0xf3012db5                          // vmul.f32      d2, d17, d21
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe58dc000                          // str           ip, [sp]
+  .long  0xe1a0c00d                          // mov           ip, sp
+  .long  0xf4ec083f                          // vld1.32       {d16[0]}, [ip :32]
+  .long  0xf3900a30                          // vmovl.u16     q0, d16
   .long  0xe28dd004                          // add           sp, sp, #4
+  .long  0xf3c70218                          // vmov.i32      d16, #63488
+  .long  0xe3a0ce7e                          // mov           ip, #2016
+  .long  0xf2c1101f                          // vmov.i32      d17, #31
+  .long  0xee82cb90                          // vdup.32       d18, ip
+  .long  0xf2400130                          // vand          d16, d0, d16
+  .long  0xeddf3b11                          // vldr          d19, [pc, #68]
+  .long  0xf2402132                          // vand          d18, d0, d18
+  .long  0xeddf4b11                          // vldr          d20, [pc, #68]
+  .long  0xf2401131                          // vand          d17, d0, d17
+  .long  0xeddf5b11                          // vldr          d21, [pc, #68]
+  .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  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  0xe12fff1c                          // bx            ip
+  .long  0xe1dcc0b0                          // ldrh          ip, [ip]
+  .long  0xeddf0a07                          // vldr          s1, [pc, #28]
+  .long  0xee00ca10                          // vmov          s0, ip
+  .long  0xeaffffe7                          // b             2b68 <sk_load_565_vfp4+0x30>
   .long  0x37842108                          // .word         0x37842108
   .long  0x37842108                          // .word         0x37842108
   .long  0x3a020821                          // .word         0x3a020821
   .long  0x3a020821                          // .word         0x3a020821
   .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  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe493e008                          // ldr           lr, [r3], #8
+  .long  0xeddf5b21                          // vldr          d21, [pc, #132]
   .long  0xf2873f10                          // vmov.f32      d3, #1
-  .long  0xeddf5b1e                          // vldr          d21, [pc, #120]
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xe49e4008                          // ldr           r4, [lr], #8
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .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  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee11eb90                          // vmov.32       lr, d17[0]
+  .long  0xee316b90                          // vmov.32       r6, d17[1]
   .long  0xf3c71218                          // vmov.i32      d17, #63488
-  .long  0xe08e3083                          // add           r3, lr, r3, lsl #1
-  .long  0xe08e4084                          // add           r4, lr, r4, lsl #1
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1d440b0                          // ldrh          r4, [r4]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
-  .long  0xe3a03e7e                          // mov           r3, #2016
-  .long  0xee833b90                          // vdup.32       d19, r3
-  .long  0xee204b90                          // vmov.32       d16[1], r4
+  .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  0xeddf3b07                          // vldr          d19, [pc, #28]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4070                          // pop           {r4, r5, r6, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0x37842108                          // .word         0x37842108
   .long  0x37842108                          // .word         0x37842108
   .long  0x3a020821                          // .word         0x3a020821
@@ -7368,16 +7520,17 @@
 FUNCTION(_sk_store_565_vfp4)
 _sk_store_565_vfp4:
   .long  0xf2c30f1f                          // vmov.f32      d16, #31
-  .long  0xeddf1b15                          // vldr          d17, [pc, #84]
+  .long  0xeddf1b1b                          // vldr          d17, [pc, #108]
   .long  0xf2c3361f                          // vmov.i32      d19, #1056964608
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2413c31                          // vfma.f32      d19, d1, d17
+  .long  0xe3530001                          // cmp           r3, #1
   .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2401c30                          // vfma.f32      d17, d0, d16
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe59cc000                          // ldr           ip, [ip]
   .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
   .long  0xf2422c30                          // vfma.f32      d18, d2, d16
-  .long  0xe0833080                          // add           r3, r3, r0, lsl #1
+  .long  0xe08cc080                          // add           ip, ip, r0, lsl #1
   .long  0xf3fb07a3                          // vcvt.u32.f32  d16, d19
   .long  0xf3fb17a1                          // vcvt.u32.f32  d17, d17
   .long  0xf3fb27a2                          // vcvt.u32.f32  d18, d18
@@ -7385,12 +7538,17 @@
   .long  0xf2eb1531                          // vshl.s32      d17, d17, #11
   .long  0xf26001b1                          // vorr          d16, d16, d17
   .long  0xf26001b2                          // vorr          d16, d16, d18
+  .long  0x0a000004                          // beq           2cf4 <sk_store_565_vfp4+0x64>
   .long  0xf3f60121                          // vuzp.16       d16, d17
-  .long  0xf4c3080f                          // vst1.32       {d16[0]}, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0xf4cc080f                          // vst1.32       {d16[0]}, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xee10eb90                          // vmov.32       lr, d16[0]
+  .long  0xe1cce0b0                          // strh          lr, [ip]
+  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xeafffff7                          // b             2ce8 <sk_store_565_vfp4+0x58>
   .long  0x427c0000                          // .word         0x427c0000
   .long  0x427c0000                          // .word         0x427c0000
 
@@ -7398,37 +7556,45 @@
 .globl _sk_load_4444_vfp4
 FUNCTION(_sk_load_4444_vfp4)
 _sk_load_4444_vfp4:
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc080                          // add           ip, ip, r0, lsl #1
+  .long  0x0a00001d                          // beq           2d9c <sk_load_4444_vfp4+0x8c>
   .long  0xe24dd004                          // sub           sp, sp, #4
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xf3c71210                          // vmov.i32      d17, #61440
-  .long  0xf3c74010                          // vmov.i32      d20, #240
-  .long  0xf2c0501f                          // vmov.i32      d21, #15
-  .long  0xeddf6b1d                          // vldr          d22, [pc, #116]
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe7933080                          // ldr           r3, [r3, r0, lsl #1]
-  .long  0xe58d3000                          // str           r3, [sp]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xf4e3083f                          // vld1.32       {d16[0]}, [r3 :32]
-  .long  0xf3d02a30                          // vmovl.u16     q9, d16
-  .long  0xf2c0021f                          // vmov.i32      d16, #3840
-  .long  0xf24211b1                          // vand          d17, d18, d17
-  .long  0xf24201b0                          // vand          d16, d18, d16
-  .long  0xf24241b4                          // vand          d20, d18, d20
-  .long  0xf24221b5                          // vand          d18, d18, d21
-  .long  0xeddf3b0c                          // vldr          d19, [pc, #48]
-  .long  0xf3fb1621                          // vcvt.f32.s32  d17, d17
-  .long  0xeddf5b0c                          // vldr          d21, [pc, #48]
-  .long  0xf3fb0620                          // vcvt.f32.s32  d16, d16
-  .long  0xf3fb4624                          // vcvt.f32.s32  d20, d20
-  .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
-  .long  0xf3010db3                          // vmul.f32      d0, d17, d19
-  .long  0xeddf1b0b                          // vldr          d17, [pc, #44]
-  .long  0xf3001db5                          // vmul.f32      d1, d16, d21
-  .long  0xf3042db6                          // vmul.f32      d2, d20, d22
-  .long  0xf3023db1                          // vmul.f32      d3, d18, d17
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe58dc000                          // str           ip, [sp]
+  .long  0xe1a0c00d                          // mov           ip, sp
+  .long  0xf4ec083f                          // vld1.32       {d16[0]}, [ip :32]
+  .long  0xf3900a30                          // vmovl.u16     q0, d16
   .long  0xe28dd004                          // add           sp, sp, #4
+  .long  0xf3c70210                          // vmov.i32      d16, #61440
+  .long  0xeddf4b19                          // vldr          d20, [pc, #100]
+  .long  0xf2c0121f                          // vmov.i32      d17, #3840
+  .long  0xeddf5b19                          // vldr          d21, [pc, #100]
+  .long  0xf3c72010                          // vmov.i32      d18, #240
+  .long  0xeddf6b19                          // vldr          d22, [pc, #100]
+  .long  0xf2400130                          // vand          d16, d0, d16
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .long  0xf2c0301f                          // vmov.i32      d19, #15
+  .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  0xeddf0b0e                          // vldr          d16, [pc, #56]
+  .long  0xf3011db5                          // vmul.f32      d1, d17, d21
+  .long  0xf3022db6                          // vmul.f32      d2, d18, d22
+  .long  0xf3033db0                          // vmul.f32      d3, d19, d16
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe1dcc0b0                          // ldrh          ip, [ip]
+  .long  0xeddf0a0a                          // vldr          s1, [pc, #40]
+  .long  0xee00ca10                          // vmov          s0, ip
+  .long  0xeaffffe4                          // b             2d40 <sk_load_4444_vfp4+0x30>
   .long  0xe320f000                          // nop           {0}
   .long  0x37888889                          // .word         0x37888889
   .long  0x37888889                          // .word         0x37888889
@@ -7438,49 +7604,53 @@
   .long  0x3b888889                          // .word         0x3b888889
   .long  0x3d888889                          // .word         0x3d888889
   .long  0x3d888889                          // .word         0x3d888889
+  .long  0x00000000                          // .word         0x00000000
+  .long  0xe320f000                          // .word         0xe320f000
 
 HIDDEN _sk_gather_4444_vfp4
 .globl _sk_gather_4444_vfp4
 FUNCTION(_sk_gather_4444_vfp4)
 _sk_gather_4444_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xeddf5b21                          // vldr          d21, [pc, #132]
-  .long  0xe493e008                          // ldr           lr, [r3], #8
+  .long  0xeddf6b24                          // vldr          d22, [pc, #144]
+  .long  0xe49e4008                          // ldr           r4, [lr], #8
   .long  0xf2c0401f                          // vmov.i32      d20, #15
-  .long  0xeddf6b20                          // vldr          d22, [pc, #128]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xf4ee2c9f                          // vld1.32       {d18[]}, [lr :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
   .long  0xf2c0221f                          // vmov.i32      d18, #3840
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee11eb90                          // vmov.32       lr, d17[0]
+  .long  0xee316b90                          // vmov.32       r6, d17[1]
   .long  0xf3c71210                          // vmov.i32      d17, #61440
-  .long  0xe08e3083                          // add           r3, lr, r3, lsl #1
-  .long  0xe08e4084                          // add           r4, lr, r4, lsl #1
-  .long  0xe1d330b0                          // ldrh          r3, [r3]
-  .long  0xe1d440b0                          // ldrh          r4, [r4]
-  .long  0xee003b90                          // vmov.32       d16[0], r3
-  .long  0xee204b90                          // vmov.32       d16[1], r4
+  .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  0xeddf4b0a                          // vldr          d20, [pc, #40]
+  .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  0xeddf1b0a                          // vldr          d17, [pc, #40]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4070                          // pop           {r4, r5, r6, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x37888889                          // .word         0x37888889
   .long  0x37888889                          // .word         0x37888889
   .long  0x39888889                          // .word         0x39888889
@@ -7495,14 +7665,15 @@
 FUNCTION(_sk_store_4444_vfp4)
 _sk_store_4444_vfp4:
   .long  0xf2c20f1e                          // vmov.f32      d16, #15
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
+  .long  0xe3530001                          // cmp           r3, #1
   .long  0xf2c3361f                          // vmov.i32      d19, #1056964608
   .long  0xf2402c30                          // vfma.f32      d18, d0, d16
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe59cc000                          // ldr           ip, [ip]
   .long  0xf2413c30                          // vfma.f32      d19, d1, d16
   .long  0xf2c3461f                          // vmov.i32      d20, #1056964608
-  .long  0xe0833080                          // add           r3, r3, r0, lsl #1
+  .long  0xe08cc080                          // add           ip, ip, r0, lsl #1
   .long  0xf2424c30                          // vfma.f32      d20, d2, d16
   .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2431c30                          // vfma.f32      d17, d3, d16
@@ -7516,68 +7687,82 @@
   .long  0xf26201b0                          // vorr          d16, d18, d16
   .long  0xf26001b3                          // vorr          d16, d16, d19
   .long  0xf26001b1                          // vorr          d16, d16, d17
+  .long  0x0a000004                          // beq           2f0c <sk_store_4444_vfp4+0x74>
   .long  0xf3f60121                          // vuzp.16       d16, d17
-  .long  0xf4c3080f                          // vst1.32       {d16[0]}, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0xf4cc080f                          // vst1.32       {d16[0]}, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xee10eb90                          // vmov.32       lr, d16[0]
+  .long  0xe1cce0b0                          // strh          lr, [ip]
+  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xeafffff7                          // b             2f00 <sk_store_4444_vfp4+0x68>
 
 HIDDEN _sk_load_8888_vfp4
 .globl _sk_load_8888_vfp4
 FUNCTION(_sk_load_8888_vfp4)
 _sk_load_8888_vfp4:
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530001                          // cmp           r3, #1
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc100                          // add           ip, ip, r0, lsl #2
+  .long  0x0a000013                          // beq           2f84 <sk_load_8888_vfp4+0x64>
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833100                          // add           r3, r3, r0, lsl #2
-  .long  0xedd31b00                          // vldr          d17, [r3]
-  .long  0xf24121b0                          // vand          d18, d17, d16
-  .long  0xf3f83031                          // vshr.u32      d19, d17, #8
-  .long  0xf3e84031                          // vshr.u32      d20, d17, #24
-  .long  0xf3f01031                          // vshr.u32      d17, d17, #16
-  .long  0xf24331b0                          // vand          d19, d19, d16
-  .long  0xf24101b0                          // vand          d16, d17, d16
-  .long  0xeddf1b08                          // vldr          d17, [pc, #32]
+  .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  0xeddf4b0a                          // vldr          d20, [pc, #40]
   .long  0xf3fb2622                          // vcvt.f32.s32  d18, d18
-  .long  0xf3fb4624                          // vcvt.f32.s32  d20, d20
-  .long  0xf3fb3623                          // vcvt.f32.s32  d19, d19
+  .long  0xf3fb1621                          // vcvt.f32.s32  d17, d17
   .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  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  0xe12fff1c                          // bx            ip
+  .long  0xeddf0a03                          // vldr          s1, [pc, #12]
+  .long  0xed9c0a00                          // vldr          s0, [ip]
+  .long  0xeaffffe9                          // b             2f38 <sk_load_8888_vfp4+0x18>
   .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  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe493e008                          // ldr           lr, [r3], #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xe49e4008                          // ldr           r4, [lr], #8
+  .long  0xf4ee2c9f                          // vld1.32       {d18[]}, [lr :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee314b90                          // vmov.32       r4, d17[1]
+  .long  0xee11eb90                          // vmov.32       lr, d17[0]
+  .long  0xee316b90                          // vmov.32       r6, d17[1]
   .long  0xf3c7101f                          // vmov.i32      d17, #255
-  .long  0xe08e3103                          // add           r3, lr, r3, lsl #2
-  .long  0xf4e3083f                          // vld1.32       {d16[0]}, [r3 :32]
-  .long  0xe08e3104                          // add           r3, lr, r4, lsl #2
-  .long  0xf4e308bf                          // vld1.32       {d16[1]}, [r3 :32]
+  .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  0xeddf1b09                          // vldr          d17, [pc, #36]
+  .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
@@ -7586,8 +7771,9 @@
   .long  0xf3043db1                          // vmul.f32      d3, d20, d17
   .long  0xf3031db1                          // vmul.f32      d1, d19, d17
   .long  0xf3002db1                          // vmul.f32      d2, d16, d17
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4070                          // pop           {r4, r5, r6, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x3b808081                          // .word         0x3b808081
   .long  0x3b808081                          // .word         0x3b808081
 
@@ -7595,17 +7781,18 @@
 .globl _sk_store_8888_vfp4
 FUNCTION(_sk_store_8888_vfp4)
 _sk_store_8888_vfp4:
-  .long  0xeddf0b1a                          // vldr          d16, [pc, #104]
+  .long  0xeddf0b1c                          // vldr          d16, [pc, #112]
   .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
   .long  0xf2412c30                          // vfma.f32      d18, d1, d16
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c3361f                          // vmov.i32      d19, #1056964608
+  .long  0xe3530001                          // cmp           r3, #1
   .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2423c30                          // vfma.f32      d19, d2, d16
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe59cc000                          // ldr           ip, [ip]
   .long  0xf2c3461f                          // vmov.i32      d20, #1056964608
   .long  0xf2401c30                          // vfma.f32      d17, d0, d16
-  .long  0xe0833100                          // add           r3, r3, r0, lsl #2
+  .long  0xe08cc100                          // add           ip, ip, r0, lsl #2
   .long  0xf2434c30                          // vfma.f32      d20, d3, d16
   .long  0xf3fb07a2                          // vcvt.u32.f32  d16, d18
   .long  0xf3fb27a3                          // vcvt.u32.f32  d18, d19
@@ -7617,12 +7804,13 @@
   .long  0xf2f81533                          // vshl.s32      d17, d19, #24
   .long  0xf26001b2                          // vorr          d16, d16, d18
   .long  0xf26001b1                          // vorr          d16, d16, d17
-  .long  0xedc30b00                          // vstr          d16, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0x0a000003                          // beq           30a0 <sk_store_8888_vfp4+0x70>
+  .long  0xedcc0b00                          // vstr          d16, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
+  .long  0xf4cc083f                          // vst1.32       {d16[0]}, [ip :32]
+  .long  0xeafffffa                          // b             3094 <sk_store_8888_vfp4+0x64>
   .long  0x437f0000                          // .word         0x437f0000
   .long  0x437f0000                          // .word         0x437f0000
 
@@ -7630,13 +7818,17 @@
 .globl _sk_load_f16_vfp4
 FUNCTION(_sk_load_f16_vfp4)
 _sk_load_f16_vfp4:
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833180                          // add           r3, r3, r0, lsl #3
-  .long  0xf4e3070d                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [r3]!
-  .long  0xf4e3074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [r3]
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc180                          // add           ip, ip, r0, lsl #3
+  .long  0xf4ec070f                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [ip]
+  .long  0x1a000001                          // bne           30d0 <sk_load_f16_vfp4+0x20>
+  .long  0xe28cc008                          // add           ip, ip, #8
+  .long  0xf4ec074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [ip]
   .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
@@ -7652,32 +7844,32 @@
   .long  0xe28db008                          // add           fp, sp, #8
   .long  0xe24dd010                          // sub           sp, sp, #16
   .long  0xe7c3d01f                          // bfc           sp, #0, #4
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf3fb0701                          // vcvt.s32.f32  d16, d1
   .long  0xf3fb1700                          // vcvt.s32.f32  d17, d0
-  .long  0xe493c008                          // ldr           ip, [r3], #8
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .long  0xe49ce008                          // ldr           lr, [ip], #8
+  .long  0xf4ec2c9f                          // vld1.32       {d18[]}, [ip :32]
   .long  0xf26219a0                          // vmla.i32      d17, d18, d16
-  .long  0xee113b90                          // vmov.32       r3, d17[0]
-  .long  0xee31eb90                          // vmov.32       lr, d17[1]
-  .long  0xe08c4183                          // add           r4, ip, r3, lsl #3
-  .long  0xe08c318e                          // add           r3, ip, lr, lsl #3
-  .long  0xedd31b00                          // vldr          d17, [r3]
-  .long  0xe1a0300d                          // mov           r3, sp
-  .long  0xedd40b00                          // vldr          d16, [r4]
-  .long  0xf4430aef                          // vst1.64       {d16-d17}, [r3 :128]
-  .long  0xf4e3071f                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [r3 :64]
-  .long  0xe3833008                          // orr           r3, r3, #8
-  .long  0xf4e3075f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [r3 :64]
+  .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  0xe1a0400d                          // mov           r4, sp
+  .long  0xeddc0b00                          // vldr          d16, [ip]
+  .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  0xf3b60720                          // vcvt.f32.f16  q0, d16
   .long  0xf3b62722                          // vcvt.f32.f16  q1, d18
-  .long  0xe5913004                          // ldr           r3, [r1, #4]
+  .long  0xe5914004                          // ldr           r4, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
   .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  0xe12fff33                          // blx           r3
+  .long  0xe12fff34                          // blx           r4
   .long  0xe24bd008                          // sub           sp, fp, #8
   .long  0xe8bd8c10                          // pop           {r4, sl, fp, pc}
 
@@ -7686,81 +7878,87 @@
 FUNCTION(_sk_store_f16_vfp4)
 _sk_store_f16_vfp4:
   .long  0xf2630113                          // vorr          d16, d3, d3
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2612111                          // vorr          d18, d1, d1
+  .long  0xe3530000                          // cmp           r3, #0
   .long  0xf3f67620                          // vcvt.f16.f32  d23, q8
-  .long  0xe5933000                          // ldr           r3, [r3]
+  .long  0xe59cc000                          // ldr           ip, [ip]
   .long  0xf3f66602                          // vcvt.f16.f32  d22, q1
-  .long  0xe0833180                          // add           r3, r3, r0, lsl #3
+  .long  0xe08cc180                          // add           ip, ip, r0, lsl #3
   .long  0xf3f65622                          // vcvt.f16.f32  d21, q9
   .long  0xf3f64600                          // vcvt.f16.f32  d20, q0
+  .long  0xf4cc470f                          // vst4.16       {d20[0],d21[0],d22[0],d23[0]}, [ip]
+  .long  0x1a000001                          // bne           31ac <sk_store_f16_vfp4+0x38>
+  .long  0xe28cc008                          // add           ip, ip, #8
+  .long  0xf4cc474f                          // vst4.16       {d20[1],d21[1],d22[1],d23[1]}, [ip]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xf22211b2                          // vorr          d1, d18, d18
   .long  0xf22031b0                          // vorr          d3, d16, d16
-  .long  0xf4c3470d                          // vst4.16       {d20[0],d21[0],d22[0],d23[0]}, [r3]!
-  .long  0xf4c3474f                          // vst4.16       {d20[1],d21[1],d22[1],d23[1]}, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_load_u16_be_vfp4
 .globl _sk_load_u16_be_vfp4
 FUNCTION(_sk_load_u16_be_vfp4)
 _sk_load_u16_be_vfp4:
-  .long  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833180                          // add           r3, r3, r0, lsl #3
-  .long  0xf4e3070d                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [r3]!
-  .long  0xf4e3074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [r3]
-  .long  0xee903bb0                          // vmov.u16      r3, d16[0]
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc180                          // add           ip, ip, r0, lsl #3
+  .long  0xf4ec070f                          // vld4.16       {d16[0],d17[0],d18[0],d19[0]}, [ip]
+  .long  0x1a000001                          // bne           31e0 <sk_load_u16_be_vfp4+0x20>
+  .long  0xe28cc008                          // add           ip, ip, #8
+  .long  0xf4ec074f                          // vld4.16       {d16[1],d17[1],d18[1],d19[1]}, [ip]
+  .long  0xe92d4bf0                          // push          {r4, r5, r6, r7, r8, r9, fp, lr}
+  .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  0xee937bb0                          // vmov.u16      r7, d19[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  0xee043b90                          // vmov.32       d20[0], r3
-  .long  0xee05eb90                          // vmov.32       d21[0], lr
-  .long  0xee93ebf0                          // vmov.u16      lr, d19[1]
-  .long  0xee913bf0                          // vmov.u16      r3, d17[1]
-  .long  0xf3c71c1f                          // vmov.i32      d17, #65535
-  .long  0xee004b90                          // vmov.32       d16[0], r4
-  .long  0xee027b90                          // vmov.32       d18[0], r7
-  .long  0xee245b90                          // vmov.32       d20[1], r5
-  .long  0xf24431b1                          // vand          d19, d20, d17
-  .long  0xee256b90                          // vmov.32       d21[1], r6
-  .long  0xf2e84534                          // vshl.s32      d20, d20, #8
-  .long  0xf24561b1                          // vand          d22, d21, d17
-  .long  0xf3f83033                          // vshr.u32      d19, d19, #8
-  .long  0xf2e85535                          // vshl.s32      d21, d21, #8
-  .long  0xf26431b3                          // vorr          d19, d20, d19
-  .long  0xf3f86036                          // vshr.u32      d22, d22, #8
-  .long  0xf24331b1                          // vand          d19, d19, d17
-  .long  0xf26551b6                          // vorr          d21, d21, d22
-  .long  0xf3fb36a3                          // vcvt.f32.u32  d19, d19
-  .long  0xee22eb90                          // vmov.32       d18[1], lr
-  .long  0xee203b90                          // vmov.32       d16[1], r3
-  .long  0xf24281b1                          // vand          d24, d18, d17
-  .long  0xf2e82532                          // vshl.s32      d18, d18, #8
-  .long  0xf24071b1                          // vand          d23, d16, d17
-  .long  0xf3f84038                          // vshr.u32      d20, d24, #8
+  .long  0xee918bf0                          // vmov.u16      r8, d17[1]
+  .long  0xee00cb90                          // vmov.32       d16[0], ip
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .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  0xf26221b4                          // vorr          d18, d18, d20
-  .long  0xf26001b7                          // vorr          d16, d16, d23
-  .long  0xf24541b1                          // vand          d20, d21, d17
-  .long  0xf24001b1                          // vand          d16, d16, d17
-  .long  0xf24211b1                          // vand          d17, d18, d17
-  .long  0xeddf2b09                          // vldr          d18, [pc, #36]
+  .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  0xf3fb46a4                          // vcvt.f32.u32  d20, d20
+  .long  0xf3fb26a2                          // vcvt.f32.u32  d18, d18
   .long  0xf3fb16a1                          // vcvt.f32.u32  d17, d17
-  .long  0xf3030db2                          // vmul.f32      d0, d19, d18
-  .long  0xf3001db2                          // vmul.f32      d1, d16, d18
-  .long  0xf3042db2                          // vmul.f32      d2, d20, d18
-  .long  0xf3013db2                          // vmul.f32      d3, d17, d18
-  .long  0xe8bd48f0                          // pop           {r4, r5, r6, r7, fp, lr}
+  .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  0x37800080                          // .word         0x37800080
@@ -7771,23 +7969,27 @@
 FUNCTION(_sk_load_rgb_u16_be_vfp4)
 _sk_load_rgb_u16_be_vfp4:
   .long  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
-  .long  0xe2811008                          // add           r1, r1, #8
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe080e080                          // add           lr, r0, r0, lsl #1
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc08e                          // add           ip, ip, lr, lsl #1
+  .long  0xf4ec060f                          // vld3.16       {d16[0],d17[0],d18[0]}, [ip]
+  .long  0x1a000001                          // bne           32e0 <sk_load_rgb_u16_be_vfp4+0x28>
+  .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  0xe593e000                          // ldr           lr, [r3]
-  .long  0xe0803080                          // add           r3, r0, r0, lsl #1
-  .long  0xe08e3083                          // add           r3, lr, r3, lsl #1
-  .long  0xf4e3060d                          // vld3.16       {d16[0],d17[0],d18[0]}, [r3]!
-  .long  0xf4e3064f                          // vld3.16       {d16[1],d17[1],d18[1]}, [r3]
-  .long  0xee90ebb0                          // vmov.u16      lr, d16[0]
-  .long  0xee913bb0                          // vmov.u16      r3, d17[0]
+  .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  0xee00eb90                          // vmov.32       d16[0], lr
-  .long  0xee013b90                          // vmov.32       d17[0], r3
+  .long  0xee00cb90                          // vmov.32       d16[0], ip
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
+  .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
@@ -7823,14 +8025,15 @@
 .globl _sk_store_u16_be_vfp4
 FUNCTION(_sk_store_u16_be_vfp4)
 _sk_store_u16_be_vfp4:
-  .long  0xeddf0b2a                          // vldr          d16, [pc, #168]
+  .long  0xeddf0b2c                          // vldr          d16, [pc, #176]
   .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
   .long  0xf2c3361f                          // vmov.i32      d19, #1056964608
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2432c30                          // vfma.f32      d18, d3, d16
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2c3461f                          // vmov.i32      d20, #1056964608
   .long  0xf2423c30                          // vfma.f32      d19, d2, d16
-  .long  0xf2c3161f                          // vmov.i32      d17, #1056964608
   .long  0xf2414c30                          // vfma.f32      d20, d1, d16
   .long  0xf2401c30                          // vfma.f32      d17, d0, d16
   .long  0xf3fb07a2                          // vcvt.u32.f32  d16, d18
@@ -7844,27 +8047,28 @@
   .long  0xf24131b3                          // vand          d19, d17, d19
   .long  0xf2e80530                          // vshl.s32      d16, d16, #8
   .long  0xf3f85035                          // vshr.u32      d21, d21, #8
-  .long  0xf2e82532                          // vshl.s32      d18, d18, #8
+  .long  0xf2e88532                          // vshl.s32      d24, d18, #8
   .long  0xf3f86036                          // vshr.u32      d22, d22, #8
-  .long  0xf260b1b5                          // vorr          d27, d16, d21
   .long  0xf2e84534                          // vshl.s32      d20, d20, #8
   .long  0xf3f87037                          // vshr.u32      d23, d23, #8
-  .long  0xf262a1b6                          // vorr          d26, d18, d22
-  .long  0xf2e81531                          // vshl.s32      d17, d17, #8
-  .long  0xf3f83033                          // vshr.u32      d19, d19, #8
-  .long  0xf26491b7                          // vorr          d25, d20, d23
-  .long  0xf26181b3                          // vorr          d24, d17, d19
-  .long  0xf3f6b120                          // vuzp.16       d27, d16
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xf3f6a120                          // vuzp.16       d26, d16
-  .long  0xe0833180                          // add           r3, r3, r0, lsl #3
-  .long  0xf3f69120                          // vuzp.16       d25, d16
-  .long  0xf3f68120                          // vuzp.16       d24, d16
-  .long  0xf4c3870d                          // vst4.16       {d24[0],d25[0],d26[0],d27[0]}, [r3]!
-  .long  0xf4c3874f                          // vst4.16       {d24[1],d25[1],d26[1],d27[1]}, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0xf2e89531                          // vshl.s32      d25, d17, #8
+  .long  0xf3f8a033                          // vshr.u32      d26, d19, #8
+  .long  0xf26031b5                          // vorr          d19, d16, d21
+  .long  0xf26821b6                          // vorr          d18, d24, d22
+  .long  0xf26411b7                          // vorr          d17, d20, d23
+  .long  0xf26901ba                          // vorr          d16, d25, d26
+  .long  0xf3f63124                          // vuzp.16       d19, d20
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xf3f62124                          // vuzp.16       d18, d20
+  .long  0xe08cc180                          // add           ip, ip, r0, lsl #3
+  .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           3430 <sk_store_u16_be_vfp4+0xa8>
+  .long  0xe28cc008                          // add           ip, ip, #8
+  .long  0xf4cc074f                          // vst4.16       {d16[1],d17[1],d18[1],d19[1]}, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x477fff00                          // .word         0x477fff00
@@ -7874,60 +8078,76 @@
 .globl _sk_load_f32_vfp4
 FUNCTION(_sk_load_f32_vfp4)
 _sk_load_f32_vfp4:
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc200                          // add           ip, ip, r0, lsl #4
+  .long  0x1a000003                          // bne           346c <sk_load_f32_vfp4+0x24>
+  .long  0xf42c008f                          // vld4.32       {d0-d3}, [ip]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833200                          // add           r3, r3, r0, lsl #4
-  .long  0xf423008f                          // vld4.32       {d0-d3}, [r3]
   .long  0xe12fff1c                          // bx            ip
+  .long  0xf4ac0f8f                          // vld4.32       {d0[]-d3[]}, [ip]
+  .long  0xeafffffa                          // b             3460 <sk_load_f32_vfp4+0x18>
 
 HIDDEN _sk_store_f32_vfp4
 .globl _sk_store_f32_vfp4
 FUNCTION(_sk_store_f32_vfp4)
 _sk_store_f32_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
-  .long  0xe5933000                          // ldr           r3, [r3]
-  .long  0xe0833200                          // add           r3, r3, r0, lsl #4
-  .long  0xf403008f                          // vst4.32       {d0-d3}, [r3]
-  .long  0xe2813008                          // add           r3, r1, #8
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe3530000                          // cmp           r3, #0
+  .long  0xe59cc000                          // ldr           ip, [ip]
+  .long  0xe08cc200                          // add           ip, ip, r0, lsl #4
+  .long  0x1a000003                          // bne           3498 <sk_store_f32_vfp4+0x24>
+  .long  0xf40c008f                          // vst4.32       {d0-d3}, [ip]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xe12fff1c                          // bx            ip
+  .long  0xf48c0b0f                          // vst4.32       {d0[0],d1[0],d2[0],d3[0]}, [ip]
+  .long  0xeafffffa                          // b             348c <sk_store_f32_vfp4+0x18>
 
 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  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
   .long  0xf2400f80                          // vmax.f32      d16, d16, d0
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
+  .long  0xf4ee1c9f                          // vld1.32       {d17[]}, [lr :32]
   .long  0xf2200fa1                          // vmin.f32      d0, d16, d17
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
 
 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  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
   .long  0xf2400f81                          // vmax.f32      d16, d16, d1
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
+  .long  0xf4ee1c9f                          // vld1.32       {d17[]}, [lr :32]
   .long  0xf2201fa1                          // vmin.f32      d1, d16, d17
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
 
 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  0xed2d8b04                          // vpush         {d8-d9}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xf2c02010                          // vmov.i32      d18, #0
+  .long  0xeddf3b0e                          // vldr          d19, [pc, #56]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xeddf3b0c                          // vldr          d19, [pc, #48]
-  .long  0xed938a00                          // vldr          s16, [r3]
+  .long  0xed9e8a00                          // vldr          s16, [lr]
   .long  0xeec09a88                          // vdiv.f32      s19, s1, s16
   .long  0xee809a08                          // vdiv.f32      s18, s0, s16
   .long  0xf3fb0709                          // vcvt.s32.f32  d16, d9
@@ -7938,8 +8158,8 @@
   .long  0xf3f41c08                          // vdup.32       d17, d8[0]
   .long  0xf2210cb0                          // vfms.f32      d0, d17, d16
   .long  0xecbd8b04                          // vpop          {d8-d9}
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -7947,12 +8167,14 @@
 .globl _sk_repeat_y_vfp4
 FUNCTION(_sk_repeat_y_vfp4)
 _sk_repeat_y_vfp4:
+  .long  0xe92d4800                          // push          {fp, lr}
   .long  0xed2d8b04                          // vpush         {d8-d9}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xf2c02010                          // vmov.i32      d18, #0
+  .long  0xeddf3b0e                          // vldr          d19, [pc, #56]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xeddf3b0c                          // vldr          d19, [pc, #48]
-  .long  0xed938a00                          // vldr          s16, [r3]
+  .long  0xed9e8a00                          // vldr          s16, [lr]
   .long  0xeec19a88                          // vdiv.f32      s19, s3, s16
   .long  0xee819a08                          // vdiv.f32      s18, s2, s16
   .long  0xf3fb0709                          // vcvt.s32.f32  d16, d9
@@ -7963,8 +8185,8 @@
   .long  0xf3f41c08                          // vdup.32       d17, d8[0]
   .long  0xf2211cb0                          // vfms.f32      d1, d17, d16
   .long  0xecbd8b04                          // vpop          {d8-d9}
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
-  .long  0xe320f000                          // nop           {0}
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -7972,12 +8194,14 @@
 .globl _sk_mirror_x_vfp4
 FUNCTION(_sk_mirror_x_vfp4)
 _sk_mirror_x_vfp4:
+  .long  0xe92d4800                          // push          {fp, lr}
   .long  0xed2d8b04                          // vpush         {d8-d9}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xf2c03010                          // vmov.i32      d19, #0
+  .long  0xeddf4b14                          // vldr          d20, [pc, #80]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xeddf4b10                          // vldr          d20, [pc, #64]
-  .long  0xed938a00                          // vldr          s16, [r3]
+  .long  0xed9e8a00                          // vldr          s16, [lr]
   .long  0xee389a08                          // vadd.f32      s18, s16, s16
   .long  0xf3f40c08                          // vdup.32       d16, d8[0]
   .long  0xf2200d20                          // vsub.f32      d0, d0, d16
@@ -7993,7 +8217,9 @@
   .long  0xf2610da0                          // vsub.f32      d16, d17, d16
   .long  0xf3b90720                          // vabs.f32      d0, d16
   .long  0xecbd8b04                          // vpop          {d8-d9}
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -8001,12 +8227,14 @@
 .globl _sk_mirror_y_vfp4
 FUNCTION(_sk_mirror_y_vfp4)
 _sk_mirror_y_vfp4:
+  .long  0xe92d4800                          // push          {fp, lr}
   .long  0xed2d8b04                          // vpush         {d8-d9}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xf2c03010                          // vmov.i32      d19, #0
+  .long  0xeddf4b14                          // vldr          d20, [pc, #80]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xeddf4b10                          // vldr          d20, [pc, #64]
-  .long  0xed938a00                          // vldr          s16, [r3]
+  .long  0xed9e8a00                          // vldr          s16, [lr]
   .long  0xee389a08                          // vadd.f32      s18, s16, s16
   .long  0xf3f40c08                          // vdup.32       d16, d8[0]
   .long  0xf2211d20                          // vsub.f32      d1, d1, d16
@@ -8022,7 +8250,9 @@
   .long  0xf2610da0                          // vsub.f32      d16, d17, d16
   .long  0xf3b91720                          // vabs.f32      d1, d16
   .long  0xecbd8b04                          // vpop          {d8-d9}
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -8031,11 +8261,11 @@
 FUNCTION(_sk_clamp_x_1_vfp4)
 _sk_clamp_x_1_vfp4:
   .long  0xf2c00010                          // vmov.i32      d16, #0
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_repeat_x_1_vfp4
 .globl _sk_repeat_x_1_vfp4
@@ -8044,13 +8274,13 @@
   .long  0xf3fb0700                          // vcvt.s32.f32  d16, d0
   .long  0xeddf3b07                          // vldr          d19, [pc, #28]
   .long  0xf2c02010                          // vmov.i32      d18, #0
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -8061,7 +8291,7 @@
   .long  0xf3c70f10                          // vmov.f32      d16, #-1
   .long  0xeddf5b0f                          // vldr          d21, [pc, #60]
   .long  0xf2c3261f                          // vmov.i32      d18, #1056964608
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -8074,7 +8304,7 @@
   .long  0xf2611da2                          // vsub.f32      d17, d17, d18
   .long  0xf2410da0                          // vadd.f32      d16, d17, d16
   .long  0xf3b90720                          // vabs.f32      d0, d16
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
   .long  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
@@ -8086,7 +8316,7 @@
   .long  0xeddf0b0a                          // vldr          d16, [pc, #40]
   .long  0xeddf1b0b                          // vldr          d17, [pc, #44]
   .long  0xf3410d30                          // vmul.f32      d16, d1, d16
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -8094,7 +8324,7 @@
   .long  0xeddf0b06                          // vldr          d16, [pc, #24]
   .long  0xf2023c30                          // vfma.f32      d3, d2, d16
   .long  0xf2802010                          // vmov.i32      d2, #0
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0x3f371759                          // .word         0x3f371759
   .long  0x3f371759                          // .word         0x3f371759
   .long  0x3e59b3d0                          // .word         0x3e59b3d0
@@ -8106,19 +8336,19 @@
 .globl _sk_matrix_2x3_vfp4
 FUNCTION(_sk_matrix_2x3_vfp4)
 _sk_matrix_2x3_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe92d4010                          // push          {r4, lr}
   .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe28e300c                          // add           r3, lr, #12
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e3008                          // add           r3, lr, #8
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .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  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
+  .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]
@@ -8126,195 +8356,197 @@
   .long  0xf2401c33                          // vfma.f32      d17, d0, d19
   .long  0xf22001b0                          // vorr          d0, d16, d16
   .long  0xf22111b1                          // vorr          d1, d17, d17
-  .long  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_matrix_3x4_vfp4
 .globl _sk_matrix_3x4_vfp4
 FUNCTION(_sk_matrix_3x4_vfp4)
 _sk_matrix_3x4_vfp4:
-  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe92d4010                          // push          {r4, lr}
   .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe28e3020                          // add           r3, lr, #32
-  .long  0xf4e33c9f                          // vld1.32       {d19[]}, [r3 :32]
-  .long  0xe28e302c                          // add           r3, lr, #44
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e301c                          // add           r3, lr, #28
+  .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  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e3024                          // add           r3, lr, #36
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3028                          // add           r3, lr, #40
+  .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  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
-  .long  0xe28e3010                          // add           r3, lr, #16
+  .long  0xf4e42c9f                          // vld1.32       {d18[]}, [r4 :32]
+  .long  0xe28e4010                          // add           r4, lr, #16
   .long  0xf2422c34                          // vfma.f32      d18, d2, d20
-  .long  0xf4e33c9f                          // vld1.32       {d19[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
-  .long  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .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  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .long  0xf4e44c9f                          // vld1.32       {d20[]}, [r4 :32]
   .long  0xf2410c34                          // vfma.f32      d16, d1, d20
-  .long  0xe28e3008                          // add           r3, lr, #8
+  .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  0xf4e33c9f                          // vld1.32       {d19[]}, [r3 :32]
+  .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  0xe8bd4800                          // pop           {fp, lr}
+  .long  0xe8bd4010                          // pop           {r4, lr}
   .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_matrix_4x5_vfp4
 .globl _sk_matrix_4x5_vfp4
 FUNCTION(_sk_matrix_4x5_vfp4)
 _sk_matrix_4x5_vfp4:
-  .long  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .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  0xe2811008                          // add           r1, r1, #8
-  .long  0xe2834014                          // add           r4, r3, #20
-  .long  0xe1a0e003                          // mov           lr, r3
-  .long  0xf4e45c9f                          // vld1.32       {d21[]}, [r4 :32]
-  .long  0xe2834028                          // add           r4, r3, #40
-  .long  0xf4e46c9f                          // vld1.32       {d22[]}, [r4 :32]
-  .long  0xe2834038                          // add           r4, r3, #56
-  .long  0xf4e47c9f                          // vld1.32       {d23[]}, [r4 :32]
-  .long  0xe2834048                          // add           r4, r3, #72
-  .long  0xf4a42c9f                          // vld1.32       {d2[]}, [r4 :32]
-  .long  0xe2834034                          // add           r4, r3, #52
+  .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  0xf4e48c9f                          // vld1.32       {d24[]}, [r4 :32]
-  .long  0xe2834044                          // add           r4, r3, #68
-  .long  0xf4e41c9f                          // vld1.32       {d17[]}, [r4 :32]
-  .long  0xe2834030                          // add           r4, r3, #48
+  .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  0xf4e49c9f                          // vld1.32       {d25[]}, [r4 :32]
-  .long  0xe283403c                          // add           r4, r3, #60
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
-  .long  0xe283404c                          // add           r4, r3, #76
+  .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  0xf4e42c9f                          // vld1.32       {d18[]}, [r4 :32]
-  .long  0xe2834040                          // add           r4, r3, #64
+  .long  0xf4e52c9f                          // vld1.32       {d18[]}, [r5 :32]
+  .long  0xe28e5040                          // add           r5, lr, #64
   .long  0xf2432c33                          // vfma.f32      d18, d3, d19
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
-  .long  0xe2834020                          // add           r4, r3, #32
+  .long  0xf4e53c9f                          // vld1.32       {d19[]}, [r5 :32]
+  .long  0xe28e5020                          // add           r5, lr, #32
   .long  0xf2433c39                          // vfma.f32      d19, d3, d25
-  .long  0xf4e47c9f                          // vld1.32       {d23[]}, [r4 :32]
-  .long  0xe283402c                          // add           r4, r3, #44
-  .long  0xf4e48c9f                          // vld1.32       {d24[]}, [r4 :32]
-  .long  0xe2834024                          // add           r4, r3, #36
+  .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  0xf4e48c9f                          // vld1.32       {d24[]}, [r4 :32]
+  .long  0xf4e58c9f                          // vld1.32       {d24[]}, [r5 :32]
   .long  0xf2401cb8                          // vfma.f32      d17, d16, d24
-  .long  0xe2834010                          // add           r4, r3, #16
+  .long  0xe28e5010                          // add           r5, lr, #16
   .long  0xf2403cb7                          // vfma.f32      d19, d16, d23
-  .long  0xf4ee4c9d                          // vld1.32       {d20[]}, [lr :32]!
-  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
-  .long  0xe283401c                          // add           r4, r3, #28
-  .long  0xf4e46c9f                          // vld1.32       {d22[]}, [r4 :32]
-  .long  0xe2834018                          // add           r4, r3, #24
+  .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  0xf4ee5c9f                          // vld1.32       {d21[]}, [lr :32]
+  .long  0xf4e45c9f                          // vld1.32       {d21[]}, [r4 :32]
   .long  0xf2413c30                          // vfma.f32      d19, d1, d16
-  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
-  .long  0xe2834008                          // add           r4, r3, #8
-  .long  0xe283300c                          // add           r3, r3, #12
+  .long  0xf4e50c9f                          // vld1.32       {d16[]}, [r5 :32]
+  .long  0xe28e5008                          // add           r5, lr, #8
   .long  0xf2012c30                          // vfma.f32      d2, d1, d16
-  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
+  .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  0xf4e34c9f                          // vld1.32       {d20[]}, [r3 :32]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, 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  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4830                          // push          {r4, r5, fp, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe2834018                          // add           r4, r3, #24
-  .long  0xe1a0e003                          // mov           lr, r3
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
-  .long  0xe2834028                          // add           r4, r3, #40
-  .long  0xf4a42c9f                          // vld1.32       {d2[]}, [r4 :32]
-  .long  0xe2834014                          // add           r4, r3, #20
+  .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  0xf4e44c9f                          // vld1.32       {d20[]}, [r4 :32]
-  .long  0xe2834010                          // add           r4, r3, #16
-  .long  0xf4e41c9f                          // vld1.32       {d17[]}, [r4 :32]
-  .long  0xe2834020                          // add           r4, r3, #32
-  .long  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
-  .long  0xe283401c                          // add           r4, r3, #28
+  .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  0xf4e45c9f                          // vld1.32       {d21[]}, [r4 :32]
-  .long  0xe283402c                          // add           r4, r3, #44
-  .long  0xf4a43c9f                          // vld1.32       {d3[]}, [r4 :32]
-  .long  0xe2834024                          // add           r4, r3, #36
+  .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  0xf4e41c9f                          // vld1.32       {d17[]}, [r4 :32]
-  .long  0xe2834008                          // add           r4, r3, #8
+  .long  0xf4e51c9f                          // vld1.32       {d17[]}, [r5 :32]
+  .long  0xe28e5008                          // add           r5, lr, #8
   .long  0xf2411c34                          // vfma.f32      d17, d1, d20
-  .long  0xe283300c                          // add           r3, r3, #12
-  .long  0xf4ee2c9d                          // vld1.32       {d18[]}, [lr :32]!
+  .long  0xf4e42c9d                          // vld1.32       {d18[]}, [r4 :32]!
   .long  0xf2400c32                          // vfma.f32      d16, d0, d18
-  .long  0xf4ee4c9f                          // vld1.32       {d20[]}, [lr :32]
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
+  .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  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, 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  0xe92d4010                          // push          {r4, lr}
+  .long  0xe92d4830                          // push          {r4, r5, fp, lr}
   .long  0xe591e000                          // ldr           lr, [r1]
   .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe28e301c                          // add           r3, lr, #28
-  .long  0xe28e4010                          // add           r4, lr, #16
-  .long  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe28e3020                          // add           r3, lr, #32
-  .long  0xf4e31c9f                          // vld1.32       {d17[]}, [r3 :32]
-  .long  0xe28e3018                          // add           r3, lr, #24
+  .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  0xf4e30c9f                          // vld1.32       {d16[]}, [r3 :32]
-  .long  0xe1a0300e                          // mov           r3, lr
-  .long  0xf4e42c9f                          // vld1.32       {d18[]}, [r4 :32]
-  .long  0xe28e4008                          // add           r4, lr, #8
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
+  .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  0xf4e30c9d                          // vld1.32       {d16[]}, [r3 :32]!
-  .long  0xf4e35c9f                          // vld1.32       {d21[]}, [r3 :32]
-  .long  0xe28e3014                          // add           r3, lr, #20
+  .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  0xf4e35c9f                          // vld1.32       {d21[]}, [r3 :32]
-  .long  0xe28e300c                          // add           r3, lr, #12
+  .long  0xf4e45c9f                          // vld1.32       {d21[]}, [r4 :32]
   .long  0xf2415c32                          // vfma.f32      d21, d1, d18
-  .long  0xf4e32c9f                          // vld1.32       {d18[]}, [r3 :32]
+  .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
@@ -8322,73 +8554,73 @@
   .long  0xf3440db1                          // vmul.f32      d16, d20, d17
   .long  0xf3030db0                          // vmul.f32      d0, d19, d16
   .long  0xf3051db0                          // vmul.f32      d1, d21, d16
-  .long  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, fp, lr}
   .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_evenly_spaced_gradient_vfp4
 .globl _sk_evenly_spaced_gradient_vfp4
 FUNCTION(_sk_evenly_spaced_gradient_vfp4)
 _sk_evenly_spaced_gradient_vfp4:
-  .long  0xe92d47f0                          // push          {r4, r5, r6, r7, r8, r9, sl, lr}
+  .long  0xe92d4ff0                          // push          {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+  .long  0xe24dd004                          // sub           sp, sp, #4
   .long  0xed2d8b0a                          // vpush         {d8-d12}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe8934010                          // ldm           r3, {r4, lr}
-  .long  0xe2444001                          // sub           r4, r4, #1
-  .long  0xe5937010                          // ldr           r7, [r3, #16]
-  .long  0xe593a020                          // ldr           sl, [r3, #32]
-  .long  0xee804b90                          // vdup.32       d16, r4
-  .long  0xe593900c                          // ldr           r9, [r3, #12]
+  .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  0xe5938008                          // ldr           r8, [r3, #8]
   .long  0xf3400d90                          // vmul.f32      d16, d16, d0
   .long  0xf3fb0720                          // vcvt.s32.f32  d16, d16
-  .long  0xee304b90                          // vmov.32       r4, d16[1]
-  .long  0xe0875104                          // add           r5, r7, r4, lsl #2
-  .long  0xe08a6104                          // add           r6, sl, r4, lsl #2
-  .long  0xedd59a00                          // vldr          s19, [r5]
-  .long  0xee105b90                          // vmov.32       r5, d16[0]
-  .long  0xedd63a00                          // vldr          s7, [r6]
-  .long  0xe0896104                          // add           r6, r9, r4, lsl #2
-  .long  0xedd6aa00                          // vldr          s21, [r6]
-  .long  0xe0896105                          // add           r6, r9, r5, lsl #2
-  .long  0xe0877105                          // add           r7, r7, r5, lsl #2
-  .long  0xe5939018                          // ldr           r9, [r3, #24]
-  .long  0xed96aa00                          // vldr          s20, [r6]
-  .long  0xe593601c                          // ldr           r6, [r3, #28]
-  .long  0xed979a00                          // vldr          s18, [r7]
-  .long  0xe0867104                          // add           r7, r6, r4, lsl #2
-  .long  0xe5933014                          // ldr           r3, [r3, #20]
-  .long  0xe0866105                          // add           r6, r6, r5, lsl #2
-  .long  0xedd72a00                          // vldr          s5, [r7]
-  .long  0xe0887104                          // add           r7, r8, r4, lsl #2
-  .long  0xedd7ba00                          // vldr          s23, [r7]
+  .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  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  0xe08a8105                          // add           r8, sl, r5, lsl #2
-  .long  0xed962a00                          // vldr          s4, [r6]
-  .long  0xed97ba00                          // vldr          s22, [r7]
-  .long  0xe0897104                          // add           r7, r9, r4, lsl #2
-  .long  0xed983a00                          // vldr          s6, [r8]
+  .long  0xed9b2a00                          // vldr          s4, [fp]
+  .long  0xedd41a00                          // vldr          s3, [r4]
+  .long  0xe59e4014                          // ldr           r4, [lr, #20]
   .long  0xf2002c1a                          // vfma.f32      d2, d0, d10
-  .long  0xedd71a00                          // vldr          s3, [r7]
-  .long  0xe08e7104                          // add           r7, lr, r4, lsl #2
-  .long  0xf2003c19                          // vfma.f32      d3, d0, d9
   .long  0xedd7ca00                          // vldr          s25, [r7]
-  .long  0xe08e7105                          // add           r7, lr, r5, lsl #2
+  .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  0xe0837105                          // add           r7, r3, r5, lsl #2
-  .long  0xe0833104                          // add           r3, r3, r4, lsl #2
-  .long  0xedd38a00                          // vldr          s17, [r3]
-  .long  0xe0893105                          // add           r3, r9, r5, lsl #2
+  .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  0xed931a00                          // vldr          s2, [r3]
+  .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  0xe8bd47f0                          // pop           {r4, r5, r6, r7, r8, r9, sl, lr}
+  .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}
 
 HIDDEN _sk_gauss_a_to_rgba_vfp4
 .globl _sk_gauss_a_to_rgba_vfp4
@@ -8399,7 +8631,7 @@
   .long  0xf2431c30                          // vfma.f32      d17, d3, d16
   .long  0xeddf0b0d                          // vldr          d16, [pc, #52]
   .long  0xed9f0b10                          // vldr          d0, [pc, #64]
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -8407,7 +8639,7 @@
   .long  0xf2201110                          // vorr          d1, d0, d0
   .long  0xf2202110                          // vorr          d2, d0, d0
   .long  0xf2203110                          // vorr          d3, d0, d0
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xc011102d                          // .word         0xc011102d
   .long  0xc011102d                          // .word         0xc011102d
   .long  0x40397812                          // .word         0x40397812
@@ -8426,106 +8658,112 @@
   .long  0xe92d4ff0                          // push          {r4, r5, r6, r7, r8, r9, sl, fp, lr}
   .long  0xe24dd004                          // sub           sp, sp, #4
   .long  0xed2d8b0a                          // vpush         {d8-d12}
-  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe24dd008                          // sub           sp, sp, #8
+  .long  0xe58d3004                          // str           r3, [sp, #4]
   .long  0xf2c00010                          // vmov.i32      d16, #0
-  .long  0xe59c3000                          // ldr           r3, [ip]
-  .long  0xe3530002                          // cmp           r3, #2
-  .long  0x3a00000b                          // bcc           3880 <sk_gradient_vfp4+0x50>
-  .long  0xe59c4024                          // ldr           r4, [ip, #36]
+  .long  0xe591c000                          // ldr           ip, [r1]
+  .long  0xe59c4000                          // ldr           r4, [ip]
+  .long  0xe3540002                          // cmp           r4, #2
+  .long  0x3a00000b                          // bcc           3c28 <sk_gradient_vfp4+0x58>
+  .long  0xe59c5024                          // ldr           r5, [ip, #36]
   .long  0xf2c01010                          // vmov.i32      d17, #0
   .long  0xf2c02011                          // vmov.i32      d18, #1
-  .long  0xe243e001                          // sub           lr, r3, #1
+  .long  0xe244e001                          // sub           lr, r4, #1
   .long  0xf2c00010                          // vmov.i32      d16, #0
-  .long  0xe2843004                          // add           r3, r4, #4
-  .long  0xf4e33c9d                          // vld1.32       {d19[]}, [r3 :32]!
+  .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           3868 <sk_gradient_vfp4+0x38>
-  .long  0xee303b90                          // vmov.32       r3, d16[1]
-  .long  0xe59c7010                          // ldr           r7, [ip, #16]
+  .long  0x1afffff9                          // bne           3c10 <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  0xe59c600c                          // ldr           r6, [ip, #12]
-  .long  0xe59c5020                          // ldr           r5, [ip, #32]
-  .long  0xe59c8008                          // ldr           r8, [ip, #8]
+  .long  0xe59c700c                          // ldr           r7, [ip, #12]
+  .long  0xe59ca020                          // ldr           sl, [ip, #32]
   .long  0xe59c9004                          // ldr           r9, [ip, #4]
-  .long  0xe0874103                          // add           r4, r7, r3, lsl #2
-  .long  0xe085a10e                          // add           sl, r5, lr, lsl #2
-  .long  0xedd49a00                          // vldr          s19, [r4]
-  .long  0xe087410e                          // add           r4, r7, lr, lsl #2
-  .long  0xe59c7018                          // ldr           r7, [ip, #24]
-  .long  0xed949a00                          // vldr          s18, [r4]
-  .long  0xe0864103                          // add           r4, r6, r3, lsl #2
-  .long  0xedd4aa00                          // vldr          s21, [r4]
-  .long  0xe086410e                          // add           r4, r6, lr, lsl #2
-  .long  0xed94aa00                          // vldr          s20, [r4]
-  .long  0xe0854103                          // add           r4, r5, r3, lsl #2
-  .long  0xe0885103                          // add           r5, r8, r3, lsl #2
-  .long  0xedd43a00                          // vldr          s7, [r4]
-  .long  0xe59c401c                          // ldr           r4, [ip, #28]
-  .long  0xedd5ba00                          // vldr          s23, [r5]
-  .long  0xe088510e                          // add           r5, r8, lr, lsl #2
-  .long  0xe0846103                          // add           r6, r4, r3, lsl #2
-  .long  0xe084b10e                          // add           fp, r4, lr, lsl #2
-  .long  0xe59c4014                          // ldr           r4, [ip, #20]
-  .long  0xedd62a00                          // vldr          s5, [r6]
-  .long  0xe089610e                          // add           r6, r9, lr, lsl #2
-  .long  0xe0899103                          // add           r9, r9, r3, lsl #2
-  .long  0xed95ba00                          // vldr          s22, [r5]
-  .long  0xe0875103                          // add           r5, r7, r3, lsl #2
-  .long  0xe0843103                          // add           r3, r4, r3, lsl #2
+  .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  0xedd51a00                          // vldr          s3, [r5]
-  .long  0xe084510e                          // add           r5, r4, lr, lsl #2
+  .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  0xe087310e                          // add           r3, r7, lr, lsl #2
-  .long  0xed96ca00                          // vldr          s24, [r6]
-  .long  0xed958a00                          // vldr          s16, [r5]
+  .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  0xed978a00                          // vldr          s16, [r7]
+  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xed931a00                          // vldr          s2, [r3]
   .long  0xf2008c1c                          // vfma.f32      d8, d0, d12
-  .long  0xed9b2a00                          // vldr          s4, [fp]
-  .long  0xed9a3a00                          // vldr          s6, [sl]
+  .long  0xe59d3004                          // ldr           r3, [sp, #4]
   .long  0xf2001c1b                          // vfma.f32      d1, d0, d11
-  .long  0xe5913004                          // ldr           r3, [r1, #4]
-  .long  0xf2002c1a                          // vfma.f32      d2, d0, d10
-  .long  0xf2003c19                          // vfma.f32      d3, d0, d9
-  .long  0xe2811008                          // add           r1, r1, #8
   .long  0xf2280118                          // vorr          d0, d8, d8
+  .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  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
 
 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  0xe92d4010                          // push          {r4, lr}
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4830                          // push          {r4, r5, fp, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xe283400c                          // add           r4, r3, #12
-  .long  0xe1a0e003                          // mov           lr, r3
-  .long  0xf4e42c9f                          // vld1.32       {d18[]}, [r4 :32]
-  .long  0xe2834008                          // add           r4, r3, #8
-  .long  0xf4e43c9f                          // vld1.32       {d19[]}, [r4 :32]
-  .long  0xe2834018                          // add           r4, r3, #24
-  .long  0xf4a42c9f                          // vld1.32       {d2[]}, [r4 :32]
-  .long  0xe2834010                          // add           r4, r3, #16
+  .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  0xf4e40c9f                          // vld1.32       {d16[]}, [r4 :32]
-  .long  0xe283401c                          // add           r4, r3, #28
-  .long  0xe2833014                          // add           r3, r3, #20
-  .long  0xf4ee1c9d                          // vld1.32       {d17[]}, [lr :32]!
+  .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  0xf4a43c9f                          // vld1.32       {d3[]}, [r4 :32]
+  .long  0xf4a53c9f                          // vld1.32       {d3[]}, [r5 :32]
+  .long  0xe28e5014                          // add           r5, lr, #20
   .long  0xf2003c32                          // vfma.f32      d3, d0, d18
-  .long  0xf4ee1c9f                          // vld1.32       {d17[]}, [lr :32]
-  .long  0xf4a31c9f                          // vld1.32       {d1[]}, [r3 :32]
+  .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  0xe8bd4010                          // pop           {r4, lr}
+  .long  0xe8bd4830                          // pop           {r4, r5, fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_xy_to_unit_angle_vfp4
 .globl _sk_xy_to_unit_angle_vfp4
@@ -8536,7 +8774,7 @@
   .long  0xeddf3b24                          // vldr          d19, [pc, #144]
   .long  0xf3f91700                          // vabs.f32      d17, d0
   .long  0xeddf4b24                          // vldr          d20, [pc, #144]
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -8570,7 +8808,7 @@
   .long  0xf3b005a0                          // vmvn          d0, d16
   .long  0xf31101b2                          // vbsl          d0, d17, d18
   .long  0xecbd8b06                          // vpop          {d8-d10}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xbbe72b6f                          // .word         0xbbe72b6f
   .long  0xbbe72b6f                          // .word         0xbbe72b6f
   .long  0x3ccad79f                          // .word         0x3ccad79f
@@ -8585,7 +8823,7 @@
 FUNCTION(_sk_xy_to_radius_vfp4)
 _sk_xy_to_radius_vfp4:
   .long  0xf3410d11                          // vmul.f32      d16, d1, d1
-  .long  0xe4913004                          // ldr           r3, [r1], #4
+  .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
@@ -8596,21 +8834,22 @@
   .long  0xf2602fb2                          // vrsqrts.f32   d18, d16, d18
   .long  0xf3411db2                          // vmul.f32      d17, d17, d18
   .long  0xf3000db1                          // vmul.f32      d0, d16, d17
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe12fff1c                          // bx            ip
   .long  0xe320f000                          // nop           {0}
 
 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  0xeddf7b17                          // vldr          d23, [pc, #92]
+  .long  0xeddf7b1a                          // vldr          d23, [pc, #104]
   .long  0xf2c06010                          // vmov.i32      d22, #0
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2401d20                          // vadd.f32      d17, d0, d16
   .long  0xf2410d20                          // vadd.f32      d16, d1, d16
-  .long  0xed830b00                          // vstr          d0, [r3]
-  .long  0xed831b08                          // vstr          d1, [r3, #32]
+  .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
@@ -8623,12 +8862,15 @@
   .long  0xf2633da5                          // vsub.f32      d19, d19, d21
   .long  0xf2611da2                          // vsub.f32      d17, d17, d18
   .long  0xf2600da3                          // vsub.f32      d16, d16, d19
-  .long  0xedc31b10                          // vstr          d17, [r3, #64]
-  .long  0xedc30b18                          // vstr          d16, [r3, #96]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0x3f800000                          // .word         0x3f800000
   .long  0x3f800000                          // .word         0x3f800000
 
@@ -8636,103 +8878,121 @@
 .globl _sk_accumulate_vfp4
 FUNCTION(_sk_accumulate_vfp4)
 _sk_accumulate_vfp4:
-  .long  0xe8911008                          // ldm           r1, {r3, ip}
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591e000                          // ldr           lr, [r1]
+  .long  0xe591c004                          // ldr           ip, [r1, #4]
   .long  0xe2811008                          // add           r1, r1, #8
-  .long  0xedd31b28                          // vldr          d17, [r3, #160]
-  .long  0xedd30b20                          // vldr          d16, [r3, #128]
+  .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
 
 HIDDEN _sk_bilinear_nx_vfp4
 .globl _sk_bilinear_nx_vfp4
 FUNCTION(_sk_bilinear_nx_vfp4)
 _sk_bilinear_nx_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xedd32b10                          // vldr          d18, [r3, #64]
+  .long  0xeddc2b10                          // vldr          d18, [ip, #64]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xedd31b00                          // vldr          d17, [r3]
+  .long  0xeddc1b00                          // vldr          d17, [ip]
   .long  0xf3c3261f                          // vmov.i32      d18, #-1090519040
   .long  0xf2010da2                          // vadd.f32      d0, d17, d18
-  .long  0xedc30b20                          // vstr          d16, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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
 
 HIDDEN _sk_bilinear_px_vfp4
 .globl _sk_bilinear_px_vfp4
 FUNCTION(_sk_bilinear_px_vfp4)
 _sk_bilinear_px_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c3061f                          // vmov.i32      d16, #1056964608
-  .long  0xedd31b00                          // vldr          d17, [r3]
-  .long  0xedd32b10                          // vldr          d18, [r3, #64]
+  .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  0xedc32b20                          // vstr          d18, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe1a0100c                          // mov           r1, ip
+  .long  0xe1a0c00e                          // mov           ip, lr
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
 
 HIDDEN _sk_bilinear_ny_vfp4
 .globl _sk_bilinear_ny_vfp4
 FUNCTION(_sk_bilinear_ny_vfp4)
 _sk_bilinear_ny_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xedd32b18                          // vldr          d18, [r3, #96]
+  .long  0xeddc2b18                          // vldr          d18, [ip, #96]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xedd31b08                          // vldr          d17, [r3, #32]
+  .long  0xeddc1b08                          // vldr          d17, [ip, #32]
   .long  0xf3c3261f                          // vmov.i32      d18, #-1090519040
   .long  0xf2011da2                          // vadd.f32      d1, d17, d18
-  .long  0xedc30b28                          // vstr          d16, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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
 
 HIDDEN _sk_bilinear_py_vfp4
 .globl _sk_bilinear_py_vfp4
 FUNCTION(_sk_bilinear_py_vfp4)
 _sk_bilinear_py_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c3061f                          // vmov.i32      d16, #1056964608
-  .long  0xedd31b08                          // vldr          d17, [r3, #32]
-  .long  0xedd32b18                          // vldr          d18, [r3, #96]
+  .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  0xedc32b28                          // vstr          d18, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .long  0xe1a0100c                          // mov           r1, ip
+  .long  0xe1a0c00e                          // mov           ip, lr
+  .long  0xe8bd4800                          // pop           {fp, lr}
   .long  0xe12fff1c                          // bx            ip
+  .long  0xe320f000                          // nop           {0}
 
 HIDDEN _sk_bicubic_n3x_vfp4
 .globl _sk_bicubic_n3x_vfp4
 FUNCTION(_sk_bicubic_n3x_vfp4)
 _sk_bicubic_n3x_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xeddf3b10                          // vldr          d19, [pc, #64]
-  .long  0xedd32b10                          // vldr          d18, [r3, #64]
+  .long  0xeddf3b11                          // vldr          d19, [pc, #68]
+  .long  0xeddc2b10                          // vldr          d18, [ip, #64]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xeddf2b0b                          // vldr          d18, [pc, #44]
-  .long  0xedd31b00                          // vldr          d17, [r3]
+  .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  0xedc30b20                          // vstr          d16, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
@@ -8742,26 +9002,28 @@
 .globl _sk_bicubic_n1x_vfp4
 FUNCTION(_sk_bicubic_n1x_vfp4)
 _sk_bicubic_n1x_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
   .long  0xf2c73f18                          // vmov.f32      d19, #1.5
-  .long  0xedd32b10                          // vldr          d18, [r3, #64]
+  .long  0xeddc2b10                          // vldr          d18, [ip, #64]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xeddf2b0d                          // vldr          d18, [pc, #52]
-  .long  0xedd31b00                          // vldr          d17, [r3]
+  .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  0xeddf3b0a                          // vldr          d19, [pc, #40]
+  .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  0xedc33b20                          // vstr          d19, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0xbf955555                          // .word         0xbf955555
   .long  0xbf955555                          // .word         0xbf955555
   .long  0x3d638e39                          // .word         0x3d638e39
@@ -8771,22 +9033,26 @@
 .globl _sk_bicubic_p1x_vfp4
 FUNCTION(_sk_bicubic_p1x_vfp4)
 _sk_bicubic_p1x_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c71f18                          // vmov.f32      d17, #1.5
-  .long  0xeddf0b0c                          // vldr          d16, [pc, #48]
-  .long  0xedd33b10                          // vldr          d19, [r3, #64]
+  .long  0xeddf0b0f                          // vldr          d16, [pc, #60]
+  .long  0xeddc3b10                          // vldr          d19, [ip, #64]
   .long  0xf2431cb0                          // vfma.f32      d17, d19, d16
-  .long  0xedd32b00                          // vldr          d18, [r3]
+  .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  0xeddf1b07                          // vldr          d17, [pc, #28]
+  .long  0xeddf1b0a                          // vldr          d17, [pc, #40]
   .long  0xf2431cb0                          // vfma.f32      d17, d19, d16
-  .long  0xedc31b20                          // vstr          d17, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0xbf955555                          // .word         0xbf955555
   .long  0xbf955555                          // .word         0xbf955555
   .long  0x3d638e39                          // .word         0x3d638e39
@@ -8796,22 +9062,24 @@
 .globl _sk_bicubic_p3x_vfp4
 FUNCTION(_sk_bicubic_p3x_vfp4)
 _sk_bicubic_p3x_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
-  .long  0xeddf0b0d                          // vldr          d16, [pc, #52]
-  .long  0xeddf3b0e                          // vldr          d19, [pc, #56]
-  .long  0xedd32b10                          // vldr          d18, [r3, #64]
+  .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  0xedd31b00                          // vldr          d17, [r3]
+  .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  0xedc30b20                          // vstr          d16, [r3, #128]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
@@ -8821,24 +9089,26 @@
 .globl _sk_bicubic_n3y_vfp4
 FUNCTION(_sk_bicubic_n3y_vfp4)
 _sk_bicubic_n3y_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
-  .long  0xeddf3b10                          // vldr          d19, [pc, #64]
-  .long  0xedd32b18                          // vldr          d18, [r3, #96]
+  .long  0xeddf3b11                          // vldr          d19, [pc, #68]
+  .long  0xeddc2b18                          // vldr          d18, [ip, #96]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xeddf2b0b                          // vldr          d18, [pc, #44]
-  .long  0xedd31b08                          // vldr          d17, [r3, #32]
+  .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  0xedc30b28                          // vstr          d16, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
@@ -8848,26 +9118,28 @@
 .globl _sk_bicubic_n1y_vfp4
 FUNCTION(_sk_bicubic_n1y_vfp4)
 _sk_bicubic_n1y_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c70f10                          // vmov.f32      d16, #1
   .long  0xf2c73f18                          // vmov.f32      d19, #1.5
-  .long  0xedd32b18                          // vldr          d18, [r3, #96]
+  .long  0xeddc2b18                          // vldr          d18, [ip, #96]
   .long  0xf2600da2                          // vsub.f32      d16, d16, d18
-  .long  0xeddf2b0d                          // vldr          d18, [pc, #52]
-  .long  0xedd31b08                          // vldr          d17, [r3, #32]
+  .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  0xeddf3b0a                          // vldr          d19, [pc, #40]
+  .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  0xedc33b28                          // vstr          d19, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0xbf955555                          // .word         0xbf955555
   .long  0xbf955555                          // .word         0xbf955555
   .long  0x3d638e39                          // .word         0x3d638e39
@@ -8877,22 +9149,26 @@
 .globl _sk_bicubic_p1y_vfp4
 FUNCTION(_sk_bicubic_p1y_vfp4)
 _sk_bicubic_p1y_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
+  .long  0xe92d4800                          // push          {fp, lr}
+  .long  0xe591c000                          // ldr           ip, [r1]
   .long  0xf2c71f18                          // vmov.f32      d17, #1.5
-  .long  0xeddf0b0c                          // vldr          d16, [pc, #48]
-  .long  0xedd33b18                          // vldr          d19, [r3, #96]
+  .long  0xeddf0b0f                          // vldr          d16, [pc, #60]
+  .long  0xeddc3b18                          // vldr          d19, [ip, #96]
   .long  0xf2431cb0                          // vfma.f32      d17, d19, d16
-  .long  0xedd32b08                          // vldr          d18, [r3, #32]
+  .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  0xeddf1b07                          // vldr          d17, [pc, #28]
+  .long  0xeddf1b0a                          // vldr          d17, [pc, #40]
   .long  0xf2431cb0                          // vfma.f32      d17, d19, d16
-  .long  0xedc31b28                          // vstr          d17, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xbf955555                          // .word         0xbf955555
   .long  0xbf955555                          // .word         0xbf955555
   .long  0x3d638e39                          // .word         0x3d638e39
@@ -8902,22 +9178,24 @@
 .globl _sk_bicubic_p3y_vfp4
 FUNCTION(_sk_bicubic_p3y_vfp4)
 _sk_bicubic_p3y_vfp4:
-  .long  0xe5913000                          // ldr           r3, [r1]
-  .long  0xeddf0b0d                          // vldr          d16, [pc, #52]
-  .long  0xeddf3b0e                          // vldr          d19, [pc, #56]
-  .long  0xedd32b18                          // vldr          d18, [r3, #96]
+  .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  0xedd31b08                          // vldr          d17, [r3, #32]
+  .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  0xedc30b28                          // vstr          d16, [r3, #160]
-  .long  0xe2813008                          // add           r3, r1, #8
-  .long  0xe591c004                          // ldr           ip, [r1, #4]
-  .long  0xe1a01003                          // mov           r1, r3
+  .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  0xe320f000                          // nop           {0}
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0x3ec71c72                          // .word         0x3ec71c72
   .long  0xbeaaaaab                          // .word         0xbeaaaaab
@@ -8927,35 +9205,39 @@
 .globl _sk_callback_vfp4
 FUNCTION(_sk_callback_vfp4)
 _sk_callback_vfp4:
-  .long  0xe92d48f0                          // push          {r4, r5, r6, r7, fp, lr}
+  .long  0xe92d41f0                          // push          {r4, r5, r6, r7, r8, lr}
   .long  0xed2d8b08                          // vpush         {d8-d11}
-  .long  0xe1a05001                          // mov           r5, r1
-  .long  0xe1a06000                          // mov           r6, r0
-  .long  0xe5957000                          // ldr           r7, [r5]
-  .long  0xe1a04002                          // mov           r4, r2
-  .long  0xe3a01002                          // mov           r1, #2
+  .long  0xe1a06001                          // mov           r6, r1
+  .long  0xe1a07000                          // mov           r7, r0
+  .long  0xe5965000                          // ldr           r5, [r6]
+  .long  0xe1a04003                          // mov           r4, r3
+  .long  0xe1a08002                          // mov           r8, r2
+  .long  0xe3540000                          // cmp           r4, #0
+  .long  0xe2850004                          // add           r0, r5, #4
+  .long  0xe1a01004                          // mov           r1, r4
+  .long  0x03a01002                          // moveq         r1, #2
   .long  0xeeb08b47                          // vmov.f64      d8, d7
-  .long  0xe2870004                          // add           r0, r7, #4
   .long  0xf400008f                          // vst4.32       {d0-d3}, [r0]
-  .long  0xe1a00007                          // mov           r0, r7
-  .long  0xe5972000                          // ldr           r2, [r7]
+  .long  0xe1a00005                          // mov           r0, r5
+  .long  0xe5952000                          // ldr           r2, [r5]
   .long  0xeeb09b46                          // vmov.f64      d9, d6
   .long  0xeeb0ab45                          // vmov.f64      d10, d5
   .long  0xeeb0bb44                          // vmov.f64      d11, d4
   .long  0xe12fff32                          // blx           r2
-  .long  0xe5970084                          // ldr           r0, [r7, #132]
-  .long  0xe2851008                          // add           r1, r5, #8
-  .long  0xe5953004                          // ldr           r3, [r5, #4]
-  .long  0xe1a02004                          // mov           r2, r4
+  .long  0xe5950084                          // ldr           r0, [r5, #132]
+  .long  0xe2861008                          // add           r1, r6, #8
+  .long  0xe596c004                          // ldr           ip, [r6, #4]
+  .long  0xe1a02008                          // mov           r2, r8
+  .long  0xe1a03004                          // mov           r3, r4
   .long  0xeeb04b4b                          // vmov.f64      d4, d11
   .long  0xf420008f                          // vld4.32       {d0-d3}, [r0]
-  .long  0xe1a00006                          // mov           r0, r6
+  .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  0xe8bd48f0                          // pop           {r4, r5, r6, r7, fp, lr}
-  .long  0xe12fff13                          // bx            r3
+  .long  0xe8bd41f0                          // pop           {r4, r5, r6, r7, r8, lr}
+  .long  0xe12fff1c                          // bx            ip
 #elif defined(__x86_64__)
 BALIGN32
 
diff --git a/src/jumper/SkJumper_stages.cpp b/src/jumper/SkJumper_stages.cpp
index 3dfca1f..7cf537d 100644
--- a/src/jumper/SkJumper_stages.cpp
+++ b/src/jumper/SkJumper_stages.cpp
@@ -76,7 +76,7 @@
 // We're finally going to get to what a Stage function looks like!
 // It's best to jump down to the #else case first, then to come back up here for AVX.
 
-#if defined(JUMPER) && defined(__SSE2__)
+#if defined(JUMPER) && (defined(__SSE2__) || defined(__arm__))
     // Process the tail on all x86 processors with SSE2 or better instructions.
     //    tail == 0 ~~> work on a full kStride pixels
     //    tail != 0 ~~> work on only the first tail pixels
diff --git a/src/jumper/SkJumper_vectors.h b/src/jumper/SkJumper_vectors.h
index acd3c93..4deec83 100644
--- a/src/jumper/SkJumper_vectors.h
+++ b/src/jumper/SkJumper_vectors.h
@@ -182,7 +182,13 @@
     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);
-        rgb = vld3_lane_u16(ptr + 3, rgb, 1);
+        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);
@@ -190,7 +196,14 @@
     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);
-        rgba = vld4_lane_u16(ptr + 4, rgba, 1);
+        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);
@@ -204,18 +217,29 @@
             widen_cast<uint16x4_t>(a),
         }};
         vst4_lane_u16(ptr + 0, rgba, 0);
-        vst4_lane_u16(ptr + 4, rgba, 1);
+        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 = vld4_f32(ptr);
+        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) {
-        vst4_f32(ptr, (float32x2x4_t{{r,g,b,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}}));
+        }
     }
 
 
diff --git a/tests/SkRasterPipelineTest.cpp b/tests/SkRasterPipelineTest.cpp
index 63c5c89..5f6a0b3 100644
--- a/tests/SkRasterPipelineTest.cpp
+++ b/tests/SkRasterPipelineTest.cpp
@@ -120,7 +120,7 @@
             SkRasterPipeline_<256> p;
             p.append(SkRasterPipeline::load_f32, &src);
             p.append(SkRasterPipeline::store_f32, &dst);
-            p.run(0, i % 4);
+            p.run(0, i);
             for (unsigned j = 0; j < i; j++) {
                 REPORTER_ASSERT(r,
                                 !memcmp(&data[j][0], &buffer[j][0], sizeof(buffer[j])));
@@ -149,7 +149,7 @@
             SkRasterPipeline_<256> p;
             p.append(SkRasterPipeline::load_f16, &src);
             p.append(SkRasterPipeline::store_f16, &dst);
-            p.run(0, i % 4);
+            p.run(0, i);
             for (unsigned j = 0; j < i; j++) {
                 REPORTER_ASSERT(r,
                                 !memcmp(&data[j][0], &buffer[j][0], sizeof(buffer[j])));
@@ -186,7 +186,7 @@
             SkRasterPipeline_<256> p;
             p.append(SkRasterPipeline::load_rgb_u16_be, &src);
             p.append(SkRasterPipeline::store_f32, &dst);
-            p.run(0, i % 4);
+            p.run(0, i);
             for (unsigned j = 0; j < i; j++) {
                 for (unsigned k = 0; k < 4; k++) {
                     if (buffer[j][k] != answer[j][k]) {