aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/jumper/SkJumper.cpp1
-rw-r--r--src/jumper/SkJumper_generated.S631
-rw-r--r--src/jumper/SkJumper_generated_win.S527
-rw-r--r--src/jumper/SkJumper_stages.cpp19
-rw-r--r--src/jumper/SkJumper_vectors.h80
5 files changed, 1005 insertions, 253 deletions
diff --git a/src/jumper/SkJumper.cpp b/src/jumper/SkJumper.cpp
index 0d4446ce47..cefef3110c 100644
--- a/src/jumper/SkJumper.cpp
+++ b/src/jumper/SkJumper.cpp
@@ -109,6 +109,7 @@ static K kConstants = {
M(gather_f16) \
M(store_f16) \
M(load_u16_be) \
+ M(load_rgb_u16_be) \
M(store_u16_be) \
M(load_f32) \
M(store_f32) \
diff --git a/src/jumper/SkJumper_generated.S b/src/jumper/SkJumper_generated.S
index 0de21d61e7..e6ed382d95 100644
--- a/src/jumper/SkJumper_generated.S
+++ b/src/jumper/SkJumper_generated.S
@@ -2323,6 +2323,39 @@ _sk_load_u16_be_aarch64:
.long 0x6e23de23 // fmul v3.4s, v17.4s, v3.4s
.long 0xd61f0060 // br x3
+HIDDEN _sk_load_rgb_u16_be_aarch64
+.globl _sk_load_rgb_u16_be_aarch64
+FUNCTION(_sk_load_rgb_u16_be_aarch64)
+_sk_load_rgb_u16_be_aarch64:
+ .long 0xa8c10c28 // ldp x8, x3, [x1], #16
+ .long 0x321f07e9 // orr w9, wzr, #0x6
+ .long 0xf9400108 // ldr x8, [x8]
+ .long 0x9b092008 // madd x8, x0, x9, x8
+ .long 0x0c404500 // ld3 {v0.4h-v2.4h}, [x8]
+ .long 0x52a6f008 // mov w8, #0x37800000
+ .long 0x72801008 // movk w8, #0x80
+ .long 0x0f185403 // shl v3.4h, v0.4h, #8
+ .long 0x2f180410 // ushr v16.4h, v0.4h, #8
+ .long 0x0f185431 // shl v17.4h, v1.4h, #8
+ .long 0x2f180432 // ushr v18.4h, v1.4h, #8
+ .long 0x0f185453 // shl v19.4h, v2.4h, #8
+ .long 0x2f180440 // ushr v0.4h, v2.4h, #8
+ .long 0x0eb01c61 // orr v1.8b, v3.8b, v16.8b
+ .long 0x0eb21e23 // orr v3.8b, v17.8b, v18.8b
+ .long 0x0ea01e60 // orr v0.8b, v19.8b, v0.8b
+ .long 0x2f10a421 // uxtl v1.4s, v1.4h
+ .long 0x2f10a463 // uxtl v3.4s, v3.4h
+ .long 0x2f10a400 // uxtl v0.4s, v0.4h
+ .long 0x4e040d02 // dup v2.4s, w8
+ .long 0x6e21d821 // ucvtf v1.4s, v1.4s
+ .long 0x6e21d863 // ucvtf v3.4s, v3.4s
+ .long 0x6e21d810 // ucvtf v16.4s, v0.4s
+ .long 0x6e22dc20 // fmul v0.4s, v1.4s, v2.4s
+ .long 0x6e22dc61 // fmul v1.4s, v3.4s, v2.4s
+ .long 0x6e22de02 // fmul v2.4s, v16.4s, v2.4s
+ .long 0x4f03f603 // fmov v3.4s, #1.000000000000000000e+00
+ .long 0xd61f0060 // br x3
+
HIDDEN _sk_store_u16_be_aarch64
.globl _sk_store_u16_be_aarch64
FUNCTION(_sk_store_u16_be_aarch64)
@@ -2646,7 +2679,7 @@ _sk_linear_gradient_aarch64:
.long 0x4d40c902 // ld1r {v2.4s}, [x8]
.long 0xf9400128 // ldr x8, [x9]
.long 0x4d40c943 // ld1r {v3.4s}, [x10]
- .long 0xb40006c8 // cbz x8, 2348 <sk_linear_gradient_aarch64+0x100>
+ .long 0xb40006c8 // cbz x8, 23b8 <sk_linear_gradient_aarch64+0x100>
.long 0x6dbf23e9 // stp d9, d8, [sp, #-16]!
.long 0xf9400529 // ldr x9, [x9, #8]
.long 0x6f00e413 // movi v19.2d, #0x0
@@ -2697,9 +2730,9 @@ _sk_linear_gradient_aarch64:
.long 0xd1000508 // sub x8, x8, #0x1
.long 0x6e771fd0 // bsl v16.16b, v30.16b, v23.16b
.long 0x91009129 // add x9, x9, #0x24
- .long 0xb5fffaa8 // cbnz x8, 2290 <sk_linear_gradient_aarch64+0x48>
+ .long 0xb5fffaa8 // cbnz x8, 2300 <sk_linear_gradient_aarch64+0x48>
.long 0x6cc123e9 // ldp d9, d8, [sp], #16
- .long 0x14000005 // b 2358 <sk_linear_gradient_aarch64+0x110>
+ .long 0x14000005 // b 23c8 <sk_linear_gradient_aarch64+0x110>
.long 0x6f00e414 // movi v20.2d, #0x0
.long 0x6f00e412 // movi v18.2d, #0x0
.long 0x6f00e411 // movi v17.2d, #0x0
@@ -5449,6 +5482,59 @@ _sk_load_u16_be_vfp4:
.long 0x37800080 // .word 0x37800080
.long 0x37800080 // .word 0x37800080
+HIDDEN _sk_load_rgb_u16_be_vfp4
+.globl _sk_load_rgb_u16_be_vfp4
+FUNCTION(_sk_load_rgb_u16_be_vfp4)
+_sk_load_rgb_u16_be_vfp4:
+ .long 0xe92d48f0 // push {r4, r5, r6, r7, fp, lr}
+ .long 0xe8911008 // ldm r1, {r3, ip}
+ .long 0xe2811008 // add r1, r1, #8
+ .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 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 0xee024b90 // vmov.32 d18[0], r4
+ .long 0xee205b90 // vmov.32 d16[1], r5
+ .long 0xee216b90 // vmov.32 d17[1], r6
+ .long 0xf24041b3 // vand d20, d16, d19
+ .long 0xf2e80530 // vshl.s32 d16, d16, #8
+ .long 0xee227b90 // vmov.32 d18[1], r7
+ .long 0xf24151b3 // vand d21, d17, d19
+ .long 0xf3f84034 // vshr.u32 d20, d20, #8
+ .long 0xf24261b3 // vand d22, d18, d19
+ .long 0xf2e81531 // vshl.s32 d17, d17, #8
+ .long 0xf3f85035 // vshr.u32 d21, d21, #8
+ .long 0xf2e82532 // vshl.s32 d18, d18, #8
+ .long 0xf3f86036 // vshr.u32 d22, d22, #8
+ .long 0xf26001b4 // vorr d16, d16, d20
+ .long 0xf26111b5 // vorr d17, d17, d21
+ .long 0xf26221b6 // vorr d18, d18, d22
+ .long 0xf24001b3 // vand d16, d16, d19
+ .long 0xf24111b3 // vand d17, d17, d19
+ .long 0xf24221b3 // vand d18, d18, d19
+ .long 0xeddf3b07 // vldr d19, [pc, #28]
+ .long 0xf3fb06a0 // vcvt.f32.u32 d16, d16
+ .long 0xf3fb16a1 // vcvt.f32.u32 d17, d17
+ .long 0xf3fb26a2 // vcvt.f32.u32 d18, d18
+ .long 0xf3000db3 // vmul.f32 d0, d16, d19
+ .long 0xf3011db3 // vmul.f32 d1, d17, d19
+ .long 0xf3022db3 // vmul.f32 d2, d18, d19
+ .long 0xe8bd48f0 // pop {r4, r5, r6, r7, fp, lr}
+ .long 0xe12fff1c // bx ip
+ .long 0x37800080 // .word 0x37800080
+ .long 0x37800080 // .word 0x37800080
+
HIDDEN _sk_store_u16_be_vfp4
.globl _sk_store_u16_be_vfp4
FUNCTION(_sk_store_u16_be_vfp4)
@@ -5895,7 +5981,7 @@ _sk_linear_gradient_vfp4:
.long 0xe494c00c // ldr ip, [r4], #12
.long 0xf4a41c9f // vld1.32 {d1[]}, [r4 :32]
.long 0xe35c0000 // cmp ip, #0
- .long 0x0a000036 // beq 2680 <sk_linear_gradient_vfp4+0x110>
+ .long 0x0a000036 // beq 2740 <sk_linear_gradient_vfp4+0x110>
.long 0xe59e3004 // ldr r3, [lr, #4]
.long 0xf2c01010 // vmov.i32 d17, #0
.long 0xf2c07010 // vmov.i32 d23, #0
@@ -5945,12 +6031,12 @@ _sk_linear_gradient_vfp4:
.long 0xf26371b3 // vorr d23, d19, d19
.long 0xf26481b4 // vorr d24, d20, d20
.long 0xf26561b5 // vorr d22, d21, d21
- .long 0x1affffd3 // bne 25bc <sk_linear_gradient_vfp4+0x4c>
+ .long 0x1affffd3 // bne 267c <sk_linear_gradient_vfp4+0x4c>
.long 0xf26c01bc // vorr d16, d28, d28
.long 0xf22b11bb // vorr d1, d27, d27
.long 0xf22a21ba // vorr d2, d26, d26
.long 0xf22931b9 // vorr d3, d25, d25
- .long 0xea000003 // b 2690 <sk_linear_gradient_vfp4+0x120>
+ .long 0xea000003 // b 2750 <sk_linear_gradient_vfp4+0x120>
.long 0xf2c05010 // vmov.i32 d21, #0
.long 0xf2c04010 // vmov.i32 d20, #0
.long 0xf2c03010 // vmov.i32 d19, #0
@@ -8770,7 +8856,7 @@ _sk_load_4444_hsw:
.byte 255 // (bad)
.byte 255 // (bad)
.byte 255 // (bad)
- .byte 233,255,255,255,225 // jmpq ffffffffe2002284 <_sk_callback_hsw+0xffffffffe1ffec7e>
+ .byte 233,255,255,255,225 // jmpq ffffffffe2002284 <_sk_callback_hsw+0xffffffffe1ffeace>
.byte 255 // (bad)
.byte 255 // (bad)
.byte 255 // (bad)
@@ -9212,13 +9298,14 @@ HIDDEN _sk_load_u16_be_hsw
FUNCTION(_sk_load_u16_be_hsw)
_sk_load_u16_be_hsw:
.byte 72,173 // lods %ds:(%rsi),%rax
- .byte 72,139,0 // mov (%rax),%rax
+ .byte 76,139,0 // mov (%rax),%r8
+ .byte 72,141,4,189,0,0,0,0 // lea 0x0(,%rdi,4),%rax
.byte 72,133,201 // test %rcx,%rcx
- .byte 15,133,201,0,0,0 // jne 2997 <_sk_load_u16_be_hsw+0xd7>
- .byte 197,121,16,4,248 // vmovupd (%rax,%rdi,8),%xmm8
- .byte 197,249,16,84,248,16 // vmovupd 0x10(%rax,%rdi,8),%xmm2
- .byte 197,249,16,92,248,32 // vmovupd 0x20(%rax,%rdi,8),%xmm3
- .byte 197,122,111,76,248,48 // vmovdqu 0x30(%rax,%rdi,8),%xmm9
+ .byte 15,133,205,0,0,0 // jne 29a3 <_sk_load_u16_be_hsw+0xe3>
+ .byte 196,65,121,16,4,64 // vmovupd (%r8,%rax,2),%xmm8
+ .byte 196,193,121,16,84,64,16 // vmovupd 0x10(%r8,%rax,2),%xmm2
+ .byte 196,193,121,16,92,64,32 // vmovupd 0x20(%r8,%rax,2),%xmm3
+ .byte 196,65,122,111,76,64,48 // vmovdqu 0x30(%r8,%rax,2),%xmm9
.byte 197,185,97,194 // vpunpcklwd %xmm2,%xmm8,%xmm0
.byte 197,185,105,210 // vpunpckhwd %xmm2,%xmm8,%xmm2
.byte 196,193,97,97,201 // vpunpcklwd %xmm9,%xmm3,%xmm1
@@ -9260,32 +9347,121 @@ _sk_load_u16_be_hsw:
.byte 197,172,89,219 // vmulps %ymm3,%ymm10,%ymm3
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
- .byte 197,123,16,4,248 // vmovsd (%rax,%rdi,8),%xmm8
+ .byte 196,65,123,16,4,64 // vmovsd (%r8,%rax,2),%xmm8
.byte 196,65,49,239,201 // vpxor %xmm9,%xmm9,%xmm9
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,79 // je 29f6 <_sk_load_u16_be_hsw+0x136>
- .byte 197,57,22,68,248,8 // vmovhpd 0x8(%rax,%rdi,8),%xmm8,%xmm8
+ .byte 116,85 // je 2a09 <_sk_load_u16_be_hsw+0x149>
+ .byte 196,65,57,22,68,64,8 // vmovhpd 0x8(%r8,%rax,2),%xmm8,%xmm8
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,67 // jb 29f6 <_sk_load_u16_be_hsw+0x136>
- .byte 197,251,16,84,248,16 // vmovsd 0x10(%rax,%rdi,8),%xmm2
+ .byte 114,72 // jb 2a09 <_sk_load_u16_be_hsw+0x149>
+ .byte 196,193,123,16,84,64,16 // vmovsd 0x10(%r8,%rax,2),%xmm2
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 116,68 // je 2a03 <_sk_load_u16_be_hsw+0x143>
- .byte 197,233,22,84,248,24 // vmovhpd 0x18(%rax,%rdi,8),%xmm2,%xmm2
+ .byte 116,72 // je 2a16 <_sk_load_u16_be_hsw+0x156>
+ .byte 196,193,105,22,84,64,24 // vmovhpd 0x18(%r8,%rax,2),%xmm2,%xmm2
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,56 // jb 2a03 <_sk_load_u16_be_hsw+0x143>
- .byte 197,251,16,92,248,32 // vmovsd 0x20(%rax,%rdi,8),%xmm3
+ .byte 114,59 // jb 2a16 <_sk_load_u16_be_hsw+0x156>
+ .byte 196,193,123,16,92,64,32 // vmovsd 0x20(%r8,%rax,2),%xmm3
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 15,132,10,255,255,255 // je 28e5 <_sk_load_u16_be_hsw+0x25>
- .byte 197,225,22,92,248,40 // vmovhpd 0x28(%rax,%rdi,8),%xmm3,%xmm3
+ .byte 15,132,5,255,255,255 // je 28f1 <_sk_load_u16_be_hsw+0x31>
+ .byte 196,193,97,22,92,64,40 // vmovhpd 0x28(%r8,%rax,2),%xmm3,%xmm3
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 15,130,250,254,255,255 // jb 28e5 <_sk_load_u16_be_hsw+0x25>
- .byte 197,122,126,76,248,48 // vmovq 0x30(%rax,%rdi,8),%xmm9
- .byte 233,239,254,255,255 // jmpq 28e5 <_sk_load_u16_be_hsw+0x25>
+ .byte 15,130,244,254,255,255 // jb 28f1 <_sk_load_u16_be_hsw+0x31>
+ .byte 196,65,122,126,76,64,48 // vmovq 0x30(%r8,%rax,2),%xmm9
+ .byte 233,232,254,255,255 // jmpq 28f1 <_sk_load_u16_be_hsw+0x31>
.byte 197,225,87,219 // vxorpd %xmm3,%xmm3,%xmm3
.byte 197,233,87,210 // vxorpd %xmm2,%xmm2,%xmm2
- .byte 233,226,254,255,255 // jmpq 28e5 <_sk_load_u16_be_hsw+0x25>
+ .byte 233,219,254,255,255 // jmpq 28f1 <_sk_load_u16_be_hsw+0x31>
.byte 197,225,87,219 // vxorpd %xmm3,%xmm3,%xmm3
- .byte 233,217,254,255,255 // jmpq 28e5 <_sk_load_u16_be_hsw+0x25>
+ .byte 233,210,254,255,255 // jmpq 28f1 <_sk_load_u16_be_hsw+0x31>
+
+HIDDEN _sk_load_rgb_u16_be_hsw
+.globl _sk_load_rgb_u16_be_hsw
+FUNCTION(_sk_load_rgb_u16_be_hsw)
+_sk_load_rgb_u16_be_hsw:
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 76,139,0 // mov (%rax),%r8
+ .byte 72,141,4,127 // lea (%rdi,%rdi,2),%rax
+ .byte 72,133,201 // test %rcx,%rcx
+ .byte 15,133,211,0,0,0 // jne 2b04 <_sk_load_rgb_u16_be_hsw+0xe5>
+ .byte 196,193,122,111,4,64 // vmovdqu (%r8,%rax,2),%xmm0
+ .byte 196,193,122,111,84,64,12 // vmovdqu 0xc(%r8,%rax,2),%xmm2
+ .byte 196,193,122,111,76,64,24 // vmovdqu 0x18(%r8,%rax,2),%xmm1
+ .byte 196,193,122,111,92,64,32 // vmovdqu 0x20(%r8,%rax,2),%xmm3
+ .byte 197,225,115,219,4 // vpsrldq $0x4,%xmm3,%xmm3
+ .byte 197,185,115,216,6 // vpsrldq $0x6,%xmm0,%xmm8
+ .byte 197,177,115,218,6 // vpsrldq $0x6,%xmm2,%xmm9
+ .byte 197,161,115,217,6 // vpsrldq $0x6,%xmm1,%xmm11
+ .byte 197,169,115,219,6 // vpsrldq $0x6,%xmm3,%xmm10
+ .byte 197,249,97,194 // vpunpcklwd %xmm2,%xmm0,%xmm0
+ .byte 196,193,57,97,209 // vpunpcklwd %xmm9,%xmm8,%xmm2
+ .byte 197,241,97,203 // vpunpcklwd %xmm3,%xmm1,%xmm1
+ .byte 196,193,33,97,218 // vpunpcklwd %xmm10,%xmm11,%xmm3
+ .byte 197,121,97,194 // vpunpcklwd %xmm2,%xmm0,%xmm8
+ .byte 197,121,105,202 // vpunpckhwd %xmm2,%xmm0,%xmm9
+ .byte 197,241,97,211 // vpunpcklwd %xmm3,%xmm1,%xmm2
+ .byte 197,241,105,219 // vpunpckhwd %xmm3,%xmm1,%xmm3
+ .byte 184,128,0,128,55 // mov $0x37800080,%eax
+ .byte 197,249,110,192 // vmovd %eax,%xmm0
+ .byte 196,98,125,88,208 // vpbroadcastd %xmm0,%ymm10
+ .byte 197,185,108,194 // vpunpcklqdq %xmm2,%xmm8,%xmm0
+ .byte 197,241,113,240,8 // vpsllw $0x8,%xmm0,%xmm1
+ .byte 197,249,113,208,8 // vpsrlw $0x8,%xmm0,%xmm0
+ .byte 197,241,235,192 // vpor %xmm0,%xmm1,%xmm0
+ .byte 196,226,125,51,192 // vpmovzxwd %xmm0,%ymm0
+ .byte 197,252,91,192 // vcvtdq2ps %ymm0,%ymm0
+ .byte 197,172,89,192 // vmulps %ymm0,%ymm10,%ymm0
+ .byte 197,185,109,202 // vpunpckhqdq %xmm2,%xmm8,%xmm1
+ .byte 197,233,113,241,8 // vpsllw $0x8,%xmm1,%xmm2
+ .byte 197,241,113,209,8 // vpsrlw $0x8,%xmm1,%xmm1
+ .byte 197,233,235,201 // vpor %xmm1,%xmm2,%xmm1
+ .byte 196,226,125,51,201 // vpmovzxwd %xmm1,%ymm1
+ .byte 197,252,91,201 // vcvtdq2ps %ymm1,%ymm1
+ .byte 197,172,89,201 // vmulps %ymm1,%ymm10,%ymm1
+ .byte 197,177,108,211 // vpunpcklqdq %xmm3,%xmm9,%xmm2
+ .byte 197,225,113,242,8 // vpsllw $0x8,%xmm2,%xmm3
+ .byte 197,233,113,210,8 // vpsrlw $0x8,%xmm2,%xmm2
+ .byte 197,225,235,210 // vpor %xmm2,%xmm3,%xmm2
+ .byte 196,226,125,51,210 // vpmovzxwd %xmm2,%ymm2
+ .byte 197,252,91,210 // vcvtdq2ps %ymm2,%ymm2
+ .byte 197,172,89,210 // vmulps %ymm2,%ymm10,%ymm2
+ .byte 184,0,0,128,63 // mov $0x3f800000,%eax
+ .byte 197,249,110,216 // vmovd %eax,%xmm3
+ .byte 196,226,125,88,219 // vpbroadcastd %xmm3,%ymm3
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 255,224 // jmpq *%rax
+ .byte 196,193,121,110,4,64 // vmovd (%r8,%rax,2),%xmm0
+ .byte 196,193,121,196,68,64,4,2 // vpinsrw $0x2,0x4(%r8,%rax,2),%xmm0,%xmm0
+ .byte 72,131,249,1 // cmp $0x1,%rcx
+ .byte 117,5 // jne 2b1d <_sk_load_rgb_u16_be_hsw+0xfe>
+ .byte 233,72,255,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 196,193,121,110,76,64,6 // vmovd 0x6(%r8,%rax,2),%xmm1
+ .byte 196,65,113,196,68,64,10,2 // vpinsrw $0x2,0xa(%r8,%rax,2),%xmm1,%xmm8
+ .byte 72,131,249,3 // cmp $0x3,%rcx
+ .byte 114,26 // jb 2b4c <_sk_load_rgb_u16_be_hsw+0x12d>
+ .byte 196,193,121,110,76,64,12 // vmovd 0xc(%r8,%rax,2),%xmm1
+ .byte 196,193,113,196,84,64,16,2 // vpinsrw $0x2,0x10(%r8,%rax,2),%xmm1,%xmm2
+ .byte 72,131,249,3 // cmp $0x3,%rcx
+ .byte 117,10 // jne 2b51 <_sk_load_rgb_u16_be_hsw+0x132>
+ .byte 233,25,255,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 233,20,255,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 196,193,121,110,76,64,18 // vmovd 0x12(%r8,%rax,2),%xmm1
+ .byte 196,65,113,196,76,64,22,2 // vpinsrw $0x2,0x16(%r8,%rax,2),%xmm1,%xmm9
+ .byte 72,131,249,5 // cmp $0x5,%rcx
+ .byte 114,26 // jb 2b80 <_sk_load_rgb_u16_be_hsw+0x161>
+ .byte 196,193,121,110,76,64,24 // vmovd 0x18(%r8,%rax,2),%xmm1
+ .byte 196,193,113,196,76,64,28,2 // vpinsrw $0x2,0x1c(%r8,%rax,2),%xmm1,%xmm1
+ .byte 72,131,249,5 // cmp $0x5,%rcx
+ .byte 117,10 // jne 2b85 <_sk_load_rgb_u16_be_hsw+0x166>
+ .byte 233,229,254,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 233,224,254,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 196,193,121,110,92,64,30 // vmovd 0x1e(%r8,%rax,2),%xmm3
+ .byte 196,65,97,196,92,64,34,2 // vpinsrw $0x2,0x22(%r8,%rax,2),%xmm3,%xmm11
+ .byte 72,131,249,7 // cmp $0x7,%rcx
+ .byte 114,20 // jb 2bae <_sk_load_rgb_u16_be_hsw+0x18f>
+ .byte 196,193,121,110,92,64,36 // vmovd 0x24(%r8,%rax,2),%xmm3
+ .byte 196,193,97,196,92,64,40,2 // vpinsrw $0x2,0x28(%r8,%rax,2),%xmm3,%xmm3
+ .byte 233,183,254,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
+ .byte 233,178,254,255,255 // jmpq 2a65 <_sk_load_rgb_u16_be_hsw+0x46>
HIDDEN _sk_store_u16_be_hsw
.globl _sk_store_u16_be_hsw
@@ -9293,6 +9469,7 @@ FUNCTION(_sk_store_u16_be_hsw)
_sk_store_u16_be_hsw:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 76,139,0 // mov (%rax),%r8
+ .byte 76,141,12,189,0,0,0,0 // lea 0x0(,%rdi,4),%r9
.byte 184,0,255,127,71 // mov $0x477fff00,%eax
.byte 197,121,110,192 // vmovd %eax,%xmm8
.byte 196,66,125,88,192 // vpbroadcastd %xmm8,%ymm8
@@ -9333,31 +9510,31 @@ _sk_store_u16_be_hsw:
.byte 196,65,17,98,200 // vpunpckldq %xmm8,%xmm13,%xmm9
.byte 196,65,17,106,192 // vpunpckhdq %xmm8,%xmm13,%xmm8
.byte 72,133,201 // test %rcx,%rcx
- .byte 117,31 // jne 2aff <_sk_store_u16_be_hsw+0xf3>
- .byte 196,65,120,17,28,248 // vmovups %xmm11,(%r8,%rdi,8)
- .byte 196,65,120,17,84,248,16 // vmovups %xmm10,0x10(%r8,%rdi,8)
- .byte 196,65,120,17,76,248,32 // vmovups %xmm9,0x20(%r8,%rdi,8)
- .byte 196,65,122,127,68,248,48 // vmovdqu %xmm8,0x30(%r8,%rdi,8)
+ .byte 117,31 // jne 2cae <_sk_store_u16_be_hsw+0xfb>
+ .byte 196,1,120,17,28,72 // vmovups %xmm11,(%r8,%r9,2)
+ .byte 196,1,120,17,84,72,16 // vmovups %xmm10,0x10(%r8,%r9,2)
+ .byte 196,1,120,17,76,72,32 // vmovups %xmm9,0x20(%r8,%r9,2)
+ .byte 196,1,122,127,68,72,48 // vmovdqu %xmm8,0x30(%r8,%r9,2)
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
- .byte 196,65,121,214,28,248 // vmovq %xmm11,(%r8,%rdi,8)
+ .byte 196,1,121,214,28,72 // vmovq %xmm11,(%r8,%r9,2)
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,240 // je 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,23,92,248,8 // vmovhpd %xmm11,0x8(%r8,%rdi,8)
+ .byte 116,240 // je 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,23,92,72,8 // vmovhpd %xmm11,0x8(%r8,%r9,2)
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,227 // jb 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,214,84,248,16 // vmovq %xmm10,0x10(%r8,%rdi,8)
- .byte 116,218 // je 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,23,84,248,24 // vmovhpd %xmm10,0x18(%r8,%rdi,8)
+ .byte 114,227 // jb 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,214,84,72,16 // vmovq %xmm10,0x10(%r8,%r9,2)
+ .byte 116,218 // je 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,23,84,72,24 // vmovhpd %xmm10,0x18(%r8,%r9,2)
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,205 // jb 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,214,76,248,32 // vmovq %xmm9,0x20(%r8,%rdi,8)
- .byte 116,196 // je 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,23,76,248,40 // vmovhpd %xmm9,0x28(%r8,%rdi,8)
+ .byte 114,205 // jb 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,214,76,72,32 // vmovq %xmm9,0x20(%r8,%r9,2)
+ .byte 116,196 // je 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,23,76,72,40 // vmovhpd %xmm9,0x28(%r8,%r9,2)
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 114,183 // jb 2afb <_sk_store_u16_be_hsw+0xef>
- .byte 196,65,121,214,68,248,48 // vmovq %xmm8,0x30(%r8,%rdi,8)
- .byte 235,174 // jmp 2afb <_sk_store_u16_be_hsw+0xef>
+ .byte 114,183 // jb 2caa <_sk_store_u16_be_hsw+0xf7>
+ .byte 196,1,121,214,68,72,48 // vmovq %xmm8,0x30(%r8,%r9,2)
+ .byte 235,174 // jmp 2caa <_sk_store_u16_be_hsw+0xf7>
HIDDEN _sk_load_f32_hsw
.globl _sk_load_f32_hsw
@@ -9365,10 +9542,10 @@ FUNCTION(_sk_load_f32_hsw)
_sk_load_f32_hsw:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 119,110 // ja 2bc3 <_sk_load_f32_hsw+0x76>
+ .byte 119,110 // ja 2d72 <_sk_load_f32_hsw+0x76>
.byte 76,139,0 // mov (%rax),%r8
.byte 76,141,12,189,0,0,0,0 // lea 0x0(,%rdi,4),%r9
- .byte 76,141,21,133,0,0,0 // lea 0x85(%rip),%r10 # 2bec <_sk_load_f32_hsw+0x9f>
+ .byte 76,141,21,134,0,0,0 // lea 0x86(%rip),%r10 # 2d9c <_sk_load_f32_hsw+0xa0>
.byte 73,99,4,138 // movslq (%r10,%rcx,4),%rax
.byte 76,1,208 // add %r10,%rax
.byte 255,224 // jmpq *%rax
@@ -9394,19 +9571,20 @@ _sk_load_f32_hsw:
.byte 196,193,101,21,216 // vunpckhpd %ymm8,%ymm3,%ymm3
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
- .byte 144 // nop
- .byte 132,255 // test %bh,%bh
+ .byte 102,144 // xchg %ax,%ax
+ .byte 131,255,255 // cmp $0xffffffff,%edi
+ .byte 255,202 // dec %edx
.byte 255 // (bad)
- .byte 255,203 // dec %ebx
.byte 255 // (bad)
.byte 255 // (bad)
+ .byte 189,255,255,255,176 // mov $0xb0ffffff,%ebp
.byte 255 // (bad)
- .byte 190,255,255,255,177 // mov $0xb1ffffff,%esi
.byte 255 // (bad)
+ .byte 255,163,255,255,255,155 // jmpq *-0x64000001(%rbx)
.byte 255 // (bad)
- .byte 255,164,255,255,255,156,255 // jmpq *-0x630001(%rdi,%rdi,8)
.byte 255 // (bad)
- .byte 255,148,255,255,255,140,255 // callq *-0x730001(%rdi,%rdi,8)
+ .byte 255,147,255,255,255,139 // callq *-0x74000001(%rbx)
+ .byte 255 // (bad)
.byte 255 // (bad)
.byte 255 // .byte 0xff
@@ -9426,7 +9604,7 @@ _sk_store_f32_hsw:
.byte 196,65,37,20,196 // vunpcklpd %ymm12,%ymm11,%ymm8
.byte 196,65,37,21,220 // vunpckhpd %ymm12,%ymm11,%ymm11
.byte 72,133,201 // test %rcx,%rcx
- .byte 117,55 // jne 2c79 <_sk_store_f32_hsw+0x6d>
+ .byte 117,55 // jne 2e29 <_sk_store_f32_hsw+0x6d>
.byte 196,67,45,24,225,1 // vinsertf128 $0x1,%xmm9,%ymm10,%ymm12
.byte 196,67,61,24,235,1 // vinsertf128 $0x1,%xmm11,%ymm8,%ymm13
.byte 196,67,45,6,201,49 // vperm2f128 $0x31,%ymm9,%ymm10,%ymm9
@@ -9439,22 +9617,22 @@ _sk_store_f32_hsw:
.byte 255,224 // jmpq *%rax
.byte 196,65,121,17,20,128 // vmovupd %xmm10,(%r8,%rax,4)
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,240 // je 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 116,240 // je 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,65,121,17,76,128,16 // vmovupd %xmm9,0x10(%r8,%rax,4)
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,227 // jb 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 114,227 // jb 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,65,121,17,68,128,32 // vmovupd %xmm8,0x20(%r8,%rax,4)
- .byte 116,218 // je 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 116,218 // je 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,65,121,17,92,128,48 // vmovupd %xmm11,0x30(%r8,%rax,4)
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,205 // jb 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 114,205 // jb 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,67,125,25,84,128,64,1 // vextractf128 $0x1,%ymm10,0x40(%r8,%rax,4)
- .byte 116,195 // je 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 116,195 // je 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,67,125,25,76,128,80,1 // vextractf128 $0x1,%ymm9,0x50(%r8,%rax,4)
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 114,181 // jb 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 114,181 // jb 2e25 <_sk_store_f32_hsw+0x69>
.byte 196,67,125,25,68,128,96,1 // vextractf128 $0x1,%ymm8,0x60(%r8,%rax,4)
- .byte 235,171 // jmp 2c75 <_sk_store_f32_hsw+0x69>
+ .byte 235,171 // jmp 2e25 <_sk_store_f32_hsw+0x69>
HIDDEN _sk_clamp_x_hsw
.globl _sk_clamp_x_hsw
@@ -9719,7 +9897,7 @@ _sk_linear_gradient_hsw:
.byte 196,98,125,24,72,28 // vbroadcastss 0x1c(%rax),%ymm9
.byte 76,139,0 // mov (%rax),%r8
.byte 77,133,192 // test %r8,%r8
- .byte 15,132,143,0,0,0 // je 3105 <_sk_linear_gradient_hsw+0xb5>
+ .byte 15,132,143,0,0,0 // je 32b5 <_sk_linear_gradient_hsw+0xb5>
.byte 72,139,64,8 // mov 0x8(%rax),%rax
.byte 72,131,192,32 // add $0x20,%rax
.byte 196,65,28,87,228 // vxorps %ymm12,%ymm12,%ymm12
@@ -9746,8 +9924,8 @@ _sk_linear_gradient_hsw:
.byte 196,67,13,74,201,208 // vblendvps %ymm13,%ymm9,%ymm14,%ymm9
.byte 72,131,192,36 // add $0x24,%rax
.byte 73,255,200 // dec %r8
- .byte 117,140 // jne 308f <_sk_linear_gradient_hsw+0x3f>
- .byte 235,17 // jmp 3116 <_sk_linear_gradient_hsw+0xc6>
+ .byte 117,140 // jne 323f <_sk_linear_gradient_hsw+0x3f>
+ .byte 235,17 // jmp 32c6 <_sk_linear_gradient_hsw+0xc6>
.byte 197,244,87,201 // vxorps %ymm1,%ymm1,%ymm1
.byte 197,236,87,210 // vxorps %ymm2,%ymm2,%ymm2
.byte 197,228,87,219 // vxorps %ymm3,%ymm3,%ymm3
@@ -13664,13 +13842,14 @@ HIDDEN _sk_load_u16_be_avx
FUNCTION(_sk_load_u16_be_avx)
_sk_load_u16_be_avx:
.byte 72,173 // lods %ds:(%rsi),%rax
- .byte 72,139,0 // mov (%rax),%rax
+ .byte 76,139,0 // mov (%rax),%r8
+ .byte 72,141,4,189,0,0,0,0 // lea 0x0(,%rdi,4),%rax
.byte 72,133,201 // test %rcx,%rcx
- .byte 15,133,1,1,0,0 // jne 369d <_sk_load_u16_be_avx+0x10f>
- .byte 197,121,16,4,248 // vmovupd (%rax,%rdi,8),%xmm8
- .byte 197,249,16,84,248,16 // vmovupd 0x10(%rax,%rdi,8),%xmm2
- .byte 197,249,16,92,248,32 // vmovupd 0x20(%rax,%rdi,8),%xmm3
- .byte 197,122,111,76,248,48 // vmovdqu 0x30(%rax,%rdi,8),%xmm9
+ .byte 15,133,5,1,0,0 // jne 36a9 <_sk_load_u16_be_avx+0x11b>
+ .byte 196,65,121,16,4,64 // vmovupd (%r8,%rax,2),%xmm8
+ .byte 196,193,121,16,84,64,16 // vmovupd 0x10(%r8,%rax,2),%xmm2
+ .byte 196,193,121,16,92,64,32 // vmovupd 0x20(%r8,%rax,2),%xmm3
+ .byte 196,65,122,111,76,64,48 // vmovdqu 0x30(%r8,%rax,2),%xmm9
.byte 197,185,97,194 // vpunpcklwd %xmm2,%xmm8,%xmm0
.byte 197,185,105,210 // vpunpckhwd %xmm2,%xmm8,%xmm2
.byte 196,193,97,97,201 // vpunpcklwd %xmm9,%xmm3,%xmm1
@@ -13722,32 +13901,130 @@ _sk_load_u16_be_avx:
.byte 197,156,89,219 // vmulps %ymm3,%ymm12,%ymm3
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
- .byte 197,123,16,4,248 // vmovsd (%rax,%rdi,8),%xmm8
+ .byte 196,65,123,16,4,64 // vmovsd (%r8,%rax,2),%xmm8
.byte 196,65,49,239,201 // vpxor %xmm9,%xmm9,%xmm9
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,79 // je 36fc <_sk_load_u16_be_avx+0x16e>
- .byte 197,57,22,68,248,8 // vmovhpd 0x8(%rax,%rdi,8),%xmm8,%xmm8
+ .byte 116,85 // je 370f <_sk_load_u16_be_avx+0x181>
+ .byte 196,65,57,22,68,64,8 // vmovhpd 0x8(%r8,%rax,2),%xmm8,%xmm8
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,67 // jb 36fc <_sk_load_u16_be_avx+0x16e>
- .byte 197,251,16,84,248,16 // vmovsd 0x10(%rax,%rdi,8),%xmm2
+ .byte 114,72 // jb 370f <_sk_load_u16_be_avx+0x181>
+ .byte 196,193,123,16,84,64,16 // vmovsd 0x10(%r8,%rax,2),%xmm2
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 116,68 // je 3709 <_sk_load_u16_be_avx+0x17b>
- .byte 197,233,22,84,248,24 // vmovhpd 0x18(%rax,%rdi,8),%xmm2,%xmm2
+ .byte 116,72 // je 371c <_sk_load_u16_be_avx+0x18e>
+ .byte 196,193,105,22,84,64,24 // vmovhpd 0x18(%r8,%rax,2),%xmm2,%xmm2
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,56 // jb 3709 <_sk_load_u16_be_avx+0x17b>
- .byte 197,251,16,92,248,32 // vmovsd 0x20(%rax,%rdi,8),%xmm3
+ .byte 114,59 // jb 371c <_sk_load_u16_be_avx+0x18e>
+ .byte 196,193,123,16,92,64,32 // vmovsd 0x20(%r8,%rax,2),%xmm3
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 15,132,210,254,255,255 // je 35b3 <_sk_load_u16_be_avx+0x25>
- .byte 197,225,22,92,248,40 // vmovhpd 0x28(%rax,%rdi,8),%xmm3,%xmm3
+ .byte 15,132,205,254,255,255 // je 35bf <_sk_load_u16_be_avx+0x31>
+ .byte 196,193,97,22,92,64,40 // vmovhpd 0x28(%r8,%rax,2),%xmm3,%xmm3
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 15,130,194,254,255,255 // jb 35b3 <_sk_load_u16_be_avx+0x25>
- .byte 197,122,126,76,248,48 // vmovq 0x30(%rax,%rdi,8),%xmm9
- .byte 233,183,254,255,255 // jmpq 35b3 <_sk_load_u16_be_avx+0x25>
+ .byte 15,130,188,254,255,255 // jb 35bf <_sk_load_u16_be_avx+0x31>
+ .byte 196,65,122,126,76,64,48 // vmovq 0x30(%r8,%rax,2),%xmm9
+ .byte 233,176,254,255,255 // jmpq 35bf <_sk_load_u16_be_avx+0x31>
.byte 197,225,87,219 // vxorpd %xmm3,%xmm3,%xmm3
.byte 197,233,87,210 // vxorpd %xmm2,%xmm2,%xmm2
- .byte 233,170,254,255,255 // jmpq 35b3 <_sk_load_u16_be_avx+0x25>
+ .byte 233,163,254,255,255 // jmpq 35bf <_sk_load_u16_be_avx+0x31>
.byte 197,225,87,219 // vxorpd %xmm3,%xmm3,%xmm3
- .byte 233,161,254,255,255 // jmpq 35b3 <_sk_load_u16_be_avx+0x25>
+ .byte 233,154,254,255,255 // jmpq 35bf <_sk_load_u16_be_avx+0x31>
+
+HIDDEN _sk_load_rgb_u16_be_avx
+.globl _sk_load_rgb_u16_be_avx
+FUNCTION(_sk_load_rgb_u16_be_avx)
+_sk_load_rgb_u16_be_avx:
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 76,139,0 // mov (%rax),%r8
+ .byte 72,141,4,127 // lea (%rdi,%rdi,2),%rax
+ .byte 72,133,201 // test %rcx,%rcx
+ .byte 15,133,8,1,0,0 // jne 383f <_sk_load_rgb_u16_be_avx+0x11a>
+ .byte 196,193,122,111,4,64 // vmovdqu (%r8,%rax,2),%xmm0
+ .byte 196,193,122,111,84,64,12 // vmovdqu 0xc(%r8,%rax,2),%xmm2
+ .byte 196,193,122,111,76,64,24 // vmovdqu 0x18(%r8,%rax,2),%xmm1
+ .byte 196,193,122,111,92,64,32 // vmovdqu 0x20(%r8,%rax,2),%xmm3
+ .byte 197,225,115,219,4 // vpsrldq $0x4,%xmm3,%xmm3
+ .byte 197,185,115,216,6 // vpsrldq $0x6,%xmm0,%xmm8
+ .byte 197,177,115,218,6 // vpsrldq $0x6,%xmm2,%xmm9
+ .byte 197,161,115,217,6 // vpsrldq $0x6,%xmm1,%xmm11
+ .byte 197,169,115,219,6 // vpsrldq $0x6,%xmm3,%xmm10
+ .byte 197,249,97,194 // vpunpcklwd %xmm2,%xmm0,%xmm0
+ .byte 196,193,57,97,209 // vpunpcklwd %xmm9,%xmm8,%xmm2
+ .byte 197,241,97,203 // vpunpcklwd %xmm3,%xmm1,%xmm1
+ .byte 196,193,33,97,218 // vpunpcklwd %xmm10,%xmm11,%xmm3
+ .byte 197,121,97,194 // vpunpcklwd %xmm2,%xmm0,%xmm8
+ .byte 197,121,105,202 // vpunpckhwd %xmm2,%xmm0,%xmm9
+ .byte 197,241,97,211 // vpunpcklwd %xmm3,%xmm1,%xmm2
+ .byte 197,113,105,219 // vpunpckhwd %xmm3,%xmm1,%xmm11
+ .byte 184,128,0,128,55 // mov $0x37800080,%eax
+ .byte 197,249,110,192 // vmovd %eax,%xmm0
+ .byte 196,227,121,4,192,0 // vpermilps $0x0,%xmm0,%xmm0
+ .byte 196,99,125,24,208,1 // vinsertf128 $0x1,%xmm0,%ymm0,%ymm10
+ .byte 197,185,108,194 // vpunpcklqdq %xmm2,%xmm8,%xmm0
+ .byte 197,241,113,240,8 // vpsllw $0x8,%xmm0,%xmm1
+ .byte 197,249,113,208,8 // vpsrlw $0x8,%xmm0,%xmm0
+ .byte 197,241,235,192 // vpor %xmm0,%xmm1,%xmm0
+ .byte 196,65,25,239,228 // vpxor %xmm12,%xmm12,%xmm12
+ .byte 196,193,121,105,204 // vpunpckhwd %xmm12,%xmm0,%xmm1
+ .byte 196,226,121,51,192 // vpmovzxwd %xmm0,%xmm0
+ .byte 196,227,125,24,193,1 // vinsertf128 $0x1,%xmm1,%ymm0,%ymm0
+ .byte 197,252,91,192 // vcvtdq2ps %ymm0,%ymm0
+ .byte 197,172,89,192 // vmulps %ymm0,%ymm10,%ymm0
+ .byte 197,185,109,202 // vpunpckhqdq %xmm2,%xmm8,%xmm1
+ .byte 197,233,113,241,8 // vpsllw $0x8,%xmm1,%xmm2
+ .byte 197,241,113,209,8 // vpsrlw $0x8,%xmm1,%xmm1
+ .byte 197,233,235,201 // vpor %xmm1,%xmm2,%xmm1
+ .byte 196,193,113,105,212 // vpunpckhwd %xmm12,%xmm1,%xmm2
+ .byte 196,226,121,51,201 // vpmovzxwd %xmm1,%xmm1
+ .byte 196,227,117,24,202,1 // vinsertf128 $0x1,%xmm2,%ymm1,%ymm1
+ .byte 197,252,91,201 // vcvtdq2ps %ymm1,%ymm1
+ .byte 197,172,89,201 // vmulps %ymm1,%ymm10,%ymm1
+ .byte 196,193,49,108,211 // vpunpcklqdq %xmm11,%xmm9,%xmm2
+ .byte 197,225,113,242,8 // vpsllw $0x8,%xmm2,%xmm3
+ .byte 197,233,113,210,8 // vpsrlw $0x8,%xmm2,%xmm2
+ .byte 197,225,235,210 // vpor %xmm2,%xmm3,%xmm2
+ .byte 196,193,105,105,220 // vpunpckhwd %xmm12,%xmm2,%xmm3
+ .byte 196,226,121,51,210 // vpmovzxwd %xmm2,%xmm2
+ .byte 196,227,109,24,211,1 // vinsertf128 $0x1,%xmm3,%ymm2,%ymm2
+ .byte 197,252,91,210 // vcvtdq2ps %ymm2,%ymm2
+ .byte 197,172,89,210 // vmulps %ymm2,%ymm10,%ymm2
+ .byte 184,0,0,128,63 // mov $0x3f800000,%eax
+ .byte 197,249,110,216 // vmovd %eax,%xmm3
+ .byte 196,227,121,4,219,0 // vpermilps $0x0,%xmm3,%xmm3
+ .byte 196,227,101,24,219,1 // vinsertf128 $0x1,%xmm3,%ymm3,%ymm3
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 255,224 // jmpq *%rax
+ .byte 196,193,121,110,4,64 // vmovd (%r8,%rax,2),%xmm0
+ .byte 196,193,121,196,68,64,4,2 // vpinsrw $0x2,0x4(%r8,%rax,2),%xmm0,%xmm0
+ .byte 72,131,249,1 // cmp $0x1,%rcx
+ .byte 117,5 // jne 3858 <_sk_load_rgb_u16_be_avx+0x133>
+ .byte 233,19,255,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 196,193,121,110,76,64,6 // vmovd 0x6(%r8,%rax,2),%xmm1
+ .byte 196,65,113,196,68,64,10,2 // vpinsrw $0x2,0xa(%r8,%rax,2),%xmm1,%xmm8
+ .byte 72,131,249,3 // cmp $0x3,%rcx
+ .byte 114,26 // jb 3887 <_sk_load_rgb_u16_be_avx+0x162>
+ .byte 196,193,121,110,76,64,12 // vmovd 0xc(%r8,%rax,2),%xmm1
+ .byte 196,193,113,196,84,64,16,2 // vpinsrw $0x2,0x10(%r8,%rax,2),%xmm1,%xmm2
+ .byte 72,131,249,3 // cmp $0x3,%rcx
+ .byte 117,10 // jne 388c <_sk_load_rgb_u16_be_avx+0x167>
+ .byte 233,228,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 233,223,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 196,193,121,110,76,64,18 // vmovd 0x12(%r8,%rax,2),%xmm1
+ .byte 196,65,113,196,76,64,22,2 // vpinsrw $0x2,0x16(%r8,%rax,2),%xmm1,%xmm9
+ .byte 72,131,249,5 // cmp $0x5,%rcx
+ .byte 114,26 // jb 38bb <_sk_load_rgb_u16_be_avx+0x196>
+ .byte 196,193,121,110,76,64,24 // vmovd 0x18(%r8,%rax,2),%xmm1
+ .byte 196,193,113,196,76,64,28,2 // vpinsrw $0x2,0x1c(%r8,%rax,2),%xmm1,%xmm1
+ .byte 72,131,249,5 // cmp $0x5,%rcx
+ .byte 117,10 // jne 38c0 <_sk_load_rgb_u16_be_avx+0x19b>
+ .byte 233,176,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 233,171,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 196,193,121,110,92,64,30 // vmovd 0x1e(%r8,%rax,2),%xmm3
+ .byte 196,65,97,196,92,64,34,2 // vpinsrw $0x2,0x22(%r8,%rax,2),%xmm3,%xmm11
+ .byte 72,131,249,7 // cmp $0x7,%rcx
+ .byte 114,20 // jb 38e9 <_sk_load_rgb_u16_be_avx+0x1c4>
+ .byte 196,193,121,110,92,64,36 // vmovd 0x24(%r8,%rax,2),%xmm3
+ .byte 196,193,97,196,92,64,40,2 // vpinsrw $0x2,0x28(%r8,%rax,2),%xmm3,%xmm3
+ .byte 233,130,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
+ .byte 233,125,254,255,255 // jmpq 376b <_sk_load_rgb_u16_be_avx+0x46>
HIDDEN _sk_store_u16_be_avx
.globl _sk_store_u16_be_avx
@@ -13755,6 +14032,7 @@ FUNCTION(_sk_store_u16_be_avx)
_sk_store_u16_be_avx:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 76,139,0 // mov (%rax),%r8
+ .byte 76,141,12,189,0,0,0,0 // lea 0x0(,%rdi,4),%r9
.byte 184,0,255,127,71 // mov $0x477fff00,%eax
.byte 197,121,110,192 // vmovd %eax,%xmm8
.byte 196,67,121,4,192,0 // vpermilps $0x0,%xmm8,%xmm8
@@ -13796,31 +14074,31 @@ _sk_store_u16_be_avx:
.byte 196,65,17,98,200 // vpunpckldq %xmm8,%xmm13,%xmm9
.byte 196,65,17,106,192 // vpunpckhdq %xmm8,%xmm13,%xmm8
.byte 72,133,201 // test %rcx,%rcx
- .byte 117,31 // jne 380c <_sk_store_u16_be_avx+0xfa>
- .byte 196,65,120,17,28,248 // vmovups %xmm11,(%r8,%rdi,8)
- .byte 196,65,120,17,84,248,16 // vmovups %xmm10,0x10(%r8,%rdi,8)
- .byte 196,65,120,17,76,248,32 // vmovups %xmm9,0x20(%r8,%rdi,8)
- .byte 196,65,122,127,68,248,48 // vmovdqu %xmm8,0x30(%r8,%rdi,8)
+ .byte 117,31 // jne 39f0 <_sk_store_u16_be_avx+0x102>
+ .byte 196,1,120,17,28,72 // vmovups %xmm11,(%r8,%r9,2)
+ .byte 196,1,120,17,84,72,16 // vmovups %xmm10,0x10(%r8,%r9,2)
+ .byte 196,1,120,17,76,72,32 // vmovups %xmm9,0x20(%r8,%r9,2)
+ .byte 196,1,122,127,68,72,48 // vmovdqu %xmm8,0x30(%r8,%r9,2)
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
- .byte 196,65,121,214,28,248 // vmovq %xmm11,(%r8,%rdi,8)
+ .byte 196,1,121,214,28,72 // vmovq %xmm11,(%r8,%r9,2)
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,240 // je 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,23,92,248,8 // vmovhpd %xmm11,0x8(%r8,%rdi,8)
+ .byte 116,240 // je 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,23,92,72,8 // vmovhpd %xmm11,0x8(%r8,%r9,2)
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,227 // jb 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,214,84,248,16 // vmovq %xmm10,0x10(%r8,%rdi,8)
- .byte 116,218 // je 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,23,84,248,24 // vmovhpd %xmm10,0x18(%r8,%rdi,8)
+ .byte 114,227 // jb 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,214,84,72,16 // vmovq %xmm10,0x10(%r8,%r9,2)
+ .byte 116,218 // je 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,23,84,72,24 // vmovhpd %xmm10,0x18(%r8,%r9,2)
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,205 // jb 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,214,76,248,32 // vmovq %xmm9,0x20(%r8,%rdi,8)
- .byte 116,196 // je 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,23,76,248,40 // vmovhpd %xmm9,0x28(%r8,%rdi,8)
+ .byte 114,205 // jb 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,214,76,72,32 // vmovq %xmm9,0x20(%r8,%r9,2)
+ .byte 116,196 // je 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,23,76,72,40 // vmovhpd %xmm9,0x28(%r8,%r9,2)
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 114,183 // jb 3808 <_sk_store_u16_be_avx+0xf6>
- .byte 196,65,121,214,68,248,48 // vmovq %xmm8,0x30(%r8,%rdi,8)
- .byte 235,174 // jmp 3808 <_sk_store_u16_be_avx+0xf6>
+ .byte 114,183 // jb 39ec <_sk_store_u16_be_avx+0xfe>
+ .byte 196,1,121,214,68,72,48 // vmovq %xmm8,0x30(%r8,%r9,2)
+ .byte 235,174 // jmp 39ec <_sk_store_u16_be_avx+0xfe>
HIDDEN _sk_load_f32_avx
.globl _sk_load_f32_avx
@@ -13828,10 +14106,10 @@ FUNCTION(_sk_load_f32_avx)
_sk_load_f32_avx:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 119,110 // ja 38d0 <_sk_load_f32_avx+0x76>
+ .byte 119,110 // ja 3ab4 <_sk_load_f32_avx+0x76>
.byte 76,139,0 // mov (%rax),%r8
.byte 76,141,12,189,0,0,0,0 // lea 0x0(,%rdi,4),%r9
- .byte 76,141,21,132,0,0,0 // lea 0x84(%rip),%r10 # 38f8 <_sk_load_f32_avx+0x9e>
+ .byte 76,141,21,132,0,0,0 // lea 0x84(%rip),%r10 # 3adc <_sk_load_f32_avx+0x9e>
.byte 73,99,4,138 // movslq (%r10,%rcx,4),%rax
.byte 76,1,208 // add %r10,%rax
.byte 255,224 // jmpq *%rax
@@ -13890,7 +14168,7 @@ _sk_store_f32_avx:
.byte 196,65,37,20,196 // vunpcklpd %ymm12,%ymm11,%ymm8
.byte 196,65,37,21,220 // vunpckhpd %ymm12,%ymm11,%ymm11
.byte 72,133,201 // test %rcx,%rcx
- .byte 117,55 // jne 3985 <_sk_store_f32_avx+0x6d>
+ .byte 117,55 // jne 3b69 <_sk_store_f32_avx+0x6d>
.byte 196,67,45,24,225,1 // vinsertf128 $0x1,%xmm9,%ymm10,%ymm12
.byte 196,67,61,24,235,1 // vinsertf128 $0x1,%xmm11,%ymm8,%ymm13
.byte 196,67,45,6,201,49 // vperm2f128 $0x31,%ymm9,%ymm10,%ymm9
@@ -13903,22 +14181,22 @@ _sk_store_f32_avx:
.byte 255,224 // jmpq *%rax
.byte 196,65,121,17,20,128 // vmovupd %xmm10,(%r8,%rax,4)
.byte 72,131,249,1 // cmp $0x1,%rcx
- .byte 116,240 // je 3981 <_sk_store_f32_avx+0x69>
+ .byte 116,240 // je 3b65 <_sk_store_f32_avx+0x69>
.byte 196,65,121,17,76,128,16 // vmovupd %xmm9,0x10(%r8,%rax,4)
.byte 72,131,249,3 // cmp $0x3,%rcx
- .byte 114,227 // jb 3981 <_sk_store_f32_avx+0x69>
+ .byte 114,227 // jb 3b65 <_sk_store_f32_avx+0x69>
.byte 196,65,121,17,68,128,32 // vmovupd %xmm8,0x20(%r8,%rax,4)
- .byte 116,218 // je 3981 <_sk_store_f32_avx+0x69>
+ .byte 116,218 // je 3b65 <_sk_store_f32_avx+0x69>
.byte 196,65,121,17,92,128,48 // vmovupd %xmm11,0x30(%r8,%rax,4)
.byte 72,131,249,5 // cmp $0x5,%rcx
- .byte 114,205 // jb 3981 <_sk_store_f32_avx+0x69>
+ .byte 114,205 // jb 3b65 <_sk_store_f32_avx+0x69>
.byte 196,67,125,25,84,128,64,1 // vextractf128 $0x1,%ymm10,0x40(%r8,%rax,4)
- .byte 116,195 // je 3981 <_sk_store_f32_avx+0x69>
+ .byte 116,195 // je 3b65 <_sk_store_f32_avx+0x69>
.byte 196,67,125,25,76,128,80,1 // vextractf128 $0x1,%ymm9,0x50(%r8,%rax,4)
.byte 72,131,249,7 // cmp $0x7,%rcx
- .byte 114,181 // jb 3981 <_sk_store_f32_avx+0x69>
+ .byte 114,181 // jb 3b65 <_sk_store_f32_avx+0x69>
.byte 196,67,125,25,68,128,96,1 // vextractf128 $0x1,%ymm8,0x60(%r8,%rax,4)
- .byte 235,171 // jmp 3981 <_sk_store_f32_avx+0x69>
+ .byte 235,171 // jmp 3b65 <_sk_store_f32_avx+0x69>
HIDDEN _sk_clamp_x_avx
.globl _sk_clamp_x_avx
@@ -14246,7 +14524,7 @@ _sk_linear_gradient_avx:
.byte 196,226,125,24,88,28 // vbroadcastss 0x1c(%rax),%ymm3
.byte 76,139,0 // mov (%rax),%r8
.byte 77,133,192 // test %r8,%r8
- .byte 15,132,146,0,0,0 // je 3f39 <_sk_linear_gradient_avx+0xb8>
+ .byte 15,132,146,0,0,0 // je 411d <_sk_linear_gradient_avx+0xb8>
.byte 72,139,64,8 // mov 0x8(%rax),%rax
.byte 72,131,192,32 // add $0x20,%rax
.byte 196,65,28,87,228 // vxorps %ymm12,%ymm12,%ymm12
@@ -14273,8 +14551,8 @@ _sk_linear_gradient_avx:
.byte 196,227,13,74,219,208 // vblendvps %ymm13,%ymm3,%ymm14,%ymm3
.byte 72,131,192,36 // add $0x24,%rax
.byte 73,255,200 // dec %r8
- .byte 117,140 // jne 3ec3 <_sk_linear_gradient_avx+0x42>
- .byte 235,20 // jmp 3f4d <_sk_linear_gradient_avx+0xcc>
+ .byte 117,140 // jne 40a7 <_sk_linear_gradient_avx+0x42>
+ .byte 235,20 // jmp 4131 <_sk_linear_gradient_avx+0xcc>
.byte 196,65,36,87,219 // vxorps %ymm11,%ymm11,%ymm11
.byte 196,65,44,87,210 // vxorps %ymm10,%ymm10,%ymm10
.byte 196,65,52,87,201 // vxorps %ymm9,%ymm9,%ymm9
@@ -17482,6 +17760,55 @@ _sk_load_u16_be_sse41:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
+HIDDEN _sk_load_rgb_u16_be_sse41
+.globl _sk_load_rgb_u16_be_sse41
+FUNCTION(_sk_load_rgb_u16_be_sse41)
+_sk_load_rgb_u16_be_sse41:
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 72,139,0 // mov (%rax),%rax
+ .byte 72,141,12,127 // lea (%rdi,%rdi,2),%rcx
+ .byte 243,15,111,20,72 // movdqu (%rax,%rcx,2),%xmm2
+ .byte 243,15,111,68,72,8 // movdqu 0x8(%rax,%rcx,2),%xmm0
+ .byte 102,15,115,216,4 // psrldq $0x4,%xmm0
+ .byte 102,15,111,202 // movdqa %xmm2,%xmm1
+ .byte 102,15,115,217,6 // psrldq $0x6,%xmm1
+ .byte 102,15,97,208 // punpcklwd %xmm0,%xmm2
+ .byte 102,15,115,216,6 // psrldq $0x6,%xmm0
+ .byte 102,15,97,200 // punpcklwd %xmm0,%xmm1
+ .byte 102,15,111,194 // movdqa %xmm2,%xmm0
+ .byte 102,15,97,193 // punpcklwd %xmm1,%xmm0
+ .byte 102,15,112,216,78 // pshufd $0x4e,%xmm0,%xmm3
+ .byte 102,15,105,209 // punpckhwd %xmm1,%xmm2
+ .byte 184,128,0,128,55 // mov $0x37800080,%eax
+ .byte 102,68,15,110,192 // movd %eax,%xmm8
+ .byte 69,15,198,192,0 // shufps $0x0,%xmm8,%xmm8
+ .byte 102,15,111,200 // movdqa %xmm0,%xmm1
+ .byte 102,15,113,241,8 // psllw $0x8,%xmm1
+ .byte 102,15,113,208,8 // psrlw $0x8,%xmm0
+ .byte 102,15,235,193 // por %xmm1,%xmm0
+ .byte 102,15,56,51,192 // pmovzxwd %xmm0,%xmm0
+ .byte 15,91,192 // cvtdq2ps %xmm0,%xmm0
+ .byte 65,15,89,192 // mulps %xmm8,%xmm0
+ .byte 102,15,111,203 // movdqa %xmm3,%xmm1
+ .byte 102,15,113,241,8 // psllw $0x8,%xmm1
+ .byte 102,15,113,211,8 // psrlw $0x8,%xmm3
+ .byte 102,15,235,217 // por %xmm1,%xmm3
+ .byte 102,15,56,51,203 // pmovzxwd %xmm3,%xmm1
+ .byte 15,91,201 // cvtdq2ps %xmm1,%xmm1
+ .byte 65,15,89,200 // mulps %xmm8,%xmm1
+ .byte 102,15,111,218 // movdqa %xmm2,%xmm3
+ .byte 102,15,113,243,8 // psllw $0x8,%xmm3
+ .byte 102,15,113,210,8 // psrlw $0x8,%xmm2
+ .byte 102,15,235,211 // por %xmm3,%xmm2
+ .byte 102,15,56,51,210 // pmovzxwd %xmm2,%xmm2
+ .byte 15,91,210 // cvtdq2ps %xmm2,%xmm2
+ .byte 65,15,89,208 // mulps %xmm8,%xmm2
+ .byte 184,0,0,128,63 // mov $0x3f800000,%eax
+ .byte 102,15,110,216 // movd %eax,%xmm3
+ .byte 15,198,219,0 // shufps $0x0,%xmm3,%xmm3
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 255,224 // jmpq *%rax
+
HIDDEN _sk_store_u16_be_sse41
.globl _sk_store_u16_be_sse41
FUNCTION(_sk_store_u16_be_sse41)
@@ -17957,7 +18284,7 @@ _sk_linear_gradient_sse41:
.byte 69,15,198,237,0 // shufps $0x0,%xmm13,%xmm13
.byte 72,139,8 // mov (%rax),%rcx
.byte 72,133,201 // test %rcx,%rcx
- .byte 15,132,254,0,0,0 // je 2d95 <_sk_linear_gradient_sse41+0x138>
+ .byte 15,132,254,0,0,0 // je 2e4f <_sk_linear_gradient_sse41+0x138>
.byte 15,41,100,36,168 // movaps %xmm4,-0x58(%rsp)
.byte 15,41,108,36,184 // movaps %xmm5,-0x48(%rsp)
.byte 15,41,116,36,200 // movaps %xmm6,-0x38(%rsp)
@@ -18007,12 +18334,12 @@ _sk_linear_gradient_sse41:
.byte 15,40,196 // movaps %xmm4,%xmm0
.byte 72,131,192,36 // add $0x24,%rax
.byte 72,255,201 // dec %rcx
- .byte 15,133,65,255,255,255 // jne 2cc0 <_sk_linear_gradient_sse41+0x63>
+ .byte 15,133,65,255,255,255 // jne 2d7a <_sk_linear_gradient_sse41+0x63>
.byte 15,40,124,36,216 // movaps -0x28(%rsp),%xmm7
.byte 15,40,116,36,200 // movaps -0x38(%rsp),%xmm6
.byte 15,40,108,36,184 // movaps -0x48(%rsp),%xmm5
.byte 15,40,100,36,168 // movaps -0x58(%rsp),%xmm4
- .byte 235,13 // jmp 2da2 <_sk_linear_gradient_sse41+0x145>
+ .byte 235,13 // jmp 2e5c <_sk_linear_gradient_sse41+0x145>
.byte 15,87,201 // xorps %xmm1,%xmm1
.byte 15,87,210 // xorps %xmm2,%xmm2
.byte 15,87,219 // xorps %xmm3,%xmm3
@@ -21395,6 +21722,56 @@ _sk_load_u16_be_sse2:
.byte 72,173 // lods %ds:(%rsi),%rax
.byte 255,224 // jmpq *%rax
+HIDDEN _sk_load_rgb_u16_be_sse2
+.globl _sk_load_rgb_u16_be_sse2
+FUNCTION(_sk_load_rgb_u16_be_sse2)
+_sk_load_rgb_u16_be_sse2:
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 72,139,0 // mov (%rax),%rax
+ .byte 72,141,12,127 // lea (%rdi,%rdi,2),%rcx
+ .byte 243,15,111,20,72 // movdqu (%rax,%rcx,2),%xmm2
+ .byte 243,15,111,68,72,8 // movdqu 0x8(%rax,%rcx,2),%xmm0
+ .byte 102,15,115,216,4 // psrldq $0x4,%xmm0
+ .byte 102,15,111,202 // movdqa %xmm2,%xmm1
+ .byte 102,15,115,217,6 // psrldq $0x6,%xmm1
+ .byte 102,15,97,208 // punpcklwd %xmm0,%xmm2
+ .byte 102,15,115,216,6 // psrldq $0x6,%xmm0
+ .byte 102,15,97,200 // punpcklwd %xmm0,%xmm1
+ .byte 102,15,111,194 // movdqa %xmm2,%xmm0
+ .byte 102,15,97,193 // punpcklwd %xmm1,%xmm0
+ .byte 102,15,112,216,78 // pshufd $0x4e,%xmm0,%xmm3
+ .byte 102,15,105,209 // punpckhwd %xmm1,%xmm2
+ .byte 184,128,0,128,55 // mov $0x37800080,%eax
+ .byte 102,68,15,110,192 // movd %eax,%xmm8
+ .byte 69,15,198,192,0 // shufps $0x0,%xmm8,%xmm8
+ .byte 102,15,111,200 // movdqa %xmm0,%xmm1
+ .byte 102,15,113,241,8 // psllw $0x8,%xmm1
+ .byte 102,15,113,208,8 // psrlw $0x8,%xmm0
+ .byte 102,15,235,193 // por %xmm1,%xmm0
+ .byte 102,69,15,239,201 // pxor %xmm9,%xmm9
+ .byte 102,65,15,97,193 // punpcklwd %xmm9,%xmm0
+ .byte 15,91,192 // cvtdq2ps %xmm0,%xmm0
+ .byte 65,15,89,192 // mulps %xmm8,%xmm0
+ .byte 102,15,111,203 // movdqa %xmm3,%xmm1
+ .byte 102,15,113,241,8 // psllw $0x8,%xmm1
+ .byte 102,15,113,211,8 // psrlw $0x8,%xmm3
+ .byte 102,15,235,217 // por %xmm1,%xmm3
+ .byte 102,65,15,97,217 // punpcklwd %xmm9,%xmm3
+ .byte 15,91,203 // cvtdq2ps %xmm3,%xmm1
+ .byte 65,15,89,200 // mulps %xmm8,%xmm1
+ .byte 102,15,111,218 // movdqa %xmm2,%xmm3
+ .byte 102,15,113,243,8 // psllw $0x8,%xmm3
+ .byte 102,15,113,210,8 // psrlw $0x8,%xmm2
+ .byte 102,15,235,211 // por %xmm3,%xmm2
+ .byte 102,65,15,97,209 // punpcklwd %xmm9,%xmm2
+ .byte 15,91,210 // cvtdq2ps %xmm2,%xmm2
+ .byte 65,15,89,208 // mulps %xmm8,%xmm2
+ .byte 184,0,0,128,63 // mov $0x3f800000,%eax
+ .byte 102,15,110,216 // movd %eax,%xmm3
+ .byte 15,198,219,0 // shufps $0x0,%xmm3,%xmm3
+ .byte 72,173 // lods %ds:(%rsi),%rax
+ .byte 255,224 // jmpq *%rax
+
HIDDEN _sk_store_u16_be_sse2
.globl _sk_store_u16_be_sse2
FUNCTION(_sk_store_u16_be_sse2)
@@ -21906,7 +22283,7 @@ _sk_linear_gradient_sse2:
.byte 69,15,198,228,0 // shufps $0x0,%xmm12,%xmm12
.byte 72,139,8 // mov (%rax),%rcx
.byte 72,133,201 // test %rcx,%rcx
- .byte 15,132,15,1,0,0 // je 30a0 <_sk_linear_gradient_sse2+0x149>
+ .byte 15,132,15,1,0,0 // je 315f <_sk_linear_gradient_sse2+0x149>
.byte 72,139,64,8 // mov 0x8(%rax),%rax
.byte 72,131,192,32 // add $0x20,%rax
.byte 69,15,87,192 // xorps %xmm8,%xmm8
@@ -21967,8 +22344,8 @@ _sk_linear_gradient_sse2:
.byte 69,15,86,231 // orps %xmm15,%xmm12
.byte 72,131,192,36 // add $0x24,%rax
.byte 72,255,201 // dec %rcx
- .byte 15,133,8,255,255,255 // jne 2fa6 <_sk_linear_gradient_sse2+0x4f>
- .byte 235,13 // jmp 30ad <_sk_linear_gradient_sse2+0x156>
+ .byte 15,133,8,255,255,255 // jne 3065 <_sk_linear_gradient_sse2+0x4f>
+ .byte 235,13 // jmp 316c <_sk_linear_gradient_sse2+0x156>
.byte 15,87,201 // xorps %xmm1,%xmm1
.byte 15,87,210 // xorps %xmm2,%xmm2
.byte 15,87,219 // xorps %xmm3,%xmm3
diff --git a/src/jumper/SkJumper_generated_win.S b/src/jumper/SkJumper_generated_win.S
index 8762cbe61d..0762bc8cb8 100644
--- a/src/jumper/SkJumper_generated_win.S
+++ b/src/jumper/SkJumper_generated_win.S
@@ -1357,7 +1357,7 @@ _sk_lerp_565_hsw LABEL PROC
DB 255 ; (bad)
DB 255 ; (bad)
DB 255 ; (bad)
- DB 233,255,255,255,225 ; jmpq ffffffffe2001478 <_sk_callback_hsw+0xffffffffe1ffddc2>
+ DB 233,255,255,255,225 ; jmpq ffffffffe2001478 <_sk_callback_hsw+0xffffffffe1ffdc12>
DB 255 ; (bad)
DB 255 ; (bad)
DB 255 ; (bad)
@@ -2328,7 +2328,7 @@ _sk_load_4444_hsw LABEL PROC
DB 255 ; (bad)
DB 255 ; (bad)
DB 255 ; (bad)
- DB 233,255,255,255,225 ; jmpq ffffffffe2002334 <_sk_callback_hsw+0xffffffffe1ffec7e>
+ DB 233,255,255,255,225 ; jmpq ffffffffe2002334 <_sk_callback_hsw+0xffffffffe1ffeace>
DB 255 ; (bad)
DB 255 ; (bad)
DB 255 ; (bad)
@@ -2752,13 +2752,14 @@ _sk_store_f16_hsw LABEL PROC
PUBLIC _sk_load_u16_be_hsw
_sk_load_u16_be_hsw LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
- DB 72,139,0 ; mov (%rax),%rax
+ DB 76,139,0 ; mov (%rax),%r8
+ DB 72,141,4,189,0,0,0,0 ; lea 0x0(,%rdi,4),%rax
DB 72,133,201 ; test %rcx,%rcx
- DB 15,133,201,0,0,0 ; jne 2a47 <_sk_load_u16_be_hsw+0xd7>
- DB 197,121,16,4,248 ; vmovupd (%rax,%rdi,8),%xmm8
- DB 197,249,16,84,248,16 ; vmovupd 0x10(%rax,%rdi,8),%xmm2
- DB 197,249,16,92,248,32 ; vmovupd 0x20(%rax,%rdi,8),%xmm3
- DB 197,122,111,76,248,48 ; vmovdqu 0x30(%rax,%rdi,8),%xmm9
+ DB 15,133,205,0,0,0 ; jne 2a53 <_sk_load_u16_be_hsw+0xe3>
+ DB 196,65,121,16,4,64 ; vmovupd (%r8,%rax,2),%xmm8
+ DB 196,193,121,16,84,64,16 ; vmovupd 0x10(%r8,%rax,2),%xmm2
+ DB 196,193,121,16,92,64,32 ; vmovupd 0x20(%r8,%rax,2),%xmm3
+ DB 196,65,122,111,76,64,48 ; vmovdqu 0x30(%r8,%rax,2),%xmm9
DB 197,185,97,194 ; vpunpcklwd %xmm2,%xmm8,%xmm0
DB 197,185,105,210 ; vpunpckhwd %xmm2,%xmm8,%xmm2
DB 196,193,97,97,201 ; vpunpcklwd %xmm9,%xmm3,%xmm1
@@ -2800,37 +2801,125 @@ _sk_load_u16_be_hsw LABEL PROC
DB 197,172,89,219 ; vmulps %ymm3,%ymm10,%ymm3
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
- DB 197,123,16,4,248 ; vmovsd (%rax,%rdi,8),%xmm8
+ DB 196,65,123,16,4,64 ; vmovsd (%r8,%rax,2),%xmm8
DB 196,65,49,239,201 ; vpxor %xmm9,%xmm9,%xmm9
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,79 ; je 2aa6 <_sk_load_u16_be_hsw+0x136>
- DB 197,57,22,68,248,8 ; vmovhpd 0x8(%rax,%rdi,8),%xmm8,%xmm8
+ DB 116,85 ; je 2ab9 <_sk_load_u16_be_hsw+0x149>
+ DB 196,65,57,22,68,64,8 ; vmovhpd 0x8(%r8,%rax,2),%xmm8,%xmm8
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,67 ; jb 2aa6 <_sk_load_u16_be_hsw+0x136>
- DB 197,251,16,84,248,16 ; vmovsd 0x10(%rax,%rdi,8),%xmm2
+ DB 114,72 ; jb 2ab9 <_sk_load_u16_be_hsw+0x149>
+ DB 196,193,123,16,84,64,16 ; vmovsd 0x10(%r8,%rax,2),%xmm2
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 116,68 ; je 2ab3 <_sk_load_u16_be_hsw+0x143>
- DB 197,233,22,84,248,24 ; vmovhpd 0x18(%rax,%rdi,8),%xmm2,%xmm2
+ DB 116,72 ; je 2ac6 <_sk_load_u16_be_hsw+0x156>
+ DB 196,193,105,22,84,64,24 ; vmovhpd 0x18(%r8,%rax,2),%xmm2,%xmm2
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,56 ; jb 2ab3 <_sk_load_u16_be_hsw+0x143>
- DB 197,251,16,92,248,32 ; vmovsd 0x20(%rax,%rdi,8),%xmm3
+ DB 114,59 ; jb 2ac6 <_sk_load_u16_be_hsw+0x156>
+ DB 196,193,123,16,92,64,32 ; vmovsd 0x20(%r8,%rax,2),%xmm3
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 15,132,10,255,255,255 ; je 2995 <_sk_load_u16_be_hsw+0x25>
- DB 197,225,22,92,248,40 ; vmovhpd 0x28(%rax,%rdi,8),%xmm3,%xmm3
+ DB 15,132,5,255,255,255 ; je 29a1 <_sk_load_u16_be_hsw+0x31>
+ DB 196,193,97,22,92,64,40 ; vmovhpd 0x28(%r8,%rax,2),%xmm3,%xmm3
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 15,130,250,254,255,255 ; jb 2995 <_sk_load_u16_be_hsw+0x25>
- DB 197,122,126,76,248,48 ; vmovq 0x30(%rax,%rdi,8),%xmm9
- DB 233,239,254,255,255 ; jmpq 2995 <_sk_load_u16_be_hsw+0x25>
+ DB 15,130,244,254,255,255 ; jb 29a1 <_sk_load_u16_be_hsw+0x31>
+ DB 196,65,122,126,76,64,48 ; vmovq 0x30(%r8,%rax,2),%xmm9
+ DB 233,232,254,255,255 ; jmpq 29a1 <_sk_load_u16_be_hsw+0x31>
DB 197,225,87,219 ; vxorpd %xmm3,%xmm3,%xmm3
DB 197,233,87,210 ; vxorpd %xmm2,%xmm2,%xmm2
- DB 233,226,254,255,255 ; jmpq 2995 <_sk_load_u16_be_hsw+0x25>
+ DB 233,219,254,255,255 ; jmpq 29a1 <_sk_load_u16_be_hsw+0x31>
DB 197,225,87,219 ; vxorpd %xmm3,%xmm3,%xmm3
- DB 233,217,254,255,255 ; jmpq 2995 <_sk_load_u16_be_hsw+0x25>
+ DB 233,210,254,255,255 ; jmpq 29a1 <_sk_load_u16_be_hsw+0x31>
+
+PUBLIC _sk_load_rgb_u16_be_hsw
+_sk_load_rgb_u16_be_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 76,139,0 ; mov (%rax),%r8
+ DB 72,141,4,127 ; lea (%rdi,%rdi,2),%rax
+ DB 72,133,201 ; test %rcx,%rcx
+ DB 15,133,211,0,0,0 ; jne 2bb4 <_sk_load_rgb_u16_be_hsw+0xe5>
+ DB 196,193,122,111,4,64 ; vmovdqu (%r8,%rax,2),%xmm0
+ DB 196,193,122,111,84,64,12 ; vmovdqu 0xc(%r8,%rax,2),%xmm2
+ DB 196,193,122,111,76,64,24 ; vmovdqu 0x18(%r8,%rax,2),%xmm1
+ DB 196,193,122,111,92,64,32 ; vmovdqu 0x20(%r8,%rax,2),%xmm3
+ DB 197,225,115,219,4 ; vpsrldq $0x4,%xmm3,%xmm3
+ DB 197,185,115,216,6 ; vpsrldq $0x6,%xmm0,%xmm8
+ DB 197,177,115,218,6 ; vpsrldq $0x6,%xmm2,%xmm9
+ DB 197,161,115,217,6 ; vpsrldq $0x6,%xmm1,%xmm11
+ DB 197,169,115,219,6 ; vpsrldq $0x6,%xmm3,%xmm10
+ DB 197,249,97,194 ; vpunpcklwd %xmm2,%xmm0,%xmm0
+ DB 196,193,57,97,209 ; vpunpcklwd %xmm9,%xmm8,%xmm2
+ DB 197,241,97,203 ; vpunpcklwd %xmm3,%xmm1,%xmm1
+ DB 196,193,33,97,218 ; vpunpcklwd %xmm10,%xmm11,%xmm3
+ DB 197,121,97,194 ; vpunpcklwd %xmm2,%xmm0,%xmm8
+ DB 197,121,105,202 ; vpunpckhwd %xmm2,%xmm0,%xmm9
+ DB 197,241,97,211 ; vpunpcklwd %xmm3,%xmm1,%xmm2
+ DB 197,241,105,219 ; vpunpckhwd %xmm3,%xmm1,%xmm3
+ DB 184,128,0,128,55 ; mov $0x37800080,%eax
+ DB 197,249,110,192 ; vmovd %eax,%xmm0
+ DB 196,98,125,88,208 ; vpbroadcastd %xmm0,%ymm10
+ DB 197,185,108,194 ; vpunpcklqdq %xmm2,%xmm8,%xmm0
+ DB 197,241,113,240,8 ; vpsllw $0x8,%xmm0,%xmm1
+ DB 197,249,113,208,8 ; vpsrlw $0x8,%xmm0,%xmm0
+ DB 197,241,235,192 ; vpor %xmm0,%xmm1,%xmm0
+ DB 196,226,125,51,192 ; vpmovzxwd %xmm0,%ymm0
+ DB 197,252,91,192 ; vcvtdq2ps %ymm0,%ymm0
+ DB 197,172,89,192 ; vmulps %ymm0,%ymm10,%ymm0
+ DB 197,185,109,202 ; vpunpckhqdq %xmm2,%xmm8,%xmm1
+ DB 197,233,113,241,8 ; vpsllw $0x8,%xmm1,%xmm2
+ DB 197,241,113,209,8 ; vpsrlw $0x8,%xmm1,%xmm1
+ DB 197,233,235,201 ; vpor %xmm1,%xmm2,%xmm1
+ DB 196,226,125,51,201 ; vpmovzxwd %xmm1,%ymm1
+ DB 197,252,91,201 ; vcvtdq2ps %ymm1,%ymm1
+ DB 197,172,89,201 ; vmulps %ymm1,%ymm10,%ymm1
+ DB 197,177,108,211 ; vpunpcklqdq %xmm3,%xmm9,%xmm2
+ DB 197,225,113,242,8 ; vpsllw $0x8,%xmm2,%xmm3
+ DB 197,233,113,210,8 ; vpsrlw $0x8,%xmm2,%xmm2
+ DB 197,225,235,210 ; vpor %xmm2,%xmm3,%xmm2
+ DB 196,226,125,51,210 ; vpmovzxwd %xmm2,%ymm2
+ DB 197,252,91,210 ; vcvtdq2ps %ymm2,%ymm2
+ DB 197,172,89,210 ; vmulps %ymm2,%ymm10,%ymm2
+ DB 184,0,0,128,63 ; mov $0x3f800000,%eax
+ DB 197,249,110,216 ; vmovd %eax,%xmm3
+ DB 196,226,125,88,219 ; vpbroadcastd %xmm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+ DB 196,193,121,110,4,64 ; vmovd (%r8,%rax,2),%xmm0
+ DB 196,193,121,196,68,64,4,2 ; vpinsrw $0x2,0x4(%r8,%rax,2),%xmm0,%xmm0
+ DB 72,131,249,1 ; cmp $0x1,%rcx
+ DB 117,5 ; jne 2bcd <_sk_load_rgb_u16_be_hsw+0xfe>
+ DB 233,72,255,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 196,193,121,110,76,64,6 ; vmovd 0x6(%r8,%rax,2),%xmm1
+ DB 196,65,113,196,68,64,10,2 ; vpinsrw $0x2,0xa(%r8,%rax,2),%xmm1,%xmm8
+ DB 72,131,249,3 ; cmp $0x3,%rcx
+ DB 114,26 ; jb 2bfc <_sk_load_rgb_u16_be_hsw+0x12d>
+ DB 196,193,121,110,76,64,12 ; vmovd 0xc(%r8,%rax,2),%xmm1
+ DB 196,193,113,196,84,64,16,2 ; vpinsrw $0x2,0x10(%r8,%rax,2),%xmm1,%xmm2
+ DB 72,131,249,3 ; cmp $0x3,%rcx
+ DB 117,10 ; jne 2c01 <_sk_load_rgb_u16_be_hsw+0x132>
+ DB 233,25,255,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 233,20,255,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 196,193,121,110,76,64,18 ; vmovd 0x12(%r8,%rax,2),%xmm1
+ DB 196,65,113,196,76,64,22,2 ; vpinsrw $0x2,0x16(%r8,%rax,2),%xmm1,%xmm9
+ DB 72,131,249,5 ; cmp $0x5,%rcx
+ DB 114,26 ; jb 2c30 <_sk_load_rgb_u16_be_hsw+0x161>
+ DB 196,193,121,110,76,64,24 ; vmovd 0x18(%r8,%rax,2),%xmm1
+ DB 196,193,113,196,76,64,28,2 ; vpinsrw $0x2,0x1c(%r8,%rax,2),%xmm1,%xmm1
+ DB 72,131,249,5 ; cmp $0x5,%rcx
+ DB 117,10 ; jne 2c35 <_sk_load_rgb_u16_be_hsw+0x166>
+ DB 233,229,254,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 233,224,254,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 196,193,121,110,92,64,30 ; vmovd 0x1e(%r8,%rax,2),%xmm3
+ DB 196,65,97,196,92,64,34,2 ; vpinsrw $0x2,0x22(%r8,%rax,2),%xmm3,%xmm11
+ DB 72,131,249,7 ; cmp $0x7,%rcx
+ DB 114,20 ; jb 2c5e <_sk_load_rgb_u16_be_hsw+0x18f>
+ DB 196,193,121,110,92,64,36 ; vmovd 0x24(%r8,%rax,2),%xmm3
+ DB 196,193,97,196,92,64,40,2 ; vpinsrw $0x2,0x28(%r8,%rax,2),%xmm3,%xmm3
+ DB 233,183,254,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
+ DB 233,178,254,255,255 ; jmpq 2b15 <_sk_load_rgb_u16_be_hsw+0x46>
PUBLIC _sk_store_u16_be_hsw
_sk_store_u16_be_hsw LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 76,139,0 ; mov (%rax),%r8
+ DB 76,141,12,189,0,0,0,0 ; lea 0x0(,%rdi,4),%r9
DB 184,0,255,127,71 ; mov $0x477fff00,%eax
DB 197,121,110,192 ; vmovd %eax,%xmm8
DB 196,66,125,88,192 ; vpbroadcastd %xmm8,%ymm8
@@ -2871,40 +2960,40 @@ _sk_store_u16_be_hsw LABEL PROC
DB 196,65,17,98,200 ; vpunpckldq %xmm8,%xmm13,%xmm9
DB 196,65,17,106,192 ; vpunpckhdq %xmm8,%xmm13,%xmm8
DB 72,133,201 ; test %rcx,%rcx
- DB 117,31 ; jne 2baf <_sk_store_u16_be_hsw+0xf3>
- DB 196,65,120,17,28,248 ; vmovups %xmm11,(%r8,%rdi,8)
- DB 196,65,120,17,84,248,16 ; vmovups %xmm10,0x10(%r8,%rdi,8)
- DB 196,65,120,17,76,248,32 ; vmovups %xmm9,0x20(%r8,%rdi,8)
- DB 196,65,122,127,68,248,48 ; vmovdqu %xmm8,0x30(%r8,%rdi,8)
+ DB 117,31 ; jne 2d5e <_sk_store_u16_be_hsw+0xfb>
+ DB 196,1,120,17,28,72 ; vmovups %xmm11,(%r8,%r9,2)
+ DB 196,1,120,17,84,72,16 ; vmovups %xmm10,0x10(%r8,%r9,2)
+ DB 196,1,120,17,76,72,32 ; vmovups %xmm9,0x20(%r8,%r9,2)
+ DB 196,1,122,127,68,72,48 ; vmovdqu %xmm8,0x30(%r8,%r9,2)
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
- DB 196,65,121,214,28,248 ; vmovq %xmm11,(%r8,%rdi,8)
+ DB 196,1,121,214,28,72 ; vmovq %xmm11,(%r8,%r9,2)
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,240 ; je 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,23,92,248,8 ; vmovhpd %xmm11,0x8(%r8,%rdi,8)
+ DB 116,240 ; je 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,23,92,72,8 ; vmovhpd %xmm11,0x8(%r8,%r9,2)
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,227 ; jb 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,214,84,248,16 ; vmovq %xmm10,0x10(%r8,%rdi,8)
- DB 116,218 ; je 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,23,84,248,24 ; vmovhpd %xmm10,0x18(%r8,%rdi,8)
+ DB 114,227 ; jb 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,214,84,72,16 ; vmovq %xmm10,0x10(%r8,%r9,2)
+ DB 116,218 ; je 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,23,84,72,24 ; vmovhpd %xmm10,0x18(%r8,%r9,2)
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,205 ; jb 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,214,76,248,32 ; vmovq %xmm9,0x20(%r8,%rdi,8)
- DB 116,196 ; je 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,23,76,248,40 ; vmovhpd %xmm9,0x28(%r8,%rdi,8)
+ DB 114,205 ; jb 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,214,76,72,32 ; vmovq %xmm9,0x20(%r8,%r9,2)
+ DB 116,196 ; je 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,23,76,72,40 ; vmovhpd %xmm9,0x28(%r8,%r9,2)
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 114,183 ; jb 2bab <_sk_store_u16_be_hsw+0xef>
- DB 196,65,121,214,68,248,48 ; vmovq %xmm8,0x30(%r8,%rdi,8)
- DB 235,174 ; jmp 2bab <_sk_store_u16_be_hsw+0xef>
+ DB 114,183 ; jb 2d5a <_sk_store_u16_be_hsw+0xf7>
+ DB 196,1,121,214,68,72,48 ; vmovq %xmm8,0x30(%r8,%r9,2)
+ DB 235,174 ; jmp 2d5a <_sk_store_u16_be_hsw+0xf7>
PUBLIC _sk_load_f32_hsw
_sk_load_f32_hsw LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 119,110 ; ja 2c73 <_sk_load_f32_hsw+0x76>
+ DB 119,110 ; ja 2e22 <_sk_load_f32_hsw+0x76>
DB 76,139,0 ; mov (%rax),%r8
DB 76,141,12,189,0,0,0,0 ; lea 0x0(,%rdi,4),%r9
- DB 76,141,21,133,0,0,0 ; lea 0x85(%rip),%r10 # 2c9c <_sk_load_f32_hsw+0x9f>
+ DB 76,141,21,134,0,0,0 ; lea 0x86(%rip),%r10 # 2e4c <_sk_load_f32_hsw+0xa0>
DB 73,99,4,138 ; movslq (%r10,%rcx,4),%rax
DB 76,1,208 ; add %r10,%rax
DB 255,224 ; jmpq *%rax
@@ -2930,19 +3019,20 @@ _sk_load_f32_hsw LABEL PROC
DB 196,193,101,21,216 ; vunpckhpd %ymm8,%ymm3,%ymm3
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
- DB 144 ; nop
- DB 132,255 ; test %bh,%bh
+ DB 102,144 ; xchg %ax,%ax
+ DB 131,255,255 ; cmp $0xffffffff,%edi
+ DB 255,202 ; dec %edx
+ DB 255 ; (bad)
DB 255 ; (bad)
- DB 255,203 ; dec %ebx
DB 255 ; (bad)
+ DB 189,255,255,255,176 ; mov $0xb0ffffff,%ebp
DB 255 ; (bad)
DB 255 ; (bad)
- DB 190,255,255,255,177 ; mov $0xb1ffffff,%esi
+ DB 255,163,255,255,255,155 ; jmpq *-0x64000001(%rbx)
DB 255 ; (bad)
DB 255 ; (bad)
- DB 255,164,255,255,255,156,255 ; jmpq *-0x630001(%rdi,%rdi,8)
+ DB 255,147,255,255,255,139 ; callq *-0x74000001(%rbx)
DB 255 ; (bad)
- DB 255,148,255,255,255,140,255 ; callq *-0x730001(%rdi,%rdi,8)
DB 255 ; (bad)
DB 255 ; .byte 0xff
@@ -2960,7 +3050,7 @@ _sk_store_f32_hsw LABEL PROC
DB 196,65,37,20,196 ; vunpcklpd %ymm12,%ymm11,%ymm8
DB 196,65,37,21,220 ; vunpckhpd %ymm12,%ymm11,%ymm11
DB 72,133,201 ; test %rcx,%rcx
- DB 117,55 ; jne 2d29 <_sk_store_f32_hsw+0x6d>
+ DB 117,55 ; jne 2ed9 <_sk_store_f32_hsw+0x6d>
DB 196,67,45,24,225,1 ; vinsertf128 $0x1,%xmm9,%ymm10,%ymm12
DB 196,67,61,24,235,1 ; vinsertf128 $0x1,%xmm11,%ymm8,%ymm13
DB 196,67,45,6,201,49 ; vperm2f128 $0x31,%ymm9,%ymm10,%ymm9
@@ -2973,22 +3063,22 @@ _sk_store_f32_hsw LABEL PROC
DB 255,224 ; jmpq *%rax
DB 196,65,121,17,20,128 ; vmovupd %xmm10,(%r8,%rax,4)
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,240 ; je 2d25 <_sk_store_f32_hsw+0x69>
+ DB 116,240 ; je 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,65,121,17,76,128,16 ; vmovupd %xmm9,0x10(%r8,%rax,4)
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,227 ; jb 2d25 <_sk_store_f32_hsw+0x69>
+ DB 114,227 ; jb 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,65,121,17,68,128,32 ; vmovupd %xmm8,0x20(%r8,%rax,4)
- DB 116,218 ; je 2d25 <_sk_store_f32_hsw+0x69>
+ DB 116,218 ; je 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,65,121,17,92,128,48 ; vmovupd %xmm11,0x30(%r8,%rax,4)
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,205 ; jb 2d25 <_sk_store_f32_hsw+0x69>
+ DB 114,205 ; jb 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,67,125,25,84,128,64,1 ; vextractf128 $0x1,%ymm10,0x40(%r8,%rax,4)
- DB 116,195 ; je 2d25 <_sk_store_f32_hsw+0x69>
+ DB 116,195 ; je 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,67,125,25,76,128,80,1 ; vextractf128 $0x1,%ymm9,0x50(%r8,%rax,4)
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 114,181 ; jb 2d25 <_sk_store_f32_hsw+0x69>
+ DB 114,181 ; jb 2ed5 <_sk_store_f32_hsw+0x69>
DB 196,67,125,25,68,128,96,1 ; vextractf128 $0x1,%ymm8,0x60(%r8,%rax,4)
- DB 235,171 ; jmp 2d25 <_sk_store_f32_hsw+0x69>
+ DB 235,171 ; jmp 2ed5 <_sk_store_f32_hsw+0x69>
PUBLIC _sk_clamp_x_hsw
_sk_clamp_x_hsw LABEL PROC
@@ -3229,7 +3319,7 @@ _sk_linear_gradient_hsw LABEL PROC
DB 196,98,125,24,72,28 ; vbroadcastss 0x1c(%rax),%ymm9
DB 76,139,0 ; mov (%rax),%r8
DB 77,133,192 ; test %r8,%r8
- DB 15,132,143,0,0,0 ; je 31b5 <_sk_linear_gradient_hsw+0xb5>
+ DB 15,132,143,0,0,0 ; je 3365 <_sk_linear_gradient_hsw+0xb5>
DB 72,139,64,8 ; mov 0x8(%rax),%rax
DB 72,131,192,32 ; add $0x20,%rax
DB 196,65,28,87,228 ; vxorps %ymm12,%ymm12,%ymm12
@@ -3256,8 +3346,8 @@ _sk_linear_gradient_hsw LABEL PROC
DB 196,67,13,74,201,208 ; vblendvps %ymm13,%ymm9,%ymm14,%ymm9
DB 72,131,192,36 ; add $0x24,%rax
DB 73,255,200 ; dec %r8
- DB 117,140 ; jne 313f <_sk_linear_gradient_hsw+0x3f>
- DB 235,17 ; jmp 31c6 <_sk_linear_gradient_hsw+0xc6>
+ DB 117,140 ; jne 32ef <_sk_linear_gradient_hsw+0x3f>
+ DB 235,17 ; jmp 3376 <_sk_linear_gradient_hsw+0xc6>
DB 197,244,87,201 ; vxorps %ymm1,%ymm1,%ymm1
DB 197,236,87,210 ; vxorps %ymm2,%ymm2,%ymm2
DB 197,228,87,219 ; vxorps %ymm3,%ymm3,%ymm3
@@ -7023,13 +7113,14 @@ _sk_store_f16_avx LABEL PROC
PUBLIC _sk_load_u16_be_avx
_sk_load_u16_be_avx LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
- DB 72,139,0 ; mov (%rax),%rax
+ DB 76,139,0 ; mov (%rax),%r8
+ DB 72,141,4,189,0,0,0,0 ; lea 0x0(,%rdi,4),%rax
DB 72,133,201 ; test %rcx,%rcx
- DB 15,133,1,1,0,0 ; jne 3745 <_sk_load_u16_be_avx+0x10f>
- DB 197,121,16,4,248 ; vmovupd (%rax,%rdi,8),%xmm8
- DB 197,249,16,84,248,16 ; vmovupd 0x10(%rax,%rdi,8),%xmm2
- DB 197,249,16,92,248,32 ; vmovupd 0x20(%rax,%rdi,8),%xmm3
- DB 197,122,111,76,248,48 ; vmovdqu 0x30(%rax,%rdi,8),%xmm9
+ DB 15,133,5,1,0,0 ; jne 3751 <_sk_load_u16_be_avx+0x11b>
+ DB 196,65,121,16,4,64 ; vmovupd (%r8,%rax,2),%xmm8
+ DB 196,193,121,16,84,64,16 ; vmovupd 0x10(%r8,%rax,2),%xmm2
+ DB 196,193,121,16,92,64,32 ; vmovupd 0x20(%r8,%rax,2),%xmm3
+ DB 196,65,122,111,76,64,48 ; vmovdqu 0x30(%r8,%rax,2),%xmm9
DB 197,185,97,194 ; vpunpcklwd %xmm2,%xmm8,%xmm0
DB 197,185,105,210 ; vpunpckhwd %xmm2,%xmm8,%xmm2
DB 196,193,97,97,201 ; vpunpcklwd %xmm9,%xmm3,%xmm1
@@ -7081,37 +7172,134 @@ _sk_load_u16_be_avx LABEL PROC
DB 197,156,89,219 ; vmulps %ymm3,%ymm12,%ymm3
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
- DB 197,123,16,4,248 ; vmovsd (%rax,%rdi,8),%xmm8
+ DB 196,65,123,16,4,64 ; vmovsd (%r8,%rax,2),%xmm8
DB 196,65,49,239,201 ; vpxor %xmm9,%xmm9,%xmm9
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,79 ; je 37a4 <_sk_load_u16_be_avx+0x16e>
- DB 197,57,22,68,248,8 ; vmovhpd 0x8(%rax,%rdi,8),%xmm8,%xmm8
+ DB 116,85 ; je 37b7 <_sk_load_u16_be_avx+0x181>
+ DB 196,65,57,22,68,64,8 ; vmovhpd 0x8(%r8,%rax,2),%xmm8,%xmm8
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,67 ; jb 37a4 <_sk_load_u16_be_avx+0x16e>
- DB 197,251,16,84,248,16 ; vmovsd 0x10(%rax,%rdi,8),%xmm2
+ DB 114,72 ; jb 37b7 <_sk_load_u16_be_avx+0x181>
+ DB 196,193,123,16,84,64,16 ; vmovsd 0x10(%r8,%rax,2),%xmm2
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 116,68 ; je 37b1 <_sk_load_u16_be_avx+0x17b>
- DB 197,233,22,84,248,24 ; vmovhpd 0x18(%rax,%rdi,8),%xmm2,%xmm2
+ DB 116,72 ; je 37c4 <_sk_load_u16_be_avx+0x18e>
+ DB 196,193,105,22,84,64,24 ; vmovhpd 0x18(%r8,%rax,2),%xmm2,%xmm2
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,56 ; jb 37b1 <_sk_load_u16_be_avx+0x17b>
- DB 197,251,16,92,248,32 ; vmovsd 0x20(%rax,%rdi,8),%xmm3
+ DB 114,59 ; jb 37c4 <_sk_load_u16_be_avx+0x18e>
+ DB 196,193,123,16,92,64,32 ; vmovsd 0x20(%r8,%rax,2),%xmm3
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 15,132,210,254,255,255 ; je 365b <_sk_load_u16_be_avx+0x25>
- DB 197,225,22,92,248,40 ; vmovhpd 0x28(%rax,%rdi,8),%xmm3,%xmm3
+ DB 15,132,205,254,255,255 ; je 3667 <_sk_load_u16_be_avx+0x31>
+ DB 196,193,97,22,92,64,40 ; vmovhpd 0x28(%r8,%rax,2),%xmm3,%xmm3
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 15,130,194,254,255,255 ; jb 365b <_sk_load_u16_be_avx+0x25>
- DB 197,122,126,76,248,48 ; vmovq 0x30(%rax,%rdi,8),%xmm9
- DB 233,183,254,255,255 ; jmpq 365b <_sk_load_u16_be_avx+0x25>
+ DB 15,130,188,254,255,255 ; jb 3667 <_sk_load_u16_be_avx+0x31>
+ DB 196,65,122,126,76,64,48 ; vmovq 0x30(%r8,%rax,2),%xmm9
+ DB 233,176,254,255,255 ; jmpq 3667 <_sk_load_u16_be_avx+0x31>
DB 197,225,87,219 ; vxorpd %xmm3,%xmm3,%xmm3
DB 197,233,87,210 ; vxorpd %xmm2,%xmm2,%xmm2
- DB 233,170,254,255,255 ; jmpq 365b <_sk_load_u16_be_avx+0x25>
+ DB 233,163,254,255,255 ; jmpq 3667 <_sk_load_u16_be_avx+0x31>
DB 197,225,87,219 ; vxorpd %xmm3,%xmm3,%xmm3
- DB 233,161,254,255,255 ; jmpq 365b <_sk_load_u16_be_avx+0x25>
+ DB 233,154,254,255,255 ; jmpq 3667 <_sk_load_u16_be_avx+0x31>
+
+PUBLIC _sk_load_rgb_u16_be_avx
+_sk_load_rgb_u16_be_avx LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 76,139,0 ; mov (%rax),%r8
+ DB 72,141,4,127 ; lea (%rdi,%rdi,2),%rax
+ DB 72,133,201 ; test %rcx,%rcx
+ DB 15,133,8,1,0,0 ; jne 38e7 <_sk_load_rgb_u16_be_avx+0x11a>
+ DB 196,193,122,111,4,64 ; vmovdqu (%r8,%rax,2),%xmm0
+ DB 196,193,122,111,84,64,12 ; vmovdqu 0xc(%r8,%rax,2),%xmm2
+ DB 196,193,122,111,76,64,24 ; vmovdqu 0x18(%r8,%rax,2),%xmm1
+ DB 196,193,122,111,92,64,32 ; vmovdqu 0x20(%r8,%rax,2),%xmm3
+ DB 197,225,115,219,4 ; vpsrldq $0x4,%xmm3,%xmm3
+ DB 197,185,115,216,6 ; vpsrldq $0x6,%xmm0,%xmm8
+ DB 197,177,115,218,6 ; vpsrldq $0x6,%xmm2,%xmm9
+ DB 197,161,115,217,6 ; vpsrldq $0x6,%xmm1,%xmm11
+ DB 197,169,115,219,6 ; vpsrldq $0x6,%xmm3,%xmm10
+ DB 197,249,97,194 ; vpunpcklwd %xmm2,%xmm0,%xmm0
+ DB 196,193,57,97,209 ; vpunpcklwd %xmm9,%xmm8,%xmm2
+ DB 197,241,97,203 ; vpunpcklwd %xmm3,%xmm1,%xmm1
+ DB 196,193,33,97,218 ; vpunpcklwd %xmm10,%xmm11,%xmm3
+ DB 197,121,97,194 ; vpunpcklwd %xmm2,%xmm0,%xmm8
+ DB 197,121,105,202 ; vpunpckhwd %xmm2,%xmm0,%xmm9
+ DB 197,241,97,211 ; vpunpcklwd %xmm3,%xmm1,%xmm2
+ DB 197,113,105,219 ; vpunpckhwd %xmm3,%xmm1,%xmm11
+ DB 184,128,0,128,55 ; mov $0x37800080,%eax
+ DB 197,249,110,192 ; vmovd %eax,%xmm0
+ DB 196,227,121,4,192,0 ; vpermilps $0x0,%xmm0,%xmm0
+ DB 196,99,125,24,208,1 ; vinsertf128 $0x1,%xmm0,%ymm0,%ymm10
+ DB 197,185,108,194 ; vpunpcklqdq %xmm2,%xmm8,%xmm0
+ DB 197,241,113,240,8 ; vpsllw $0x8,%xmm0,%xmm1
+ DB 197,249,113,208,8 ; vpsrlw $0x8,%xmm0,%xmm0
+ DB 197,241,235,192 ; vpor %xmm0,%xmm1,%xmm0
+ DB 196,65,25,239,228 ; vpxor %xmm12,%xmm12,%xmm12
+ DB 196,193,121,105,204 ; vpunpckhwd %xmm12,%xmm0,%xmm1
+ DB 196,226,121,51,192 ; vpmovzxwd %xmm0,%xmm0
+ DB 196,227,125,24,193,1 ; vinsertf128 $0x1,%xmm1,%ymm0,%ymm0
+ DB 197,252,91,192 ; vcvtdq2ps %ymm0,%ymm0
+ DB 197,172,89,192 ; vmulps %ymm0,%ymm10,%ymm0
+ DB 197,185,109,202 ; vpunpckhqdq %xmm2,%xmm8,%xmm1
+ DB 197,233,113,241,8 ; vpsllw $0x8,%xmm1,%xmm2
+ DB 197,241,113,209,8 ; vpsrlw $0x8,%xmm1,%xmm1
+ DB 197,233,235,201 ; vpor %xmm1,%xmm2,%xmm1
+ DB 196,193,113,105,212 ; vpunpckhwd %xmm12,%xmm1,%xmm2
+ DB 196,226,121,51,201 ; vpmovzxwd %xmm1,%xmm1
+ DB 196,227,117,24,202,1 ; vinsertf128 $0x1,%xmm2,%ymm1,%ymm1
+ DB 197,252,91,201 ; vcvtdq2ps %ymm1,%ymm1
+ DB 197,172,89,201 ; vmulps %ymm1,%ymm10,%ymm1
+ DB 196,193,49,108,211 ; vpunpcklqdq %xmm11,%xmm9,%xmm2
+ DB 197,225,113,242,8 ; vpsllw $0x8,%xmm2,%xmm3
+ DB 197,233,113,210,8 ; vpsrlw $0x8,%xmm2,%xmm2
+ DB 197,225,235,210 ; vpor %xmm2,%xmm3,%xmm2
+ DB 196,193,105,105,220 ; vpunpckhwd %xmm12,%xmm2,%xmm3
+ DB 196,226,121,51,210 ; vpmovzxwd %xmm2,%xmm2
+ DB 196,227,109,24,211,1 ; vinsertf128 $0x1,%xmm3,%ymm2,%ymm2
+ DB 197,252,91,210 ; vcvtdq2ps %ymm2,%ymm2
+ DB 197,172,89,210 ; vmulps %ymm2,%ymm10,%ymm2
+ DB 184,0,0,128,63 ; mov $0x3f800000,%eax
+ DB 197,249,110,216 ; vmovd %eax,%xmm3
+ DB 196,227,121,4,219,0 ; vpermilps $0x0,%xmm3,%xmm3
+ DB 196,227,101,24,219,1 ; vinsertf128 $0x1,%xmm3,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+ DB 196,193,121,110,4,64 ; vmovd (%r8,%rax,2),%xmm0
+ DB 196,193,121,196,68,64,4,2 ; vpinsrw $0x2,0x4(%r8,%rax,2),%xmm0,%xmm0
+ DB 72,131,249,1 ; cmp $0x1,%rcx
+ DB 117,5 ; jne 3900 <_sk_load_rgb_u16_be_avx+0x133>
+ DB 233,19,255,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 196,193,121,110,76,64,6 ; vmovd 0x6(%r8,%rax,2),%xmm1
+ DB 196,65,113,196,68,64,10,2 ; vpinsrw $0x2,0xa(%r8,%rax,2),%xmm1,%xmm8
+ DB 72,131,249,3 ; cmp $0x3,%rcx
+ DB 114,26 ; jb 392f <_sk_load_rgb_u16_be_avx+0x162>
+ DB 196,193,121,110,76,64,12 ; vmovd 0xc(%r8,%rax,2),%xmm1
+ DB 196,193,113,196,84,64,16,2 ; vpinsrw $0x2,0x10(%r8,%rax,2),%xmm1,%xmm2
+ DB 72,131,249,3 ; cmp $0x3,%rcx
+ DB 117,10 ; jne 3934 <_sk_load_rgb_u16_be_avx+0x167>
+ DB 233,228,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 233,223,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 196,193,121,110,76,64,18 ; vmovd 0x12(%r8,%rax,2),%xmm1
+ DB 196,65,113,196,76,64,22,2 ; vpinsrw $0x2,0x16(%r8,%rax,2),%xmm1,%xmm9
+ DB 72,131,249,5 ; cmp $0x5,%rcx
+ DB 114,26 ; jb 3963 <_sk_load_rgb_u16_be_avx+0x196>
+ DB 196,193,121,110,76,64,24 ; vmovd 0x18(%r8,%rax,2),%xmm1
+ DB 196,193,113,196,76,64,28,2 ; vpinsrw $0x2,0x1c(%r8,%rax,2),%xmm1,%xmm1
+ DB 72,131,249,5 ; cmp $0x5,%rcx
+ DB 117,10 ; jne 3968 <_sk_load_rgb_u16_be_avx+0x19b>
+ DB 233,176,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 233,171,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 196,193,121,110,92,64,30 ; vmovd 0x1e(%r8,%rax,2),%xmm3
+ DB 196,65,97,196,92,64,34,2 ; vpinsrw $0x2,0x22(%r8,%rax,2),%xmm3,%xmm11
+ DB 72,131,249,7 ; cmp $0x7,%rcx
+ DB 114,20 ; jb 3991 <_sk_load_rgb_u16_be_avx+0x1c4>
+ DB 196,193,121,110,92,64,36 ; vmovd 0x24(%r8,%rax,2),%xmm3
+ DB 196,193,97,196,92,64,40,2 ; vpinsrw $0x2,0x28(%r8,%rax,2),%xmm3,%xmm3
+ DB 233,130,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
+ DB 233,125,254,255,255 ; jmpq 3813 <_sk_load_rgb_u16_be_avx+0x46>
PUBLIC _sk_store_u16_be_avx
_sk_store_u16_be_avx LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 76,139,0 ; mov (%rax),%r8
+ DB 76,141,12,189,0,0,0,0 ; lea 0x0(,%rdi,4),%r9
DB 184,0,255,127,71 ; mov $0x477fff00,%eax
DB 197,121,110,192 ; vmovd %eax,%xmm8
DB 196,67,121,4,192,0 ; vpermilps $0x0,%xmm8,%xmm8
@@ -7153,40 +7341,40 @@ _sk_store_u16_be_avx LABEL PROC
DB 196,65,17,98,200 ; vpunpckldq %xmm8,%xmm13,%xmm9
DB 196,65,17,106,192 ; vpunpckhdq %xmm8,%xmm13,%xmm8
DB 72,133,201 ; test %rcx,%rcx
- DB 117,31 ; jne 38b4 <_sk_store_u16_be_avx+0xfa>
- DB 196,65,120,17,28,248 ; vmovups %xmm11,(%r8,%rdi,8)
- DB 196,65,120,17,84,248,16 ; vmovups %xmm10,0x10(%r8,%rdi,8)
- DB 196,65,120,17,76,248,32 ; vmovups %xmm9,0x20(%r8,%rdi,8)
- DB 196,65,122,127,68,248,48 ; vmovdqu %xmm8,0x30(%r8,%rdi,8)
+ DB 117,31 ; jne 3a98 <_sk_store_u16_be_avx+0x102>
+ DB 196,1,120,17,28,72 ; vmovups %xmm11,(%r8,%r9,2)
+ DB 196,1,120,17,84,72,16 ; vmovups %xmm10,0x10(%r8,%r9,2)
+ DB 196,1,120,17,76,72,32 ; vmovups %xmm9,0x20(%r8,%r9,2)
+ DB 196,1,122,127,68,72,48 ; vmovdqu %xmm8,0x30(%r8,%r9,2)
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
- DB 196,65,121,214,28,248 ; vmovq %xmm11,(%r8,%rdi,8)
+ DB 196,1,121,214,28,72 ; vmovq %xmm11,(%r8,%r9,2)
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,240 ; je 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,23,92,248,8 ; vmovhpd %xmm11,0x8(%r8,%rdi,8)
+ DB 116,240 ; je 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,23,92,72,8 ; vmovhpd %xmm11,0x8(%r8,%r9,2)
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,227 ; jb 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,214,84,248,16 ; vmovq %xmm10,0x10(%r8,%rdi,8)
- DB 116,218 ; je 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,23,84,248,24 ; vmovhpd %xmm10,0x18(%r8,%rdi,8)
+ DB 114,227 ; jb 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,214,84,72,16 ; vmovq %xmm10,0x10(%r8,%r9,2)
+ DB 116,218 ; je 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,23,84,72,24 ; vmovhpd %xmm10,0x18(%r8,%r9,2)
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,205 ; jb 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,214,76,248,32 ; vmovq %xmm9,0x20(%r8,%rdi,8)
- DB 116,196 ; je 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,23,76,248,40 ; vmovhpd %xmm9,0x28(%r8,%rdi,8)
+ DB 114,205 ; jb 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,214,76,72,32 ; vmovq %xmm9,0x20(%r8,%r9,2)
+ DB 116,196 ; je 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,23,76,72,40 ; vmovhpd %xmm9,0x28(%r8,%r9,2)
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 114,183 ; jb 38b0 <_sk_store_u16_be_avx+0xf6>
- DB 196,65,121,214,68,248,48 ; vmovq %xmm8,0x30(%r8,%rdi,8)
- DB 235,174 ; jmp 38b0 <_sk_store_u16_be_avx+0xf6>
+ DB 114,183 ; jb 3a94 <_sk_store_u16_be_avx+0xfe>
+ DB 196,1,121,214,68,72,48 ; vmovq %xmm8,0x30(%r8,%r9,2)
+ DB 235,174 ; jmp 3a94 <_sk_store_u16_be_avx+0xfe>
PUBLIC _sk_load_f32_avx
_sk_load_f32_avx LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 119,110 ; ja 3978 <_sk_load_f32_avx+0x76>
+ DB 119,110 ; ja 3b5c <_sk_load_f32_avx+0x76>
DB 76,139,0 ; mov (%rax),%r8
DB 76,141,12,189,0,0,0,0 ; lea 0x0(,%rdi,4),%r9
- DB 76,141,21,132,0,0,0 ; lea 0x84(%rip),%r10 # 39a0 <_sk_load_f32_avx+0x9e>
+ DB 76,141,21,132,0,0,0 ; lea 0x84(%rip),%r10 # 3b84 <_sk_load_f32_avx+0x9e>
DB 73,99,4,138 ; movslq (%r10,%rcx,4),%rax
DB 76,1,208 ; add %r10,%rax
DB 255,224 ; jmpq *%rax
@@ -7243,7 +7431,7 @@ _sk_store_f32_avx LABEL PROC
DB 196,65,37,20,196 ; vunpcklpd %ymm12,%ymm11,%ymm8
DB 196,65,37,21,220 ; vunpckhpd %ymm12,%ymm11,%ymm11
DB 72,133,201 ; test %rcx,%rcx
- DB 117,55 ; jne 3a2d <_sk_store_f32_avx+0x6d>
+ DB 117,55 ; jne 3c11 <_sk_store_f32_avx+0x6d>
DB 196,67,45,24,225,1 ; vinsertf128 $0x1,%xmm9,%ymm10,%ymm12
DB 196,67,61,24,235,1 ; vinsertf128 $0x1,%xmm11,%ymm8,%ymm13
DB 196,67,45,6,201,49 ; vperm2f128 $0x31,%ymm9,%ymm10,%ymm9
@@ -7256,22 +7444,22 @@ _sk_store_f32_avx LABEL PROC
DB 255,224 ; jmpq *%rax
DB 196,65,121,17,20,128 ; vmovupd %xmm10,(%r8,%rax,4)
DB 72,131,249,1 ; cmp $0x1,%rcx
- DB 116,240 ; je 3a29 <_sk_store_f32_avx+0x69>
+ DB 116,240 ; je 3c0d <_sk_store_f32_avx+0x69>
DB 196,65,121,17,76,128,16 ; vmovupd %xmm9,0x10(%r8,%rax,4)
DB 72,131,249,3 ; cmp $0x3,%rcx
- DB 114,227 ; jb 3a29 <_sk_store_f32_avx+0x69>
+ DB 114,227 ; jb 3c0d <_sk_store_f32_avx+0x69>
DB 196,65,121,17,68,128,32 ; vmovupd %xmm8,0x20(%r8,%rax,4)
- DB 116,218 ; je 3a29 <_sk_store_f32_avx+0x69>
+ DB 116,218 ; je 3c0d <_sk_store_f32_avx+0x69>
DB 196,65,121,17,92,128,48 ; vmovupd %xmm11,0x30(%r8,%rax,4)
DB 72,131,249,5 ; cmp $0x5,%rcx
- DB 114,205 ; jb 3a29 <_sk_store_f32_avx+0x69>
+ DB 114,205 ; jb 3c0d <_sk_store_f32_avx+0x69>
DB 196,67,125,25,84,128,64,1 ; vextractf128 $0x1,%ymm10,0x40(%r8,%rax,4)
- DB 116,195 ; je 3a29 <_sk_store_f32_avx+0x69>
+ DB 116,195 ; je 3c0d <_sk_store_f32_avx+0x69>
DB 196,67,125,25,76,128,80,1 ; vextractf128 $0x1,%ymm9,0x50(%r8,%rax,4)
DB 72,131,249,7 ; cmp $0x7,%rcx
- DB 114,181 ; jb 3a29 <_sk_store_f32_avx+0x69>
+ DB 114,181 ; jb 3c0d <_sk_store_f32_avx+0x69>
DB 196,67,125,25,68,128,96,1 ; vextractf128 $0x1,%ymm8,0x60(%r8,%rax,4)
- DB 235,171 ; jmp 3a29 <_sk_store_f32_avx+0x69>
+ DB 235,171 ; jmp 3c0d <_sk_store_f32_avx+0x69>
PUBLIC _sk_clamp_x_avx
_sk_clamp_x_avx LABEL PROC
@@ -7575,7 +7763,7 @@ _sk_linear_gradient_avx LABEL PROC
DB 196,226,125,24,88,28 ; vbroadcastss 0x1c(%rax),%ymm3
DB 76,139,0 ; mov (%rax),%r8
DB 77,133,192 ; test %r8,%r8
- DB 15,132,146,0,0,0 ; je 3fe1 <_sk_linear_gradient_avx+0xb8>
+ DB 15,132,146,0,0,0 ; je 41c5 <_sk_linear_gradient_avx+0xb8>
DB 72,139,64,8 ; mov 0x8(%rax),%rax
DB 72,131,192,32 ; add $0x20,%rax
DB 196,65,28,87,228 ; vxorps %ymm12,%ymm12,%ymm12
@@ -7602,8 +7790,8 @@ _sk_linear_gradient_avx LABEL PROC
DB 196,227,13,74,219,208 ; vblendvps %ymm13,%ymm3,%ymm14,%ymm3
DB 72,131,192,36 ; add $0x24,%rax
DB 73,255,200 ; dec %r8
- DB 117,140 ; jne 3f6b <_sk_linear_gradient_avx+0x42>
- DB 235,20 ; jmp 3ff5 <_sk_linear_gradient_avx+0xcc>
+ DB 117,140 ; jne 414f <_sk_linear_gradient_avx+0x42>
+ DB 235,20 ; jmp 41d9 <_sk_linear_gradient_avx+0xcc>
DB 196,65,36,87,219 ; vxorps %ymm11,%ymm11,%ymm11
DB 196,65,44,87,210 ; vxorps %ymm10,%ymm10,%ymm10
DB 196,65,52,87,201 ; vxorps %ymm9,%ymm9,%ymm9
@@ -10666,6 +10854,53 @@ _sk_load_u16_be_sse41 LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
+PUBLIC _sk_load_rgb_u16_be_sse41
+_sk_load_rgb_u16_be_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 72,141,12,127 ; lea (%rdi,%rdi,2),%rcx
+ DB 243,15,111,20,72 ; movdqu (%rax,%rcx,2),%xmm2
+ DB 243,15,111,68,72,8 ; movdqu 0x8(%rax,%rcx,2),%xmm0
+ DB 102,15,115,216,4 ; psrldq $0x4,%xmm0
+ DB 102,15,111,202 ; movdqa %xmm2,%xmm1
+ DB 102,15,115,217,6 ; psrldq $0x6,%xmm1
+ DB 102,15,97,208 ; punpcklwd %xmm0,%xmm2
+ DB 102,15,115,216,6 ; psrldq $0x6,%xmm0
+ DB 102,15,97,200 ; punpcklwd %xmm0,%xmm1
+ DB 102,15,111,194 ; movdqa %xmm2,%xmm0
+ DB 102,15,97,193 ; punpcklwd %xmm1,%xmm0
+ DB 102,15,112,216,78 ; pshufd $0x4e,%xmm0,%xmm3
+ DB 102,15,105,209 ; punpckhwd %xmm1,%xmm2
+ DB 184,128,0,128,55 ; mov $0x37800080,%eax
+ DB 102,68,15,110,192 ; movd %eax,%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,15,111,200 ; movdqa %xmm0,%xmm1
+ DB 102,15,113,241,8 ; psllw $0x8,%xmm1
+ DB 102,15,113,208,8 ; psrlw $0x8,%xmm0
+ DB 102,15,235,193 ; por %xmm1,%xmm0
+ DB 102,15,56,51,192 ; pmovzxwd %xmm0,%xmm0
+ DB 15,91,192 ; cvtdq2ps %xmm0,%xmm0
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,15,113,241,8 ; psllw $0x8,%xmm1
+ DB 102,15,113,211,8 ; psrlw $0x8,%xmm3
+ DB 102,15,235,217 ; por %xmm1,%xmm3
+ DB 102,15,56,51,203 ; pmovzxwd %xmm3,%xmm1
+ DB 15,91,201 ; cvtdq2ps %xmm1,%xmm1
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 102,15,111,218 ; movdqa %xmm2,%xmm3
+ DB 102,15,113,243,8 ; psllw $0x8,%xmm3
+ DB 102,15,113,210,8 ; psrlw $0x8,%xmm2
+ DB 102,15,235,211 ; por %xmm3,%xmm2
+ DB 102,15,56,51,210 ; pmovzxwd %xmm2,%xmm2
+ DB 15,91,210 ; cvtdq2ps %xmm2,%xmm2
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 184,0,0,128,63 ; mov $0x3f800000,%eax
+ DB 102,15,110,216 ; movd %eax,%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
PUBLIC _sk_store_u16_be_sse41
_sk_store_u16_be_sse41 LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
@@ -11111,7 +11346,7 @@ _sk_linear_gradient_sse41 LABEL PROC
DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
DB 72,139,8 ; mov (%rax),%rcx
DB 72,133,201 ; test %rcx,%rcx
- DB 15,132,4,1,0,0 ; je 2e51 <_sk_linear_gradient_sse41+0x13e>
+ DB 15,132,4,1,0,0 ; je 2f0b <_sk_linear_gradient_sse41+0x13e>
DB 72,131,236,88 ; sub $0x58,%rsp
DB 15,41,36,36 ; movaps %xmm4,(%rsp)
DB 15,41,108,36,16 ; movaps %xmm5,0x10(%rsp)
@@ -11162,13 +11397,13 @@ _sk_linear_gradient_sse41 LABEL PROC
DB 15,40,196 ; movaps %xmm4,%xmm0
DB 72,131,192,36 ; add $0x24,%rax
DB 72,255,201 ; dec %rcx
- DB 15,133,65,255,255,255 ; jne 2d79 <_sk_linear_gradient_sse41+0x66>
+ DB 15,133,65,255,255,255 ; jne 2e33 <_sk_linear_gradient_sse41+0x66>
DB 15,40,124,36,48 ; movaps 0x30(%rsp),%xmm7
DB 15,40,116,36,32 ; movaps 0x20(%rsp),%xmm6
DB 15,40,108,36,16 ; movaps 0x10(%rsp),%xmm5
DB 15,40,36,36 ; movaps (%rsp),%xmm4
DB 72,131,196,88 ; add $0x58,%rsp
- DB 235,13 ; jmp 2e5e <_sk_linear_gradient_sse41+0x14b>
+ DB 235,13 ; jmp 2f18 <_sk_linear_gradient_sse41+0x14b>
DB 15,87,201 ; xorps %xmm1,%xmm1
DB 15,87,210 ; xorps %xmm2,%xmm2
DB 15,87,219 ; xorps %xmm3,%xmm3
@@ -14400,6 +14635,54 @@ _sk_load_u16_be_sse2 LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
DB 255,224 ; jmpq *%rax
+PUBLIC _sk_load_rgb_u16_be_sse2
+_sk_load_rgb_u16_be_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 72,141,12,127 ; lea (%rdi,%rdi,2),%rcx
+ DB 243,15,111,20,72 ; movdqu (%rax,%rcx,2),%xmm2
+ DB 243,15,111,68,72,8 ; movdqu 0x8(%rax,%rcx,2),%xmm0
+ DB 102,15,115,216,4 ; psrldq $0x4,%xmm0
+ DB 102,15,111,202 ; movdqa %xmm2,%xmm1
+ DB 102,15,115,217,6 ; psrldq $0x6,%xmm1
+ DB 102,15,97,208 ; punpcklwd %xmm0,%xmm2
+ DB 102,15,115,216,6 ; psrldq $0x6,%xmm0
+ DB 102,15,97,200 ; punpcklwd %xmm0,%xmm1
+ DB 102,15,111,194 ; movdqa %xmm2,%xmm0
+ DB 102,15,97,193 ; punpcklwd %xmm1,%xmm0
+ DB 102,15,112,216,78 ; pshufd $0x4e,%xmm0,%xmm3
+ DB 102,15,105,209 ; punpckhwd %xmm1,%xmm2
+ DB 184,128,0,128,55 ; mov $0x37800080,%eax
+ DB 102,68,15,110,192 ; movd %eax,%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,15,111,200 ; movdqa %xmm0,%xmm1
+ DB 102,15,113,241,8 ; psllw $0x8,%xmm1
+ DB 102,15,113,208,8 ; psrlw $0x8,%xmm0
+ DB 102,15,235,193 ; por %xmm1,%xmm0
+ DB 102,69,15,239,201 ; pxor %xmm9,%xmm9
+ DB 102,65,15,97,193 ; punpcklwd %xmm9,%xmm0
+ DB 15,91,192 ; cvtdq2ps %xmm0,%xmm0
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,15,113,241,8 ; psllw $0x8,%xmm1
+ DB 102,15,113,211,8 ; psrlw $0x8,%xmm3
+ DB 102,15,235,217 ; por %xmm1,%xmm3
+ DB 102,65,15,97,217 ; punpcklwd %xmm9,%xmm3
+ DB 15,91,203 ; cvtdq2ps %xmm3,%xmm1
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 102,15,111,218 ; movdqa %xmm2,%xmm3
+ DB 102,15,113,243,8 ; psllw $0x8,%xmm3
+ DB 102,15,113,210,8 ; psrlw $0x8,%xmm2
+ DB 102,15,235,211 ; por %xmm3,%xmm2
+ DB 102,65,15,97,209 ; punpcklwd %xmm9,%xmm2
+ DB 15,91,210 ; cvtdq2ps %xmm2,%xmm2
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 184,0,0,128,63 ; mov $0x3f800000,%eax
+ DB 102,15,110,216 ; movd %eax,%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
PUBLIC _sk_store_u16_be_sse2
_sk_store_u16_be_sse2 LABEL PROC
DB 72,173 ; lods %ds:(%rsi),%rax
@@ -14881,7 +15164,7 @@ _sk_linear_gradient_sse2 LABEL PROC
DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
DB 72,139,8 ; mov (%rax),%rcx
DB 72,133,201 ; test %rcx,%rcx
- DB 15,132,15,1,0,0 ; je 3145 <_sk_linear_gradient_sse2+0x149>
+ DB 15,132,15,1,0,0 ; je 3204 <_sk_linear_gradient_sse2+0x149>
DB 72,139,64,8 ; mov 0x8(%rax),%rax
DB 72,131,192,32 ; add $0x20,%rax
DB 69,15,87,192 ; xorps %xmm8,%xmm8
@@ -14942,8 +15225,8 @@ _sk_linear_gradient_sse2 LABEL PROC
DB 69,15,86,231 ; orps %xmm15,%xmm12
DB 72,131,192,36 ; add $0x24,%rax
DB 72,255,201 ; dec %rcx
- DB 15,133,8,255,255,255 ; jne 304b <_sk_linear_gradient_sse2+0x4f>
- DB 235,13 ; jmp 3152 <_sk_linear_gradient_sse2+0x156>
+ DB 15,133,8,255,255,255 ; jne 310a <_sk_linear_gradient_sse2+0x4f>
+ DB 235,13 ; jmp 3211 <_sk_linear_gradient_sse2+0x156>
DB 15,87,201 ; xorps %xmm1,%xmm1
DB 15,87,210 ; xorps %xmm2,%xmm2
DB 15,87,219 ; xorps %xmm3,%xmm3
diff --git a/src/jumper/SkJumper_stages.cpp b/src/jumper/SkJumper_stages.cpp
index 7c97235d2f..8ec63e2925 100644
--- a/src/jumper/SkJumper_stages.cpp
+++ b/src/jumper/SkJumper_stages.cpp
@@ -770,25 +770,36 @@ STAGE(store_f16) {
}
STAGE(load_u16_be) {
- auto ptr = *(const uint64_t**)ctx + x;
+ auto ptr = *(const uint16_t**)ctx + 4*x;
U16 R,G,B,A;
- load4((const uint16_t*)ptr,tail, &R,&G,&B,&A);
+ load4(ptr,tail, &R,&G,&B,&A);
r = C(1/65535.0f) * cast(expand(bswap(R)));
g = C(1/65535.0f) * cast(expand(bswap(G)));
b = C(1/65535.0f) * cast(expand(bswap(B)));
a = C(1/65535.0f) * cast(expand(bswap(A)));
}
+STAGE(load_rgb_u16_be) {
+ auto ptr = *(const uint16_t**)ctx + 3*x;
+
+ U16 R,G,B;
+ load3(ptr,tail, &R,&G,&B);
+
+ r = C(1/65535.0f) * cast(expand(bswap(R)));
+ g = C(1/65535.0f) * cast(expand(bswap(G)));
+ b = C(1/65535.0f) * cast(expand(bswap(B)));
+ a = 1.0_f;
+}
STAGE(store_u16_be) {
- auto ptr = *(uint64_t**)ctx + x;
+ auto ptr = *(uint16_t**)ctx + 4*x;
U16 R = bswap(pack(round(r, 65535.0_f))),
G = bswap(pack(round(g, 65535.0_f))),
B = bswap(pack(round(b, 65535.0_f))),
A = bswap(pack(round(a, 65535.0_f)));
- store4((uint16_t*)ptr,tail, R,G,B,A);
+ store4(ptr,tail, R,G,B,A);
}
STAGE(load_f32) {
diff --git a/src/jumper/SkJumper_vectors.h b/src/jumper/SkJumper_vectors.h
index e8d7f6c754..f47dd115ef 100644
--- a/src/jumper/SkJumper_vectors.h
+++ b/src/jumper/SkJumper_vectors.h
@@ -43,6 +43,11 @@
template <typename T>
SI T gather(const T* p, U32 ix) { return p[ix]; }
+ SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
+ *r = ptr[0];
+ *g = ptr[1];
+ *b = ptr[2];
+ }
SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
*r = ptr[0];
*g = ptr[1];
@@ -110,6 +115,12 @@
return {p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]]};
}
+ SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
+ uint16x4x3_t rgb = vld3_u16(ptr);
+ *r = rgb.val[0];
+ *g = rgb.val[1];
+ *b = rgb.val[2];
+ }
SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
uint16x4x4_t rgba = vld4_u16(ptr);
*r = rgba.val[0];
@@ -172,6 +183,14 @@
return {p[ix[0]], p[ix[1]]};
}
+ SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
+ uint16x4x3_t rgb;
+ rgb = vld3_lane_u16(ptr + 0, rgb, 0);
+ rgb = vld3_lane_u16(ptr + 3, rgb, 1);
+ *r = unaligned_load<U16>(rgb.val+0);
+ *g = unaligned_load<U16>(rgb.val+1);
+ *b = unaligned_load<U16>(rgb.val+2);
+ }
SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
uint16x4x4_t rgba;
rgba = vld4_lane_u16(ptr + 0, rgba, 0);
@@ -269,6 +288,46 @@
}
#endif
+ SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
+ __m128i _0,_1,_2,_3,_4,_5,_6,_7;
+ if (__builtin_expect(tail,0)) {
+ auto load_rgb = [](const uint16_t* src) {
+ auto v = _mm_cvtsi32_si128(*(const uint32_t*)src);
+ return _mm_insert_epi16(v, src[2], 2);
+ };
+ if (tail > 0) { _0 = load_rgb(ptr + 0); }
+ if (tail > 1) { _1 = load_rgb(ptr + 3); }
+ if (tail > 2) { _2 = load_rgb(ptr + 6); }
+ if (tail > 3) { _3 = load_rgb(ptr + 9); }
+ if (tail > 4) { _4 = load_rgb(ptr + 12); }
+ if (tail > 5) { _5 = load_rgb(ptr + 15); }
+ if (tail > 6) { _6 = load_rgb(ptr + 18); }
+ } else {
+ // Load 0+1, 2+3, 4+5 normally, and 6+7 backed up 4 bytes so we don't run over.
+ auto _01 = _mm_loadu_si128((const __m128i*)(ptr + 0)) ;
+ auto _23 = _mm_loadu_si128((const __m128i*)(ptr + 6)) ;
+ auto _45 = _mm_loadu_si128((const __m128i*)(ptr + 12)) ;
+ auto _67 = _mm_srli_si128(_mm_loadu_si128((const __m128i*)(ptr + 16)), 4);
+ _0 = _01; _1 = _mm_srli_si128(_01, 6),
+ _2 = _23; _3 = _mm_srli_si128(_23, 6),
+ _4 = _45; _5 = _mm_srli_si128(_45, 6),
+ _6 = _67; _7 = _mm_srli_si128(_67, 6);
+ }
+
+ auto _02 = _mm_unpacklo_epi16(_0, _2), // r0 r2 g0 g2 b0 b2 xx xx
+ _13 = _mm_unpacklo_epi16(_1, _3),
+ _46 = _mm_unpacklo_epi16(_4, _6),
+ _57 = _mm_unpacklo_epi16(_5, _7);
+
+ auto rg0123 = _mm_unpacklo_epi16(_02, _13), // r0 r1 r2 r3 g0 g1 g2 g3
+ bx0123 = _mm_unpackhi_epi16(_02, _13), // b0 b1 b2 b3 xx xx xx xx
+ rg4567 = _mm_unpacklo_epi16(_46, _57),
+ bx4567 = _mm_unpackhi_epi16(_46, _57);
+
+ *r = _mm_unpacklo_epi64(rg0123, rg4567);
+ *g = _mm_unpackhi_epi64(rg0123, rg4567);
+ *b = _mm_unpacklo_epi64(bx0123, bx4567);
+ }
SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
__m128i _01, _23, _45, _67;
if (__builtin_expect(tail,0)) {
@@ -462,6 +521,27 @@
return {p[ix[0]], p[ix[1]], p[ix[2]], p[ix[3]]};
}
+ SI void load3(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b) {
+ // Load slightly weirdly to make sure we don't load past the end of 4x48 bits.
+ auto _01 = _mm_loadu_si128((const __m128i*)(ptr + 0)) ,
+ _23 = _mm_srli_si128(_mm_loadu_si128((const __m128i*)(ptr + 4)), 4);
+
+ // Each _N holds R,G,B for pixel N in its lower 3 lanes (upper 5 are ignored).
+ auto _0 = _01, _1 = _mm_srli_si128(_01, 6),
+ _2 = _23, _3 = _mm_srli_si128(_23, 6);
+
+ // De-interlace to R,G,B.
+ auto _02 = _mm_unpacklo_epi16(_0, _2), // r0 r2 g0 g2 b0 b2 xx xx
+ _13 = _mm_unpacklo_epi16(_1, _3); // r1 r3 g1 g3 b1 b3 xx xx
+
+ auto R = _mm_unpacklo_epi16(_02, _13), // r0 r1 r2 r3 g0 g1 g2 g3
+ G = _mm_srli_si128(R, 8),
+ B = _mm_unpackhi_epi16(_02, _13); // b0 b1 b2 b3 xx xx xx xx
+
+ *r = unaligned_load<U16>(&R);
+ *g = unaligned_load<U16>(&G);
+ *b = unaligned_load<U16>(&B);
+ }
SI void load4(const uint16_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16* a) {
auto _01 = _mm_loadu_si128(((__m128i*)ptr) + 0),
_23 = _mm_loadu_si128(((__m128i*)ptr) + 1);