//+build !noasm !appengine
// AUTO-GENERATED BY C2GOASM -- DO NOT EDIT

DATA LCDATA1<>+0x000(SB)/8, $0x8000000080000000
DATA LCDATA1<>+0x008(SB)/8, $0x8000000080000000
DATA LCDATA1<>+0x010(SB)/8, $0x7fffffff7fffffff
DATA LCDATA1<>+0x018(SB)/8, $0x7fffffff7fffffff
GLOBL LCDATA1<>(SB), 8, $32

TEXT ·_int32_max_min_sse4(SB), $0-32

	MOVQ values+0(FP), DI
	MOVQ length+8(FP), SI
	MOVQ minout+16(FP), DX
	MOVQ maxout+24(FP), CX
	LEAQ LCDATA1<>(SB), BP

	WORD $0xf685                   // test    esi, esi
	JLE  LBB0_1
	WORD $0x8941; BYTE $0xf1       // mov    r9d, esi
	WORD $0xfe83; BYTE $0x07       // cmp    esi, 7
	JA   LBB0_6
	LONG $0x000000b8; BYTE $0x80   // mov    eax, -2147483648
	LONG $0xffffb841; WORD $0x7fff // mov    r8d, 2147483647
	WORD $0x3145; BYTE $0xdb       // xor    r11d, r11d
	JMP  LBB0_4

LBB0_1:
	LONG $0xffffb841; WORD $0x7fff // mov    r8d, 2147483647
	LONG $0x000000b8; BYTE $0x80   // mov    eax, -2147483648
	JMP  LBB0_13

LBB0_6:
	WORD $0x8945; BYTE $0xcb     // mov    r11d, r9d
	LONG $0xf8e38341             // and    r11d, -8
	LONG $0xf8438d49             // lea    rax, [r11 - 8]
	WORD $0x8949; BYTE $0xc0     // mov    r8, rax
	LONG $0x03e8c149             // shr    r8, 3
	LONG $0x01c08349             // add    r8, 1
	WORD $0x8548; BYTE $0xc0     // test    rax, rax
	JE   LBB0_7
	WORD $0x894d; BYTE $0xc2     // mov    r10, r8
	LONG $0xfee28349             // and    r10, -2
	WORD $0xf749; BYTE $0xda     // neg    r10
	LONG $0x4d6f0f66; BYTE $0x00 // movdqa    xmm1, oword 0[rbp] /* [rip + .LCPI0_0] */
	LONG $0x456f0f66; BYTE $0x10 // movdqa    xmm0, oword 16[rbp] /* [rip + .LCPI0_1] */
	WORD $0xc031                 // xor    eax, eax
	LONG $0xd06f0f66             // movdqa    xmm2, xmm0
	LONG $0xd96f0f66             // movdqa    xmm3, xmm1

LBB0_9:
	LONG $0x246f0ff3; BYTE $0x87   // movdqu    xmm4, oword [rdi + 4*rax]
	LONG $0x6c6f0ff3; WORD $0x1087 // movdqu    xmm5, oword [rdi + 4*rax + 16]
	LONG $0x746f0ff3; WORD $0x2087 // movdqu    xmm6, oword [rdi + 4*rax + 32]
	LONG $0x7c6f0ff3; WORD $0x3087 // movdqu    xmm7, oword [rdi + 4*rax + 48]
	LONG $0x39380f66; BYTE $0xc4   // pminsd    xmm0, xmm4
	LONG $0x39380f66; BYTE $0xd5   // pminsd    xmm2, xmm5
	LONG $0x3d380f66; BYTE $0xcc   // pmaxsd    xmm1, xmm4
	LONG $0x3d380f66; BYTE $0xdd   // pmaxsd    xmm3, xmm5
	LONG $0x39380f66; BYTE $0xc6   // pminsd    xmm0, xmm6
	LONG $0x39380f66; BYTE $0xd7   // pminsd    xmm2, xmm7
	LONG $0x3d380f66; BYTE $0xce   // pmaxsd    xmm1, xmm6
	LONG $0x3d380f66; BYTE $0xdf   // pmaxsd    xmm3, xmm7
	LONG $0x10c08348               // add    rax, 16
	LONG $0x02c28349               // add    r10, 2
	JNE  LBB0_9
	LONG $0x01c0f641               // test    r8b, 1
	JE   LBB0_12

LBB0_11:
	LONG $0x246f0ff3; BYTE $0x87   // movdqu    xmm4, oword [rdi + 4*rax]
	LONG $0x6c6f0ff3; WORD $0x1087 // movdqu    xmm5, oword [rdi + 4*rax + 16]
	LONG $0x3d380f66; BYTE $0xdd   // pmaxsd    xmm3, xmm5
	LONG $0x3d380f66; BYTE $0xcc   // pmaxsd    xmm1, xmm4
	LONG $0x39380f66; BYTE $0xd5   // pminsd    xmm2, xmm5
	LONG $0x39380f66; BYTE $0xc4   // pminsd    xmm0, xmm4

LBB0_12:
	LONG $0x39380f66; BYTE $0xc2 // pminsd    xmm0, xmm2
	LONG $0x3d380f66; BYTE $0xcb // pmaxsd    xmm1, xmm3
	LONG $0xd1700f66; BYTE $0x4e // pshufd    xmm2, xmm1, 78
	LONG $0x3d380f66; BYTE $0xd1 // pmaxsd    xmm2, xmm1
	LONG $0xca700f66; BYTE $0xe5 // pshufd    xmm1, xmm2, 229
	LONG $0x3d380f66; BYTE $0xca // pmaxsd    xmm1, xmm2
	LONG $0xc87e0f66             // movd    eax, xmm1
	LONG $0xc8700f66; BYTE $0x4e // pshufd    xmm1, xmm0, 78
	LONG $0x39380f66; BYTE $0xc8 // pminsd    xmm1, xmm0
	LONG $0xc1700f66; BYTE $0xe5 // pshufd    xmm0, xmm1, 229
	LONG $0x39380f66; BYTE $0xc1 // pminsd    xmm0, xmm1
	LONG $0x7e0f4166; BYTE $0xc0 // movd    r8d, xmm0
	WORD $0x394d; BYTE $0xcb     // cmp    r11, r9
	JE   LBB0_13

LBB0_4:
	WORD $0xc689 // mov    esi, eax

LBB0_5:
	LONG $0x9f048b42         // mov    eax, dword [rdi + 4*r11]
	WORD $0x3941; BYTE $0xc0 // cmp    r8d, eax
	LONG $0xc04f0f44         // cmovg    r8d, eax
	WORD $0xc639             // cmp    esi, eax
	WORD $0x4d0f; BYTE $0xc6 // cmovge    eax, esi
	LONG $0x01c38349         // add    r11, 1
	WORD $0xc689             // mov    esi, eax
	WORD $0x394d; BYTE $0xd9 // cmp    r9, r11
	JNE  LBB0_5

LBB0_13:
	WORD $0x0189             // mov    dword [rcx], eax
	WORD $0x8944; BYTE $0x02 // mov    dword [rdx], r8d
	RET

LBB0_7:
	LONG $0x4d6f0f66; BYTE $0x00 // movdqa    xmm1, oword 0[rbp] /* [rip + .LCPI0_0] */
	LONG $0x456f0f66; BYTE $0x10 // movdqa    xmm0, oword 16[rbp] /* [rip + .LCPI0_1] */
	WORD $0xc031                 // xor    eax, eax
	LONG $0xd06f0f66             // movdqa    xmm2, xmm0
	LONG $0xd96f0f66             // movdqa    xmm3, xmm1
	LONG $0x01c0f641             // test    r8b, 1
	JNE  LBB0_11
	JMP  LBB0_12

TEXT ·_uint32_max_min_sse4(SB), $0-32

	MOVQ values+0(FP), DI
	MOVQ length+8(FP), SI
	MOVQ minout+16(FP), DX
	MOVQ maxout+24(FP), CX

	WORD $0xf685                   // test    esi, esi
	JLE  LBB1_1
	WORD $0x8941; BYTE $0xf1       // mov    r9d, esi
	WORD $0xfe83; BYTE $0x07       // cmp    esi, 7
	JA   LBB1_6
	WORD $0x3145; BYTE $0xdb       // xor    r11d, r11d
	LONG $0xffffb841; WORD $0xffff // mov    r8d, -1
	WORD $0xf631                   // xor    esi, esi
	JMP  LBB1_4

LBB1_1:
	LONG $0xffffb841; WORD $0xffff // mov    r8d, -1
	WORD $0xf631                   // xor    esi, esi
	JMP  LBB1_13

LBB1_6:
	WORD $0x8945; BYTE $0xcb // mov    r11d, r9d
	LONG $0xf8e38341         // and    r11d, -8
	LONG $0xf8438d49         // lea    rax, [r11 - 8]
	WORD $0x8949; BYTE $0xc0 // mov    r8, rax
	LONG $0x03e8c149         // shr    r8, 3
	LONG $0x01c08349         // add    r8, 1
	WORD $0x8548; BYTE $0xc0 // test    rax, rax
	JE   LBB1_7
	WORD $0x894d; BYTE $0xc2 // mov    r10, r8
	LONG $0xfee28349         // and    r10, -2
	WORD $0xf749; BYTE $0xda // neg    r10
	LONG $0xc9ef0f66         // pxor    xmm1, xmm1
	LONG $0xc0760f66         // pcmpeqd    xmm0, xmm0
	WORD $0xc031             // xor    eax, eax
	LONG $0xd2760f66         // pcmpeqd    xmm2, xmm2
	LONG $0xdbef0f66         // pxor    xmm3, xmm3

LBB1_9:
	LONG $0x246f0ff3; BYTE $0x87   // movdqu    xmm4, oword [rdi + 4*rax]
	LONG $0x6c6f0ff3; WORD $0x1087 // movdqu    xmm5, oword [rdi + 4*rax + 16]
	LONG $0x746f0ff3; WORD $0x2087 // movdqu    xmm6, oword [rdi + 4*rax + 32]
	LONG $0x7c6f0ff3; WORD $0x3087 // movdqu    xmm7, oword [rdi + 4*rax + 48]
	LONG $0x3b380f66; BYTE $0xc4   // pminud    xmm0, xmm4
	LONG $0x3b380f66; BYTE $0xd5   // pminud    xmm2, xmm5
	LONG $0x3f380f66; BYTE $0xcc   // pmaxud    xmm1, xmm4
	LONG $0x3f380f66; BYTE $0xdd   // pmaxud    xmm3, xmm5
	LONG $0x3b380f66; BYTE $0xc6   // pminud    xmm0, xmm6
	LONG $0x3b380f66; BYTE $0xd7   // pminud    xmm2, xmm7
	LONG $0x3f380f66; BYTE $0xce   // pmaxud    xmm1, xmm6
	LONG $0x3f380f66; BYTE $0xdf   // pmaxud    xmm3, xmm7
	LONG $0x10c08348               // add    rax, 16
	LONG $0x02c28349               // add    r10, 2
	JNE  LBB1_9
	LONG $0x01c0f641               // test    r8b, 1
	JE   LBB1_12

LBB1_11:
	LONG $0x246f0ff3; BYTE $0x87   // movdqu    xmm4, oword [rdi + 4*rax]
	LONG $0x6c6f0ff3; WORD $0x1087 // movdqu    xmm5, oword [rdi + 4*rax + 16]
	LONG $0x3f380f66; BYTE $0xdd   // pmaxud    xmm3, xmm5
	LONG $0x3f380f66; BYTE $0xcc   // pmaxud    xmm1, xmm4
	LONG $0x3b380f66; BYTE $0xd5   // pminud    xmm2, xmm5
	LONG $0x3b380f66; BYTE $0xc4   // pminud    xmm0, xmm4

LBB1_12:
	LONG $0x3b380f66; BYTE $0xc2 // pminud    xmm0, xmm2
	LONG $0x3f380f66; BYTE $0xcb // pmaxud    xmm1, xmm3
	LONG $0xd1700f66; BYTE $0x4e // pshufd    xmm2, xmm1, 78
	LONG $0x3f380f66; BYTE $0xd1 // pmaxud    xmm2, xmm1
	LONG $0xca700f66; BYTE $0xe5 // pshufd    xmm1, xmm2, 229
	LONG $0x3f380f66; BYTE $0xca // pmaxud    xmm1, xmm2
	LONG $0xce7e0f66             // movd    esi, xmm1
	LONG $0xc8700f66; BYTE $0x4e // pshufd    xmm1, xmm0, 78
	LONG $0x3b380f66; BYTE $0xc8 // pminud    xmm1, xmm0
	LONG $0xc1700f66; BYTE $0xe5 // pshufd    xmm0, xmm1, 229
	LONG $0x3b380f66; BYTE $0xc1 // pminud    xmm0, xmm1
	LONG $0x7e0f4166; BYTE $0xc0 // movd    r8d, xmm0
	WORD $0x394d; BYTE $0xcb     // cmp    r11, r9
	JE   LBB1_13

LBB1_4:
	WORD $0xf089 // mov    eax, esi

LBB1_5:
	LONG $0x9f348b42         // mov    esi, dword [rdi + 4*r11]
	WORD $0x3941; BYTE $0xf0 // cmp    r8d, esi
	LONG $0xc6430f44         // cmovae    r8d, esi
	WORD $0xf039             // cmp    eax, esi
	WORD $0x470f; BYTE $0xf0 // cmova    esi, eax
	LONG $0x01c38349         // add    r11, 1
	WORD $0xf089             // mov    eax, esi
	WORD $0x394d; BYTE $0xd9 // cmp    r9, r11
	JNE  LBB1_5

LBB1_13:
	WORD $0x3189             // mov    dword [rcx], esi
	WORD $0x8944; BYTE $0x02 // mov    dword [rdx], r8d
	RET

LBB1_7:
	LONG $0xc9ef0f66 // pxor    xmm1, xmm1
	LONG $0xc0760f66 // pcmpeqd    xmm0, xmm0
	WORD $0xc031     // xor    eax, eax
	LONG $0xd2760f66 // pcmpeqd    xmm2, xmm2
	LONG $0xdbef0f66 // pxor    xmm3, xmm3
	LONG $0x01c0f641 // test    r8b, 1
	JNE  LBB1_11
	JMP  LBB1_12

DATA LCDATA2<>+0x000(SB)/8, $0x8000000000000000
DATA LCDATA2<>+0x008(SB)/8, $0x8000000000000000
DATA LCDATA2<>+0x010(SB)/8, $0x7fffffffffffffff
DATA LCDATA2<>+0x018(SB)/8, $0x7fffffffffffffff
GLOBL LCDATA2<>(SB), 8, $32

TEXT ·_int64_max_min_sse4(SB), $0-32

	MOVQ values+0(FP), DI
	MOVQ length+8(FP), SI
	MOVQ minout+16(FP), DX
	MOVQ maxout+24(FP), CX
	LEAQ LCDATA2<>(SB), BP

	QUAD $0xffffffffffffb849; WORD $0x7fff // mov    r8, 9223372036854775807
	WORD $0xf685                           // test    esi, esi
	JLE  LBB2_1
	WORD $0x8941; BYTE $0xf1               // mov    r9d, esi
	WORD $0xfe83; BYTE $0x03               // cmp    esi, 3
	JA   LBB2_6
	LONG $0x01708d49                       // lea    rsi, [r8 + 1]
	WORD $0x3145; BYTE $0xdb               // xor    r11d, r11d
	JMP  LBB2_4

LBB2_1:
	LONG $0x01708d49 // lea    rsi, [r8 + 1]
	JMP  LBB2_13

LBB2_6:
	WORD $0x8945; BYTE $0xcb       // mov    r11d, r9d
	LONG $0xfce38341               // and    r11d, -4
	LONG $0xfc438d49               // lea    rax, [r11 - 4]
	WORD $0x8949; BYTE $0xc0       // mov    r8, rax
	LONG $0x02e8c149               // shr    r8, 2
	LONG $0x01c08349               // add    r8, 1
	WORD $0x8548; BYTE $0xc0       // test    rax, rax
	JE   LBB2_7
	WORD $0x894d; BYTE $0xc2       // mov    r10, r8
	LONG $0xfee28349               // and    r10, -2
	WORD $0xf749; BYTE $0xda       // neg    r10
	LONG $0x6f0f4466; WORD $0x004d // movdqa    xmm9, oword 0[rbp] /* [rip + .LCPI2_0] */
	LONG $0x6f0f4466; WORD $0x1045 // movdqa    xmm8, oword 16[rbp] /* [rip + .LCPI2_1] */
	WORD $0xc031                   // xor    eax, eax
	LONG $0x6f0f4166; BYTE $0xd0   // movdqa    xmm2, xmm8
	LONG $0x6f0f4166; BYTE $0xf1   // movdqa    xmm6, xmm9

LBB2_9:
	LONG $0x3c6f0ff3; BYTE $0xc7   // movdqu    xmm7, oword [rdi + 8*rax]
	LONG $0xc76f0f66               // movdqa    xmm0, xmm7
	LONG $0x380f4166; WORD $0xc037 // pcmpgtq    xmm0, xmm8
	LONG $0xe76f0f66               // movdqa    xmm4, xmm7
	LONG $0x380f4166; WORD $0xe015 // blendvpd    xmm4, xmm8, xmm0
	LONG $0x4c6f0ff3; WORD $0x10c7 // movdqu    xmm1, oword [rdi + 8*rax + 16]
	LONG $0xc16f0f66               // movdqa    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0xe96f0f66               // movdqa    xmm5, xmm1
	LONG $0x15380f66; BYTE $0xea   // blendvpd    xmm5, xmm2, xmm0
	LONG $0x6f0f4166; BYTE $0xc1   // movdqa    xmm0, xmm9
	LONG $0x37380f66; BYTE $0xc7   // pcmpgtq    xmm0, xmm7
	LONG $0x380f4166; WORD $0xf915 // blendvpd    xmm7, xmm9, xmm0
	LONG $0xc66f0f66               // movdqa    xmm0, xmm6
	LONG $0x37380f66; BYTE $0xc1   // pcmpgtq    xmm0, xmm1
	LONG $0x15380f66; BYTE $0xce   // blendvpd    xmm1, xmm6, xmm0
	LONG $0x5c6f0ff3; WORD $0x20c7 // movdqu    xmm3, oword [rdi + 8*rax + 32]
	LONG $0xc36f0f66               // movdqa    xmm0, xmm3
	LONG $0x37380f66; BYTE $0xc4   // pcmpgtq    xmm0, xmm4
	LONG $0x6f0f4466; BYTE $0xc3   // movdqa    xmm8, xmm3
	LONG $0x380f4466; WORD $0xc415 // blendvpd    xmm8, xmm4, xmm0
	LONG $0x646f0ff3; WORD $0x30c7 // movdqu    xmm4, oword [rdi + 8*rax + 48]
	LONG $0xc46f0f66               // movdqa    xmm0, xmm4
	LONG $0x37380f66; BYTE $0xc5   // pcmpgtq    xmm0, xmm5
	LONG $0xd46f0f66               // movdqa    xmm2, xmm4
	LONG $0x15380f66; BYTE $0xd5   // blendvpd    xmm2, xmm5, xmm0
	LONG $0xc7280f66               // movapd    xmm0, xmm7
	LONG $0x37380f66; BYTE $0xc3   // pcmpgtq    xmm0, xmm3
	LONG $0x15380f66; BYTE $0xdf   // blendvpd    xmm3, xmm7, xmm0
	LONG $0xc1280f66               // movapd    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc4   // pcmpgtq    xmm0, xmm4
	LONG $0x15380f66; BYTE $0xe1   // blendvpd    xmm4, xmm1, xmm0
	LONG $0x08c08348               // add    rax, 8
	LONG $0x280f4466; BYTE $0xcb   // movapd    xmm9, xmm3
	LONG $0xf4280f66               // movapd    xmm6, xmm4
	LONG $0x02c28349               // add    r10, 2
	JNE  LBB2_9
	LONG $0x01c0f641               // test    r8b, 1
	JE   LBB2_12

LBB2_11:
	LONG $0x4c6f0ff3; WORD $0x10c7 // movdqu    xmm1, oword [rdi + 8*rax + 16]
	LONG $0xc4280f66               // movapd    xmm0, xmm4
	LONG $0x37380f66; BYTE $0xc1   // pcmpgtq    xmm0, xmm1
	LONG $0xe96f0f66               // movdqa    xmm5, xmm1
	LONG $0x15380f66; BYTE $0xec   // blendvpd    xmm5, xmm4, xmm0
	LONG $0x246f0ff3; BYTE $0xc7   // movdqu    xmm4, oword [rdi + 8*rax]
	LONG $0xc3280f66               // movapd    xmm0, xmm3
	LONG $0x37380f66; BYTE $0xc4   // pcmpgtq    xmm0, xmm4
	LONG $0xf46f0f66               // movdqa    xmm6, xmm4
	LONG $0x15380f66; BYTE $0xf3   // blendvpd    xmm6, xmm3, xmm0
	LONG $0xc16f0f66               // movdqa    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0x15380f66; BYTE $0xca   // blendvpd    xmm1, xmm2, xmm0
	LONG $0xc46f0f66               // movdqa    xmm0, xmm4
	LONG $0x380f4166; WORD $0xc037 // pcmpgtq    xmm0, xmm8
	LONG $0x380f4166; WORD $0xe015 // blendvpd    xmm4, xmm8, xmm0
	LONG $0x280f4466; BYTE $0xc4   // movapd    xmm8, xmm4
	LONG $0xd1280f66               // movapd    xmm2, xmm1
	LONG $0xde280f66               // movapd    xmm3, xmm6
	LONG $0xe5280f66               // movapd    xmm4, xmm5

LBB2_12:
	LONG $0xc3280f66               // movapd    xmm0, xmm3
	LONG $0x37380f66; BYTE $0xc4   // pcmpgtq    xmm0, xmm4
	LONG $0x15380f66; BYTE $0xe3   // blendvpd    xmm4, xmm3, xmm0
	LONG $0xcc700f66; BYTE $0x4e   // pshufd    xmm1, xmm4, 78
	LONG $0xc46f0f66               // movdqa    xmm0, xmm4
	LONG $0x37380f66; BYTE $0xc1   // pcmpgtq    xmm0, xmm1
	LONG $0x15380f66; BYTE $0xcc   // blendvpd    xmm1, xmm4, xmm0
	LONG $0x7e0f4866; BYTE $0xce   // movq    rsi, xmm1
	LONG $0xc26f0f66               // movdqa    xmm0, xmm2
	LONG $0x380f4166; WORD $0xc037 // pcmpgtq    xmm0, xmm8
	LONG $0x380f4166; WORD $0xd015 // blendvpd    xmm2, xmm8, xmm0
	LONG $0xca700f66; BYTE $0x4e   // pshufd    xmm1, xmm2, 78
	LONG $0xc16f0f66               // movdqa    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0x15380f66; BYTE $0xca   // blendvpd    xmm1, xmm2, xmm0
	LONG $0x7e0f4966; BYTE $0xc8   // movq    r8, xmm1
	WORD $0x394d; BYTE $0xcb       // cmp    r11, r9
	JE   LBB2_13

LBB2_4:
	WORD $0x8948; BYTE $0xf0 // mov    rax, rsi

LBB2_5:
	LONG $0xdf348b4a         // mov    rsi, qword [rdi + 8*r11]
	WORD $0x3949; BYTE $0xf0 // cmp    r8, rsi
	LONG $0xc64f0f4c         // cmovg    r8, rsi
	WORD $0x3948; BYTE $0xf0 // cmp    rax, rsi
	LONG $0xf04d0f48         // cmovge    rsi, rax
	LONG $0x01c38349         // add    r11, 1
	WORD $0x8948; BYTE $0xf0 // mov    rax, rsi
	WORD $0x394d; BYTE $0xd9 // cmp    r9, r11
	JNE  LBB2_5

LBB2_13:
	WORD $0x8948; BYTE $0x31 // mov    qword [rcx], rsi
	WORD $0x894c; BYTE $0x02 // mov    qword [rdx], r8
	RET

LBB2_7:
	LONG $0x5d280f66; BYTE $0x00   // movapd    xmm3, oword 0[rbp] /* [rip + .LCPI2_0] */
	LONG $0x6f0f4466; WORD $0x1045 // movdqa    xmm8, oword 16[rbp] /* [rip + .LCPI2_1] */
	WORD $0xc031                   // xor    eax, eax
	LONG $0x6f0f4166; BYTE $0xd0   // movdqa    xmm2, xmm8
	LONG $0xe3280f66               // movapd    xmm4, xmm3
	LONG $0x01c0f641               // test    r8b, 1
	JNE  LBB2_11
	JMP  LBB2_12

DATA LCDATA3<>+0x000(SB)/8, $0x8000000000000000
DATA LCDATA3<>+0x008(SB)/8, $0x8000000000000000
GLOBL LCDATA3<>(SB), 8, $16

TEXT ·_uint64_max_min_sse4(SB), $0-32

	MOVQ values+0(FP), DI
	MOVQ length+8(FP), SI
	MOVQ minout+16(FP), DX
	MOVQ maxout+24(FP), CX
	LEAQ LCDATA3<>(SB), BP

	WORD $0xf685                               // test    esi, esi
	JLE  LBB3_1
	WORD $0x8941; BYTE $0xf1                   // mov    r9d, esi
	WORD $0xfe83; BYTE $0x03                   // cmp    esi, 3
	JA   LBB3_6
	LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // mov    r8, -1
	WORD $0x3145; BYTE $0xdb                   // xor    r11d, r11d
	WORD $0xc031                               // xor    eax, eax
	JMP  LBB3_4

LBB3_1:
	LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // mov    r8, -1
	WORD $0xc031                               // xor    eax, eax
	JMP  LBB3_13

LBB3_6:
	WORD $0x8945; BYTE $0xcb       // mov    r11d, r9d
	LONG $0xfce38341               // and    r11d, -4
	LONG $0xfc438d49               // lea    rax, [r11 - 4]
	WORD $0x8949; BYTE $0xc0       // mov    r8, rax
	LONG $0x02e8c149               // shr    r8, 2
	LONG $0x01c08349               // add    r8, 1
	WORD $0x8548; BYTE $0xc0       // test    rax, rax
	JE   LBB3_7
	WORD $0x894d; BYTE $0xc2       // mov    r10, r8
	LONG $0xfee28349               // and    r10, -2
	WORD $0xf749; BYTE $0xda       // neg    r10
	LONG $0xef0f4566; BYTE $0xc9   // pxor    xmm9, xmm9
	LONG $0x760f4566; BYTE $0xd2   // pcmpeqd    xmm10, xmm10
	WORD $0xc031                   // xor    eax, eax
	LONG $0x6f0f4466; WORD $0x0045 // movdqa    xmm8, oword 0[rbp] /* [rip + .LCPI3_0] */
	LONG $0x760f4566; BYTE $0xdb   // pcmpeqd    xmm11, xmm11
	LONG $0xef0f4566; BYTE $0xe4   // pxor    xmm12, xmm12

LBB3_9:
	LONG $0x6f0f4166; BYTE $0xd2               // movdqa    xmm2, xmm10
	LONG $0xef0f4166; BYTE $0xd0               // pxor    xmm2, xmm8
	LONG $0x246f0ff3; BYTE $0xc7               // movdqu    xmm4, oword [rdi + 8*rax]
	LONG $0x6c6f0ff3; WORD $0x10c7             // movdqu    xmm5, oword [rdi + 8*rax + 16]
	LONG $0x6f0f44f3; WORD $0xc76c; BYTE $0x20 // movdqu    xmm13, oword [rdi + 8*rax + 32]
	LONG $0xc46f0f66                           // movdqa    xmm0, xmm4
	LONG $0xef0f4166; BYTE $0xc0               // pxor    xmm0, xmm8
	LONG $0x6f0f4166; BYTE $0xc9               // movdqa    xmm1, xmm9
	LONG $0xef0f4166; BYTE $0xc8               // pxor    xmm1, xmm8
	LONG $0x37380f66; BYTE $0xc8               // pcmpgtq    xmm1, xmm0
	LONG $0x37380f66; BYTE $0xc2               // pcmpgtq    xmm0, xmm2
	LONG $0xdc6f0f66                           // movdqa    xmm3, xmm4
	LONG $0x380f4166; WORD $0xda15             // blendvpd    xmm3, xmm10, xmm0
	LONG $0x746f0ff3; WORD $0x30c7             // movdqu    xmm6, oword [rdi + 8*rax + 48]
	LONG $0x6f0f4166; BYTE $0xfb               // movdqa    xmm7, xmm11
	LONG $0xef0f4166; BYTE $0xf8               // pxor    xmm7, xmm8
	LONG $0xc56f0f66                           // movdqa    xmm0, xmm5
	LONG $0xef0f4166; BYTE $0xc0               // pxor    xmm0, xmm8
	LONG $0x6f0f4166; BYTE $0xd4               // movdqa    xmm2, xmm12
	LONG $0xef0f4166; BYTE $0xd0               // pxor    xmm2, xmm8
	LONG $0x37380f66; BYTE $0xd0               // pcmpgtq    xmm2, xmm0
	LONG $0x37380f66; BYTE $0xc7               // pcmpgtq    xmm0, xmm7
	LONG $0xfd6f0f66                           // movdqa    xmm7, xmm5
	LONG $0x380f4166; WORD $0xfb15             // blendvpd    xmm7, xmm11, xmm0
	LONG $0xc16f0f66                           // movdqa    xmm0, xmm1
	LONG $0x380f4166; WORD $0xe115             // blendvpd    xmm4, xmm9, xmm0
	LONG $0xc26f0f66                           // movdqa    xmm0, xmm2
	LONG $0x380f4166; WORD $0xec15             // blendvpd    xmm5, xmm12, xmm0
	LONG $0xd3280f66                           // movapd    xmm2, xmm3
	LONG $0x570f4166; BYTE $0xd0               // xorpd    xmm2, xmm8
	LONG $0x6f0f4166; BYTE $0xc5               // movdqa    xmm0, xmm13
	LONG $0xef0f4166; BYTE $0xc0               // pxor    xmm0, xmm8
	LONG $0xcc280f66                           // movapd    xmm1, xmm4
	LONG $0x570f4166; BYTE $0xc8               // xorpd    xmm1, xmm8
	LONG $0x37380f66; BYTE $0xc8               // pcmpgtq    xmm1, xmm0
	LONG $0x37380f66; BYTE $0xc2               // pcmpgtq    xmm0, xmm2
	LONG $0x6f0f4566; BYTE $0xd5               // movdqa    xmm10, xmm13
	LONG $0x380f4466; WORD $0xd315             // blendvpd    xmm10, xmm3, xmm0
	LONG $0xdf280f66                           // movapd    xmm3, xmm7
	LONG $0x570f4166; BYTE $0xd8               // xorpd    xmm3, xmm8
	LONG $0xc66f0f66                           // movdqa    xmm0, xmm6
	LONG $0xef0f4166; BYTE $0xc0               // pxor    xmm0, xmm8
	LONG $0xd5280f66                           // movapd    xmm2, xmm5
	LONG $0x570f4166; BYTE $0xd0               // xorpd    xmm2, xmm8
	LONG $0x37380f66; BYTE $0xd0               // pcmpgtq    xmm2, xmm0
	LONG $0x37380f66; BYTE $0xc3               // pcmpgtq    xmm0, xmm3
	LONG $0x6f0f4466; BYTE $0xde               // movdqa    xmm11, xmm6
	LONG $0x380f4466; WORD $0xdf15             // blendvpd    xmm11, xmm7, xmm0
	LONG $0xc16f0f66                           // movdqa    xmm0, xmm1
	LONG $0x380f4466; WORD $0xec15             // blendvpd    xmm13, xmm4, xmm0
	LONG $0xc26f0f66                           // movdqa    xmm0, xmm2
	LONG $0x15380f66; BYTE $0xf5               // blendvpd    xmm6, xmm5, xmm0
	LONG $0x08c08348                           // add    rax, 8
	LONG $0x280f4566; BYTE $0xcd               // movapd    xmm9, xmm13
	LONG $0x280f4466; BYTE $0xe6               // movapd    xmm12, xmm6
	LONG $0x02c28349                           // add    r10, 2
	JNE  LBB3_9
	LONG $0x01c0f641                           // test    r8b, 1
	JE   LBB3_12

LBB3_11:
	LONG $0x24100f66; BYTE $0xc7   // movupd    xmm4, oword [rdi + 8*rax]
	LONG $0x5c100f66; WORD $0x10c7 // movupd    xmm3, oword [rdi + 8*rax + 16]
	LONG $0x6d280f66; BYTE $0x00   // movapd    xmm5, oword 0[rbp] /* [rip + .LCPI3_0] */
	LONG $0xc6280f66               // movapd    xmm0, xmm6
	LONG $0xc5570f66               // xorpd    xmm0, xmm5
	LONG $0xcb280f66               // movapd    xmm1, xmm3
	LONG $0xcd570f66               // xorpd    xmm1, xmm5
	LONG $0x37380f66; BYTE $0xc1   // pcmpgtq    xmm0, xmm1
	LONG $0xfb280f66               // movapd    xmm7, xmm3
	LONG $0x15380f66; BYTE $0xfe   // blendvpd    xmm7, xmm6, xmm0
	LONG $0x280f4166; BYTE $0xc5   // movapd    xmm0, xmm13
	LONG $0xc5570f66               // xorpd    xmm0, xmm5
	LONG $0xd4280f66               // movapd    xmm2, xmm4
	LONG $0xd5570f66               // xorpd    xmm2, xmm5
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0xf4280f66               // movapd    xmm6, xmm4
	LONG $0x380f4166; WORD $0xf515 // blendvpd    xmm6, xmm13, xmm0
	LONG $0x280f4166; BYTE $0xc3   // movapd    xmm0, xmm11
	LONG $0xc5570f66               // xorpd    xmm0, xmm5
	LONG $0x37380f66; BYTE $0xc8   // pcmpgtq    xmm1, xmm0
	LONG $0xc16f0f66               // movdqa    xmm0, xmm1
	LONG $0x380f4166; WORD $0xdb15 // blendvpd    xmm3, xmm11, xmm0
	LONG $0x570f4166; BYTE $0xea   // xorpd    xmm5, xmm10
	LONG $0x37380f66; BYTE $0xd5   // pcmpgtq    xmm2, xmm5
	LONG $0xc26f0f66               // movdqa    xmm0, xmm2
	LONG $0x380f4166; WORD $0xe215 // blendvpd    xmm4, xmm10, xmm0
	LONG $0x280f4466; BYTE $0xd4   // movapd    xmm10, xmm4
	LONG $0x280f4466; BYTE $0xdb   // movapd    xmm11, xmm3
	LONG $0x280f4466; BYTE $0xee   // movapd    xmm13, xmm6
	LONG $0xf7280f66               // movapd    xmm6, xmm7

LBB3_12:
	LONG $0x4d280f66; BYTE $0x00   // movapd    xmm1, oword 0[rbp] /* [rip + .LCPI3_0] */
	LONG $0xd6280f66               // movapd    xmm2, xmm6
	LONG $0xd1570f66               // xorpd    xmm2, xmm1
	LONG $0x280f4166; BYTE $0xc5   // movapd    xmm0, xmm13
	LONG $0xc1570f66               // xorpd    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0x380f4166; WORD $0xf515 // blendvpd    xmm6, xmm13, xmm0
	LONG $0xd6700f66; BYTE $0x4e   // pshufd    xmm2, xmm6, 78
	LONG $0xc6280f66               // movapd    xmm0, xmm6
	LONG $0xc1570f66               // xorpd    xmm0, xmm1
	LONG $0xda6f0f66               // movdqa    xmm3, xmm2
	LONG $0xd9ef0f66               // pxor    xmm3, xmm1
	LONG $0x37380f66; BYTE $0xc3   // pcmpgtq    xmm0, xmm3
	LONG $0x15380f66; BYTE $0xd6   // blendvpd    xmm2, xmm6, xmm0
	LONG $0x7e0f4866; BYTE $0xd0   // movq    rax, xmm2
	LONG $0x6f0f4166; BYTE $0xd2   // movdqa    xmm2, xmm10
	LONG $0xd1ef0f66               // pxor    xmm2, xmm1
	LONG $0x6f0f4166; BYTE $0xc3   // movdqa    xmm0, xmm11
	LONG $0xc1ef0f66               // pxor    xmm0, xmm1
	LONG $0x37380f66; BYTE $0xc2   // pcmpgtq    xmm0, xmm2
	LONG $0x380f4566; WORD $0xda15 // blendvpd    xmm11, xmm10, xmm0
	LONG $0x700f4166; WORD $0x4ed3 // pshufd    xmm2, xmm11, 78
	LONG $0x6f0f4166; BYTE $0xc3   // movdqa    xmm0, xmm11
	LONG $0xc1ef0f66               // pxor    xmm0, xmm1
	LONG $0xcaef0f66               // pxor    xmm1, xmm2
	LONG $0x37380f66; BYTE $0xc8   // pcmpgtq    xmm1, xmm0
	LONG $0xc16f0f66               // movdqa    xmm0, xmm1
	LONG $0x380f4166; WORD $0xd315 // blendvpd    xmm2, xmm11, xmm0
	LONG $0x7e0f4966; BYTE $0xd0   // movq    r8, xmm2
	WORD $0x394d; BYTE $0xcb       // cmp    r11, r9
	JE   LBB3_13

LBB3_4:
	WORD $0x8948; BYTE $0xc6 // mov    rsi, rax

LBB3_5:
	LONG $0xdf048b4a         // mov    rax, qword [rdi + 8*r11]
	WORD $0x3949; BYTE $0xc0 // cmp    r8, rax
	LONG $0xc0430f4c         // cmovae    r8, rax
	WORD $0x3948; BYTE $0xc6 // cmp    rsi, rax
	LONG $0xc6470f48         // cmova    rax, rsi
	LONG $0x01c38349         // add    r11, 1
	WORD $0x8948; BYTE $0xc6 // mov    rsi, rax
	WORD $0x394d; BYTE $0xd9 // cmp    r9, r11
	JNE  LBB3_5

LBB3_13:
	WORD $0x8948; BYTE $0x01 // mov    qword [rcx], rax
	WORD $0x894c; BYTE $0x02 // mov    qword [rdx], r8
	RET

LBB3_7:
	LONG $0x570f4566; BYTE $0xed // xorpd    xmm13, xmm13
	LONG $0x760f4566; BYTE $0xd2 // pcmpeqd    xmm10, xmm10
	WORD $0xc031                 // xor    eax, eax
	LONG $0x760f4566; BYTE $0xdb // pcmpeqd    xmm11, xmm11
	LONG $0xf6570f66             // xorpd    xmm6, xmm6
	LONG $0x01c0f641             // test    r8b, 1
	JNE  LBB3_11
	JMP  LBB3_12
