aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jumper
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-02-21 12:13:44 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-21 19:48:19 +0000
commited1b9022b379108219e3aa07412b764ac08ae382 (patch)
tree01a4c5ce0e4e10f12caf89050f175f1b2ee602d6 /src/jumper
parent497890630b80a381a2ac4cbb9114b0320560bf8c (diff)
SkJumper: Windows
- Compile stages with -DWIN to pick up MS-specific start_pipeline(). - Add SkJumper_generated_win.S with MS-specific assembly. - Add a minimal asm tool to our GN Windows toolchain. The SkRasterPipeline_f16 benchmark run ~4x faster on my desktop. Change-Id: Ia45afb4ecb6a055e2c0e43f0f54f59e081c23b7f Reviewed-on: https://skia-review.googlesource.com/8778 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/jumper')
-rw-r--r--src/jumper/SkJumper.cpp2
-rw-r--r--src/jumper/SkJumper_generated.S130
-rw-r--r--src/jumper/SkJumper_generated_win.S1944
-rw-r--r--src/jumper/SkJumper_stages.cpp10
-rwxr-xr-xsrc/jumper/build_stages.py40
5 files changed, 1982 insertions, 144 deletions
diff --git a/src/jumper/SkJumper.cpp b/src/jumper/SkJumper.cpp
index bdd2f345b3..4923f6f92b 100644
--- a/src/jumper/SkJumper.cpp
+++ b/src/jumper/SkJumper.cpp
@@ -56,7 +56,7 @@ static K kConstants = {
using StageFn = void(void);
// Some platforms expect C "name" maps to asm "_name", others to "name".
-#if defined(_MSC_VER) || defined(__APPLE__)
+#if defined(__APPLE__)
#define ASM(name, suffix) sk_##name##_##suffix
#else
#define ASM(name, suffix) _sk_##name##_##suffix
diff --git a/src/jumper/SkJumper_generated.S b/src/jumper/SkJumper_generated.S
index 3db1f7a48d..77a212e3df 100644
--- a/src/jumper/SkJumper_generated.S
+++ b/src/jumper/SkJumper_generated.S
@@ -1163,50 +1163,6 @@ _sk_start_pipeline_hsw:
.byte 0xc5,0xc4,0x57,0xff // vxorps %ymm7,%ymm7,%ymm7
.byte 0xff,0xe0 // jmpq *%rax
-.globl _sk_start_pipeline_ms_hsw
-_sk_start_pipeline_ms_hsw:
- .byte 0x56 // push %rsi
- .byte 0x57 // push %rdi
- .byte 0x48,0x81,0xec,0xa8,0x00,0x00,0x00 // sub $0xa8,%rsp
- .byte 0xc5,0x78,0x29,0xbc,0x24,0x90,0x00,0x00,0x00 // vmovaps %xmm15,0x90(%rsp)
- .byte 0xc5,0x78,0x29,0xb4,0x24,0x80,0x00,0x00,0x00 // vmovaps %xmm14,0x80(%rsp)
- .byte 0xc5,0x78,0x29,0x6c,0x24,0x70 // vmovaps %xmm13,0x70(%rsp)
- .byte 0xc5,0x78,0x29,0x64,0x24,0x60 // vmovaps %xmm12,0x60(%rsp)
- .byte 0xc5,0x78,0x29,0x5c,0x24,0x50 // vmovaps %xmm11,0x50(%rsp)
- .byte 0xc5,0x78,0x29,0x54,0x24,0x40 // vmovaps %xmm10,0x40(%rsp)
- .byte 0xc5,0x78,0x29,0x4c,0x24,0x30 // vmovaps %xmm9,0x30(%rsp)
- .byte 0xc5,0x78,0x29,0x44,0x24,0x20 // vmovaps %xmm8,0x20(%rsp)
- .byte 0xc5,0xf8,0x29,0x7c,0x24,0x10 // vmovaps %xmm7,0x10(%rsp)
- .byte 0xc5,0xf8,0x29,0x34,0x24 // vmovaps %xmm6,(%rsp)
- .byte 0x48,0x89,0xd6 // mov %rdx,%rsi
- .byte 0x48,0xad // lods %ds:(%rsi),%rax
- .byte 0xc5,0xfc,0x57,0xc0 // vxorps %ymm0,%ymm0,%ymm0
- .byte 0xc5,0xf4,0x57,0xc9 // vxorps %ymm1,%ymm1,%ymm1
- .byte 0xc5,0xec,0x57,0xd2 // vxorps %ymm2,%ymm2,%ymm2
- .byte 0xc5,0xe4,0x57,0xdb // vxorps %ymm3,%ymm3,%ymm3
- .byte 0xc5,0xdc,0x57,0xe4 // vxorps %ymm4,%ymm4,%ymm4
- .byte 0xc5,0xd4,0x57,0xed // vxorps %ymm5,%ymm5,%ymm5
- .byte 0xc5,0xcc,0x57,0xf6 // vxorps %ymm6,%ymm6,%ymm6
- .byte 0xc5,0xc4,0x57,0xff // vxorps %ymm7,%ymm7,%ymm7
- .byte 0x48,0x89,0xcf // mov %rcx,%rdi
- .byte 0x4c,0x89,0xc2 // mov %r8,%rdx
- .byte 0xff,0xd0 // callq *%rax
- .byte 0xc5,0xf8,0x28,0x34,0x24 // vmovaps (%rsp),%xmm6
- .byte 0xc5,0xf8,0x28,0x7c,0x24,0x10 // vmovaps 0x10(%rsp),%xmm7
- .byte 0xc5,0x78,0x28,0x44,0x24,0x20 // vmovaps 0x20(%rsp),%xmm8
- .byte 0xc5,0x78,0x28,0x4c,0x24,0x30 // vmovaps 0x30(%rsp),%xmm9
- .byte 0xc5,0x78,0x28,0x54,0x24,0x40 // vmovaps 0x40(%rsp),%xmm10
- .byte 0xc5,0x78,0x28,0x5c,0x24,0x50 // vmovaps 0x50(%rsp),%xmm11
- .byte 0xc5,0x78,0x28,0x64,0x24,0x60 // vmovaps 0x60(%rsp),%xmm12
- .byte 0xc5,0x78,0x28,0x6c,0x24,0x70 // vmovaps 0x70(%rsp),%xmm13
- .byte 0xc5,0x78,0x28,0xb4,0x24,0x80,0x00,0x00,0x00 // vmovaps 0x80(%rsp),%xmm14
- .byte 0xc5,0x78,0x28,0xbc,0x24,0x90,0x00,0x00,0x00 // vmovaps 0x90(%rsp),%xmm15
- .byte 0x48,0x81,0xc4,0xa8,0x00,0x00,0x00 // add $0xa8,%rsp
- .byte 0x5f // pop %rdi
- .byte 0x5e // pop %rsi
- .byte 0xc5,0xf8,0x77 // vzeroupper
- .byte 0xc3 // retq
-
.globl _sk_just_return_hsw
_sk_just_return_hsw:
.byte 0xc5,0xf8,0x77 // vzeroupper
@@ -1695,49 +1651,6 @@ _sk_start_pipeline_sse41:
.byte 0x0f,0x57,0xff // xorps %xmm7,%xmm7
.byte 0xff,0xe0 // jmpq *%rax
-.globl _sk_start_pipeline_ms_sse41
-_sk_start_pipeline_ms_sse41:
- .byte 0x56 // push %rsi
- .byte 0x57 // push %rdi
- .byte 0x48,0x81,0xec,0xa8,0x00,0x00,0x00 // sub $0xa8,%rsp
- .byte 0x44,0x0f,0x29,0xbc,0x24,0x90,0x00,0x00,0x00 // movaps %xmm15,0x90(%rsp)
- .byte 0x44,0x0f,0x29,0xb4,0x24,0x80,0x00,0x00,0x00 // movaps %xmm14,0x80(%rsp)
- .byte 0x44,0x0f,0x29,0x6c,0x24,0x70 // movaps %xmm13,0x70(%rsp)
- .byte 0x44,0x0f,0x29,0x64,0x24,0x60 // movaps %xmm12,0x60(%rsp)
- .byte 0x44,0x0f,0x29,0x5c,0x24,0x50 // movaps %xmm11,0x50(%rsp)
- .byte 0x44,0x0f,0x29,0x54,0x24,0x40 // movaps %xmm10,0x40(%rsp)
- .byte 0x44,0x0f,0x29,0x4c,0x24,0x30 // movaps %xmm9,0x30(%rsp)
- .byte 0x44,0x0f,0x29,0x44,0x24,0x20 // movaps %xmm8,0x20(%rsp)
- .byte 0x0f,0x29,0x7c,0x24,0x10 // movaps %xmm7,0x10(%rsp)
- .byte 0x0f,0x29,0x34,0x24 // movaps %xmm6,(%rsp)
- .byte 0x48,0x89,0xd6 // mov %rdx,%rsi
- .byte 0x48,0xad // lods %ds:(%rsi),%rax
- .byte 0x0f,0x57,0xc0 // xorps %xmm0,%xmm0
- .byte 0x0f,0x57,0xc9 // xorps %xmm1,%xmm1
- .byte 0x0f,0x57,0xd2 // xorps %xmm2,%xmm2
- .byte 0x0f,0x57,0xdb // xorps %xmm3,%xmm3
- .byte 0x0f,0x57,0xe4 // xorps %xmm4,%xmm4
- .byte 0x0f,0x57,0xed // xorps %xmm5,%xmm5
- .byte 0x0f,0x57,0xf6 // xorps %xmm6,%xmm6
- .byte 0x0f,0x57,0xff // xorps %xmm7,%xmm7
- .byte 0x48,0x89,0xcf // mov %rcx,%rdi
- .byte 0x4c,0x89,0xc2 // mov %r8,%rdx
- .byte 0xff,0xd0 // callq *%rax
- .byte 0x0f,0x28,0x34,0x24 // movaps (%rsp),%xmm6
- .byte 0x0f,0x28,0x7c,0x24,0x10 // movaps 0x10(%rsp),%xmm7
- .byte 0x44,0x0f,0x28,0x44,0x24,0x20 // movaps 0x20(%rsp),%xmm8
- .byte 0x44,0x0f,0x28,0x4c,0x24,0x30 // movaps 0x30(%rsp),%xmm9
- .byte 0x44,0x0f,0x28,0x54,0x24,0x40 // movaps 0x40(%rsp),%xmm10
- .byte 0x44,0x0f,0x28,0x5c,0x24,0x50 // movaps 0x50(%rsp),%xmm11
- .byte 0x44,0x0f,0x28,0x64,0x24,0x60 // movaps 0x60(%rsp),%xmm12
- .byte 0x44,0x0f,0x28,0x6c,0x24,0x70 // movaps 0x70(%rsp),%xmm13
- .byte 0x44,0x0f,0x28,0xb4,0x24,0x80,0x00,0x00,0x00 // movaps 0x80(%rsp),%xmm14
- .byte 0x44,0x0f,0x28,0xbc,0x24,0x90,0x00,0x00,0x00 // movaps 0x90(%rsp),%xmm15
- .byte 0x48,0x81,0xc4,0xa8,0x00,0x00,0x00 // add $0xa8,%rsp
- .byte 0x5f // pop %rdi
- .byte 0x5e // pop %rsi
- .byte 0xc3 // retq
-
.globl _sk_just_return_sse41
_sk_just_return_sse41:
.byte 0xc3 // retq
@@ -2410,49 +2323,6 @@ _sk_start_pipeline_sse2:
.byte 0x0f,0x57,0xff // xorps %xmm7,%xmm7
.byte 0xff,0xe0 // jmpq *%rax
-.globl _sk_start_pipeline_ms_sse2
-_sk_start_pipeline_ms_sse2:
- .byte 0x56 // push %rsi
- .byte 0x57 // push %rdi
- .byte 0x48,0x81,0xec,0xa8,0x00,0x00,0x00 // sub $0xa8,%rsp
- .byte 0x44,0x0f,0x29,0xbc,0x24,0x90,0x00,0x00,0x00 // movaps %xmm15,0x90(%rsp)
- .byte 0x44,0x0f,0x29,0xb4,0x24,0x80,0x00,0x00,0x00 // movaps %xmm14,0x80(%rsp)
- .byte 0x44,0x0f,0x29,0x6c,0x24,0x70 // movaps %xmm13,0x70(%rsp)
- .byte 0x44,0x0f,0x29,0x64,0x24,0x60 // movaps %xmm12,0x60(%rsp)
- .byte 0x44,0x0f,0x29,0x5c,0x24,0x50 // movaps %xmm11,0x50(%rsp)
- .byte 0x44,0x0f,0x29,0x54,0x24,0x40 // movaps %xmm10,0x40(%rsp)
- .byte 0x44,0x0f,0x29,0x4c,0x24,0x30 // movaps %xmm9,0x30(%rsp)
- .byte 0x44,0x0f,0x29,0x44,0x24,0x20 // movaps %xmm8,0x20(%rsp)
- .byte 0x0f,0x29,0x7c,0x24,0x10 // movaps %xmm7,0x10(%rsp)
- .byte 0x0f,0x29,0x34,0x24 // movaps %xmm6,(%rsp)
- .byte 0x48,0x89,0xd6 // mov %rdx,%rsi
- .byte 0x48,0xad // lods %ds:(%rsi),%rax
- .byte 0x0f,0x57,0xc0 // xorps %xmm0,%xmm0
- .byte 0x0f,0x57,0xc9 // xorps %xmm1,%xmm1
- .byte 0x0f,0x57,0xd2 // xorps %xmm2,%xmm2
- .byte 0x0f,0x57,0xdb // xorps %xmm3,%xmm3
- .byte 0x0f,0x57,0xe4 // xorps %xmm4,%xmm4
- .byte 0x0f,0x57,0xed // xorps %xmm5,%xmm5
- .byte 0x0f,0x57,0xf6 // xorps %xmm6,%xmm6
- .byte 0x0f,0x57,0xff // xorps %xmm7,%xmm7
- .byte 0x48,0x89,0xcf // mov %rcx,%rdi
- .byte 0x4c,0x89,0xc2 // mov %r8,%rdx
- .byte 0xff,0xd0 // callq *%rax
- .byte 0x0f,0x28,0x34,0x24 // movaps (%rsp),%xmm6
- .byte 0x0f,0x28,0x7c,0x24,0x10 // movaps 0x10(%rsp),%xmm7
- .byte 0x44,0x0f,0x28,0x44,0x24,0x20 // movaps 0x20(%rsp),%xmm8
- .byte 0x44,0x0f,0x28,0x4c,0x24,0x30 // movaps 0x30(%rsp),%xmm9
- .byte 0x44,0x0f,0x28,0x54,0x24,0x40 // movaps 0x40(%rsp),%xmm10
- .byte 0x44,0x0f,0x28,0x5c,0x24,0x50 // movaps 0x50(%rsp),%xmm11
- .byte 0x44,0x0f,0x28,0x64,0x24,0x60 // movaps 0x60(%rsp),%xmm12
- .byte 0x44,0x0f,0x28,0x6c,0x24,0x70 // movaps 0x70(%rsp),%xmm13
- .byte 0x44,0x0f,0x28,0xb4,0x24,0x80,0x00,0x00,0x00 // movaps 0x80(%rsp),%xmm14
- .byte 0x44,0x0f,0x28,0xbc,0x24,0x90,0x00,0x00,0x00 // movaps 0x90(%rsp),%xmm15
- .byte 0x48,0x81,0xc4,0xa8,0x00,0x00,0x00 // add $0xa8,%rsp
- .byte 0x5f // pop %rdi
- .byte 0x5e // pop %rsi
- .byte 0xc3 // retq
-
.globl _sk_just_return_sse2
_sk_just_return_sse2:
.byte 0xc3 // retq
diff --git a/src/jumper/SkJumper_generated_win.S b/src/jumper/SkJumper_generated_win.S
new file mode 100644
index 0000000000..d6aaa2b7ea
--- /dev/null
+++ b/src/jumper/SkJumper_generated_win.S
@@ -0,0 +1,1944 @@
+; Copyright 2017 Google Inc.
+;
+; Use of this source code is governed by a BSD-style license that can be
+; found in the LICENSE file.
+
+; This file is generated semi-automatically with this command:
+; $ src/jumper/build_stages.py
+
+_text SEGMENT
+
+PUBLIC _sk_start_pipeline_hsw
+_sk_start_pipeline_hsw LABEL PROC
+ DB 86 ; push %rsi
+ DB 87 ; push %rdi
+ DB 72,129,236,168,0,0,0 ; sub $0xa8,%rsp
+ DB 197,120,41,188,36,144,0,0,0 ; vmovaps %xmm15,0x90(%rsp)
+ DB 197,120,41,180,36,128,0,0,0 ; vmovaps %xmm14,0x80(%rsp)
+ DB 197,120,41,108,36,112 ; vmovaps %xmm13,0x70(%rsp)
+ DB 197,120,41,100,36,96 ; vmovaps %xmm12,0x60(%rsp)
+ DB 197,120,41,92,36,80 ; vmovaps %xmm11,0x50(%rsp)
+ DB 197,120,41,84,36,64 ; vmovaps %xmm10,0x40(%rsp)
+ DB 197,120,41,76,36,48 ; vmovaps %xmm9,0x30(%rsp)
+ DB 197,120,41,68,36,32 ; vmovaps %xmm8,0x20(%rsp)
+ DB 197,248,41,124,36,16 ; vmovaps %xmm7,0x10(%rsp)
+ DB 197,248,41,52,36 ; vmovaps %xmm6,(%rsp)
+ DB 72,137,214 ; mov %rdx,%rsi
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,87,192 ; vxorps %ymm0,%ymm0,%ymm0
+ 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
+ DB 197,220,87,228 ; vxorps %ymm4,%ymm4,%ymm4
+ DB 197,212,87,237 ; vxorps %ymm5,%ymm5,%ymm5
+ DB 197,204,87,246 ; vxorps %ymm6,%ymm6,%ymm6
+ DB 197,196,87,255 ; vxorps %ymm7,%ymm7,%ymm7
+ DB 72,137,207 ; mov %rcx,%rdi
+ DB 76,137,194 ; mov %r8,%rdx
+ DB 255,208 ; callq *%rax
+ DB 197,248,40,52,36 ; vmovaps (%rsp),%xmm6
+ DB 197,248,40,124,36,16 ; vmovaps 0x10(%rsp),%xmm7
+ DB 197,120,40,68,36,32 ; vmovaps 0x20(%rsp),%xmm8
+ DB 197,120,40,76,36,48 ; vmovaps 0x30(%rsp),%xmm9
+ DB 197,120,40,84,36,64 ; vmovaps 0x40(%rsp),%xmm10
+ DB 197,120,40,92,36,80 ; vmovaps 0x50(%rsp),%xmm11
+ DB 197,120,40,100,36,96 ; vmovaps 0x60(%rsp),%xmm12
+ DB 197,120,40,108,36,112 ; vmovaps 0x70(%rsp),%xmm13
+ DB 197,120,40,180,36,128,0,0,0 ; vmovaps 0x80(%rsp),%xmm14
+ DB 197,120,40,188,36,144,0,0,0 ; vmovaps 0x90(%rsp),%xmm15
+ DB 72,129,196,168,0,0,0 ; add $0xa8,%rsp
+ DB 95 ; pop %rdi
+ DB 94 ; pop %rsi
+ DB 197,248,119 ; vzeroupper
+ DB 195 ; retq
+
+PUBLIC _sk_just_return_hsw
+_sk_just_return_hsw LABEL PROC
+ DB 197,248,119 ; vzeroupper
+ DB 195 ; retq
+
+PUBLIC _sk_seed_shader_hsw
+_sk_seed_shader_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,249,110,199 ; vmovd %edi,%xmm0
+ DB 196,226,125,24,192 ; vbroadcastss %xmm0,%ymm0
+ DB 197,252,91,192 ; vcvtdq2ps %ymm0,%ymm0
+ DB 196,226,125,24,74,4 ; vbroadcastss 0x4(%rdx),%ymm1
+ DB 197,252,88,193 ; vaddps %ymm1,%ymm0,%ymm0
+ DB 197,252,88,66,20 ; vaddps 0x14(%rdx),%ymm0,%ymm0
+ DB 196,226,125,24,16 ; vbroadcastss (%rax),%ymm2
+ DB 197,252,91,210 ; vcvtdq2ps %ymm2,%ymm2
+ DB 197,236,88,201 ; vaddps %ymm1,%ymm2,%ymm1
+ DB 196,226,125,24,18 ; vbroadcastss (%rdx),%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,228,87,219 ; vxorps %ymm3,%ymm3,%ymm3
+ DB 197,220,87,228 ; vxorps %ymm4,%ymm4,%ymm4
+ DB 197,212,87,237 ; vxorps %ymm5,%ymm5,%ymm5
+ DB 197,204,87,246 ; vxorps %ymm6,%ymm6,%ymm6
+ DB 197,196,87,255 ; vxorps %ymm7,%ymm7,%ymm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_constant_color_hsw
+_sk_constant_color_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,226,125,24,0 ; vbroadcastss (%rax),%ymm0
+ DB 196,226,125,24,72,4 ; vbroadcastss 0x4(%rax),%ymm1
+ DB 196,226,125,24,80,8 ; vbroadcastss 0x8(%rax),%ymm2
+ DB 196,226,125,24,88,12 ; vbroadcastss 0xc(%rax),%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clear_hsw
+_sk_clear_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,87,192 ; vxorps %ymm0,%ymm0,%ymm0
+ 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
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_plus__hsw
+_sk_plus__hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,88,196 ; vaddps %ymm4,%ymm0,%ymm0
+ DB 197,244,88,205 ; vaddps %ymm5,%ymm1,%ymm1
+ DB 197,236,88,214 ; vaddps %ymm6,%ymm2,%ymm2
+ DB 197,228,88,223 ; vaddps %ymm7,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_srcover_hsw
+_sk_srcover_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,2 ; vbroadcastss (%rdx),%ymm8
+ DB 197,60,92,195 ; vsubps %ymm3,%ymm8,%ymm8
+ DB 196,194,93,184,192 ; vfmadd231ps %ymm8,%ymm4,%ymm0
+ DB 196,194,85,184,200 ; vfmadd231ps %ymm8,%ymm5,%ymm1
+ DB 196,194,77,184,208 ; vfmadd231ps %ymm8,%ymm6,%ymm2
+ DB 196,194,69,184,216 ; vfmadd231ps %ymm8,%ymm7,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_dstover_hsw
+_sk_dstover_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,2 ; vbroadcastss (%rdx),%ymm8
+ DB 197,60,92,199 ; vsubps %ymm7,%ymm8,%ymm8
+ DB 196,226,61,168,196 ; vfmadd213ps %ymm4,%ymm8,%ymm0
+ DB 196,226,61,168,205 ; vfmadd213ps %ymm5,%ymm8,%ymm1
+ DB 196,226,61,168,214 ; vfmadd213ps %ymm6,%ymm8,%ymm2
+ DB 196,226,61,168,223 ; vfmadd213ps %ymm7,%ymm8,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_0_hsw
+_sk_clamp_0_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,65,60,87,192 ; vxorps %ymm8,%ymm8,%ymm8
+ DB 196,193,124,95,192 ; vmaxps %ymm8,%ymm0,%ymm0
+ DB 196,193,116,95,200 ; vmaxps %ymm8,%ymm1,%ymm1
+ DB 196,193,108,95,208 ; vmaxps %ymm8,%ymm2,%ymm2
+ DB 196,193,100,95,216 ; vmaxps %ymm8,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_1_hsw
+_sk_clamp_1_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,2 ; vbroadcastss (%rdx),%ymm8
+ DB 196,193,124,93,192 ; vminps %ymm8,%ymm0,%ymm0
+ DB 196,193,116,93,200 ; vminps %ymm8,%ymm1,%ymm1
+ DB 196,193,108,93,208 ; vminps %ymm8,%ymm2,%ymm2
+ DB 196,193,100,93,216 ; vminps %ymm8,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_a_hsw
+_sk_clamp_a_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,2 ; vbroadcastss (%rdx),%ymm8
+ DB 196,193,100,93,216 ; vminps %ymm8,%ymm3,%ymm3
+ DB 197,252,93,195 ; vminps %ymm3,%ymm0,%ymm0
+ DB 197,244,93,203 ; vminps %ymm3,%ymm1,%ymm1
+ DB 197,236,93,211 ; vminps %ymm3,%ymm2,%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_swap_hsw
+_sk_swap_hsw LABEL PROC
+ DB 197,124,40,195 ; vmovaps %ymm3,%ymm8
+ DB 197,124,40,202 ; vmovaps %ymm2,%ymm9
+ DB 197,124,40,209 ; vmovaps %ymm1,%ymm10
+ DB 197,124,40,216 ; vmovaps %ymm0,%ymm11
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,40,196 ; vmovaps %ymm4,%ymm0
+ DB 197,252,40,205 ; vmovaps %ymm5,%ymm1
+ DB 197,252,40,214 ; vmovaps %ymm6,%ymm2
+ DB 197,252,40,223 ; vmovaps %ymm7,%ymm3
+ DB 197,124,41,220 ; vmovaps %ymm11,%ymm4
+ DB 197,124,41,213 ; vmovaps %ymm10,%ymm5
+ DB 197,124,41,206 ; vmovaps %ymm9,%ymm6
+ DB 197,124,41,199 ; vmovaps %ymm8,%ymm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_src_dst_hsw
+_sk_move_src_dst_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,40,224 ; vmovaps %ymm0,%ymm4
+ DB 197,252,40,233 ; vmovaps %ymm1,%ymm5
+ DB 197,252,40,242 ; vmovaps %ymm2,%ymm6
+ DB 197,252,40,251 ; vmovaps %ymm3,%ymm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_dst_src_hsw
+_sk_move_dst_src_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,40,196 ; vmovaps %ymm4,%ymm0
+ DB 197,252,40,205 ; vmovaps %ymm5,%ymm1
+ DB 197,252,40,214 ; vmovaps %ymm6,%ymm2
+ DB 197,252,40,223 ; vmovaps %ymm7,%ymm3
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_premul_hsw
+_sk_premul_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,252,89,195 ; vmulps %ymm3,%ymm0,%ymm0
+ DB 197,244,89,203 ; vmulps %ymm3,%ymm1,%ymm1
+ DB 197,236,89,211 ; vmulps %ymm3,%ymm2,%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_unpremul_hsw
+_sk_unpremul_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,65,60,87,192 ; vxorps %ymm8,%ymm8,%ymm8
+ DB 196,65,100,194,200,0 ; vcmpeqps %ymm8,%ymm3,%ymm9
+ DB 196,98,125,24,18 ; vbroadcastss (%rdx),%ymm10
+ DB 197,44,94,211 ; vdivps %ymm3,%ymm10,%ymm10
+ DB 196,67,45,74,192,144 ; vblendvps %ymm9,%ymm8,%ymm10,%ymm8
+ DB 197,188,89,192 ; vmulps %ymm0,%ymm8,%ymm0
+ DB 197,188,89,201 ; vmulps %ymm1,%ymm8,%ymm1
+ DB 197,188,89,210 ; vmulps %ymm2,%ymm8,%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_from_srgb_hsw
+_sk_from_srgb_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,66,64 ; vbroadcastss 0x40(%rdx),%ymm8
+ DB 197,60,89,200 ; vmulps %ymm0,%ymm8,%ymm9
+ DB 197,124,89,208 ; vmulps %ymm0,%ymm0,%ymm10
+ DB 196,98,125,24,90,60 ; vbroadcastss 0x3c(%rdx),%ymm11
+ DB 196,98,125,24,98,56 ; vbroadcastss 0x38(%rdx),%ymm12
+ DB 196,65,124,40,235 ; vmovaps %ymm11,%ymm13
+ DB 196,66,125,168,236 ; vfmadd213ps %ymm12,%ymm0,%ymm13
+ DB 196,98,125,24,114,52 ; vbroadcastss 0x34(%rdx),%ymm14
+ DB 196,66,45,168,238 ; vfmadd213ps %ymm14,%ymm10,%ymm13
+ DB 196,98,125,24,82,68 ; vbroadcastss 0x44(%rdx),%ymm10
+ DB 196,193,124,194,194,1 ; vcmpltps %ymm10,%ymm0,%ymm0
+ DB 196,195,21,74,193,0 ; vblendvps %ymm0,%ymm9,%ymm13,%ymm0
+ DB 197,60,89,201 ; vmulps %ymm1,%ymm8,%ymm9
+ DB 197,116,89,233 ; vmulps %ymm1,%ymm1,%ymm13
+ DB 196,65,124,40,251 ; vmovaps %ymm11,%ymm15
+ DB 196,66,117,168,252 ; vfmadd213ps %ymm12,%ymm1,%ymm15
+ DB 196,66,21,168,254 ; vfmadd213ps %ymm14,%ymm13,%ymm15
+ DB 196,193,116,194,202,1 ; vcmpltps %ymm10,%ymm1,%ymm1
+ DB 196,195,5,74,201,16 ; vblendvps %ymm1,%ymm9,%ymm15,%ymm1
+ DB 197,60,89,194 ; vmulps %ymm2,%ymm8,%ymm8
+ DB 197,108,89,202 ; vmulps %ymm2,%ymm2,%ymm9
+ DB 196,66,109,168,220 ; vfmadd213ps %ymm12,%ymm2,%ymm11
+ DB 196,66,53,168,222 ; vfmadd213ps %ymm14,%ymm9,%ymm11
+ DB 196,193,108,194,210,1 ; vcmpltps %ymm10,%ymm2,%ymm2
+ DB 196,195,37,74,208,32 ; vblendvps %ymm2,%ymm8,%ymm11,%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_to_srgb_hsw
+_sk_to_srgb_hsw LABEL PROC
+ DB 197,124,82,192 ; vrsqrtps %ymm0,%ymm8
+ DB 196,65,124,83,200 ; vrcpps %ymm8,%ymm9
+ DB 196,65,124,82,208 ; vrsqrtps %ymm8,%ymm10
+ DB 196,98,125,24,66,72 ; vbroadcastss 0x48(%rdx),%ymm8
+ DB 197,60,89,216 ; vmulps %ymm0,%ymm8,%ymm11
+ DB 196,98,125,24,34 ; vbroadcastss (%rdx),%ymm12
+ DB 196,98,125,24,106,76 ; vbroadcastss 0x4c(%rdx),%ymm13
+ DB 196,98,125,24,114,80 ; vbroadcastss 0x50(%rdx),%ymm14
+ DB 196,98,125,24,122,84 ; vbroadcastss 0x54(%rdx),%ymm15
+ DB 196,66,13,168,207 ; vfmadd213ps %ymm15,%ymm14,%ymm9
+ DB 196,66,21,184,202 ; vfmadd231ps %ymm10,%ymm13,%ymm9
+ DB 196,65,28,93,201 ; vminps %ymm9,%ymm12,%ymm9
+ DB 196,98,125,24,82,88 ; vbroadcastss 0x58(%rdx),%ymm10
+ DB 196,193,124,194,194,1 ; vcmpltps %ymm10,%ymm0,%ymm0
+ DB 196,195,53,74,195,0 ; vblendvps %ymm0,%ymm11,%ymm9,%ymm0
+ DB 197,124,82,201 ; vrsqrtps %ymm1,%ymm9
+ DB 196,65,124,83,217 ; vrcpps %ymm9,%ymm11
+ DB 196,65,124,82,201 ; vrsqrtps %ymm9,%ymm9
+ DB 196,66,13,168,223 ; vfmadd213ps %ymm15,%ymm14,%ymm11
+ DB 196,66,21,184,217 ; vfmadd231ps %ymm9,%ymm13,%ymm11
+ DB 197,60,89,201 ; vmulps %ymm1,%ymm8,%ymm9
+ DB 196,65,28,93,219 ; vminps %ymm11,%ymm12,%ymm11
+ DB 196,193,116,194,202,1 ; vcmpltps %ymm10,%ymm1,%ymm1
+ DB 196,195,37,74,201,16 ; vblendvps %ymm1,%ymm9,%ymm11,%ymm1
+ DB 197,124,82,202 ; vrsqrtps %ymm2,%ymm9
+ DB 196,65,124,83,217 ; vrcpps %ymm9,%ymm11
+ DB 196,66,13,168,223 ; vfmadd213ps %ymm15,%ymm14,%ymm11
+ DB 196,65,124,82,201 ; vrsqrtps %ymm9,%ymm9
+ DB 196,66,21,184,217 ; vfmadd231ps %ymm9,%ymm13,%ymm11
+ DB 196,65,28,93,203 ; vminps %ymm11,%ymm12,%ymm9
+ DB 197,60,89,194 ; vmulps %ymm2,%ymm8,%ymm8
+ DB 196,193,108,194,210,1 ; vcmpltps %ymm10,%ymm2,%ymm2
+ DB 196,195,53,74,208,32 ; vblendvps %ymm2,%ymm8,%ymm9,%ymm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_scale_u8_hsw
+_sk_scale_u8_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 196,98,125,49,4,56 ; vpmovzxbd (%rax,%rdi,1),%ymm8
+ DB 196,65,124,91,192 ; vcvtdq2ps %ymm8,%ymm8
+ DB 196,98,125,24,74,12 ; vbroadcastss 0xc(%rdx),%ymm9
+ DB 196,65,60,89,193 ; vmulps %ymm9,%ymm8,%ymm8
+ DB 197,188,89,192 ; vmulps %ymm0,%ymm8,%ymm0
+ DB 197,188,89,201 ; vmulps %ymm1,%ymm8,%ymm1
+ DB 197,188,89,210 ; vmulps %ymm2,%ymm8,%ymm2
+ DB 197,188,89,219 ; vmulps %ymm3,%ymm8,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_tables_hsw
+_sk_load_tables_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,8 ; mov (%rax),%rcx
+ DB 76,139,64,8 ; mov 0x8(%rax),%r8
+ DB 197,252,16,28,185 ; vmovups (%rcx,%rdi,4),%ymm3
+ DB 196,226,125,24,82,16 ; vbroadcastss 0x10(%rdx),%ymm2
+ DB 197,236,84,203 ; vandps %ymm3,%ymm2,%ymm1
+ DB 197,252,87,192 ; vxorps %ymm0,%ymm0,%ymm0
+ DB 197,124,194,192,0 ; vcmpeqps %ymm0,%ymm0,%ymm8
+ DB 196,65,124,40,200 ; vmovaps %ymm8,%ymm9
+ DB 196,194,53,146,4,136 ; vgatherdps %ymm9,(%r8,%ymm1,4),%ymm0
+ DB 72,139,72,16 ; mov 0x10(%rax),%rcx
+ DB 197,245,114,211,8 ; vpsrld $0x8,%ymm3,%ymm1
+ DB 197,108,84,201 ; vandps %ymm1,%ymm2,%ymm9
+ DB 196,65,124,40,208 ; vmovaps %ymm8,%ymm10
+ DB 196,162,45,146,12,137 ; vgatherdps %ymm10,(%rcx,%ymm9,4),%ymm1
+ DB 72,139,64,24 ; mov 0x18(%rax),%rax
+ DB 197,181,114,211,16 ; vpsrld $0x10,%ymm3,%ymm9
+ DB 196,65,108,84,201 ; vandps %ymm9,%ymm2,%ymm9
+ DB 196,162,61,146,20,136 ; vgatherdps %ymm8,(%rax,%ymm9,4),%ymm2
+ DB 197,229,114,211,24 ; vpsrld $0x18,%ymm3,%ymm3
+ DB 197,252,91,219 ; vcvtdq2ps %ymm3,%ymm3
+ DB 196,98,125,24,66,12 ; vbroadcastss 0xc(%rdx),%ymm8
+ DB 196,193,100,89,216 ; vmulps %ymm8,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_8888_hsw
+_sk_load_8888_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 197,252,16,28,184 ; vmovups (%rax,%rdi,4),%ymm3
+ DB 196,226,125,24,82,16 ; vbroadcastss 0x10(%rdx),%ymm2
+ DB 197,236,84,195 ; vandps %ymm3,%ymm2,%ymm0
+ DB 197,252,91,192 ; vcvtdq2ps %ymm0,%ymm0
+ DB 196,98,125,24,66,12 ; vbroadcastss 0xc(%rdx),%ymm8
+ DB 197,188,89,192 ; vmulps %ymm0,%ymm8,%ymm0
+ DB 197,245,114,211,8 ; vpsrld $0x8,%ymm3,%ymm1
+ DB 197,236,84,201 ; vandps %ymm1,%ymm2,%ymm1
+ DB 197,252,91,201 ; vcvtdq2ps %ymm1,%ymm1
+ DB 197,188,89,201 ; vmulps %ymm1,%ymm8,%ymm1
+ DB 197,181,114,211,16 ; vpsrld $0x10,%ymm3,%ymm9
+ DB 196,193,108,84,209 ; vandps %ymm9,%ymm2,%ymm2
+ DB 197,252,91,210 ; vcvtdq2ps %ymm2,%ymm2
+ DB 197,188,89,210 ; vmulps %ymm2,%ymm8,%ymm2
+ DB 197,229,114,211,24 ; vpsrld $0x18,%ymm3,%ymm3
+ DB 197,252,91,219 ; vcvtdq2ps %ymm3,%ymm3
+ DB 196,193,100,89,216 ; vmulps %ymm8,%ymm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_8888_hsw
+_sk_store_8888_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 196,98,125,24,66,8 ; vbroadcastss 0x8(%rdx),%ymm8
+ DB 197,60,89,200 ; vmulps %ymm0,%ymm8,%ymm9
+ DB 196,65,125,91,201 ; vcvtps2dq %ymm9,%ymm9
+ DB 197,60,89,209 ; vmulps %ymm1,%ymm8,%ymm10
+ DB 196,65,125,91,210 ; vcvtps2dq %ymm10,%ymm10
+ DB 196,193,45,114,242,8 ; vpslld $0x8,%ymm10,%ymm10
+ DB 196,65,45,235,201 ; vpor %ymm9,%ymm10,%ymm9
+ DB 197,60,89,210 ; vmulps %ymm2,%ymm8,%ymm10
+ DB 196,65,125,91,210 ; vcvtps2dq %ymm10,%ymm10
+ DB 196,193,45,114,242,16 ; vpslld $0x10,%ymm10,%ymm10
+ DB 197,60,89,195 ; vmulps %ymm3,%ymm8,%ymm8
+ DB 196,65,125,91,192 ; vcvtps2dq %ymm8,%ymm8
+ DB 196,193,61,114,240,24 ; vpslld $0x18,%ymm8,%ymm8
+ DB 196,65,45,235,192 ; vpor %ymm8,%ymm10,%ymm8
+ DB 196,65,53,235,192 ; vpor %ymm8,%ymm9,%ymm8
+ DB 197,126,127,4,184 ; vmovdqu %ymm8,(%rax,%rdi,4)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_f16_hsw
+_sk_load_f16_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 197,250,111,4,248 ; vmovdqu (%rax,%rdi,8),%xmm0
+ DB 197,250,111,76,248,16 ; vmovdqu 0x10(%rax,%rdi,8),%xmm1
+ DB 197,250,111,84,248,32 ; vmovdqu 0x20(%rax,%rdi,8),%xmm2
+ DB 197,250,111,92,248,48 ; vmovdqu 0x30(%rax,%rdi,8),%xmm3
+ DB 197,121,97,193 ; vpunpcklwd %xmm1,%xmm0,%xmm8
+ DB 197,249,105,193 ; vpunpckhwd %xmm1,%xmm0,%xmm0
+ DB 197,233,97,203 ; vpunpcklwd %xmm3,%xmm2,%xmm1
+ DB 197,233,105,211 ; vpunpckhwd %xmm3,%xmm2,%xmm2
+ DB 197,57,97,200 ; vpunpcklwd %xmm0,%xmm8,%xmm9
+ DB 197,57,105,192 ; vpunpckhwd %xmm0,%xmm8,%xmm8
+ DB 197,241,97,218 ; vpunpcklwd %xmm2,%xmm1,%xmm3
+ DB 197,113,105,210 ; vpunpckhwd %xmm2,%xmm1,%xmm10
+ DB 197,177,108,195 ; vpunpcklqdq %xmm3,%xmm9,%xmm0
+ DB 196,226,125,19,192 ; vcvtph2ps %xmm0,%ymm0
+ DB 197,177,109,203 ; vpunpckhqdq %xmm3,%xmm9,%xmm1
+ DB 196,226,125,19,201 ; vcvtph2ps %xmm1,%ymm1
+ DB 196,193,57,108,210 ; vpunpcklqdq %xmm10,%xmm8,%xmm2
+ DB 196,226,125,19,210 ; vcvtph2ps %xmm2,%ymm2
+ DB 196,193,57,109,218 ; vpunpckhqdq %xmm10,%xmm8,%xmm3
+ DB 196,226,125,19,219 ; vcvtph2ps %xmm3,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_f16_hsw
+_sk_store_f16_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 196,195,125,29,192,4 ; vcvtps2ph $0x4,%ymm0,%xmm8
+ DB 196,195,125,29,201,4 ; vcvtps2ph $0x4,%ymm1,%xmm9
+ DB 196,195,125,29,210,4 ; vcvtps2ph $0x4,%ymm2,%xmm10
+ DB 196,195,125,29,219,4 ; vcvtps2ph $0x4,%ymm3,%xmm11
+ DB 196,65,57,97,225 ; vpunpcklwd %xmm9,%xmm8,%xmm12
+ DB 196,65,57,105,193 ; vpunpckhwd %xmm9,%xmm8,%xmm8
+ DB 196,65,41,97,203 ; vpunpcklwd %xmm11,%xmm10,%xmm9
+ DB 196,65,41,105,211 ; vpunpckhwd %xmm11,%xmm10,%xmm10
+ DB 196,65,25,98,217 ; vpunpckldq %xmm9,%xmm12,%xmm11
+ DB 197,122,127,28,248 ; vmovdqu %xmm11,(%rax,%rdi,8)
+ DB 196,65,25,106,201 ; vpunpckhdq %xmm9,%xmm12,%xmm9
+ DB 197,122,127,76,248,16 ; vmovdqu %xmm9,0x10(%rax,%rdi,8)
+ DB 196,65,57,98,202 ; vpunpckldq %xmm10,%xmm8,%xmm9
+ DB 197,122,127,76,248,32 ; vmovdqu %xmm9,0x20(%rax,%rdi,8)
+ DB 196,65,57,106,194 ; vpunpckhdq %xmm10,%xmm8,%xmm8
+ DB 197,122,127,68,248,48 ; vmovdqu %xmm8,0x30(%rax,%rdi,8)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_x_hsw
+_sk_clamp_x_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,88,0 ; vpbroadcastd (%rax),%ymm8
+ DB 196,65,53,118,201 ; vpcmpeqd %ymm9,%ymm9,%ymm9
+ DB 196,65,61,254,193 ; vpaddd %ymm9,%ymm8,%ymm8
+ DB 196,193,124,93,192 ; vminps %ymm8,%ymm0,%ymm0
+ DB 196,65,60,87,192 ; vxorps %ymm8,%ymm8,%ymm8
+ DB 197,188,95,192 ; vmaxps %ymm0,%ymm8,%ymm0
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_y_hsw
+_sk_clamp_y_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,88,0 ; vpbroadcastd (%rax),%ymm8
+ DB 196,65,53,118,201 ; vpcmpeqd %ymm9,%ymm9,%ymm9
+ DB 196,65,61,254,193 ; vpaddd %ymm9,%ymm8,%ymm8
+ DB 196,193,116,93,200 ; vminps %ymm8,%ymm1,%ymm1
+ DB 196,65,60,87,192 ; vxorps %ymm8,%ymm8,%ymm8
+ DB 197,188,95,201 ; vmaxps %ymm1,%ymm8,%ymm1
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_2x3_hsw
+_sk_matrix_2x3_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,8 ; vbroadcastss (%rax),%ymm9
+ DB 196,98,125,24,80,8 ; vbroadcastss 0x8(%rax),%ymm10
+ DB 196,98,125,24,64,16 ; vbroadcastss 0x10(%rax),%ymm8
+ DB 196,66,117,184,194 ; vfmadd231ps %ymm10,%ymm1,%ymm8
+ DB 196,66,125,184,193 ; vfmadd231ps %ymm9,%ymm0,%ymm8
+ DB 196,98,125,24,80,4 ; vbroadcastss 0x4(%rax),%ymm10
+ DB 196,98,125,24,88,12 ; vbroadcastss 0xc(%rax),%ymm11
+ DB 196,98,125,24,72,20 ; vbroadcastss 0x14(%rax),%ymm9
+ DB 196,66,117,184,203 ; vfmadd231ps %ymm11,%ymm1,%ymm9
+ DB 196,66,125,184,202 ; vfmadd231ps %ymm10,%ymm0,%ymm9
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,124,41,192 ; vmovaps %ymm8,%ymm0
+ DB 197,124,41,201 ; vmovaps %ymm9,%ymm1
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_3x4_hsw
+_sk_matrix_3x4_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,98,125,24,8 ; vbroadcastss (%rax),%ymm9
+ DB 196,98,125,24,80,12 ; vbroadcastss 0xc(%rax),%ymm10
+ DB 196,98,125,24,88,24 ; vbroadcastss 0x18(%rax),%ymm11
+ DB 196,98,125,24,64,36 ; vbroadcastss 0x24(%rax),%ymm8
+ DB 196,66,109,184,195 ; vfmadd231ps %ymm11,%ymm2,%ymm8
+ DB 196,66,117,184,194 ; vfmadd231ps %ymm10,%ymm1,%ymm8
+ DB 196,66,125,184,193 ; vfmadd231ps %ymm9,%ymm0,%ymm8
+ DB 196,98,125,24,80,4 ; vbroadcastss 0x4(%rax),%ymm10
+ DB 196,98,125,24,88,16 ; vbroadcastss 0x10(%rax),%ymm11
+ DB 196,98,125,24,96,28 ; vbroadcastss 0x1c(%rax),%ymm12
+ DB 196,98,125,24,72,40 ; vbroadcastss 0x28(%rax),%ymm9
+ DB 196,66,109,184,204 ; vfmadd231ps %ymm12,%ymm2,%ymm9
+ DB 196,66,117,184,203 ; vfmadd231ps %ymm11,%ymm1,%ymm9
+ DB 196,66,125,184,202 ; vfmadd231ps %ymm10,%ymm0,%ymm9
+ DB 196,98,125,24,88,8 ; vbroadcastss 0x8(%rax),%ymm11
+ DB 196,98,125,24,96,20 ; vbroadcastss 0x14(%rax),%ymm12
+ DB 196,98,125,24,104,32 ; vbroadcastss 0x20(%rax),%ymm13
+ DB 196,98,125,24,80,44 ; vbroadcastss 0x2c(%rax),%ymm10
+ DB 196,66,109,184,213 ; vfmadd231ps %ymm13,%ymm2,%ymm10
+ DB 196,66,117,184,212 ; vfmadd231ps %ymm12,%ymm1,%ymm10
+ DB 196,66,125,184,211 ; vfmadd231ps %ymm11,%ymm0,%ymm10
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,124,41,192 ; vmovaps %ymm8,%ymm0
+ DB 197,124,41,201 ; vmovaps %ymm9,%ymm1
+ DB 197,124,41,210 ; vmovaps %ymm10,%ymm2
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_linear_gradient_2stops_hsw
+_sk_linear_gradient_2stops_hsw LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 196,226,125,24,72,16 ; vbroadcastss 0x10(%rax),%ymm1
+ DB 196,98,125,24,0 ; vbroadcastss (%rax),%ymm8
+ DB 196,98,125,184,193 ; vfmadd231ps %ymm1,%ymm0,%ymm8
+ DB 196,226,125,24,80,20 ; vbroadcastss 0x14(%rax),%ymm2
+ DB 196,226,125,24,72,4 ; vbroadcastss 0x4(%rax),%ymm1
+ DB 196,226,125,184,202 ; vfmadd231ps %ymm2,%ymm0,%ymm1
+ DB 196,226,125,24,88,24 ; vbroadcastss 0x18(%rax),%ymm3
+ DB 196,226,125,24,80,8 ; vbroadcastss 0x8(%rax),%ymm2
+ DB 196,226,125,184,211 ; vfmadd231ps %ymm3,%ymm0,%ymm2
+ DB 196,98,125,24,72,28 ; vbroadcastss 0x1c(%rax),%ymm9
+ DB 196,226,125,24,88,12 ; vbroadcastss 0xc(%rax),%ymm3
+ DB 196,194,125,184,217 ; vfmadd231ps %ymm9,%ymm0,%ymm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 197,124,41,192 ; vmovaps %ymm8,%ymm0
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_start_pipeline_sse41
+_sk_start_pipeline_sse41 LABEL PROC
+ DB 86 ; push %rsi
+ DB 87 ; push %rdi
+ DB 72,129,236,168,0,0,0 ; sub $0xa8,%rsp
+ DB 68,15,41,188,36,144,0,0,0 ; movaps %xmm15,0x90(%rsp)
+ DB 68,15,41,180,36,128,0,0,0 ; movaps %xmm14,0x80(%rsp)
+ DB 68,15,41,108,36,112 ; movaps %xmm13,0x70(%rsp)
+ DB 68,15,41,100,36,96 ; movaps %xmm12,0x60(%rsp)
+ DB 68,15,41,92,36,80 ; movaps %xmm11,0x50(%rsp)
+ DB 68,15,41,84,36,64 ; movaps %xmm10,0x40(%rsp)
+ DB 68,15,41,76,36,48 ; movaps %xmm9,0x30(%rsp)
+ DB 68,15,41,68,36,32 ; movaps %xmm8,0x20(%rsp)
+ DB 15,41,124,36,16 ; movaps %xmm7,0x10(%rsp)
+ DB 15,41,52,36 ; movaps %xmm6,(%rsp)
+ DB 72,137,214 ; mov %rdx,%rsi
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,192 ; xorps %xmm0,%xmm0
+ DB 15,87,201 ; xorps %xmm1,%xmm1
+ DB 15,87,210 ; xorps %xmm2,%xmm2
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 15,87,228 ; xorps %xmm4,%xmm4
+ DB 15,87,237 ; xorps %xmm5,%xmm5
+ DB 15,87,246 ; xorps %xmm6,%xmm6
+ DB 15,87,255 ; xorps %xmm7,%xmm7
+ DB 72,137,207 ; mov %rcx,%rdi
+ DB 76,137,194 ; mov %r8,%rdx
+ DB 255,208 ; callq *%rax
+ DB 15,40,52,36 ; movaps (%rsp),%xmm6
+ DB 15,40,124,36,16 ; movaps 0x10(%rsp),%xmm7
+ DB 68,15,40,68,36,32 ; movaps 0x20(%rsp),%xmm8
+ DB 68,15,40,76,36,48 ; movaps 0x30(%rsp),%xmm9
+ DB 68,15,40,84,36,64 ; movaps 0x40(%rsp),%xmm10
+ DB 68,15,40,92,36,80 ; movaps 0x50(%rsp),%xmm11
+ DB 68,15,40,100,36,96 ; movaps 0x60(%rsp),%xmm12
+ DB 68,15,40,108,36,112 ; movaps 0x70(%rsp),%xmm13
+ DB 68,15,40,180,36,128,0,0,0 ; movaps 0x80(%rsp),%xmm14
+ DB 68,15,40,188,36,144,0,0,0 ; movaps 0x90(%rsp),%xmm15
+ DB 72,129,196,168,0,0,0 ; add $0xa8,%rsp
+ DB 95 ; pop %rdi
+ DB 94 ; pop %rsi
+ DB 195 ; retq
+
+PUBLIC _sk_just_return_sse41
+_sk_just_return_sse41 LABEL PROC
+ DB 195 ; retq
+
+PUBLIC _sk_seed_shader_sse41
+_sk_seed_shader_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 102,15,110,199 ; movd %edi,%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 15,91,200 ; cvtdq2ps %xmm0,%xmm1
+ DB 243,15,16,18 ; movss (%rdx),%xmm2
+ DB 243,15,16,90,4 ; movss 0x4(%rdx),%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 15,88,203 ; addps %xmm3,%xmm1
+ DB 15,16,66,20 ; movups 0x14(%rdx),%xmm0
+ DB 15,88,193 ; addps %xmm1,%xmm0
+ DB 102,15,110,8 ; movd (%rax),%xmm1
+ DB 102,15,112,201,0 ; pshufd $0x0,%xmm1,%xmm1
+ DB 15,91,201 ; cvtdq2ps %xmm1,%xmm1
+ DB 15,88,203 ; addps %xmm3,%xmm1
+ DB 15,198,210,0 ; shufps $0x0,%xmm2,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 15,87,228 ; xorps %xmm4,%xmm4
+ DB 15,87,237 ; xorps %xmm5,%xmm5
+ DB 15,87,246 ; xorps %xmm6,%xmm6
+ DB 15,87,255 ; xorps %xmm7,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_constant_color_sse41
+_sk_constant_color_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,16,24 ; movups (%rax),%xmm3
+ DB 15,40,195 ; movaps %xmm3,%xmm0
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 15,40,203 ; movaps %xmm3,%xmm1
+ DB 15,198,201,85 ; shufps $0x55,%xmm1,%xmm1
+ DB 15,40,211 ; movaps %xmm3,%xmm2
+ DB 15,198,210,170 ; shufps $0xaa,%xmm2,%xmm2
+ DB 15,198,219,255 ; shufps $0xff,%xmm3,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clear_sse41
+_sk_clear_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,192 ; xorps %xmm0,%xmm0
+ DB 15,87,201 ; xorps %xmm1,%xmm1
+ DB 15,87,210 ; xorps %xmm2,%xmm2
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_plus__sse41
+_sk_plus__sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,88,196 ; addps %xmm4,%xmm0
+ DB 15,88,205 ; addps %xmm5,%xmm1
+ DB 15,88,214 ; addps %xmm6,%xmm2
+ DB 15,88,223 ; addps %xmm7,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_srcover_sse41
+_sk_srcover_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 68,15,92,195 ; subps %xmm3,%xmm8
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,204 ; mulps %xmm4,%xmm9
+ DB 65,15,88,193 ; addps %xmm9,%xmm0
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,205 ; mulps %xmm5,%xmm9
+ DB 65,15,88,201 ; addps %xmm9,%xmm1
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,206 ; mulps %xmm6,%xmm9
+ DB 65,15,88,209 ; addps %xmm9,%xmm2
+ DB 68,15,89,199 ; mulps %xmm7,%xmm8
+ DB 65,15,88,216 ; addps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_dstover_sse41
+_sk_dstover_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 68,15,92,199 ; subps %xmm7,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 15,88,196 ; addps %xmm4,%xmm0
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 15,88,205 ; addps %xmm5,%xmm1
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 15,88,214 ; addps %xmm6,%xmm2
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 15,88,223 ; addps %xmm7,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_0_sse41
+_sk_clamp_0_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 65,15,95,192 ; maxps %xmm8,%xmm0
+ DB 65,15,95,200 ; maxps %xmm8,%xmm1
+ DB 65,15,95,208 ; maxps %xmm8,%xmm2
+ DB 65,15,95,216 ; maxps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_1_sse41
+_sk_clamp_1_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,93,192 ; minps %xmm8,%xmm0
+ DB 65,15,93,200 ; minps %xmm8,%xmm1
+ DB 65,15,93,208 ; minps %xmm8,%xmm2
+ DB 65,15,93,216 ; minps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_a_sse41
+_sk_clamp_a_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,93,216 ; minps %xmm8,%xmm3
+ DB 15,93,195 ; minps %xmm3,%xmm0
+ DB 15,93,203 ; minps %xmm3,%xmm1
+ DB 15,93,211 ; minps %xmm3,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_swap_sse41
+_sk_swap_sse41 LABEL PROC
+ DB 68,15,40,195 ; movaps %xmm3,%xmm8
+ DB 68,15,40,202 ; movaps %xmm2,%xmm9
+ DB 68,15,40,209 ; movaps %xmm1,%xmm10
+ DB 68,15,40,216 ; movaps %xmm0,%xmm11
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,196 ; movaps %xmm4,%xmm0
+ DB 15,40,205 ; movaps %xmm5,%xmm1
+ DB 15,40,214 ; movaps %xmm6,%xmm2
+ DB 15,40,223 ; movaps %xmm7,%xmm3
+ DB 65,15,40,227 ; movaps %xmm11,%xmm4
+ DB 65,15,40,234 ; movaps %xmm10,%xmm5
+ DB 65,15,40,241 ; movaps %xmm9,%xmm6
+ DB 65,15,40,248 ; movaps %xmm8,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_src_dst_sse41
+_sk_move_src_dst_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,224 ; movaps %xmm0,%xmm4
+ DB 15,40,233 ; movaps %xmm1,%xmm5
+ DB 15,40,242 ; movaps %xmm2,%xmm6
+ DB 15,40,251 ; movaps %xmm3,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_dst_src_sse41
+_sk_move_dst_src_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,196 ; movaps %xmm4,%xmm0
+ DB 15,40,205 ; movaps %xmm5,%xmm1
+ DB 15,40,214 ; movaps %xmm6,%xmm2
+ DB 15,40,223 ; movaps %xmm7,%xmm3
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_premul_sse41
+_sk_premul_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,89,195 ; mulps %xmm3,%xmm0
+ DB 15,89,203 ; mulps %xmm3,%xmm1
+ DB 15,89,211 ; mulps %xmm3,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_unpremul_sse41
+_sk_unpremul_sse41 LABEL PROC
+ DB 68,15,40,192 ; movaps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 69,15,87,201 ; xorps %xmm9,%xmm9
+ DB 243,68,15,16,18 ; movss (%rdx),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 68,15,94,211 ; divps %xmm3,%xmm10
+ DB 15,40,195 ; movaps %xmm3,%xmm0
+ DB 65,15,194,193,0 ; cmpeqps %xmm9,%xmm0
+ DB 102,69,15,56,20,209 ; blendvps %xmm0,%xmm9,%xmm10
+ DB 69,15,89,194 ; mulps %xmm10,%xmm8
+ DB 65,15,89,202 ; mulps %xmm10,%xmm1
+ DB 65,15,89,210 ; mulps %xmm10,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_from_srgb_sse41
+_sk_from_srgb_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,90,64 ; movss 0x40(%rdx),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,40,211 ; movaps %xmm11,%xmm10
+ DB 68,15,89,208 ; mulps %xmm0,%xmm10
+ DB 68,15,40,240 ; movaps %xmm0,%xmm14
+ DB 69,15,89,246 ; mulps %xmm14,%xmm14
+ DB 243,68,15,16,66,60 ; movss 0x3c(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 243,68,15,16,98,52 ; movss 0x34(%rdx),%xmm12
+ DB 243,68,15,16,106,56 ; movss 0x38(%rdx),%xmm13
+ DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,200 ; mulps %xmm0,%xmm9
+ DB 69,15,88,205 ; addps %xmm13,%xmm9
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 69,15,89,206 ; mulps %xmm14,%xmm9
+ DB 69,15,88,204 ; addps %xmm12,%xmm9
+ DB 243,68,15,16,114,68 ; movss 0x44(%rdx),%xmm14
+ DB 69,15,198,246,0 ; shufps $0x0,%xmm14,%xmm14
+ DB 65,15,194,198,1 ; cmpltps %xmm14,%xmm0
+ DB 102,69,15,56,20,202 ; blendvps %xmm0,%xmm10,%xmm9
+ DB 69,15,40,251 ; movaps %xmm11,%xmm15
+ DB 68,15,89,249 ; mulps %xmm1,%xmm15
+ DB 15,40,193 ; movaps %xmm1,%xmm0
+ DB 15,89,192 ; mulps %xmm0,%xmm0
+ DB 69,15,40,208 ; movaps %xmm8,%xmm10
+ DB 68,15,89,209 ; mulps %xmm1,%xmm10
+ DB 69,15,88,213 ; addps %xmm13,%xmm10
+ DB 68,15,89,208 ; mulps %xmm0,%xmm10
+ DB 69,15,88,212 ; addps %xmm12,%xmm10
+ DB 65,15,194,206,1 ; cmpltps %xmm14,%xmm1
+ DB 15,40,193 ; movaps %xmm1,%xmm0
+ DB 102,69,15,56,20,215 ; blendvps %xmm0,%xmm15,%xmm10
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 15,40,194 ; movaps %xmm2,%xmm0
+ DB 15,89,192 ; mulps %xmm0,%xmm0
+ DB 68,15,89,194 ; mulps %xmm2,%xmm8
+ DB 69,15,88,197 ; addps %xmm13,%xmm8
+ DB 68,15,89,192 ; mulps %xmm0,%xmm8
+ DB 69,15,88,196 ; addps %xmm12,%xmm8
+ DB 65,15,194,214,1 ; cmpltps %xmm14,%xmm2
+ DB 15,40,194 ; movaps %xmm2,%xmm0
+ DB 102,69,15,56,20,195 ; blendvps %xmm0,%xmm11,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,193 ; movaps %xmm9,%xmm0
+ DB 65,15,40,202 ; movaps %xmm10,%xmm1
+ DB 65,15,40,208 ; movaps %xmm8,%xmm2
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_to_srgb_sse41
+_sk_to_srgb_sse41 LABEL PROC
+ DB 72,131,236,24 ; sub $0x18,%rsp
+ DB 15,41,60,36 ; movaps %xmm7,(%rsp)
+ DB 15,40,254 ; movaps %xmm6,%xmm7
+ DB 15,40,245 ; movaps %xmm5,%xmm6
+ DB 15,40,236 ; movaps %xmm4,%xmm5
+ DB 15,40,227 ; movaps %xmm3,%xmm4
+ DB 68,15,40,194 ; movaps %xmm2,%xmm8
+ DB 15,40,217 ; movaps %xmm1,%xmm3
+ DB 15,82,208 ; rsqrtps %xmm0,%xmm2
+ DB 68,15,83,202 ; rcpps %xmm2,%xmm9
+ DB 68,15,82,210 ; rsqrtps %xmm2,%xmm10
+ DB 243,15,16,18 ; movss (%rdx),%xmm2
+ DB 243,68,15,16,90,72 ; movss 0x48(%rdx),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 65,15,40,203 ; movaps %xmm11,%xmm1
+ DB 15,89,200 ; mulps %xmm0,%xmm1
+ DB 15,198,210,0 ; shufps $0x0,%xmm2,%xmm2
+ DB 243,68,15,16,98,76 ; movss 0x4c(%rdx),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 243,68,15,16,106,80 ; movss 0x50(%rdx),%xmm13
+ DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
+ DB 243,68,15,16,114,84 ; movss 0x54(%rdx),%xmm14
+ DB 69,15,198,246,0 ; shufps $0x0,%xmm14,%xmm14
+ DB 69,15,89,205 ; mulps %xmm13,%xmm9
+ DB 69,15,88,206 ; addps %xmm14,%xmm9
+ DB 69,15,89,212 ; mulps %xmm12,%xmm10
+ DB 69,15,88,209 ; addps %xmm9,%xmm10
+ DB 68,15,40,202 ; movaps %xmm2,%xmm9
+ DB 69,15,93,202 ; minps %xmm10,%xmm9
+ DB 243,68,15,16,122,88 ; movss 0x58(%rdx),%xmm15
+ DB 69,15,198,255,0 ; shufps $0x0,%xmm15,%xmm15
+ DB 65,15,194,199,1 ; cmpltps %xmm15,%xmm0
+ DB 102,68,15,56,20,201 ; blendvps %xmm0,%xmm1,%xmm9
+ DB 15,82,195 ; rsqrtps %xmm3,%xmm0
+ DB 15,83,200 ; rcpps %xmm0,%xmm1
+ DB 15,82,192 ; rsqrtps %xmm0,%xmm0
+ DB 65,15,89,205 ; mulps %xmm13,%xmm1
+ DB 65,15,88,206 ; addps %xmm14,%xmm1
+ DB 65,15,89,196 ; mulps %xmm12,%xmm0
+ DB 15,88,193 ; addps %xmm1,%xmm0
+ DB 68,15,40,210 ; movaps %xmm2,%xmm10
+ DB 68,15,93,208 ; minps %xmm0,%xmm10
+ DB 65,15,40,203 ; movaps %xmm11,%xmm1
+ DB 15,89,203 ; mulps %xmm3,%xmm1
+ DB 65,15,194,223,1 ; cmpltps %xmm15,%xmm3
+ DB 15,40,195 ; movaps %xmm3,%xmm0
+ DB 102,68,15,56,20,209 ; blendvps %xmm0,%xmm1,%xmm10
+ DB 65,15,82,192 ; rsqrtps %xmm8,%xmm0
+ DB 15,83,200 ; rcpps %xmm0,%xmm1
+ DB 65,15,89,205 ; mulps %xmm13,%xmm1
+ DB 65,15,88,206 ; addps %xmm14,%xmm1
+ DB 15,82,192 ; rsqrtps %xmm0,%xmm0
+ DB 65,15,89,196 ; mulps %xmm12,%xmm0
+ DB 15,88,193 ; addps %xmm1,%xmm0
+ DB 15,93,208 ; minps %xmm0,%xmm2
+ DB 69,15,89,216 ; mulps %xmm8,%xmm11
+ DB 69,15,194,199,1 ; cmpltps %xmm15,%xmm8
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 102,65,15,56,20,211 ; blendvps %xmm0,%xmm11,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,193 ; movaps %xmm9,%xmm0
+ DB 65,15,40,202 ; movaps %xmm10,%xmm1
+ DB 15,40,220 ; movaps %xmm4,%xmm3
+ DB 15,40,229 ; movaps %xmm5,%xmm4
+ DB 15,40,238 ; movaps %xmm6,%xmm5
+ DB 15,40,247 ; movaps %xmm7,%xmm6
+ DB 15,40,60,36 ; movaps (%rsp),%xmm7
+ DB 72,131,196,24 ; add $0x18,%rsp
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_scale_u8_sse41
+_sk_scale_u8_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 102,68,15,56,49,4,56 ; pmovzxbd (%rax,%rdi,1),%xmm8
+ DB 69,15,91,192 ; cvtdq2ps %xmm8,%xmm8
+ DB 243,68,15,16,74,12 ; movss 0xc(%rdx),%xmm9
+ DB 69,15,198,201,0 ; shufps $0x0,%xmm9,%xmm9
+ DB 69,15,89,200 ; mulps %xmm8,%xmm9
+ DB 65,15,89,193 ; mulps %xmm9,%xmm0
+ DB 65,15,89,201 ; mulps %xmm9,%xmm1
+ DB 65,15,89,209 ; mulps %xmm9,%xmm2
+ DB 65,15,89,217 ; mulps %xmm9,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_tables_sse41
+_sk_load_tables_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,8 ; mov (%rax),%rcx
+ DB 76,139,64,8 ; mov 0x8(%rax),%r8
+ DB 243,68,15,111,4,185 ; movdqu (%rcx,%rdi,4),%xmm8
+ DB 102,15,110,66,16 ; movd 0x10(%rdx),%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 102,65,15,111,200 ; movdqa %xmm8,%xmm1
+ DB 102,15,114,209,8 ; psrld $0x8,%xmm1
+ DB 102,15,219,200 ; pand %xmm0,%xmm1
+ DB 102,65,15,111,208 ; movdqa %xmm8,%xmm2
+ DB 102,15,114,210,16 ; psrld $0x10,%xmm2
+ DB 102,15,219,208 ; pand %xmm0,%xmm2
+ DB 102,65,15,219,192 ; pand %xmm8,%xmm0
+ DB 102,72,15,58,22,193,1 ; pextrq $0x1,%xmm0,%rcx
+ DB 65,137,201 ; mov %ecx,%r9d
+ DB 72,193,233,32 ; shr $0x20,%rcx
+ DB 102,73,15,126,194 ; movq %xmm0,%r10
+ DB 69,137,211 ; mov %r10d,%r11d
+ DB 73,193,234,32 ; shr $0x20,%r10
+ DB 243,67,15,16,4,152 ; movss (%r8,%r11,4),%xmm0
+ DB 102,67,15,58,33,4,144,16 ; insertps $0x10,(%r8,%r10,4),%xmm0
+ DB 102,67,15,58,33,4,136,32 ; insertps $0x20,(%r8,%r9,4),%xmm0
+ DB 102,65,15,58,33,4,136,48 ; insertps $0x30,(%r8,%rcx,4),%xmm0
+ DB 72,139,72,16 ; mov 0x10(%rax),%rcx
+ DB 102,73,15,58,22,200,1 ; pextrq $0x1,%xmm1,%r8
+ DB 69,137,193 ; mov %r8d,%r9d
+ DB 73,193,232,32 ; shr $0x20,%r8
+ DB 102,73,15,126,202 ; movq %xmm1,%r10
+ DB 69,137,211 ; mov %r10d,%r11d
+ DB 73,193,234,32 ; shr $0x20,%r10
+ DB 243,66,15,16,12,153 ; movss (%rcx,%r11,4),%xmm1
+ DB 102,66,15,58,33,12,145,16 ; insertps $0x10,(%rcx,%r10,4),%xmm1
+ DB 243,66,15,16,28,137 ; movss (%rcx,%r9,4),%xmm3
+ DB 102,15,58,33,203,32 ; insertps $0x20,%xmm3,%xmm1
+ DB 243,66,15,16,28,129 ; movss (%rcx,%r8,4),%xmm3
+ DB 102,15,58,33,203,48 ; insertps $0x30,%xmm3,%xmm1
+ DB 72,139,64,24 ; mov 0x18(%rax),%rax
+ DB 102,72,15,58,22,209,1 ; pextrq $0x1,%xmm2,%rcx
+ DB 65,137,200 ; mov %ecx,%r8d
+ DB 72,193,233,32 ; shr $0x20,%rcx
+ DB 102,73,15,126,209 ; movq %xmm2,%r9
+ DB 69,137,202 ; mov %r9d,%r10d
+ DB 73,193,233,32 ; shr $0x20,%r9
+ DB 243,66,15,16,20,144 ; movss (%rax,%r10,4),%xmm2
+ DB 102,66,15,58,33,20,136,16 ; insertps $0x10,(%rax,%r9,4),%xmm2
+ DB 243,66,15,16,28,128 ; movss (%rax,%r8,4),%xmm3
+ DB 102,15,58,33,211,32 ; insertps $0x20,%xmm3,%xmm2
+ DB 243,15,16,28,136 ; movss (%rax,%rcx,4),%xmm3
+ DB 102,15,58,33,211,48 ; insertps $0x30,%xmm3,%xmm2
+ DB 102,65,15,114,208,24 ; psrld $0x18,%xmm8
+ DB 69,15,91,192 ; cvtdq2ps %xmm8,%xmm8
+ DB 243,15,16,90,12 ; movss 0xc(%rdx),%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_8888_sse41
+_sk_load_8888_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,15,111,28,184 ; movdqu (%rax,%rdi,4),%xmm3
+ DB 102,15,110,66,16 ; movd 0x10(%rdx),%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,15,114,209,8 ; psrld $0x8,%xmm1
+ DB 102,15,219,200 ; pand %xmm0,%xmm1
+ DB 102,15,111,211 ; movdqa %xmm3,%xmm2
+ DB 102,15,114,210,16 ; psrld $0x10,%xmm2
+ DB 102,15,219,208 ; pand %xmm0,%xmm2
+ DB 102,15,219,195 ; pand %xmm3,%xmm0
+ DB 15,91,192 ; cvtdq2ps %xmm0,%xmm0
+ DB 243,68,15,16,66,12 ; movss 0xc(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 15,91,201 ; cvtdq2ps %xmm1,%xmm1
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 15,91,210 ; cvtdq2ps %xmm2,%xmm2
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 102,15,114,211,24 ; psrld $0x18,%xmm3
+ DB 15,91,219 ; cvtdq2ps %xmm3,%xmm3
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_8888_sse41
+_sk_store_8888_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,68,15,16,66,8 ; movss 0x8(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,200 ; mulps %xmm0,%xmm9
+ DB 102,69,15,91,201 ; cvtps2dq %xmm9,%xmm9
+ DB 69,15,40,208 ; movaps %xmm8,%xmm10
+ DB 68,15,89,209 ; mulps %xmm1,%xmm10
+ DB 102,69,15,91,210 ; cvtps2dq %xmm10,%xmm10
+ DB 102,65,15,114,242,8 ; pslld $0x8,%xmm10
+ DB 102,69,15,235,209 ; por %xmm9,%xmm10
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,202 ; mulps %xmm2,%xmm9
+ DB 102,69,15,91,201 ; cvtps2dq %xmm9,%xmm9
+ DB 102,65,15,114,241,16 ; pslld $0x10,%xmm9
+ DB 68,15,89,195 ; mulps %xmm3,%xmm8
+ DB 102,69,15,91,192 ; cvtps2dq %xmm8,%xmm8
+ DB 102,65,15,114,240,24 ; pslld $0x18,%xmm8
+ DB 102,69,15,235,193 ; por %xmm9,%xmm8
+ DB 102,69,15,235,194 ; por %xmm10,%xmm8
+ DB 243,68,15,127,4,184 ; movdqu %xmm8,(%rax,%rdi,4)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_f16_sse41
+_sk_load_f16_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,15,111,4,248 ; movdqu (%rax,%rdi,8),%xmm0
+ DB 243,15,111,76,248,16 ; movdqu 0x10(%rax,%rdi,8),%xmm1
+ DB 102,15,111,208 ; movdqa %xmm0,%xmm2
+ DB 102,15,97,209 ; punpcklwd %xmm1,%xmm2
+ DB 102,15,105,193 ; punpckhwd %xmm1,%xmm0
+ DB 102,68,15,111,194 ; movdqa %xmm2,%xmm8
+ DB 102,68,15,97,192 ; punpcklwd %xmm0,%xmm8
+ DB 102,15,105,208 ; punpckhwd %xmm0,%xmm2
+ DB 102,15,110,66,100 ; movd 0x64(%rdx),%xmm0
+ DB 102,15,112,216,0 ; pshufd $0x0,%xmm0,%xmm3
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,65,15,101,200 ; pcmpgtw %xmm8,%xmm1
+ DB 102,65,15,223,200 ; pandn %xmm8,%xmm1
+ DB 102,15,101,218 ; pcmpgtw %xmm2,%xmm3
+ DB 102,15,223,218 ; pandn %xmm2,%xmm3
+ DB 102,15,56,51,193 ; pmovzxwd %xmm1,%xmm0
+ DB 102,15,114,240,13 ; pslld $0xd,%xmm0
+ DB 102,15,110,82,92 ; movd 0x5c(%rdx),%xmm2
+ DB 102,68,15,112,194,0 ; pshufd $0x0,%xmm2,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 102,69,15,239,201 ; pxor %xmm9,%xmm9
+ DB 102,65,15,105,201 ; punpckhwd %xmm9,%xmm1
+ DB 102,15,114,241,13 ; pslld $0xd,%xmm1
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 102,15,56,51,211 ; pmovzxwd %xmm3,%xmm2
+ DB 102,15,114,242,13 ; pslld $0xd,%xmm2
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 102,65,15,105,217 ; punpckhwd %xmm9,%xmm3
+ DB 102,15,114,243,13 ; pslld $0xd,%xmm3
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_f16_sse41
+_sk_store_f16_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 102,68,15,110,66,96 ; movd 0x60(%rdx),%xmm8
+ DB 102,69,15,112,192,0 ; pshufd $0x0,%xmm8,%xmm8
+ DB 102,69,15,111,200 ; movdqa %xmm8,%xmm9
+ DB 68,15,89,200 ; mulps %xmm0,%xmm9
+ DB 102,65,15,114,209,13 ; psrld $0xd,%xmm9
+ DB 102,69,15,111,208 ; movdqa %xmm8,%xmm10
+ DB 68,15,89,209 ; mulps %xmm1,%xmm10
+ DB 102,65,15,114,210,13 ; psrld $0xd,%xmm10
+ DB 102,69,15,111,216 ; movdqa %xmm8,%xmm11
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 102,65,15,114,211,13 ; psrld $0xd,%xmm11
+ DB 68,15,89,195 ; mulps %xmm3,%xmm8
+ DB 102,65,15,114,208,13 ; psrld $0xd,%xmm8
+ DB 102,65,15,115,250,2 ; pslldq $0x2,%xmm10
+ DB 102,69,15,235,209 ; por %xmm9,%xmm10
+ DB 102,65,15,115,248,2 ; pslldq $0x2,%xmm8
+ DB 102,69,15,235,195 ; por %xmm11,%xmm8
+ DB 102,69,15,111,202 ; movdqa %xmm10,%xmm9
+ DB 102,69,15,98,200 ; punpckldq %xmm8,%xmm9
+ DB 243,68,15,127,12,248 ; movdqu %xmm9,(%rax,%rdi,8)
+ DB 102,69,15,106,208 ; punpckhdq %xmm8,%xmm10
+ DB 243,68,15,127,84,248,16 ; movdqu %xmm10,0x10(%rax,%rdi,8)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_x_sse41
+_sk_clamp_x_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,0 ; movss (%rax),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,69,15,118,201 ; pcmpeqd %xmm9,%xmm9
+ DB 102,69,15,254,200 ; paddd %xmm8,%xmm9
+ DB 65,15,93,193 ; minps %xmm9,%xmm0
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 68,15,95,192 ; maxps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_y_sse41
+_sk_clamp_y_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,0 ; movss (%rax),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,69,15,118,201 ; pcmpeqd %xmm9,%xmm9
+ DB 102,69,15,254,200 ; paddd %xmm8,%xmm9
+ DB 65,15,93,201 ; minps %xmm9,%xmm1
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 68,15,95,193 ; maxps %xmm1,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,200 ; movaps %xmm8,%xmm1
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_2x3_sse41
+_sk_matrix_2x3_sse41 LABEL PROC
+ DB 68,15,40,201 ; movaps %xmm1,%xmm9
+ DB 68,15,40,192 ; movaps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,15,16,0 ; movss (%rax),%xmm0
+ DB 243,15,16,72,4 ; movss 0x4(%rax),%xmm1
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 243,68,15,16,80,8 ; movss 0x8(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,16 ; movss 0x10(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 65,15,88,194 ; addps %xmm10,%xmm0
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 243,68,15,16,80,12 ; movss 0xc(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,20 ; movss 0x14(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 65,15,88,202 ; addps %xmm10,%xmm1
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_3x4_sse41
+_sk_matrix_3x4_sse41 LABEL PROC
+ DB 68,15,40,201 ; movaps %xmm1,%xmm9
+ DB 68,15,40,192 ; movaps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,15,16,0 ; movss (%rax),%xmm0
+ DB 243,15,16,72,4 ; movss 0x4(%rax),%xmm1
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 243,68,15,16,80,12 ; movss 0xc(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,24 ; movss 0x18(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,36 ; movss 0x24(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 65,15,88,194 ; addps %xmm10,%xmm0
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 243,68,15,16,80,16 ; movss 0x10(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,28 ; movss 0x1c(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,40 ; movss 0x28(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 65,15,88,202 ; addps %xmm10,%xmm1
+ DB 243,68,15,16,80,8 ; movss 0x8(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,20 ; movss 0x14(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,32 ; movss 0x20(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 243,68,15,16,104,44 ; movss 0x2c(%rax),%xmm13
+ DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
+ DB 68,15,89,226 ; mulps %xmm2,%xmm12
+ DB 69,15,88,229 ; addps %xmm13,%xmm12
+ DB 69,15,89,217 ; mulps %xmm9,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,208 ; mulps %xmm8,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,210 ; movaps %xmm10,%xmm2
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_linear_gradient_2stops_sse41
+_sk_linear_gradient_2stops_sse41 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 68,15,16,8 ; movups (%rax),%xmm9
+ DB 15,16,88,16 ; movups 0x10(%rax),%xmm3
+ DB 68,15,40,195 ; movaps %xmm3,%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,40,201 ; movaps %xmm9,%xmm1
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 68,15,89,192 ; mulps %xmm0,%xmm8
+ DB 68,15,88,193 ; addps %xmm1,%xmm8
+ DB 15,40,203 ; movaps %xmm3,%xmm1
+ DB 15,198,201,85 ; shufps $0x55,%xmm1,%xmm1
+ DB 65,15,40,209 ; movaps %xmm9,%xmm2
+ DB 15,198,210,85 ; shufps $0x55,%xmm2,%xmm2
+ DB 15,89,200 ; mulps %xmm0,%xmm1
+ DB 15,88,202 ; addps %xmm2,%xmm1
+ DB 15,40,211 ; movaps %xmm3,%xmm2
+ DB 15,198,210,170 ; shufps $0xaa,%xmm2,%xmm2
+ DB 69,15,40,209 ; movaps %xmm9,%xmm10
+ DB 69,15,198,210,170 ; shufps $0xaa,%xmm10,%xmm10
+ DB 15,89,208 ; mulps %xmm0,%xmm2
+ DB 65,15,88,210 ; addps %xmm10,%xmm2
+ DB 15,198,219,255 ; shufps $0xff,%xmm3,%xmm3
+ DB 69,15,198,201,255 ; shufps $0xff,%xmm9,%xmm9
+ DB 15,89,216 ; mulps %xmm0,%xmm3
+ DB 65,15,88,217 ; addps %xmm9,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_start_pipeline_sse2
+_sk_start_pipeline_sse2 LABEL PROC
+ DB 86 ; push %rsi
+ DB 87 ; push %rdi
+ DB 72,129,236,168,0,0,0 ; sub $0xa8,%rsp
+ DB 68,15,41,188,36,144,0,0,0 ; movaps %xmm15,0x90(%rsp)
+ DB 68,15,41,180,36,128,0,0,0 ; movaps %xmm14,0x80(%rsp)
+ DB 68,15,41,108,36,112 ; movaps %xmm13,0x70(%rsp)
+ DB 68,15,41,100,36,96 ; movaps %xmm12,0x60(%rsp)
+ DB 68,15,41,92,36,80 ; movaps %xmm11,0x50(%rsp)
+ DB 68,15,41,84,36,64 ; movaps %xmm10,0x40(%rsp)
+ DB 68,15,41,76,36,48 ; movaps %xmm9,0x30(%rsp)
+ DB 68,15,41,68,36,32 ; movaps %xmm8,0x20(%rsp)
+ DB 15,41,124,36,16 ; movaps %xmm7,0x10(%rsp)
+ DB 15,41,52,36 ; movaps %xmm6,(%rsp)
+ DB 72,137,214 ; mov %rdx,%rsi
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,192 ; xorps %xmm0,%xmm0
+ DB 15,87,201 ; xorps %xmm1,%xmm1
+ DB 15,87,210 ; xorps %xmm2,%xmm2
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 15,87,228 ; xorps %xmm4,%xmm4
+ DB 15,87,237 ; xorps %xmm5,%xmm5
+ DB 15,87,246 ; xorps %xmm6,%xmm6
+ DB 15,87,255 ; xorps %xmm7,%xmm7
+ DB 72,137,207 ; mov %rcx,%rdi
+ DB 76,137,194 ; mov %r8,%rdx
+ DB 255,208 ; callq *%rax
+ DB 15,40,52,36 ; movaps (%rsp),%xmm6
+ DB 15,40,124,36,16 ; movaps 0x10(%rsp),%xmm7
+ DB 68,15,40,68,36,32 ; movaps 0x20(%rsp),%xmm8
+ DB 68,15,40,76,36,48 ; movaps 0x30(%rsp),%xmm9
+ DB 68,15,40,84,36,64 ; movaps 0x40(%rsp),%xmm10
+ DB 68,15,40,92,36,80 ; movaps 0x50(%rsp),%xmm11
+ DB 68,15,40,100,36,96 ; movaps 0x60(%rsp),%xmm12
+ DB 68,15,40,108,36,112 ; movaps 0x70(%rsp),%xmm13
+ DB 68,15,40,180,36,128,0,0,0 ; movaps 0x80(%rsp),%xmm14
+ DB 68,15,40,188,36,144,0,0,0 ; movaps 0x90(%rsp),%xmm15
+ DB 72,129,196,168,0,0,0 ; add $0xa8,%rsp
+ DB 95 ; pop %rdi
+ DB 94 ; pop %rsi
+ DB 195 ; retq
+
+PUBLIC _sk_just_return_sse2
+_sk_just_return_sse2 LABEL PROC
+ DB 195 ; retq
+
+PUBLIC _sk_seed_shader_sse2
+_sk_seed_shader_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 102,15,110,199 ; movd %edi,%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 15,91,200 ; cvtdq2ps %xmm0,%xmm1
+ DB 243,15,16,18 ; movss (%rdx),%xmm2
+ DB 243,15,16,90,4 ; movss 0x4(%rdx),%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 15,88,203 ; addps %xmm3,%xmm1
+ DB 15,16,66,20 ; movups 0x14(%rdx),%xmm0
+ DB 15,88,193 ; addps %xmm1,%xmm0
+ DB 102,15,110,8 ; movd (%rax),%xmm1
+ DB 102,15,112,201,0 ; pshufd $0x0,%xmm1,%xmm1
+ DB 15,91,201 ; cvtdq2ps %xmm1,%xmm1
+ DB 15,88,203 ; addps %xmm3,%xmm1
+ DB 15,198,210,0 ; shufps $0x0,%xmm2,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 15,87,228 ; xorps %xmm4,%xmm4
+ DB 15,87,237 ; xorps %xmm5,%xmm5
+ DB 15,87,246 ; xorps %xmm6,%xmm6
+ DB 15,87,255 ; xorps %xmm7,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_constant_color_sse2
+_sk_constant_color_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,16,24 ; movups (%rax),%xmm3
+ DB 15,40,195 ; movaps %xmm3,%xmm0
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 15,40,203 ; movaps %xmm3,%xmm1
+ DB 15,198,201,85 ; shufps $0x55,%xmm1,%xmm1
+ DB 15,40,211 ; movaps %xmm3,%xmm2
+ DB 15,198,210,170 ; shufps $0xaa,%xmm2,%xmm2
+ DB 15,198,219,255 ; shufps $0xff,%xmm3,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clear_sse2
+_sk_clear_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,87,192 ; xorps %xmm0,%xmm0
+ DB 15,87,201 ; xorps %xmm1,%xmm1
+ DB 15,87,210 ; xorps %xmm2,%xmm2
+ DB 15,87,219 ; xorps %xmm3,%xmm3
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_plus__sse2
+_sk_plus__sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,88,196 ; addps %xmm4,%xmm0
+ DB 15,88,205 ; addps %xmm5,%xmm1
+ DB 15,88,214 ; addps %xmm6,%xmm2
+ DB 15,88,223 ; addps %xmm7,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_srcover_sse2
+_sk_srcover_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 68,15,92,195 ; subps %xmm3,%xmm8
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,204 ; mulps %xmm4,%xmm9
+ DB 65,15,88,193 ; addps %xmm9,%xmm0
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,205 ; mulps %xmm5,%xmm9
+ DB 65,15,88,201 ; addps %xmm9,%xmm1
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,206 ; mulps %xmm6,%xmm9
+ DB 65,15,88,209 ; addps %xmm9,%xmm2
+ DB 68,15,89,199 ; mulps %xmm7,%xmm8
+ DB 65,15,88,216 ; addps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_dstover_sse2
+_sk_dstover_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 68,15,92,199 ; subps %xmm7,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 15,88,196 ; addps %xmm4,%xmm0
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 15,88,205 ; addps %xmm5,%xmm1
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 15,88,214 ; addps %xmm6,%xmm2
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 15,88,223 ; addps %xmm7,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_0_sse2
+_sk_clamp_0_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 65,15,95,192 ; maxps %xmm8,%xmm0
+ DB 65,15,95,200 ; maxps %xmm8,%xmm1
+ DB 65,15,95,208 ; maxps %xmm8,%xmm2
+ DB 65,15,95,216 ; maxps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_1_sse2
+_sk_clamp_1_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,93,192 ; minps %xmm8,%xmm0
+ DB 65,15,93,200 ; minps %xmm8,%xmm1
+ DB 65,15,93,208 ; minps %xmm8,%xmm2
+ DB 65,15,93,216 ; minps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_a_sse2
+_sk_clamp_a_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,2 ; movss (%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,93,216 ; minps %xmm8,%xmm3
+ DB 15,93,195 ; minps %xmm3,%xmm0
+ DB 15,93,203 ; minps %xmm3,%xmm1
+ DB 15,93,211 ; minps %xmm3,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_swap_sse2
+_sk_swap_sse2 LABEL PROC
+ DB 68,15,40,195 ; movaps %xmm3,%xmm8
+ DB 68,15,40,202 ; movaps %xmm2,%xmm9
+ DB 68,15,40,209 ; movaps %xmm1,%xmm10
+ DB 68,15,40,216 ; movaps %xmm0,%xmm11
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,196 ; movaps %xmm4,%xmm0
+ DB 15,40,205 ; movaps %xmm5,%xmm1
+ DB 15,40,214 ; movaps %xmm6,%xmm2
+ DB 15,40,223 ; movaps %xmm7,%xmm3
+ DB 65,15,40,227 ; movaps %xmm11,%xmm4
+ DB 65,15,40,234 ; movaps %xmm10,%xmm5
+ DB 65,15,40,241 ; movaps %xmm9,%xmm6
+ DB 65,15,40,248 ; movaps %xmm8,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_src_dst_sse2
+_sk_move_src_dst_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,224 ; movaps %xmm0,%xmm4
+ DB 15,40,233 ; movaps %xmm1,%xmm5
+ DB 15,40,242 ; movaps %xmm2,%xmm6
+ DB 15,40,251 ; movaps %xmm3,%xmm7
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_move_dst_src_sse2
+_sk_move_dst_src_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,196 ; movaps %xmm4,%xmm0
+ DB 15,40,205 ; movaps %xmm5,%xmm1
+ DB 15,40,214 ; movaps %xmm6,%xmm2
+ DB 15,40,223 ; movaps %xmm7,%xmm3
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_premul_sse2
+_sk_premul_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,89,195 ; mulps %xmm3,%xmm0
+ DB 15,89,203 ; mulps %xmm3,%xmm1
+ DB 15,89,211 ; mulps %xmm3,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_unpremul_sse2
+_sk_unpremul_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 68,15,194,195,0 ; cmpeqps %xmm3,%xmm8
+ DB 243,68,15,16,10 ; movss (%rdx),%xmm9
+ DB 69,15,198,201,0 ; shufps $0x0,%xmm9,%xmm9
+ DB 68,15,94,203 ; divps %xmm3,%xmm9
+ DB 69,15,85,193 ; andnps %xmm9,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_from_srgb_sse2
+_sk_from_srgb_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,66,64 ; movss 0x40(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 69,15,40,232 ; movaps %xmm8,%xmm13
+ DB 68,15,89,232 ; mulps %xmm0,%xmm13
+ DB 68,15,40,224 ; movaps %xmm0,%xmm12
+ DB 69,15,89,228 ; mulps %xmm12,%xmm12
+ DB 243,68,15,16,74,60 ; movss 0x3c(%rdx),%xmm9
+ DB 69,15,198,201,0 ; shufps $0x0,%xmm9,%xmm9
+ DB 243,68,15,16,82,52 ; movss 0x34(%rdx),%xmm10
+ DB 243,68,15,16,90,56 ; movss 0x38(%rdx),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,40,241 ; movaps %xmm9,%xmm14
+ DB 68,15,89,240 ; mulps %xmm0,%xmm14
+ DB 69,15,88,243 ; addps %xmm11,%xmm14
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 69,15,89,244 ; mulps %xmm12,%xmm14
+ DB 69,15,88,242 ; addps %xmm10,%xmm14
+ DB 243,68,15,16,98,68 ; movss 0x44(%rdx),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 65,15,194,196,1 ; cmpltps %xmm12,%xmm0
+ DB 68,15,84,232 ; andps %xmm0,%xmm13
+ DB 65,15,85,198 ; andnps %xmm14,%xmm0
+ DB 65,15,86,197 ; orps %xmm13,%xmm0
+ DB 69,15,40,232 ; movaps %xmm8,%xmm13
+ DB 68,15,89,233 ; mulps %xmm1,%xmm13
+ DB 68,15,40,241 ; movaps %xmm1,%xmm14
+ DB 69,15,89,246 ; mulps %xmm14,%xmm14
+ DB 69,15,40,249 ; movaps %xmm9,%xmm15
+ DB 68,15,89,249 ; mulps %xmm1,%xmm15
+ DB 69,15,88,251 ; addps %xmm11,%xmm15
+ DB 69,15,89,254 ; mulps %xmm14,%xmm15
+ DB 69,15,88,250 ; addps %xmm10,%xmm15
+ DB 65,15,194,204,1 ; cmpltps %xmm12,%xmm1
+ DB 68,15,84,233 ; andps %xmm1,%xmm13
+ DB 65,15,85,207 ; andnps %xmm15,%xmm1
+ DB 65,15,86,205 ; orps %xmm13,%xmm1
+ DB 68,15,89,194 ; mulps %xmm2,%xmm8
+ DB 68,15,40,234 ; movaps %xmm2,%xmm13
+ DB 69,15,89,237 ; mulps %xmm13,%xmm13
+ DB 68,15,89,202 ; mulps %xmm2,%xmm9
+ DB 69,15,88,203 ; addps %xmm11,%xmm9
+ DB 69,15,89,205 ; mulps %xmm13,%xmm9
+ DB 69,15,88,202 ; addps %xmm10,%xmm9
+ DB 65,15,194,212,1 ; cmpltps %xmm12,%xmm2
+ DB 68,15,84,194 ; andps %xmm2,%xmm8
+ DB 65,15,85,209 ; andnps %xmm9,%xmm2
+ DB 65,15,86,208 ; orps %xmm8,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_to_srgb_sse2
+_sk_to_srgb_sse2 LABEL PROC
+ DB 72,131,236,40 ; sub $0x28,%rsp
+ DB 15,41,124,36,16 ; movaps %xmm7,0x10(%rsp)
+ DB 15,41,52,36 ; movaps %xmm6,(%rsp)
+ DB 15,40,245 ; movaps %xmm5,%xmm6
+ DB 15,40,236 ; movaps %xmm4,%xmm5
+ DB 15,40,227 ; movaps %xmm3,%xmm4
+ DB 68,15,82,192 ; rsqrtps %xmm0,%xmm8
+ DB 69,15,83,232 ; rcpps %xmm8,%xmm13
+ DB 69,15,82,248 ; rsqrtps %xmm8,%xmm15
+ DB 243,15,16,26 ; movss (%rdx),%xmm3
+ DB 243,68,15,16,66,72 ; movss 0x48(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 69,15,40,240 ; movaps %xmm8,%xmm14
+ DB 68,15,89,240 ; mulps %xmm0,%xmm14
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 243,68,15,16,82,76 ; movss 0x4c(%rdx),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,90,80 ; movss 0x50(%rdx),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,98,84 ; movss 0x54(%rdx),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 69,15,89,235 ; mulps %xmm11,%xmm13
+ DB 69,15,88,236 ; addps %xmm12,%xmm13
+ DB 69,15,89,250 ; mulps %xmm10,%xmm15
+ DB 69,15,88,253 ; addps %xmm13,%xmm15
+ DB 68,15,40,203 ; movaps %xmm3,%xmm9
+ DB 69,15,93,207 ; minps %xmm15,%xmm9
+ DB 243,68,15,16,106,88 ; movss 0x58(%rdx),%xmm13
+ DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
+ DB 65,15,194,197,1 ; cmpltps %xmm13,%xmm0
+ DB 68,15,84,240 ; andps %xmm0,%xmm14
+ DB 65,15,85,193 ; andnps %xmm9,%xmm0
+ DB 65,15,86,198 ; orps %xmm14,%xmm0
+ DB 68,15,82,201 ; rsqrtps %xmm1,%xmm9
+ DB 69,15,83,241 ; rcpps %xmm9,%xmm14
+ DB 69,15,82,201 ; rsqrtps %xmm9,%xmm9
+ DB 69,15,89,243 ; mulps %xmm11,%xmm14
+ DB 69,15,88,244 ; addps %xmm12,%xmm14
+ DB 69,15,89,202 ; mulps %xmm10,%xmm9
+ DB 69,15,88,206 ; addps %xmm14,%xmm9
+ DB 68,15,40,243 ; movaps %xmm3,%xmm14
+ DB 69,15,93,241 ; minps %xmm9,%xmm14
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,201 ; mulps %xmm1,%xmm9
+ DB 65,15,194,205,1 ; cmpltps %xmm13,%xmm1
+ DB 68,15,84,201 ; andps %xmm1,%xmm9
+ DB 65,15,85,206 ; andnps %xmm14,%xmm1
+ DB 65,15,86,201 ; orps %xmm9,%xmm1
+ DB 68,15,82,202 ; rsqrtps %xmm2,%xmm9
+ DB 69,15,83,241 ; rcpps %xmm9,%xmm14
+ DB 69,15,89,243 ; mulps %xmm11,%xmm14
+ DB 69,15,88,244 ; addps %xmm12,%xmm14
+ DB 65,15,82,249 ; rsqrtps %xmm9,%xmm7
+ DB 65,15,89,250 ; mulps %xmm10,%xmm7
+ DB 65,15,88,254 ; addps %xmm14,%xmm7
+ DB 15,93,223 ; minps %xmm7,%xmm3
+ DB 68,15,89,194 ; mulps %xmm2,%xmm8
+ DB 65,15,194,213,1 ; cmpltps %xmm13,%xmm2
+ DB 68,15,84,194 ; andps %xmm2,%xmm8
+ DB 15,85,211 ; andnps %xmm3,%xmm2
+ DB 65,15,86,208 ; orps %xmm8,%xmm2
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 15,40,220 ; movaps %xmm4,%xmm3
+ DB 15,40,229 ; movaps %xmm5,%xmm4
+ DB 15,40,238 ; movaps %xmm6,%xmm5
+ DB 15,40,52,36 ; movaps (%rsp),%xmm6
+ DB 15,40,124,36,16 ; movaps 0x10(%rsp),%xmm7
+ DB 72,131,196,40 ; add $0x28,%rsp
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_scale_u8_sse2
+_sk_scale_u8_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 102,68,15,110,4,56 ; movd (%rax,%rdi,1),%xmm8
+ DB 102,69,15,239,201 ; pxor %xmm9,%xmm9
+ DB 102,69,15,96,193 ; punpcklbw %xmm9,%xmm8
+ DB 102,69,15,97,193 ; punpcklwd %xmm9,%xmm8
+ DB 69,15,91,192 ; cvtdq2ps %xmm8,%xmm8
+ DB 243,68,15,16,74,12 ; movss 0xc(%rdx),%xmm9
+ DB 69,15,198,201,0 ; shufps $0x0,%xmm9,%xmm9
+ DB 69,15,89,200 ; mulps %xmm8,%xmm9
+ DB 65,15,89,193 ; mulps %xmm9,%xmm0
+ DB 65,15,89,201 ; mulps %xmm9,%xmm1
+ DB 65,15,89,209 ; mulps %xmm9,%xmm2
+ DB 65,15,89,217 ; mulps %xmm9,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_tables_sse2
+_sk_load_tables_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,8 ; mov (%rax),%rcx
+ DB 76,139,64,8 ; mov 0x8(%rax),%r8
+ DB 243,68,15,111,4,185 ; movdqu (%rcx,%rdi,4),%xmm8
+ DB 102,15,110,66,16 ; movd 0x10(%rdx),%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 102,69,15,111,200 ; movdqa %xmm8,%xmm9
+ DB 102,65,15,114,209,8 ; psrld $0x8,%xmm9
+ DB 102,68,15,219,200 ; pand %xmm0,%xmm9
+ DB 102,69,15,111,208 ; movdqa %xmm8,%xmm10
+ DB 102,65,15,114,210,16 ; psrld $0x10,%xmm10
+ DB 102,68,15,219,208 ; pand %xmm0,%xmm10
+ DB 102,65,15,219,192 ; pand %xmm8,%xmm0
+ DB 102,15,112,216,78 ; pshufd $0x4e,%xmm0,%xmm3
+ DB 102,72,15,126,217 ; movq %xmm3,%rcx
+ DB 65,137,201 ; mov %ecx,%r9d
+ DB 72,193,233,32 ; shr $0x20,%rcx
+ DB 102,73,15,126,194 ; movq %xmm0,%r10
+ DB 69,137,211 ; mov %r10d,%r11d
+ DB 73,193,234,32 ; shr $0x20,%r10
+ DB 243,67,15,16,28,144 ; movss (%r8,%r10,4),%xmm3
+ DB 243,65,15,16,4,136 ; movss (%r8,%rcx,4),%xmm0
+ DB 15,20,216 ; unpcklps %xmm0,%xmm3
+ DB 243,67,15,16,4,152 ; movss (%r8,%r11,4),%xmm0
+ DB 243,67,15,16,12,136 ; movss (%r8,%r9,4),%xmm1
+ DB 15,20,193 ; unpcklps %xmm1,%xmm0
+ DB 15,20,195 ; unpcklps %xmm3,%xmm0
+ DB 72,139,72,16 ; mov 0x10(%rax),%rcx
+ DB 102,65,15,112,201,78 ; pshufd $0x4e,%xmm9,%xmm1
+ DB 102,73,15,126,200 ; movq %xmm1,%r8
+ DB 69,137,193 ; mov %r8d,%r9d
+ DB 73,193,232,32 ; shr $0x20,%r8
+ DB 102,77,15,126,202 ; movq %xmm9,%r10
+ DB 69,137,211 ; mov %r10d,%r11d
+ DB 73,193,234,32 ; shr $0x20,%r10
+ DB 243,66,15,16,28,145 ; movss (%rcx,%r10,4),%xmm3
+ DB 243,66,15,16,12,129 ; movss (%rcx,%r8,4),%xmm1
+ DB 15,20,217 ; unpcklps %xmm1,%xmm3
+ DB 243,66,15,16,12,153 ; movss (%rcx,%r11,4),%xmm1
+ DB 243,66,15,16,20,137 ; movss (%rcx,%r9,4),%xmm2
+ DB 15,20,202 ; unpcklps %xmm2,%xmm1
+ DB 15,20,203 ; unpcklps %xmm3,%xmm1
+ DB 72,139,64,24 ; mov 0x18(%rax),%rax
+ DB 102,65,15,112,210,78 ; pshufd $0x4e,%xmm10,%xmm2
+ DB 102,72,15,126,209 ; movq %xmm2,%rcx
+ DB 65,137,200 ; mov %ecx,%r8d
+ DB 72,193,233,32 ; shr $0x20,%rcx
+ DB 102,77,15,126,209 ; movq %xmm10,%r9
+ DB 69,137,202 ; mov %r9d,%r10d
+ DB 73,193,233,32 ; shr $0x20,%r9
+ DB 243,70,15,16,12,136 ; movss (%rax,%r9,4),%xmm9
+ DB 243,15,16,20,136 ; movss (%rax,%rcx,4),%xmm2
+ DB 68,15,20,202 ; unpcklps %xmm2,%xmm9
+ DB 243,66,15,16,20,144 ; movss (%rax,%r10,4),%xmm2
+ DB 243,66,15,16,28,128 ; movss (%rax,%r8,4),%xmm3
+ DB 15,20,211 ; unpcklps %xmm3,%xmm2
+ DB 65,15,20,209 ; unpcklps %xmm9,%xmm2
+ DB 102,65,15,114,208,24 ; psrld $0x18,%xmm8
+ DB 69,15,91,192 ; cvtdq2ps %xmm8,%xmm8
+ DB 243,15,16,90,12 ; movss 0xc(%rdx),%xmm3
+ DB 15,198,219,0 ; shufps $0x0,%xmm3,%xmm3
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_8888_sse2
+_sk_load_8888_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,15,111,28,184 ; movdqu (%rax,%rdi,4),%xmm3
+ DB 102,15,110,66,16 ; movd 0x10(%rdx),%xmm0
+ DB 102,15,112,192,0 ; pshufd $0x0,%xmm0,%xmm0
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,15,114,209,8 ; psrld $0x8,%xmm1
+ DB 102,15,219,200 ; pand %xmm0,%xmm1
+ DB 102,15,111,211 ; movdqa %xmm3,%xmm2
+ DB 102,15,114,210,16 ; psrld $0x10,%xmm2
+ DB 102,15,219,208 ; pand %xmm0,%xmm2
+ DB 102,15,219,195 ; pand %xmm3,%xmm0
+ DB 15,91,192 ; cvtdq2ps %xmm0,%xmm0
+ DB 243,68,15,16,66,12 ; movss 0xc(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 15,91,201 ; cvtdq2ps %xmm1,%xmm1
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 15,91,210 ; cvtdq2ps %xmm2,%xmm2
+ DB 65,15,89,208 ; mulps %xmm8,%xmm2
+ DB 102,15,114,211,24 ; psrld $0x18,%xmm3
+ DB 15,91,219 ; cvtdq2ps %xmm3,%xmm3
+ DB 65,15,89,216 ; mulps %xmm8,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_8888_sse2
+_sk_store_8888_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,68,15,16,66,8 ; movss 0x8(%rdx),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,200 ; mulps %xmm0,%xmm9
+ DB 102,69,15,91,201 ; cvtps2dq %xmm9,%xmm9
+ DB 69,15,40,208 ; movaps %xmm8,%xmm10
+ DB 68,15,89,209 ; mulps %xmm1,%xmm10
+ DB 102,69,15,91,210 ; cvtps2dq %xmm10,%xmm10
+ DB 102,65,15,114,242,8 ; pslld $0x8,%xmm10
+ DB 102,69,15,235,209 ; por %xmm9,%xmm10
+ DB 69,15,40,200 ; movaps %xmm8,%xmm9
+ DB 68,15,89,202 ; mulps %xmm2,%xmm9
+ DB 102,69,15,91,201 ; cvtps2dq %xmm9,%xmm9
+ DB 102,65,15,114,241,16 ; pslld $0x10,%xmm9
+ DB 68,15,89,195 ; mulps %xmm3,%xmm8
+ DB 102,69,15,91,192 ; cvtps2dq %xmm8,%xmm8
+ DB 102,65,15,114,240,24 ; pslld $0x18,%xmm8
+ DB 102,69,15,235,193 ; por %xmm9,%xmm8
+ DB 102,69,15,235,194 ; por %xmm10,%xmm8
+ DB 243,68,15,127,4,184 ; movdqu %xmm8,(%rax,%rdi,4)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_load_f16_sse2
+_sk_load_f16_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 243,15,111,4,248 ; movdqu (%rax,%rdi,8),%xmm0
+ DB 243,15,111,76,248,16 ; movdqu 0x10(%rax,%rdi,8),%xmm1
+ DB 102,15,111,208 ; movdqa %xmm0,%xmm2
+ DB 102,15,97,209 ; punpcklwd %xmm1,%xmm2
+ DB 102,15,105,193 ; punpckhwd %xmm1,%xmm0
+ DB 102,68,15,111,194 ; movdqa %xmm2,%xmm8
+ DB 102,68,15,97,192 ; punpcklwd %xmm0,%xmm8
+ DB 102,15,105,208 ; punpckhwd %xmm0,%xmm2
+ DB 102,15,110,66,100 ; movd 0x64(%rdx),%xmm0
+ DB 102,15,112,216,0 ; pshufd $0x0,%xmm0,%xmm3
+ DB 102,15,111,203 ; movdqa %xmm3,%xmm1
+ DB 102,65,15,101,200 ; pcmpgtw %xmm8,%xmm1
+ DB 102,65,15,223,200 ; pandn %xmm8,%xmm1
+ DB 102,15,101,218 ; pcmpgtw %xmm2,%xmm3
+ DB 102,15,223,218 ; pandn %xmm2,%xmm3
+ DB 102,69,15,239,192 ; pxor %xmm8,%xmm8
+ DB 102,15,111,193 ; movdqa %xmm1,%xmm0
+ DB 102,65,15,97,192 ; punpcklwd %xmm8,%xmm0
+ DB 102,15,114,240,13 ; pslld $0xd,%xmm0
+ DB 102,15,110,82,92 ; movd 0x5c(%rdx),%xmm2
+ DB 102,68,15,112,202,0 ; pshufd $0x0,%xmm2,%xmm9
+ DB 65,15,89,193 ; mulps %xmm9,%xmm0
+ DB 102,65,15,105,200 ; punpckhwd %xmm8,%xmm1
+ DB 102,15,114,241,13 ; pslld $0xd,%xmm1
+ DB 65,15,89,201 ; mulps %xmm9,%xmm1
+ DB 102,15,111,211 ; movdqa %xmm3,%xmm2
+ DB 102,65,15,97,208 ; punpcklwd %xmm8,%xmm2
+ DB 102,15,114,242,13 ; pslld $0xd,%xmm2
+ DB 65,15,89,209 ; mulps %xmm9,%xmm2
+ DB 102,65,15,105,216 ; punpckhwd %xmm8,%xmm3
+ DB 102,15,114,243,13 ; pslld $0xd,%xmm3
+ DB 65,15,89,217 ; mulps %xmm9,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_store_f16_sse2
+_sk_store_f16_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 72,139,0 ; mov (%rax),%rax
+ DB 102,68,15,110,66,96 ; movd 0x60(%rdx),%xmm8
+ DB 102,69,15,112,192,0 ; pshufd $0x0,%xmm8,%xmm8
+ DB 102,69,15,111,200 ; movdqa %xmm8,%xmm9
+ DB 68,15,89,200 ; mulps %xmm0,%xmm9
+ DB 102,65,15,114,209,13 ; psrld $0xd,%xmm9
+ DB 102,69,15,111,208 ; movdqa %xmm8,%xmm10
+ DB 68,15,89,209 ; mulps %xmm1,%xmm10
+ DB 102,65,15,114,210,13 ; psrld $0xd,%xmm10
+ DB 102,69,15,111,216 ; movdqa %xmm8,%xmm11
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 102,65,15,114,211,13 ; psrld $0xd,%xmm11
+ DB 68,15,89,195 ; mulps %xmm3,%xmm8
+ DB 102,65,15,114,208,13 ; psrld $0xd,%xmm8
+ DB 102,65,15,115,250,2 ; pslldq $0x2,%xmm10
+ DB 102,69,15,235,209 ; por %xmm9,%xmm10
+ DB 102,65,15,115,248,2 ; pslldq $0x2,%xmm8
+ DB 102,69,15,235,195 ; por %xmm11,%xmm8
+ DB 102,69,15,111,202 ; movdqa %xmm10,%xmm9
+ DB 102,69,15,98,200 ; punpckldq %xmm8,%xmm9
+ DB 243,68,15,127,12,248 ; movdqu %xmm9,(%rax,%rdi,8)
+ DB 102,69,15,106,208 ; punpckhdq %xmm8,%xmm10
+ DB 243,68,15,127,84,248,16 ; movdqu %xmm10,0x10(%rax,%rdi,8)
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_x_sse2
+_sk_clamp_x_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,0 ; movss (%rax),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,69,15,118,201 ; pcmpeqd %xmm9,%xmm9
+ DB 102,69,15,254,200 ; paddd %xmm8,%xmm9
+ DB 65,15,93,193 ; minps %xmm9,%xmm0
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 68,15,95,192 ; maxps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_clamp_y_sse2
+_sk_clamp_y_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,68,15,16,0 ; movss (%rax),%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 102,69,15,118,201 ; pcmpeqd %xmm9,%xmm9
+ DB 102,69,15,254,200 ; paddd %xmm8,%xmm9
+ DB 65,15,93,201 ; minps %xmm9,%xmm1
+ DB 69,15,87,192 ; xorps %xmm8,%xmm8
+ DB 68,15,95,193 ; maxps %xmm1,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,200 ; movaps %xmm8,%xmm1
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_2x3_sse2
+_sk_matrix_2x3_sse2 LABEL PROC
+ DB 68,15,40,201 ; movaps %xmm1,%xmm9
+ DB 68,15,40,192 ; movaps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,15,16,0 ; movss (%rax),%xmm0
+ DB 243,15,16,72,4 ; movss 0x4(%rax),%xmm1
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 243,68,15,16,80,8 ; movss 0x8(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,16 ; movss 0x10(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 65,15,88,194 ; addps %xmm10,%xmm0
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 243,68,15,16,80,12 ; movss 0xc(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,20 ; movss 0x14(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 65,15,88,202 ; addps %xmm10,%xmm1
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_matrix_3x4_sse2
+_sk_matrix_3x4_sse2 LABEL PROC
+ DB 68,15,40,201 ; movaps %xmm1,%xmm9
+ DB 68,15,40,192 ; movaps %xmm0,%xmm8
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 243,15,16,0 ; movss (%rax),%xmm0
+ DB 243,15,16,72,4 ; movss 0x4(%rax),%xmm1
+ DB 15,198,192,0 ; shufps $0x0,%xmm0,%xmm0
+ DB 243,68,15,16,80,12 ; movss 0xc(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,24 ; movss 0x18(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,36 ; movss 0x24(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,192 ; mulps %xmm8,%xmm0
+ DB 65,15,88,194 ; addps %xmm10,%xmm0
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 243,68,15,16,80,16 ; movss 0x10(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,28 ; movss 0x1c(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,40 ; movss 0x28(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 68,15,89,218 ; mulps %xmm2,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,209 ; mulps %xmm9,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 65,15,89,200 ; mulps %xmm8,%xmm1
+ DB 65,15,88,202 ; addps %xmm10,%xmm1
+ DB 243,68,15,16,80,8 ; movss 0x8(%rax),%xmm10
+ DB 69,15,198,210,0 ; shufps $0x0,%xmm10,%xmm10
+ DB 243,68,15,16,88,20 ; movss 0x14(%rax),%xmm11
+ DB 69,15,198,219,0 ; shufps $0x0,%xmm11,%xmm11
+ DB 243,68,15,16,96,32 ; movss 0x20(%rax),%xmm12
+ DB 69,15,198,228,0 ; shufps $0x0,%xmm12,%xmm12
+ DB 243,68,15,16,104,44 ; movss 0x2c(%rax),%xmm13
+ DB 69,15,198,237,0 ; shufps $0x0,%xmm13,%xmm13
+ DB 68,15,89,226 ; mulps %xmm2,%xmm12
+ DB 69,15,88,229 ; addps %xmm13,%xmm12
+ DB 69,15,89,217 ; mulps %xmm9,%xmm11
+ DB 69,15,88,220 ; addps %xmm12,%xmm11
+ DB 69,15,89,208 ; mulps %xmm8,%xmm10
+ DB 69,15,88,211 ; addps %xmm11,%xmm10
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,210 ; movaps %xmm10,%xmm2
+ DB 255,224 ; jmpq *%rax
+
+PUBLIC _sk_linear_gradient_2stops_sse2
+_sk_linear_gradient_2stops_sse2 LABEL PROC
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 68,15,16,8 ; movups (%rax),%xmm9
+ DB 15,16,88,16 ; movups 0x10(%rax),%xmm3
+ DB 68,15,40,195 ; movaps %xmm3,%xmm8
+ DB 69,15,198,192,0 ; shufps $0x0,%xmm8,%xmm8
+ DB 65,15,40,201 ; movaps %xmm9,%xmm1
+ DB 15,198,201,0 ; shufps $0x0,%xmm1,%xmm1
+ DB 68,15,89,192 ; mulps %xmm0,%xmm8
+ DB 68,15,88,193 ; addps %xmm1,%xmm8
+ DB 15,40,203 ; movaps %xmm3,%xmm1
+ DB 15,198,201,85 ; shufps $0x55,%xmm1,%xmm1
+ DB 65,15,40,209 ; movaps %xmm9,%xmm2
+ DB 15,198,210,85 ; shufps $0x55,%xmm2,%xmm2
+ DB 15,89,200 ; mulps %xmm0,%xmm1
+ DB 15,88,202 ; addps %xmm2,%xmm1
+ DB 15,40,211 ; movaps %xmm3,%xmm2
+ DB 15,198,210,170 ; shufps $0xaa,%xmm2,%xmm2
+ DB 69,15,40,209 ; movaps %xmm9,%xmm10
+ DB 69,15,198,210,170 ; shufps $0xaa,%xmm10,%xmm10
+ DB 15,89,208 ; mulps %xmm0,%xmm2
+ DB 65,15,88,210 ; addps %xmm10,%xmm2
+ DB 15,198,219,255 ; shufps $0xff,%xmm3,%xmm3
+ DB 69,15,198,201,255 ; shufps $0xff,%xmm9,%xmm9
+ DB 15,89,216 ; mulps %xmm0,%xmm3
+ DB 65,15,88,217 ; addps %xmm9,%xmm3
+ DB 72,173 ; lods %ds:(%rsi),%rax
+ DB 65,15,40,192 ; movaps %xmm8,%xmm0
+ DB 255,224 ; jmpq *%rax
+END
diff --git a/src/jumper/SkJumper_stages.cpp b/src/jumper/SkJumper_stages.cpp
index ca2702e970..e47137fd0d 100644
--- a/src/jumper/SkJumper_stages.cpp
+++ b/src/jumper/SkJumper_stages.cpp
@@ -216,19 +216,15 @@ static void* load_and_inc(void**& program) {
// Some glue stages that don't fit the normal pattern of stages.
+#if defined(JUMPER) && defined(WIN)
+__attribute__((ms_abi))
+#endif
extern "C" void WRAP(start_pipeline)(size_t x, void** program, K* k) {
auto next = (Stage*)load_and_inc(program);
F v{}; // TODO: faster uninitialized?
next(x,program,k, v,v,v,v, v,v,v,v);
}
-#if defined(JUMPER) && defined(__x86_64__)
- __attribute__((ms_abi))
- extern "C" void WRAP(start_pipeline_ms)(size_t x, void** program, K* k) {
- WRAP(start_pipeline)(x,program,k);
- }
-#endif
-
// Ends the chain of tail calls, returning back up to start_pipeline (and from there to the caller).
extern "C" void WRAP(just_return)(size_t, void**, K*, F,F,F,F, F,F,F,F) {
#if defined(JUMPER) && defined(__AVX2__)
diff --git a/src/jumper/build_stages.py b/src/jumper/build_stages.py
index 6d56d27c4e..b6ab3c0c48 100755
--- a/src/jumper/build_stages.py
+++ b/src/jumper/build_stages.py
@@ -21,16 +21,25 @@ sse2 = '-mno-red-zone -msse2 -mno-sse3 -mno-ssse3 -mno-sse4.1'.split()
subprocess.check_call(['clang++'] + cflags + sse2 +
['-c', 'src/jumper/SkJumper_stages.cpp'] +
['-o', 'sse2.o'])
+subprocess.check_call(['clang++'] + cflags + sse2 + ['-DWIN'] +
+ ['-c', 'src/jumper/SkJumper_stages.cpp'] +
+ ['-o', 'win_sse2.o'])
sse41 = '-mno-red-zone -msse4.1'.split()
subprocess.check_call(['clang++'] + cflags + sse41 +
['-c', 'src/jumper/SkJumper_stages.cpp'] +
['-o', 'sse41.o'])
+subprocess.check_call(['clang++'] + cflags + sse41 + ['-DWIN'] +
+ ['-c', 'src/jumper/SkJumper_stages.cpp'] +
+ ['-o', 'win_sse41.o'])
hsw = '-mno-red-zone -mavx2 -mfma -mf16c'.split()
subprocess.check_call(['clang++'] + cflags + hsw +
['-c', 'src/jumper/SkJumper_stages.cpp'] +
['-o', 'hsw.o'])
+subprocess.check_call(['clang++'] + cflags + hsw + ['-DWIN'] +
+ ['-c', 'src/jumper/SkJumper_stages.cpp'] +
+ ['-o', 'win_hsw.o'])
aarch64 = [
'--target=aarch64-linux-android',
@@ -51,6 +60,11 @@ subprocess.check_call(['clang++'] + cflags + vfp4 +
['-o', 'vfp4.o'])
def parse_object_file(dot_o, directive, target=None):
+ globl, label, comment, dehex = '.globl', ':', '// ', lambda h: '0x'+h
+ if 'win' in dot_o:
+ globl, label, comment = 'PUBLIC', ' LABEL PROC', '; '
+ dehex = lambda h: str(int(h, 16))
+
cmd = [ objdump, '-d', '--insn-width=9', dot_o]
if target:
cmd += ['--target', target]
@@ -65,8 +79,8 @@ def parse_object_file(dot_o, directive, target=None):
m = re.match('''[0-9a-f]+ <_?(.*)>:''', line)
if m:
print
- print '.globl _' + m.group(1)
- print '_' + m.group(1) + ':'
+ print globl + ' _' + m.group(1)
+ print '_' + m.group(1) + label
continue
columns = line.split('\t')
@@ -84,10 +98,10 @@ def parse_object_file(dot_o, directive, target=None):
for arg in args:
assert 'rip' not in arg # TODO: detect on aarch64 too
- hexed = ','.join('0x'+x for x in code.split(' '))
+ hexed = ','.join(dehex(x) for x in code.split(' '))
print ' ' + directive + ' ' + hexed + ' '*(48-len(hexed)) + \
- '// ' + inst + (' '*(14-len(inst)) + args if args else '')
+ comment + inst + (' '*(14-len(inst)) + args if args else '')
sys.stdout = open('src/jumper/SkJumper_generated.S', 'w')
@@ -99,7 +113,6 @@ print '''# Copyright 2017 Google Inc.
# This file is generated semi-automatically with this command:
# $ src/jumper/build_stages.py
'''
-
print '.text'
print '#if defined(__aarch64__)'
@@ -114,5 +127,20 @@ print '#elif defined(__x86_64__)'
parse_object_file('hsw.o', '.byte')
parse_object_file('sse41.o', '.byte')
parse_object_file('sse2.o', '.byte')
-
print '#endif'
+
+sys.stdout = open('src/jumper/SkJumper_generated_win.S', 'w')
+
+print '''; Copyright 2017 Google Inc.
+;
+; Use of this source code is governed by a BSD-style license that can be
+; found in the LICENSE file.
+
+; This file is generated semi-automatically with this command:
+; $ src/jumper/build_stages.py
+'''
+print '_text SEGMENT'
+parse_object_file('win_hsw.o', 'DB')
+parse_object_file('win_sse41.o', 'DB')
+parse_object_file('win_sse2.o', 'DB')
+print 'END'