// 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
