// Code generated by mkpreempt.go; DO NOT EDIT. #include "go_asm.h" #include "go_tls.h" #include "asm_amd64.h" #include "textflag.h" TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0 PUSHQ BP MOVQ SP, BP // Save flags before clobbering them PUSHFQ // obj doesn't understand ADD/SUB on SP, but does understand ADJSP ADJSP $112 // But vet doesn't know ADJSP, so suppress vet stack checking NOP SP // Save GPs MOVQ AX, 0(SP) MOVQ CX, 8(SP) MOVQ DX, 16(SP) MOVQ BX, 24(SP) MOVQ SI, 32(SP) MOVQ DI, 40(SP) MOVQ R8, 48(SP) MOVQ R9, 56(SP) MOVQ R10, 64(SP) MOVQ R11, 72(SP) MOVQ R12, 80(SP) MOVQ R13, 88(SP) MOVQ R14, 96(SP) MOVQ R15, 104(SP) // Save extended register state to p.xRegs.scratch // Don't make assumptions about ABI register state. See mkpreempt.go get_tls(CX) MOVQ g(CX), R14 MOVQ g_m(R14), AX MOVQ m_p(AX), AX LEAQ (p_xRegs+xRegPerP_scratch)(AX), AX #ifdef GOEXPERIMENT_simd CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1 JE saveAVX512 CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1 JE saveAVX2 #endif saveSSE: MOVUPS X0, 0(AX) MOVUPS X1, 64(AX) MOVUPS X2, 128(AX) MOVUPS X3, 192(AX) MOVUPS X4, 256(AX) MOVUPS X5, 320(AX) MOVUPS X6, 384(AX) MOVUPS X7, 448(AX) MOVUPS X8, 512(AX) MOVUPS X9, 576(AX) MOVUPS X10, 640(AX) MOVUPS X11, 704(AX) MOVUPS X12, 768(AX) MOVUPS X13, 832(AX) MOVUPS X14, 896(AX) MOVUPS X15, 960(AX) JMP preempt saveAVX2: VMOVDQU Y0, 0(AX) VMOVDQU Y1, 64(AX) VMOVDQU Y2, 128(AX) VMOVDQU Y3, 192(AX) VMOVDQU Y4, 256(AX) VMOVDQU Y5, 320(AX) VMOVDQU Y6, 384(AX) VMOVDQU Y7, 448(AX) VMOVDQU Y8, 512(AX) VMOVDQU Y9, 576(AX) VMOVDQU Y10, 640(AX) VMOVDQU Y11, 704(AX) VMOVDQU Y12, 768(AX) VMOVDQU Y13, 832(AX) VMOVDQU Y14, 896(AX) VMOVDQU Y15, 960(AX) JMP preempt saveAVX512: VMOVDQU64 Z0, 0(AX) VMOVDQU64 Z1, 64(AX) VMOVDQU64 Z2, 128(AX) VMOVDQU64 Z3, 192(AX) VMOVDQU64 Z4, 256(AX) VMOVDQU64 Z5, 320(AX) VMOVDQU64 Z6, 384(AX) VMOVDQU64 Z7, 448(AX) VMOVDQU64 Z8, 512(AX) VMOVDQU64 Z9, 576(AX) VMOVDQU64 Z10, 640(AX) VMOVDQU64 Z11, 704(AX) VMOVDQU64 Z12, 768(AX) VMOVDQU64 Z13, 832(AX) VMOVDQU64 Z14, 896(AX) VMOVDQU64 Z15, 960(AX) KMOVQ K0, 1024(AX) KMOVQ K1, 1032(AX) KMOVQ K2, 1040(AX) KMOVQ K3, 1048(AX) KMOVQ K4, 1056(AX) KMOVQ K5, 1064(AX) KMOVQ K6, 1072(AX) KMOVQ K7, 1080(AX) JMP preempt preempt: CALL ·asyncPreempt2(SB) // Restore non-GPs from *p.xRegs.cache MOVQ g_m(R14), AX MOVQ m_p(AX), AX MOVQ (p_xRegs+xRegPerP_cache)(AX), AX #ifdef GOEXPERIMENT_simd CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1 JE restoreAVX512 CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1 JE restoreAVX2 #endif restoreSSE: MOVUPS 960(AX), X15 MOVUPS 896(AX), X14 MOVUPS 832(AX), X13 MOVUPS 768(AX), X12 MOVUPS 704(AX), X11 MOVUPS 640(AX), X10 MOVUPS 576(AX), X9 MOVUPS 512(AX), X8 MOVUPS 448(AX), X7 MOVUPS 384(AX), X6 MOVUPS 320(AX), X5 MOVUPS 256(AX), X4 MOVUPS 192(AX), X3 MOVUPS 128(AX), X2 MOVUPS 64(AX), X1 MOVUPS 0(AX), X0 JMP restoreGPs restoreAVX2: VMOVDQU 960(AX), Y15 VMOVDQU 896(AX), Y14 VMOVDQU 832(AX), Y13 VMOVDQU 768(AX), Y12 VMOVDQU 704(AX), Y11 VMOVDQU 640(AX), Y10 VMOVDQU 576(AX), Y9 VMOVDQU 512(AX), Y8 VMOVDQU 448(AX), Y7 VMOVDQU 384(AX), Y6 VMOVDQU 320(AX), Y5 VMOVDQU 256(AX), Y4 VMOVDQU 192(AX), Y3 VMOVDQU 128(AX), Y2 VMOVDQU 64(AX), Y1 VMOVDQU 0(AX), Y0 JMP restoreGPs restoreAVX512: KMOVQ 1080(AX), K7 KMOVQ 1072(AX), K6 KMOVQ 1064(AX), K5 KMOVQ 1056(AX), K4 KMOVQ 1048(AX), K3 KMOVQ 1040(AX), K2 KMOVQ 1032(AX), K1 KMOVQ 1024(AX), K0 VMOVDQU64 960(AX), Z15 VMOVDQU64 896(AX), Z14 VMOVDQU64 832(AX), Z13 VMOVDQU64 768(AX), Z12 VMOVDQU64 704(AX), Z11 VMOVDQU64 640(AX), Z10 VMOVDQU64 576(AX), Z9 VMOVDQU64 512(AX), Z8 VMOVDQU64 448(AX), Z7 VMOVDQU64 384(AX), Z6 VMOVDQU64 320(AX), Z5 VMOVDQU64 256(AX), Z4 VMOVDQU64 192(AX), Z3 VMOVDQU64 128(AX), Z2 VMOVDQU64 64(AX), Z1 VMOVDQU64 0(AX), Z0 JMP restoreGPs restoreGPs: // Restore GPs MOVQ 104(SP), R15 MOVQ 96(SP), R14 MOVQ 88(SP), R13 MOVQ 80(SP), R12 MOVQ 72(SP), R11 MOVQ 64(SP), R10 MOVQ 56(SP), R9 MOVQ 48(SP), R8 MOVQ 40(SP), DI MOVQ 32(SP), SI MOVQ 24(SP), BX MOVQ 16(SP), DX MOVQ 8(SP), CX MOVQ 0(SP), AX ADJSP $-112 POPFQ POPQ BP RET