github.com/apache/arrow/go/v14@v14.0.1/internal/utils/min_max_sse4_amd64.s (about) 1 //+build !noasm !appengine 2 // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT 3 4 DATA LCDATA1<>+0x000(SB)/8, $0x8080808080808080 5 DATA LCDATA1<>+0x008(SB)/8, $0x8080808080808080 6 DATA LCDATA1<>+0x010(SB)/8, $0x7f7f7f7f7f7f7f7f 7 DATA LCDATA1<>+0x018(SB)/8, $0x7f7f7f7f7f7f7f7f 8 GLOBL LCDATA1<>(SB), 8, $32 9 10 TEXT ·_int8_max_min_sse4(SB), $0-32 11 12 MOVQ values+0(FP), DI 13 MOVQ length+8(FP), SI 14 MOVQ minout+16(FP), DX 15 MOVQ maxout+24(FP), CX 16 LEAQ LCDATA1<>(SB), BP 17 18 WORD $0xf685 // test esi, esi 19 JLE LBB0_1 20 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 21 WORD $0xfe83; BYTE $0x1f // cmp esi, 31 22 JA LBB0_4 23 WORD $0xb041; BYTE $0x80 // mov r8b, -128 24 WORD $0xb640; BYTE $0x7f // mov sil, 127 25 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 26 JMP LBB0_11 27 28 LBB0_1: 29 WORD $0xb640; BYTE $0x7f // mov sil, 127 30 WORD $0xb041; BYTE $0x80 // mov r8b, -128 31 JMP LBB0_12 32 33 LBB0_4: 34 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 35 LONG $0xe0e38341 // and r11d, -32 36 LONG $0xe0438d49 // lea rax, [r11 - 32] 37 WORD $0x8949; BYTE $0xc0 // mov r8, rax 38 LONG $0x05e8c149 // shr r8, 5 39 LONG $0x01c08349 // add r8, 1 40 WORD $0x8548; BYTE $0xc0 // test rax, rax 41 JE LBB0_5 42 WORD $0x894d; BYTE $0xc2 // mov r10, r8 43 LONG $0xfee28349 // and r10, -2 44 WORD $0xf749; BYTE $0xda // neg r10 45 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI0_0] */ 46 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI0_1] */ 47 WORD $0xc031 // xor eax, eax 48 LONG $0xd06f0f66 // movdqa xmm2, xmm0 49 LONG $0xd96f0f66 // movdqa xmm3, xmm1 50 51 LBB0_7: 52 LONG $0x246f0ff3; BYTE $0x07 // movdqu xmm4, oword [rdi + rax] 53 LONG $0x6c6f0ff3; WORD $0x1007 // movdqu xmm5, oword [rdi + rax + 16] 54 LONG $0x746f0ff3; WORD $0x2007 // movdqu xmm6, oword [rdi + rax + 32] 55 LONG $0x7c6f0ff3; WORD $0x3007 // movdqu xmm7, oword [rdi + rax + 48] 56 LONG $0x38380f66; BYTE $0xc4 // pminsb xmm0, xmm4 57 LONG $0x38380f66; BYTE $0xd5 // pminsb xmm2, xmm5 58 LONG $0x3c380f66; BYTE $0xcc // pmaxsb xmm1, xmm4 59 LONG $0x3c380f66; BYTE $0xdd // pmaxsb xmm3, xmm5 60 LONG $0x38380f66; BYTE $0xc6 // pminsb xmm0, xmm6 61 LONG $0x38380f66; BYTE $0xd7 // pminsb xmm2, xmm7 62 LONG $0x3c380f66; BYTE $0xce // pmaxsb xmm1, xmm6 63 LONG $0x3c380f66; BYTE $0xdf // pmaxsb xmm3, xmm7 64 LONG $0x40c08348 // add rax, 64 65 LONG $0x02c28349 // add r10, 2 66 JNE LBB0_7 67 LONG $0x01c0f641 // test r8b, 1 68 JE LBB0_10 69 70 LBB0_9: 71 LONG $0x246f0ff3; BYTE $0x07 // movdqu xmm4, oword [rdi + rax] 72 LONG $0x6c6f0ff3; WORD $0x1007 // movdqu xmm5, oword [rdi + rax + 16] 73 LONG $0x3c380f66; BYTE $0xdd // pmaxsb xmm3, xmm5 74 LONG $0x3c380f66; BYTE $0xcc // pmaxsb xmm1, xmm4 75 LONG $0x38380f66; BYTE $0xd5 // pminsb xmm2, xmm5 76 LONG $0x38380f66; BYTE $0xc4 // pminsb xmm0, xmm4 77 78 LBB0_10: 79 LONG $0x38380f66; BYTE $0xc2 // pminsb xmm0, xmm2 80 LONG $0x3c380f66; BYTE $0xcb // pmaxsb xmm1, xmm3 81 LONG $0x4def0f66; BYTE $0x10 // pxor xmm1, oword 16[rbp] /* [rip + .LCPI0_1] */ 82 LONG $0xd16f0f66 // movdqa xmm2, xmm1 83 LONG $0xd2710f66; BYTE $0x08 // psrlw xmm2, 8 84 LONG $0xd1da0f66 // pminub xmm2, xmm1 85 LONG $0x41380f66; BYTE $0xca // phminposuw xmm1, xmm2 86 LONG $0x7e0f4166; BYTE $0xc8 // movd r8d, xmm1 87 LONG $0x7ff08041 // xor r8b, 127 88 LONG $0x45ef0f66; BYTE $0x00 // pxor xmm0, oword 0[rbp] /* [rip + .LCPI0_0] */ 89 LONG $0xc86f0f66 // movdqa xmm1, xmm0 90 LONG $0xd1710f66; BYTE $0x08 // psrlw xmm1, 8 91 LONG $0xc8da0f66 // pminub xmm1, xmm0 92 LONG $0x41380f66; BYTE $0xc1 // phminposuw xmm0, xmm1 93 LONG $0xc67e0f66 // movd esi, xmm0 94 LONG $0x80f68040 // xor sil, -128 95 WORD $0x394d; BYTE $0xcb // cmp r11, r9 96 JE LBB0_12 97 98 LBB0_11: 99 LONG $0x04b60f42; BYTE $0x1f // movzx eax, byte [rdi + r11] 100 WORD $0x3840; BYTE $0xc6 // cmp sil, al 101 LONG $0xf6b60f40 // movzx esi, sil 102 WORD $0x4f0f; BYTE $0xf0 // cmovg esi, eax 103 WORD $0x3841; BYTE $0xc0 // cmp r8b, al 104 LONG $0xc0b60f45 // movzx r8d, r8b 105 LONG $0xc04c0f44 // cmovl r8d, eax 106 LONG $0x01c38349 // add r11, 1 107 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 108 JNE LBB0_11 109 110 LBB0_12: 111 WORD $0x8844; BYTE $0x01 // mov byte [rcx], r8b 112 WORD $0x8840; BYTE $0x32 // mov byte [rdx], sil 113 RET 114 115 LBB0_5: 116 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI0_0] */ 117 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI0_1] */ 118 WORD $0xc031 // xor eax, eax 119 LONG $0xd06f0f66 // movdqa xmm2, xmm0 120 LONG $0xd96f0f66 // movdqa xmm3, xmm1 121 LONG $0x01c0f641 // test r8b, 1 122 JNE LBB0_9 123 JMP LBB0_10 124 125 TEXT ·_uint8_max_min_sse4(SB), $0-32 126 127 MOVQ values+0(FP), DI 128 MOVQ length+8(FP), SI 129 MOVQ minout+16(FP), DX 130 MOVQ maxout+24(FP), CX 131 132 WORD $0xf685 // test esi, esi 133 JLE LBB1_1 134 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 135 WORD $0xfe83; BYTE $0x1f // cmp esi, 31 136 JA LBB1_4 137 WORD $0xb640; BYTE $0xff // mov sil, -1 138 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 139 WORD $0xc031 // xor eax, eax 140 JMP LBB1_11 141 142 LBB1_1: 143 WORD $0xb640; BYTE $0xff // mov sil, -1 144 WORD $0xc031 // xor eax, eax 145 JMP LBB1_12 146 147 LBB1_4: 148 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 149 LONG $0xe0e38341 // and r11d, -32 150 LONG $0xe0438d49 // lea rax, [r11 - 32] 151 WORD $0x8949; BYTE $0xc0 // mov r8, rax 152 LONG $0x05e8c149 // shr r8, 5 153 LONG $0x01c08349 // add r8, 1 154 WORD $0x8548; BYTE $0xc0 // test rax, rax 155 JE LBB1_5 156 WORD $0x894d; BYTE $0xc2 // mov r10, r8 157 LONG $0xfee28349 // and r10, -2 158 WORD $0xf749; BYTE $0xda // neg r10 159 LONG $0xc9ef0f66 // pxor xmm1, xmm1 160 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 161 WORD $0xc031 // xor eax, eax 162 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 163 LONG $0xdbef0f66 // pxor xmm3, xmm3 164 165 LBB1_7: 166 LONG $0x246f0ff3; BYTE $0x07 // movdqu xmm4, oword [rdi + rax] 167 LONG $0x6c6f0ff3; WORD $0x1007 // movdqu xmm5, oword [rdi + rax + 16] 168 LONG $0x746f0ff3; WORD $0x2007 // movdqu xmm6, oword [rdi + rax + 32] 169 LONG $0x7c6f0ff3; WORD $0x3007 // movdqu xmm7, oword [rdi + rax + 48] 170 LONG $0xc4da0f66 // pminub xmm0, xmm4 171 LONG $0xd5da0f66 // pminub xmm2, xmm5 172 LONG $0xccde0f66 // pmaxub xmm1, xmm4 173 LONG $0xddde0f66 // pmaxub xmm3, xmm5 174 LONG $0xc6da0f66 // pminub xmm0, xmm6 175 LONG $0xd7da0f66 // pminub xmm2, xmm7 176 LONG $0xcede0f66 // pmaxub xmm1, xmm6 177 LONG $0xdfde0f66 // pmaxub xmm3, xmm7 178 LONG $0x40c08348 // add rax, 64 179 LONG $0x02c28349 // add r10, 2 180 JNE LBB1_7 181 LONG $0x01c0f641 // test r8b, 1 182 JE LBB1_10 183 184 LBB1_9: 185 LONG $0x246f0ff3; BYTE $0x07 // movdqu xmm4, oword [rdi + rax] 186 LONG $0x6c6f0ff3; WORD $0x1007 // movdqu xmm5, oword [rdi + rax + 16] 187 LONG $0xddde0f66 // pmaxub xmm3, xmm5 188 LONG $0xccde0f66 // pmaxub xmm1, xmm4 189 LONG $0xd5da0f66 // pminub xmm2, xmm5 190 LONG $0xc4da0f66 // pminub xmm0, xmm4 191 192 LBB1_10: 193 LONG $0xc2da0f66 // pminub xmm0, xmm2 194 LONG $0xcbde0f66 // pmaxub xmm1, xmm3 195 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 196 LONG $0xd1ef0f66 // pxor xmm2, xmm1 197 LONG $0xca6f0f66 // movdqa xmm1, xmm2 198 LONG $0xd1710f66; BYTE $0x08 // psrlw xmm1, 8 199 LONG $0xcada0f66 // pminub xmm1, xmm2 200 LONG $0x41380f66; BYTE $0xc9 // phminposuw xmm1, xmm1 201 LONG $0xc87e0f66 // movd eax, xmm1 202 WORD $0xd0f6 // not al 203 LONG $0xc86f0f66 // movdqa xmm1, xmm0 204 LONG $0xd1710f66; BYTE $0x08 // psrlw xmm1, 8 205 LONG $0xc8da0f66 // pminub xmm1, xmm0 206 LONG $0x41380f66; BYTE $0xc1 // phminposuw xmm0, xmm1 207 LONG $0xc67e0f66 // movd esi, xmm0 208 WORD $0x394d; BYTE $0xcb // cmp r11, r9 209 JE LBB1_12 210 211 LBB1_11: 212 LONG $0x04b60f46; BYTE $0x1f // movzx r8d, byte [rdi + r11] 213 WORD $0x3844; BYTE $0xc6 // cmp sil, r8b 214 LONG $0xf6b60f40 // movzx esi, sil 215 LONG $0xf0430f41 // cmovae esi, r8d 216 WORD $0x3844; BYTE $0xc0 // cmp al, r8b 217 WORD $0xb60f; BYTE $0xc0 // movzx eax, al 218 LONG $0xc0460f41 // cmovbe eax, r8d 219 LONG $0x01c38349 // add r11, 1 220 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 221 JNE LBB1_11 222 223 LBB1_12: 224 WORD $0x0188 // mov byte [rcx], al 225 WORD $0x8840; BYTE $0x32 // mov byte [rdx], sil 226 RET 227 228 LBB1_5: 229 LONG $0xc9ef0f66 // pxor xmm1, xmm1 230 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 231 WORD $0xc031 // xor eax, eax 232 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 233 LONG $0xdbef0f66 // pxor xmm3, xmm3 234 LONG $0x01c0f641 // test r8b, 1 235 JNE LBB1_9 236 JMP LBB1_10 237 238 DATA LCDATA2<>+0x000(SB)/8, $0x8000800080008000 239 DATA LCDATA2<>+0x008(SB)/8, $0x8000800080008000 240 DATA LCDATA2<>+0x010(SB)/8, $0x7fff7fff7fff7fff 241 DATA LCDATA2<>+0x018(SB)/8, $0x7fff7fff7fff7fff 242 GLOBL LCDATA2<>(SB), 8, $32 243 244 TEXT ·_int16_max_min_sse4(SB), $0-32 245 246 MOVQ values+0(FP), DI 247 MOVQ length+8(FP), SI 248 MOVQ minout+16(FP), DX 249 MOVQ maxout+24(FP), CX 250 LEAQ LCDATA2<>(SB), BP 251 252 WORD $0xf685 // test esi, esi 253 JLE LBB2_1 254 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 255 WORD $0xfe83; BYTE $0x0f // cmp esi, 15 256 JA LBB2_4 257 LONG $0x00b84166; BYTE $0x80 // mov r8w, -32768 258 LONG $0x7fffbe66 // mov si, 32767 259 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 260 JMP LBB2_11 261 262 LBB2_1: 263 LONG $0x7fffbe66 // mov si, 32767 264 LONG $0x00b84166; BYTE $0x80 // mov r8w, -32768 265 JMP LBB2_12 266 267 LBB2_4: 268 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 269 LONG $0xf0e38341 // and r11d, -16 270 LONG $0xf0438d49 // lea rax, [r11 - 16] 271 WORD $0x8949; BYTE $0xc0 // mov r8, rax 272 LONG $0x04e8c149 // shr r8, 4 273 LONG $0x01c08349 // add r8, 1 274 WORD $0x8548; BYTE $0xc0 // test rax, rax 275 JE LBB2_5 276 WORD $0x894d; BYTE $0xc2 // mov r10, r8 277 LONG $0xfee28349 // and r10, -2 278 WORD $0xf749; BYTE $0xda // neg r10 279 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI2_0] */ 280 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI2_1] */ 281 WORD $0xc031 // xor eax, eax 282 LONG $0xd06f0f66 // movdqa xmm2, xmm0 283 LONG $0xd96f0f66 // movdqa xmm3, xmm1 284 285 LBB2_7: 286 LONG $0x246f0ff3; BYTE $0x47 // movdqu xmm4, oword [rdi + 2*rax] 287 LONG $0x6c6f0ff3; WORD $0x1047 // movdqu xmm5, oword [rdi + 2*rax + 16] 288 LONG $0x746f0ff3; WORD $0x2047 // movdqu xmm6, oword [rdi + 2*rax + 32] 289 LONG $0x7c6f0ff3; WORD $0x3047 // movdqu xmm7, oword [rdi + 2*rax + 48] 290 LONG $0xc4ea0f66 // pminsw xmm0, xmm4 291 LONG $0xd5ea0f66 // pminsw xmm2, xmm5 292 LONG $0xccee0f66 // pmaxsw xmm1, xmm4 293 LONG $0xddee0f66 // pmaxsw xmm3, xmm5 294 LONG $0xc6ea0f66 // pminsw xmm0, xmm6 295 LONG $0xd7ea0f66 // pminsw xmm2, xmm7 296 LONG $0xceee0f66 // pmaxsw xmm1, xmm6 297 LONG $0xdfee0f66 // pmaxsw xmm3, xmm7 298 LONG $0x20c08348 // add rax, 32 299 LONG $0x02c28349 // add r10, 2 300 JNE LBB2_7 301 LONG $0x01c0f641 // test r8b, 1 302 JE LBB2_10 303 304 LBB2_9: 305 LONG $0x246f0ff3; BYTE $0x47 // movdqu xmm4, oword [rdi + 2*rax] 306 LONG $0x6c6f0ff3; WORD $0x1047 // movdqu xmm5, oword [rdi + 2*rax + 16] 307 LONG $0xddee0f66 // pmaxsw xmm3, xmm5 308 LONG $0xccee0f66 // pmaxsw xmm1, xmm4 309 LONG $0xd5ea0f66 // pminsw xmm2, xmm5 310 LONG $0xc4ea0f66 // pminsw xmm0, xmm4 311 312 LBB2_10: 313 LONG $0xc2ea0f66 // pminsw xmm0, xmm2 314 LONG $0xcbee0f66 // pmaxsw xmm1, xmm3 315 LONG $0x4def0f66; BYTE $0x10 // pxor xmm1, oword 16[rbp] /* [rip + .LCPI2_1] */ 316 LONG $0x41380f66; BYTE $0xc9 // phminposuw xmm1, xmm1 317 LONG $0x7e0f4166; BYTE $0xc8 // movd r8d, xmm1 318 LONG $0xfff08141; WORD $0x007f; BYTE $0x00 // xor r8d, 32767 319 LONG $0x45ef0f66; BYTE $0x00 // pxor xmm0, oword 0[rbp] /* [rip + .LCPI2_0] */ 320 LONG $0x41380f66; BYTE $0xc0 // phminposuw xmm0, xmm0 321 LONG $0xc67e0f66 // movd esi, xmm0 322 LONG $0x8000f681; WORD $0x0000 // xor esi, 32768 323 WORD $0x394d; BYTE $0xcb // cmp r11, r9 324 JE LBB2_12 325 326 LBB2_11: 327 LONG $0x04b70f42; BYTE $0x5f // movzx eax, word [rdi + 2*r11] 328 WORD $0x3966; BYTE $0xc6 // cmp si, ax 329 WORD $0x4f0f; BYTE $0xf0 // cmovg esi, eax 330 LONG $0xc0394166 // cmp r8w, ax 331 LONG $0xc04c0f44 // cmovl r8d, eax 332 LONG $0x01c38349 // add r11, 1 333 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 334 JNE LBB2_11 335 336 LBB2_12: 337 LONG $0x01894466 // mov word [rcx], r8w 338 WORD $0x8966; BYTE $0x32 // mov word [rdx], si 339 RET 340 341 LBB2_5: 342 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI2_0] */ 343 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI2_1] */ 344 WORD $0xc031 // xor eax, eax 345 LONG $0xd06f0f66 // movdqa xmm2, xmm0 346 LONG $0xd96f0f66 // movdqa xmm3, xmm1 347 LONG $0x01c0f641 // test r8b, 1 348 JNE LBB2_9 349 JMP LBB2_10 350 351 TEXT ·_uint16_max_min_sse4(SB), $0-32 352 353 MOVQ values+0(FP), DI 354 MOVQ length+8(FP), SI 355 MOVQ minout+16(FP), DX 356 MOVQ maxout+24(FP), CX 357 358 WORD $0xf685 // test esi, esi 359 JLE LBB3_1 360 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 361 WORD $0xfe83; BYTE $0x0f // cmp esi, 15 362 JA LBB3_4 363 LONG $0xffb84166; BYTE $0xff // mov r8w, -1 364 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 365 WORD $0xf631 // xor esi, esi 366 JMP LBB3_11 367 368 LBB3_1: 369 LONG $0xffb84166; BYTE $0xff // mov r8w, -1 370 WORD $0xf631 // xor esi, esi 371 JMP LBB3_12 372 373 LBB3_4: 374 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 375 LONG $0xf0e38341 // and r11d, -16 376 LONG $0xf0438d49 // lea rax, [r11 - 16] 377 WORD $0x8949; BYTE $0xc0 // mov r8, rax 378 LONG $0x04e8c149 // shr r8, 4 379 LONG $0x01c08349 // add r8, 1 380 WORD $0x8548; BYTE $0xc0 // test rax, rax 381 JE LBB3_5 382 WORD $0x894d; BYTE $0xc2 // mov r10, r8 383 LONG $0xfee28349 // and r10, -2 384 WORD $0xf749; BYTE $0xda // neg r10 385 LONG $0xc9ef0f66 // pxor xmm1, xmm1 386 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 387 WORD $0xc031 // xor eax, eax 388 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 389 LONG $0xdbef0f66 // pxor xmm3, xmm3 390 391 LBB3_7: 392 LONG $0x246f0ff3; BYTE $0x47 // movdqu xmm4, oword [rdi + 2*rax] 393 LONG $0x6c6f0ff3; WORD $0x1047 // movdqu xmm5, oword [rdi + 2*rax + 16] 394 LONG $0x746f0ff3; WORD $0x2047 // movdqu xmm6, oword [rdi + 2*rax + 32] 395 LONG $0x7c6f0ff3; WORD $0x3047 // movdqu xmm7, oword [rdi + 2*rax + 48] 396 LONG $0x3a380f66; BYTE $0xc4 // pminuw xmm0, xmm4 397 LONG $0x3a380f66; BYTE $0xd5 // pminuw xmm2, xmm5 398 LONG $0x3e380f66; BYTE $0xcc // pmaxuw xmm1, xmm4 399 LONG $0x3e380f66; BYTE $0xdd // pmaxuw xmm3, xmm5 400 LONG $0x3a380f66; BYTE $0xc6 // pminuw xmm0, xmm6 401 LONG $0x3a380f66; BYTE $0xd7 // pminuw xmm2, xmm7 402 LONG $0x3e380f66; BYTE $0xce // pmaxuw xmm1, xmm6 403 LONG $0x3e380f66; BYTE $0xdf // pmaxuw xmm3, xmm7 404 LONG $0x20c08348 // add rax, 32 405 LONG $0x02c28349 // add r10, 2 406 JNE LBB3_7 407 LONG $0x01c0f641 // test r8b, 1 408 JE LBB3_10 409 410 LBB3_9: 411 LONG $0x246f0ff3; BYTE $0x47 // movdqu xmm4, oword [rdi + 2*rax] 412 LONG $0x6c6f0ff3; WORD $0x1047 // movdqu xmm5, oword [rdi + 2*rax + 16] 413 LONG $0x3e380f66; BYTE $0xdd // pmaxuw xmm3, xmm5 414 LONG $0x3e380f66; BYTE $0xcc // pmaxuw xmm1, xmm4 415 LONG $0x3a380f66; BYTE $0xd5 // pminuw xmm2, xmm5 416 LONG $0x3a380f66; BYTE $0xc4 // pminuw xmm0, xmm4 417 418 LBB3_10: 419 LONG $0x3a380f66; BYTE $0xc2 // pminuw xmm0, xmm2 420 LONG $0x3e380f66; BYTE $0xcb // pmaxuw xmm1, xmm3 421 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 422 LONG $0xd1ef0f66 // pxor xmm2, xmm1 423 LONG $0x41380f66; BYTE $0xca // phminposuw xmm1, xmm2 424 LONG $0xce7e0f66 // movd esi, xmm1 425 WORD $0xd6f7 // not esi 426 LONG $0x41380f66; BYTE $0xc0 // phminposuw xmm0, xmm0 427 LONG $0x7e0f4166; BYTE $0xc0 // movd r8d, xmm0 428 WORD $0x394d; BYTE $0xcb // cmp r11, r9 429 JE LBB3_12 430 431 LBB3_11: 432 LONG $0x04b70f42; BYTE $0x5f // movzx eax, word [rdi + 2*r11] 433 LONG $0xc0394166 // cmp r8w, ax 434 LONG $0xc0430f44 // cmovae r8d, eax 435 WORD $0x3966; BYTE $0xc6 // cmp si, ax 436 WORD $0x460f; BYTE $0xf0 // cmovbe esi, eax 437 LONG $0x01c38349 // add r11, 1 438 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 439 JNE LBB3_11 440 441 LBB3_12: 442 WORD $0x8966; BYTE $0x31 // mov word [rcx], si 443 LONG $0x02894466 // mov word [rdx], r8w 444 RET 445 446 LBB3_5: 447 LONG $0xc9ef0f66 // pxor xmm1, xmm1 448 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 449 WORD $0xc031 // xor eax, eax 450 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 451 LONG $0xdbef0f66 // pxor xmm3, xmm3 452 LONG $0x01c0f641 // test r8b, 1 453 JNE LBB3_9 454 JMP LBB3_10 455 456 DATA LCDATA3<>+0x000(SB)/8, $0x8000000080000000 457 DATA LCDATA3<>+0x008(SB)/8, $0x8000000080000000 458 DATA LCDATA3<>+0x010(SB)/8, $0x7fffffff7fffffff 459 DATA LCDATA3<>+0x018(SB)/8, $0x7fffffff7fffffff 460 GLOBL LCDATA3<>(SB), 8, $32 461 462 TEXT ·_int32_max_min_sse4(SB), $0-32 463 464 MOVQ values+0(FP), DI 465 MOVQ length+8(FP), SI 466 MOVQ minout+16(FP), DX 467 MOVQ maxout+24(FP), CX 468 LEAQ LCDATA3<>(SB), BP 469 470 WORD $0xf685 // test esi, esi 471 JLE LBB4_1 472 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 473 WORD $0xfe83; BYTE $0x07 // cmp esi, 7 474 JA LBB4_6 475 LONG $0x000000b8; BYTE $0x80 // mov eax, -2147483648 476 LONG $0xffffb841; WORD $0x7fff // mov r8d, 2147483647 477 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 478 JMP LBB4_4 479 480 LBB4_1: 481 LONG $0xffffb841; WORD $0x7fff // mov r8d, 2147483647 482 LONG $0x000000b8; BYTE $0x80 // mov eax, -2147483648 483 JMP LBB4_13 484 485 LBB4_6: 486 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 487 LONG $0xf8e38341 // and r11d, -8 488 LONG $0xf8438d49 // lea rax, [r11 - 8] 489 WORD $0x8949; BYTE $0xc0 // mov r8, rax 490 LONG $0x03e8c149 // shr r8, 3 491 LONG $0x01c08349 // add r8, 1 492 WORD $0x8548; BYTE $0xc0 // test rax, rax 493 JE LBB4_7 494 WORD $0x894d; BYTE $0xc2 // mov r10, r8 495 LONG $0xfee28349 // and r10, -2 496 WORD $0xf749; BYTE $0xda // neg r10 497 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI4_0] */ 498 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI4_1] */ 499 WORD $0xc031 // xor eax, eax 500 LONG $0xd06f0f66 // movdqa xmm2, xmm0 501 LONG $0xd96f0f66 // movdqa xmm3, xmm1 502 503 LBB4_9: 504 LONG $0x246f0ff3; BYTE $0x87 // movdqu xmm4, oword [rdi + 4*rax] 505 LONG $0x6c6f0ff3; WORD $0x1087 // movdqu xmm5, oword [rdi + 4*rax + 16] 506 LONG $0x746f0ff3; WORD $0x2087 // movdqu xmm6, oword [rdi + 4*rax + 32] 507 LONG $0x7c6f0ff3; WORD $0x3087 // movdqu xmm7, oword [rdi + 4*rax + 48] 508 LONG $0x39380f66; BYTE $0xc4 // pminsd xmm0, xmm4 509 LONG $0x39380f66; BYTE $0xd5 // pminsd xmm2, xmm5 510 LONG $0x3d380f66; BYTE $0xcc // pmaxsd xmm1, xmm4 511 LONG $0x3d380f66; BYTE $0xdd // pmaxsd xmm3, xmm5 512 LONG $0x39380f66; BYTE $0xc6 // pminsd xmm0, xmm6 513 LONG $0x39380f66; BYTE $0xd7 // pminsd xmm2, xmm7 514 LONG $0x3d380f66; BYTE $0xce // pmaxsd xmm1, xmm6 515 LONG $0x3d380f66; BYTE $0xdf // pmaxsd xmm3, xmm7 516 LONG $0x10c08348 // add rax, 16 517 LONG $0x02c28349 // add r10, 2 518 JNE LBB4_9 519 LONG $0x01c0f641 // test r8b, 1 520 JE LBB4_12 521 522 LBB4_11: 523 LONG $0x246f0ff3; BYTE $0x87 // movdqu xmm4, oword [rdi + 4*rax] 524 LONG $0x6c6f0ff3; WORD $0x1087 // movdqu xmm5, oword [rdi + 4*rax + 16] 525 LONG $0x3d380f66; BYTE $0xdd // pmaxsd xmm3, xmm5 526 LONG $0x3d380f66; BYTE $0xcc // pmaxsd xmm1, xmm4 527 LONG $0x39380f66; BYTE $0xd5 // pminsd xmm2, xmm5 528 LONG $0x39380f66; BYTE $0xc4 // pminsd xmm0, xmm4 529 530 LBB4_12: 531 LONG $0x39380f66; BYTE $0xc2 // pminsd xmm0, xmm2 532 LONG $0x3d380f66; BYTE $0xcb // pmaxsd xmm1, xmm3 533 LONG $0xd1700f66; BYTE $0x4e // pshufd xmm2, xmm1, 78 534 LONG $0x3d380f66; BYTE $0xd1 // pmaxsd xmm2, xmm1 535 LONG $0xca700f66; BYTE $0xe5 // pshufd xmm1, xmm2, 229 536 LONG $0x3d380f66; BYTE $0xca // pmaxsd xmm1, xmm2 537 LONG $0xc87e0f66 // movd eax, xmm1 538 LONG $0xc8700f66; BYTE $0x4e // pshufd xmm1, xmm0, 78 539 LONG $0x39380f66; BYTE $0xc8 // pminsd xmm1, xmm0 540 LONG $0xc1700f66; BYTE $0xe5 // pshufd xmm0, xmm1, 229 541 LONG $0x39380f66; BYTE $0xc1 // pminsd xmm0, xmm1 542 LONG $0x7e0f4166; BYTE $0xc0 // movd r8d, xmm0 543 WORD $0x394d; BYTE $0xcb // cmp r11, r9 544 JE LBB4_13 545 546 LBB4_4: 547 WORD $0xc689 // mov esi, eax 548 549 LBB4_5: 550 LONG $0x9f048b42 // mov eax, dword [rdi + 4*r11] 551 WORD $0x3941; BYTE $0xc0 // cmp r8d, eax 552 LONG $0xc04f0f44 // cmovg r8d, eax 553 WORD $0xc639 // cmp esi, eax 554 WORD $0x4d0f; BYTE $0xc6 // cmovge eax, esi 555 LONG $0x01c38349 // add r11, 1 556 WORD $0xc689 // mov esi, eax 557 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 558 JNE LBB4_5 559 560 LBB4_13: 561 WORD $0x0189 // mov dword [rcx], eax 562 WORD $0x8944; BYTE $0x02 // mov dword [rdx], r8d 563 RET 564 565 LBB4_7: 566 LONG $0x4d6f0f66; BYTE $0x00 // movdqa xmm1, oword 0[rbp] /* [rip + .LCPI4_0] */ 567 LONG $0x456f0f66; BYTE $0x10 // movdqa xmm0, oword 16[rbp] /* [rip + .LCPI4_1] */ 568 WORD $0xc031 // xor eax, eax 569 LONG $0xd06f0f66 // movdqa xmm2, xmm0 570 LONG $0xd96f0f66 // movdqa xmm3, xmm1 571 LONG $0x01c0f641 // test r8b, 1 572 JNE LBB4_11 573 JMP LBB4_12 574 575 TEXT ·_uint32_max_min_sse4(SB), $0-32 576 577 MOVQ values+0(FP), DI 578 MOVQ length+8(FP), SI 579 MOVQ minout+16(FP), DX 580 MOVQ maxout+24(FP), CX 581 582 WORD $0xf685 // test esi, esi 583 JLE LBB5_1 584 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 585 WORD $0xfe83; BYTE $0x07 // cmp esi, 7 586 JA LBB5_6 587 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 588 LONG $0xffffb841; WORD $0xffff // mov r8d, -1 589 WORD $0xf631 // xor esi, esi 590 JMP LBB5_4 591 592 LBB5_1: 593 LONG $0xffffb841; WORD $0xffff // mov r8d, -1 594 WORD $0xf631 // xor esi, esi 595 JMP LBB5_13 596 597 LBB5_6: 598 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 599 LONG $0xf8e38341 // and r11d, -8 600 LONG $0xf8438d49 // lea rax, [r11 - 8] 601 WORD $0x8949; BYTE $0xc0 // mov r8, rax 602 LONG $0x03e8c149 // shr r8, 3 603 LONG $0x01c08349 // add r8, 1 604 WORD $0x8548; BYTE $0xc0 // test rax, rax 605 JE LBB5_7 606 WORD $0x894d; BYTE $0xc2 // mov r10, r8 607 LONG $0xfee28349 // and r10, -2 608 WORD $0xf749; BYTE $0xda // neg r10 609 LONG $0xc9ef0f66 // pxor xmm1, xmm1 610 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 611 WORD $0xc031 // xor eax, eax 612 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 613 LONG $0xdbef0f66 // pxor xmm3, xmm3 614 615 LBB5_9: 616 LONG $0x246f0ff3; BYTE $0x87 // movdqu xmm4, oword [rdi + 4*rax] 617 LONG $0x6c6f0ff3; WORD $0x1087 // movdqu xmm5, oword [rdi + 4*rax + 16] 618 LONG $0x746f0ff3; WORD $0x2087 // movdqu xmm6, oword [rdi + 4*rax + 32] 619 LONG $0x7c6f0ff3; WORD $0x3087 // movdqu xmm7, oword [rdi + 4*rax + 48] 620 LONG $0x3b380f66; BYTE $0xc4 // pminud xmm0, xmm4 621 LONG $0x3b380f66; BYTE $0xd5 // pminud xmm2, xmm5 622 LONG $0x3f380f66; BYTE $0xcc // pmaxud xmm1, xmm4 623 LONG $0x3f380f66; BYTE $0xdd // pmaxud xmm3, xmm5 624 LONG $0x3b380f66; BYTE $0xc6 // pminud xmm0, xmm6 625 LONG $0x3b380f66; BYTE $0xd7 // pminud xmm2, xmm7 626 LONG $0x3f380f66; BYTE $0xce // pmaxud xmm1, xmm6 627 LONG $0x3f380f66; BYTE $0xdf // pmaxud xmm3, xmm7 628 LONG $0x10c08348 // add rax, 16 629 LONG $0x02c28349 // add r10, 2 630 JNE LBB5_9 631 LONG $0x01c0f641 // test r8b, 1 632 JE LBB5_12 633 634 LBB5_11: 635 LONG $0x246f0ff3; BYTE $0x87 // movdqu xmm4, oword [rdi + 4*rax] 636 LONG $0x6c6f0ff3; WORD $0x1087 // movdqu xmm5, oword [rdi + 4*rax + 16] 637 LONG $0x3f380f66; BYTE $0xdd // pmaxud xmm3, xmm5 638 LONG $0x3f380f66; BYTE $0xcc // pmaxud xmm1, xmm4 639 LONG $0x3b380f66; BYTE $0xd5 // pminud xmm2, xmm5 640 LONG $0x3b380f66; BYTE $0xc4 // pminud xmm0, xmm4 641 642 LBB5_12: 643 LONG $0x3b380f66; BYTE $0xc2 // pminud xmm0, xmm2 644 LONG $0x3f380f66; BYTE $0xcb // pmaxud xmm1, xmm3 645 LONG $0xd1700f66; BYTE $0x4e // pshufd xmm2, xmm1, 78 646 LONG $0x3f380f66; BYTE $0xd1 // pmaxud xmm2, xmm1 647 LONG $0xca700f66; BYTE $0xe5 // pshufd xmm1, xmm2, 229 648 LONG $0x3f380f66; BYTE $0xca // pmaxud xmm1, xmm2 649 LONG $0xce7e0f66 // movd esi, xmm1 650 LONG $0xc8700f66; BYTE $0x4e // pshufd xmm1, xmm0, 78 651 LONG $0x3b380f66; BYTE $0xc8 // pminud xmm1, xmm0 652 LONG $0xc1700f66; BYTE $0xe5 // pshufd xmm0, xmm1, 229 653 LONG $0x3b380f66; BYTE $0xc1 // pminud xmm0, xmm1 654 LONG $0x7e0f4166; BYTE $0xc0 // movd r8d, xmm0 655 WORD $0x394d; BYTE $0xcb // cmp r11, r9 656 JE LBB5_13 657 658 LBB5_4: 659 WORD $0xf089 // mov eax, esi 660 661 LBB5_5: 662 LONG $0x9f348b42 // mov esi, dword [rdi + 4*r11] 663 WORD $0x3941; BYTE $0xf0 // cmp r8d, esi 664 LONG $0xc6430f44 // cmovae r8d, esi 665 WORD $0xf039 // cmp eax, esi 666 WORD $0x470f; BYTE $0xf0 // cmova esi, eax 667 LONG $0x01c38349 // add r11, 1 668 WORD $0xf089 // mov eax, esi 669 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 670 JNE LBB5_5 671 672 LBB5_13: 673 WORD $0x3189 // mov dword [rcx], esi 674 WORD $0x8944; BYTE $0x02 // mov dword [rdx], r8d 675 RET 676 677 LBB5_7: 678 LONG $0xc9ef0f66 // pxor xmm1, xmm1 679 LONG $0xc0760f66 // pcmpeqd xmm0, xmm0 680 WORD $0xc031 // xor eax, eax 681 LONG $0xd2760f66 // pcmpeqd xmm2, xmm2 682 LONG $0xdbef0f66 // pxor xmm3, xmm3 683 LONG $0x01c0f641 // test r8b, 1 684 JNE LBB5_11 685 JMP LBB5_12 686 687 DATA LCDATA4<>+0x000(SB)/8, $0x8000000000000000 688 DATA LCDATA4<>+0x008(SB)/8, $0x8000000000000000 689 DATA LCDATA4<>+0x010(SB)/8, $0x7fffffffffffffff 690 DATA LCDATA4<>+0x018(SB)/8, $0x7fffffffffffffff 691 GLOBL LCDATA4<>(SB), 8, $32 692 693 TEXT ·_int64_max_min_sse4(SB), $0-32 694 695 MOVQ values+0(FP), DI 696 MOVQ length+8(FP), SI 697 MOVQ minout+16(FP), DX 698 MOVQ maxout+24(FP), CX 699 LEAQ LCDATA4<>(SB), BP 700 701 QUAD $0xffffffffffffb849; WORD $0x7fff // mov r8, 9223372036854775807 702 WORD $0xf685 // test esi, esi 703 JLE LBB6_1 704 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 705 WORD $0xfe83; BYTE $0x03 // cmp esi, 3 706 JA LBB6_6 707 LONG $0x01708d49 // lea rsi, [r8 + 1] 708 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 709 JMP LBB6_4 710 711 LBB6_1: 712 LONG $0x01708d49 // lea rsi, [r8 + 1] 713 JMP LBB6_13 714 715 LBB6_6: 716 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 717 LONG $0xfce38341 // and r11d, -4 718 LONG $0xfc438d49 // lea rax, [r11 - 4] 719 WORD $0x8949; BYTE $0xc0 // mov r8, rax 720 LONG $0x02e8c149 // shr r8, 2 721 LONG $0x01c08349 // add r8, 1 722 WORD $0x8548; BYTE $0xc0 // test rax, rax 723 JE LBB6_7 724 WORD $0x894d; BYTE $0xc2 // mov r10, r8 725 LONG $0xfee28349 // and r10, -2 726 WORD $0xf749; BYTE $0xda // neg r10 727 LONG $0x6f0f4466; WORD $0x004d // movdqa xmm9, oword 0[rbp] /* [rip + .LCPI6_0] */ 728 LONG $0x6f0f4466; WORD $0x1045 // movdqa xmm8, oword 16[rbp] /* [rip + .LCPI6_1] */ 729 WORD $0xc031 // xor eax, eax 730 LONG $0x6f0f4166; BYTE $0xd0 // movdqa xmm2, xmm8 731 LONG $0x6f0f4166; BYTE $0xf1 // movdqa xmm6, xmm9 732 733 LBB6_9: 734 LONG $0x3c6f0ff3; BYTE $0xc7 // movdqu xmm7, oword [rdi + 8*rax] 735 LONG $0xc76f0f66 // movdqa xmm0, xmm7 736 LONG $0x380f4166; WORD $0xc037 // pcmpgtq xmm0, xmm8 737 LONG $0xe76f0f66 // movdqa xmm4, xmm7 738 LONG $0x380f4166; WORD $0xe015 // blendvpd xmm4, xmm8, xmm0 739 LONG $0x4c6f0ff3; WORD $0x10c7 // movdqu xmm1, oword [rdi + 8*rax + 16] 740 LONG $0xc16f0f66 // movdqa xmm0, xmm1 741 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 742 LONG $0xe96f0f66 // movdqa xmm5, xmm1 743 LONG $0x15380f66; BYTE $0xea // blendvpd xmm5, xmm2, xmm0 744 LONG $0x6f0f4166; BYTE $0xc1 // movdqa xmm0, xmm9 745 LONG $0x37380f66; BYTE $0xc7 // pcmpgtq xmm0, xmm7 746 LONG $0x380f4166; WORD $0xf915 // blendvpd xmm7, xmm9, xmm0 747 LONG $0xc66f0f66 // movdqa xmm0, xmm6 748 LONG $0x37380f66; BYTE $0xc1 // pcmpgtq xmm0, xmm1 749 LONG $0x15380f66; BYTE $0xce // blendvpd xmm1, xmm6, xmm0 750 LONG $0x5c6f0ff3; WORD $0x20c7 // movdqu xmm3, oword [rdi + 8*rax + 32] 751 LONG $0xc36f0f66 // movdqa xmm0, xmm3 752 LONG $0x37380f66; BYTE $0xc4 // pcmpgtq xmm0, xmm4 753 LONG $0x6f0f4466; BYTE $0xc3 // movdqa xmm8, xmm3 754 LONG $0x380f4466; WORD $0xc415 // blendvpd xmm8, xmm4, xmm0 755 LONG $0x646f0ff3; WORD $0x30c7 // movdqu xmm4, oword [rdi + 8*rax + 48] 756 LONG $0xc46f0f66 // movdqa xmm0, xmm4 757 LONG $0x37380f66; BYTE $0xc5 // pcmpgtq xmm0, xmm5 758 LONG $0xd46f0f66 // movdqa xmm2, xmm4 759 LONG $0x15380f66; BYTE $0xd5 // blendvpd xmm2, xmm5, xmm0 760 LONG $0xc7280f66 // movapd xmm0, xmm7 761 LONG $0x37380f66; BYTE $0xc3 // pcmpgtq xmm0, xmm3 762 LONG $0x15380f66; BYTE $0xdf // blendvpd xmm3, xmm7, xmm0 763 LONG $0xc1280f66 // movapd xmm0, xmm1 764 LONG $0x37380f66; BYTE $0xc4 // pcmpgtq xmm0, xmm4 765 LONG $0x15380f66; BYTE $0xe1 // blendvpd xmm4, xmm1, xmm0 766 LONG $0x08c08348 // add rax, 8 767 LONG $0x280f4466; BYTE $0xcb // movapd xmm9, xmm3 768 LONG $0xf4280f66 // movapd xmm6, xmm4 769 LONG $0x02c28349 // add r10, 2 770 JNE LBB6_9 771 LONG $0x01c0f641 // test r8b, 1 772 JE LBB6_12 773 774 LBB6_11: 775 LONG $0x4c6f0ff3; WORD $0x10c7 // movdqu xmm1, oword [rdi + 8*rax + 16] 776 LONG $0xc4280f66 // movapd xmm0, xmm4 777 LONG $0x37380f66; BYTE $0xc1 // pcmpgtq xmm0, xmm1 778 LONG $0xe96f0f66 // movdqa xmm5, xmm1 779 LONG $0x15380f66; BYTE $0xec // blendvpd xmm5, xmm4, xmm0 780 LONG $0x246f0ff3; BYTE $0xc7 // movdqu xmm4, oword [rdi + 8*rax] 781 LONG $0xc3280f66 // movapd xmm0, xmm3 782 LONG $0x37380f66; BYTE $0xc4 // pcmpgtq xmm0, xmm4 783 LONG $0xf46f0f66 // movdqa xmm6, xmm4 784 LONG $0x15380f66; BYTE $0xf3 // blendvpd xmm6, xmm3, xmm0 785 LONG $0xc16f0f66 // movdqa xmm0, xmm1 786 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 787 LONG $0x15380f66; BYTE $0xca // blendvpd xmm1, xmm2, xmm0 788 LONG $0xc46f0f66 // movdqa xmm0, xmm4 789 LONG $0x380f4166; WORD $0xc037 // pcmpgtq xmm0, xmm8 790 LONG $0x380f4166; WORD $0xe015 // blendvpd xmm4, xmm8, xmm0 791 LONG $0x280f4466; BYTE $0xc4 // movapd xmm8, xmm4 792 LONG $0xd1280f66 // movapd xmm2, xmm1 793 LONG $0xde280f66 // movapd xmm3, xmm6 794 LONG $0xe5280f66 // movapd xmm4, xmm5 795 796 LBB6_12: 797 LONG $0xc3280f66 // movapd xmm0, xmm3 798 LONG $0x37380f66; BYTE $0xc4 // pcmpgtq xmm0, xmm4 799 LONG $0x15380f66; BYTE $0xe3 // blendvpd xmm4, xmm3, xmm0 800 LONG $0xcc700f66; BYTE $0x4e // pshufd xmm1, xmm4, 78 801 LONG $0xc46f0f66 // movdqa xmm0, xmm4 802 LONG $0x37380f66; BYTE $0xc1 // pcmpgtq xmm0, xmm1 803 LONG $0x15380f66; BYTE $0xcc // blendvpd xmm1, xmm4, xmm0 804 LONG $0x7e0f4866; BYTE $0xce // movq rsi, xmm1 805 LONG $0xc26f0f66 // movdqa xmm0, xmm2 806 LONG $0x380f4166; WORD $0xc037 // pcmpgtq xmm0, xmm8 807 LONG $0x380f4166; WORD $0xd015 // blendvpd xmm2, xmm8, xmm0 808 LONG $0xca700f66; BYTE $0x4e // pshufd xmm1, xmm2, 78 809 LONG $0xc16f0f66 // movdqa xmm0, xmm1 810 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 811 LONG $0x15380f66; BYTE $0xca // blendvpd xmm1, xmm2, xmm0 812 LONG $0x7e0f4966; BYTE $0xc8 // movq r8, xmm1 813 WORD $0x394d; BYTE $0xcb // cmp r11, r9 814 JE LBB6_13 815 816 LBB6_4: 817 WORD $0x8948; BYTE $0xf0 // mov rax, rsi 818 819 LBB6_5: 820 LONG $0xdf348b4a // mov rsi, qword [rdi + 8*r11] 821 WORD $0x3949; BYTE $0xf0 // cmp r8, rsi 822 LONG $0xc64f0f4c // cmovg r8, rsi 823 WORD $0x3948; BYTE $0xf0 // cmp rax, rsi 824 LONG $0xf04d0f48 // cmovge rsi, rax 825 LONG $0x01c38349 // add r11, 1 826 WORD $0x8948; BYTE $0xf0 // mov rax, rsi 827 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 828 JNE LBB6_5 829 830 LBB6_13: 831 WORD $0x8948; BYTE $0x31 // mov qword [rcx], rsi 832 WORD $0x894c; BYTE $0x02 // mov qword [rdx], r8 833 RET 834 835 LBB6_7: 836 LONG $0x5d280f66; BYTE $0x00 // movapd xmm3, oword 0[rbp] /* [rip + .LCPI6_0] */ 837 LONG $0x6f0f4466; WORD $0x1045 // movdqa xmm8, oword 16[rbp] /* [rip + .LCPI6_1] */ 838 WORD $0xc031 // xor eax, eax 839 LONG $0x6f0f4166; BYTE $0xd0 // movdqa xmm2, xmm8 840 LONG $0xe3280f66 // movapd xmm4, xmm3 841 LONG $0x01c0f641 // test r8b, 1 842 JNE LBB6_11 843 JMP LBB6_12 844 845 DATA LCDATA5<>+0x000(SB)/8, $0x8000000000000000 846 DATA LCDATA5<>+0x008(SB)/8, $0x8000000000000000 847 GLOBL LCDATA5<>(SB), 8, $16 848 849 TEXT ·_uint64_max_min_sse4(SB), $0-32 850 851 MOVQ values+0(FP), DI 852 MOVQ length+8(FP), SI 853 MOVQ minout+16(FP), DX 854 MOVQ maxout+24(FP), CX 855 LEAQ LCDATA5<>(SB), BP 856 857 WORD $0xf685 // test esi, esi 858 JLE LBB7_1 859 WORD $0x8941; BYTE $0xf1 // mov r9d, esi 860 WORD $0xfe83; BYTE $0x03 // cmp esi, 3 861 JA LBB7_6 862 LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // mov r8, -1 863 WORD $0x3145; BYTE $0xdb // xor r11d, r11d 864 WORD $0xc031 // xor eax, eax 865 JMP LBB7_4 866 867 LBB7_1: 868 LONG $0xffc0c749; WORD $0xffff; BYTE $0xff // mov r8, -1 869 WORD $0xc031 // xor eax, eax 870 JMP LBB7_13 871 872 LBB7_6: 873 WORD $0x8945; BYTE $0xcb // mov r11d, r9d 874 LONG $0xfce38341 // and r11d, -4 875 LONG $0xfc438d49 // lea rax, [r11 - 4] 876 WORD $0x8949; BYTE $0xc0 // mov r8, rax 877 LONG $0x02e8c149 // shr r8, 2 878 LONG $0x01c08349 // add r8, 1 879 WORD $0x8548; BYTE $0xc0 // test rax, rax 880 JE LBB7_7 881 WORD $0x894d; BYTE $0xc2 // mov r10, r8 882 LONG $0xfee28349 // and r10, -2 883 WORD $0xf749; BYTE $0xda // neg r10 884 LONG $0xef0f4566; BYTE $0xc9 // pxor xmm9, xmm9 885 LONG $0x760f4566; BYTE $0xd2 // pcmpeqd xmm10, xmm10 886 WORD $0xc031 // xor eax, eax 887 LONG $0x6f0f4466; WORD $0x0045 // movdqa xmm8, oword 0[rbp] /* [rip + .LCPI7_0] */ 888 LONG $0x760f4566; BYTE $0xdb // pcmpeqd xmm11, xmm11 889 LONG $0xef0f4566; BYTE $0xe4 // pxor xmm12, xmm12 890 891 LBB7_9: 892 LONG $0x6f0f4166; BYTE $0xd2 // movdqa xmm2, xmm10 893 LONG $0xef0f4166; BYTE $0xd0 // pxor xmm2, xmm8 894 LONG $0x246f0ff3; BYTE $0xc7 // movdqu xmm4, oword [rdi + 8*rax] 895 LONG $0x6c6f0ff3; WORD $0x10c7 // movdqu xmm5, oword [rdi + 8*rax + 16] 896 LONG $0x6f0f44f3; WORD $0xc76c; BYTE $0x20 // movdqu xmm13, oword [rdi + 8*rax + 32] 897 LONG $0xc46f0f66 // movdqa xmm0, xmm4 898 LONG $0xef0f4166; BYTE $0xc0 // pxor xmm0, xmm8 899 LONG $0x6f0f4166; BYTE $0xc9 // movdqa xmm1, xmm9 900 LONG $0xef0f4166; BYTE $0xc8 // pxor xmm1, xmm8 901 LONG $0x37380f66; BYTE $0xc8 // pcmpgtq xmm1, xmm0 902 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 903 LONG $0xdc6f0f66 // movdqa xmm3, xmm4 904 LONG $0x380f4166; WORD $0xda15 // blendvpd xmm3, xmm10, xmm0 905 LONG $0x746f0ff3; WORD $0x30c7 // movdqu xmm6, oword [rdi + 8*rax + 48] 906 LONG $0x6f0f4166; BYTE $0xfb // movdqa xmm7, xmm11 907 LONG $0xef0f4166; BYTE $0xf8 // pxor xmm7, xmm8 908 LONG $0xc56f0f66 // movdqa xmm0, xmm5 909 LONG $0xef0f4166; BYTE $0xc0 // pxor xmm0, xmm8 910 LONG $0x6f0f4166; BYTE $0xd4 // movdqa xmm2, xmm12 911 LONG $0xef0f4166; BYTE $0xd0 // pxor xmm2, xmm8 912 LONG $0x37380f66; BYTE $0xd0 // pcmpgtq xmm2, xmm0 913 LONG $0x37380f66; BYTE $0xc7 // pcmpgtq xmm0, xmm7 914 LONG $0xfd6f0f66 // movdqa xmm7, xmm5 915 LONG $0x380f4166; WORD $0xfb15 // blendvpd xmm7, xmm11, xmm0 916 LONG $0xc16f0f66 // movdqa xmm0, xmm1 917 LONG $0x380f4166; WORD $0xe115 // blendvpd xmm4, xmm9, xmm0 918 LONG $0xc26f0f66 // movdqa xmm0, xmm2 919 LONG $0x380f4166; WORD $0xec15 // blendvpd xmm5, xmm12, xmm0 920 LONG $0xd3280f66 // movapd xmm2, xmm3 921 LONG $0x570f4166; BYTE $0xd0 // xorpd xmm2, xmm8 922 LONG $0x6f0f4166; BYTE $0xc5 // movdqa xmm0, xmm13 923 LONG $0xef0f4166; BYTE $0xc0 // pxor xmm0, xmm8 924 LONG $0xcc280f66 // movapd xmm1, xmm4 925 LONG $0x570f4166; BYTE $0xc8 // xorpd xmm1, xmm8 926 LONG $0x37380f66; BYTE $0xc8 // pcmpgtq xmm1, xmm0 927 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 928 LONG $0x6f0f4566; BYTE $0xd5 // movdqa xmm10, xmm13 929 LONG $0x380f4466; WORD $0xd315 // blendvpd xmm10, xmm3, xmm0 930 LONG $0xdf280f66 // movapd xmm3, xmm7 931 LONG $0x570f4166; BYTE $0xd8 // xorpd xmm3, xmm8 932 LONG $0xc66f0f66 // movdqa xmm0, xmm6 933 LONG $0xef0f4166; BYTE $0xc0 // pxor xmm0, xmm8 934 LONG $0xd5280f66 // movapd xmm2, xmm5 935 LONG $0x570f4166; BYTE $0xd0 // xorpd xmm2, xmm8 936 LONG $0x37380f66; BYTE $0xd0 // pcmpgtq xmm2, xmm0 937 LONG $0x37380f66; BYTE $0xc3 // pcmpgtq xmm0, xmm3 938 LONG $0x6f0f4466; BYTE $0xde // movdqa xmm11, xmm6 939 LONG $0x380f4466; WORD $0xdf15 // blendvpd xmm11, xmm7, xmm0 940 LONG $0xc16f0f66 // movdqa xmm0, xmm1 941 LONG $0x380f4466; WORD $0xec15 // blendvpd xmm13, xmm4, xmm0 942 LONG $0xc26f0f66 // movdqa xmm0, xmm2 943 LONG $0x15380f66; BYTE $0xf5 // blendvpd xmm6, xmm5, xmm0 944 LONG $0x08c08348 // add rax, 8 945 LONG $0x280f4566; BYTE $0xcd // movapd xmm9, xmm13 946 LONG $0x280f4466; BYTE $0xe6 // movapd xmm12, xmm6 947 LONG $0x02c28349 // add r10, 2 948 JNE LBB7_9 949 LONG $0x01c0f641 // test r8b, 1 950 JE LBB7_12 951 952 LBB7_11: 953 LONG $0x24100f66; BYTE $0xc7 // movupd xmm4, oword [rdi + 8*rax] 954 LONG $0x5c100f66; WORD $0x10c7 // movupd xmm3, oword [rdi + 8*rax + 16] 955 LONG $0x6d280f66; BYTE $0x00 // movapd xmm5, oword 0[rbp] /* [rip + .LCPI7_0] */ 956 LONG $0xc6280f66 // movapd xmm0, xmm6 957 LONG $0xc5570f66 // xorpd xmm0, xmm5 958 LONG $0xcb280f66 // movapd xmm1, xmm3 959 LONG $0xcd570f66 // xorpd xmm1, xmm5 960 LONG $0x37380f66; BYTE $0xc1 // pcmpgtq xmm0, xmm1 961 LONG $0xfb280f66 // movapd xmm7, xmm3 962 LONG $0x15380f66; BYTE $0xfe // blendvpd xmm7, xmm6, xmm0 963 LONG $0x280f4166; BYTE $0xc5 // movapd xmm0, xmm13 964 LONG $0xc5570f66 // xorpd xmm0, xmm5 965 LONG $0xd4280f66 // movapd xmm2, xmm4 966 LONG $0xd5570f66 // xorpd xmm2, xmm5 967 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 968 LONG $0xf4280f66 // movapd xmm6, xmm4 969 LONG $0x380f4166; WORD $0xf515 // blendvpd xmm6, xmm13, xmm0 970 LONG $0x280f4166; BYTE $0xc3 // movapd xmm0, xmm11 971 LONG $0xc5570f66 // xorpd xmm0, xmm5 972 LONG $0x37380f66; BYTE $0xc8 // pcmpgtq xmm1, xmm0 973 LONG $0xc16f0f66 // movdqa xmm0, xmm1 974 LONG $0x380f4166; WORD $0xdb15 // blendvpd xmm3, xmm11, xmm0 975 LONG $0x570f4166; BYTE $0xea // xorpd xmm5, xmm10 976 LONG $0x37380f66; BYTE $0xd5 // pcmpgtq xmm2, xmm5 977 LONG $0xc26f0f66 // movdqa xmm0, xmm2 978 LONG $0x380f4166; WORD $0xe215 // blendvpd xmm4, xmm10, xmm0 979 LONG $0x280f4466; BYTE $0xd4 // movapd xmm10, xmm4 980 LONG $0x280f4466; BYTE $0xdb // movapd xmm11, xmm3 981 LONG $0x280f4466; BYTE $0xee // movapd xmm13, xmm6 982 LONG $0xf7280f66 // movapd xmm6, xmm7 983 984 LBB7_12: 985 LONG $0x4d280f66; BYTE $0x00 // movapd xmm1, oword 0[rbp] /* [rip + .LCPI7_0] */ 986 LONG $0xd6280f66 // movapd xmm2, xmm6 987 LONG $0xd1570f66 // xorpd xmm2, xmm1 988 LONG $0x280f4166; BYTE $0xc5 // movapd xmm0, xmm13 989 LONG $0xc1570f66 // xorpd xmm0, xmm1 990 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 991 LONG $0x380f4166; WORD $0xf515 // blendvpd xmm6, xmm13, xmm0 992 LONG $0xd6700f66; BYTE $0x4e // pshufd xmm2, xmm6, 78 993 LONG $0xc6280f66 // movapd xmm0, xmm6 994 LONG $0xc1570f66 // xorpd xmm0, xmm1 995 LONG $0xda6f0f66 // movdqa xmm3, xmm2 996 LONG $0xd9ef0f66 // pxor xmm3, xmm1 997 LONG $0x37380f66; BYTE $0xc3 // pcmpgtq xmm0, xmm3 998 LONG $0x15380f66; BYTE $0xd6 // blendvpd xmm2, xmm6, xmm0 999 LONG $0x7e0f4866; BYTE $0xd0 // movq rax, xmm2 1000 LONG $0x6f0f4166; BYTE $0xd2 // movdqa xmm2, xmm10 1001 LONG $0xd1ef0f66 // pxor xmm2, xmm1 1002 LONG $0x6f0f4166; BYTE $0xc3 // movdqa xmm0, xmm11 1003 LONG $0xc1ef0f66 // pxor xmm0, xmm1 1004 LONG $0x37380f66; BYTE $0xc2 // pcmpgtq xmm0, xmm2 1005 LONG $0x380f4566; WORD $0xda15 // blendvpd xmm11, xmm10, xmm0 1006 LONG $0x700f4166; WORD $0x4ed3 // pshufd xmm2, xmm11, 78 1007 LONG $0x6f0f4166; BYTE $0xc3 // movdqa xmm0, xmm11 1008 LONG $0xc1ef0f66 // pxor xmm0, xmm1 1009 LONG $0xcaef0f66 // pxor xmm1, xmm2 1010 LONG $0x37380f66; BYTE $0xc8 // pcmpgtq xmm1, xmm0 1011 LONG $0xc16f0f66 // movdqa xmm0, xmm1 1012 LONG $0x380f4166; WORD $0xd315 // blendvpd xmm2, xmm11, xmm0 1013 LONG $0x7e0f4966; BYTE $0xd0 // movq r8, xmm2 1014 WORD $0x394d; BYTE $0xcb // cmp r11, r9 1015 JE LBB7_13 1016 1017 LBB7_4: 1018 WORD $0x8948; BYTE $0xc6 // mov rsi, rax 1019 1020 LBB7_5: 1021 LONG $0xdf048b4a // mov rax, qword [rdi + 8*r11] 1022 WORD $0x3949; BYTE $0xc0 // cmp r8, rax 1023 LONG $0xc0430f4c // cmovae r8, rax 1024 WORD $0x3948; BYTE $0xc6 // cmp rsi, rax 1025 LONG $0xc6470f48 // cmova rax, rsi 1026 LONG $0x01c38349 // add r11, 1 1027 WORD $0x8948; BYTE $0xc6 // mov rsi, rax 1028 WORD $0x394d; BYTE $0xd9 // cmp r9, r11 1029 JNE LBB7_5 1030 1031 LBB7_13: 1032 WORD $0x8948; BYTE $0x01 // mov qword [rcx], rax 1033 WORD $0x894c; BYTE $0x02 // mov qword [rdx], r8 1034 RET 1035 1036 LBB7_7: 1037 LONG $0x570f4566; BYTE $0xed // xorpd xmm13, xmm13 1038 LONG $0x760f4566; BYTE $0xd2 // pcmpeqd xmm10, xmm10 1039 WORD $0xc031 // xor eax, eax 1040 LONG $0x760f4566; BYTE $0xdb // pcmpeqd xmm11, xmm11 1041 LONG $0xf6570f66 // xorpd xmm6, xmm6 1042 LONG $0x01c0f641 // test r8b, 1 1043 JNE LBB7_11 1044 JMP LBB7_12