Text file src/runtime/preempt_amd64.s

     1  // Code generated by mkpreempt.go; DO NOT EDIT.
     2  
     3  #include "go_asm.h"
     4  #include "go_tls.h"
     5  #include "asm_amd64.h"
     6  #include "textflag.h"
     7  
     8  TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
     9  	PUSHQ BP
    10  	MOVQ SP, BP
    11  	// Save flags before clobbering them
    12  	PUSHFQ
    13  	// obj doesn't understand ADD/SUB on SP, but does understand ADJSP
    14  	ADJSP $112
    15  	// But vet doesn't know ADJSP, so suppress vet stack checking
    16  	NOP SP
    17  	// Save GPs
    18  	MOVQ AX, 0(SP)
    19  	MOVQ CX, 8(SP)
    20  	MOVQ DX, 16(SP)
    21  	MOVQ BX, 24(SP)
    22  	MOVQ SI, 32(SP)
    23  	MOVQ DI, 40(SP)
    24  	MOVQ R8, 48(SP)
    25  	MOVQ R9, 56(SP)
    26  	MOVQ R10, 64(SP)
    27  	MOVQ R11, 72(SP)
    28  	MOVQ R12, 80(SP)
    29  	MOVQ R13, 88(SP)
    30  	MOVQ R14, 96(SP)
    31  	MOVQ R15, 104(SP)
    32  	// Save extended register state to p.xRegs.scratch
    33  	// Don't make assumptions about ABI register state. See mkpreempt.go
    34  	get_tls(CX)
    35  	MOVQ g(CX), R14
    36  	MOVQ g_m(R14), AX
    37  	MOVQ m_p(AX), AX
    38  	LEAQ (p_xRegs+xRegPerP_scratch)(AX), AX
    39  	#ifdef GOEXPERIMENT_simd
    40  	CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1
    41  	JE saveAVX512
    42  	CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1
    43  	JE saveAVX2
    44  	#endif
    45  saveSSE:
    46  	MOVUPS X0, 0(AX)
    47  	MOVUPS X1, 64(AX)
    48  	MOVUPS X2, 128(AX)
    49  	MOVUPS X3, 192(AX)
    50  	MOVUPS X4, 256(AX)
    51  	MOVUPS X5, 320(AX)
    52  	MOVUPS X6, 384(AX)
    53  	MOVUPS X7, 448(AX)
    54  	MOVUPS X8, 512(AX)
    55  	MOVUPS X9, 576(AX)
    56  	MOVUPS X10, 640(AX)
    57  	MOVUPS X11, 704(AX)
    58  	MOVUPS X12, 768(AX)
    59  	MOVUPS X13, 832(AX)
    60  	MOVUPS X14, 896(AX)
    61  	MOVUPS X15, 960(AX)
    62  	JMP preempt
    63  saveAVX2:
    64  	VMOVDQU Y0, 0(AX)
    65  	VMOVDQU Y1, 64(AX)
    66  	VMOVDQU Y2, 128(AX)
    67  	VMOVDQU Y3, 192(AX)
    68  	VMOVDQU Y4, 256(AX)
    69  	VMOVDQU Y5, 320(AX)
    70  	VMOVDQU Y6, 384(AX)
    71  	VMOVDQU Y7, 448(AX)
    72  	VMOVDQU Y8, 512(AX)
    73  	VMOVDQU Y9, 576(AX)
    74  	VMOVDQU Y10, 640(AX)
    75  	VMOVDQU Y11, 704(AX)
    76  	VMOVDQU Y12, 768(AX)
    77  	VMOVDQU Y13, 832(AX)
    78  	VMOVDQU Y14, 896(AX)
    79  	VMOVDQU Y15, 960(AX)
    80  	JMP preempt
    81  saveAVX512:
    82  	VMOVDQU64 Z0, 0(AX)
    83  	VMOVDQU64 Z1, 64(AX)
    84  	VMOVDQU64 Z2, 128(AX)
    85  	VMOVDQU64 Z3, 192(AX)
    86  	VMOVDQU64 Z4, 256(AX)
    87  	VMOVDQU64 Z5, 320(AX)
    88  	VMOVDQU64 Z6, 384(AX)
    89  	VMOVDQU64 Z7, 448(AX)
    90  	VMOVDQU64 Z8, 512(AX)
    91  	VMOVDQU64 Z9, 576(AX)
    92  	VMOVDQU64 Z10, 640(AX)
    93  	VMOVDQU64 Z11, 704(AX)
    94  	VMOVDQU64 Z12, 768(AX)
    95  	VMOVDQU64 Z13, 832(AX)
    96  	VMOVDQU64 Z14, 896(AX)
    97  	VMOVDQU64 Z15, 960(AX)
    98  	KMOVQ K0, 1024(AX)
    99  	KMOVQ K1, 1032(AX)
   100  	KMOVQ K2, 1040(AX)
   101  	KMOVQ K3, 1048(AX)
   102  	KMOVQ K4, 1056(AX)
   103  	KMOVQ K5, 1064(AX)
   104  	KMOVQ K6, 1072(AX)
   105  	KMOVQ K7, 1080(AX)
   106  	JMP preempt
   107  preempt:
   108  	CALL ·asyncPreempt2(SB)
   109  	// Restore non-GPs from *p.xRegs.cache
   110  	MOVQ g_m(R14), AX
   111  	MOVQ m_p(AX), AX
   112  	MOVQ (p_xRegs+xRegPerP_cache)(AX), AX
   113  	#ifdef GOEXPERIMENT_simd
   114  	CMPB internal∕cpu·X86+const_offsetX86HasAVX512(SB), $1
   115  	JE restoreAVX512
   116  	CMPB internal∕cpu·X86+const_offsetX86HasAVX2(SB), $1
   117  	JE restoreAVX2
   118  	#endif
   119  restoreSSE:
   120  	MOVUPS 960(AX), X15
   121  	MOVUPS 896(AX), X14
   122  	MOVUPS 832(AX), X13
   123  	MOVUPS 768(AX), X12
   124  	MOVUPS 704(AX), X11
   125  	MOVUPS 640(AX), X10
   126  	MOVUPS 576(AX), X9
   127  	MOVUPS 512(AX), X8
   128  	MOVUPS 448(AX), X7
   129  	MOVUPS 384(AX), X6
   130  	MOVUPS 320(AX), X5
   131  	MOVUPS 256(AX), X4
   132  	MOVUPS 192(AX), X3
   133  	MOVUPS 128(AX), X2
   134  	MOVUPS 64(AX), X1
   135  	MOVUPS 0(AX), X0
   136  	JMP restoreGPs
   137  restoreAVX2:
   138  	VMOVDQU 960(AX), Y15
   139  	VMOVDQU 896(AX), Y14
   140  	VMOVDQU 832(AX), Y13
   141  	VMOVDQU 768(AX), Y12
   142  	VMOVDQU 704(AX), Y11
   143  	VMOVDQU 640(AX), Y10
   144  	VMOVDQU 576(AX), Y9
   145  	VMOVDQU 512(AX), Y8
   146  	VMOVDQU 448(AX), Y7
   147  	VMOVDQU 384(AX), Y6
   148  	VMOVDQU 320(AX), Y5
   149  	VMOVDQU 256(AX), Y4
   150  	VMOVDQU 192(AX), Y3
   151  	VMOVDQU 128(AX), Y2
   152  	VMOVDQU 64(AX), Y1
   153  	VMOVDQU 0(AX), Y0
   154  	JMP restoreGPs
   155  restoreAVX512:
   156  	KMOVQ 1080(AX), K7
   157  	KMOVQ 1072(AX), K6
   158  	KMOVQ 1064(AX), K5
   159  	KMOVQ 1056(AX), K4
   160  	KMOVQ 1048(AX), K3
   161  	KMOVQ 1040(AX), K2
   162  	KMOVQ 1032(AX), K1
   163  	KMOVQ 1024(AX), K0
   164  	VMOVDQU64 960(AX), Z15
   165  	VMOVDQU64 896(AX), Z14
   166  	VMOVDQU64 832(AX), Z13
   167  	VMOVDQU64 768(AX), Z12
   168  	VMOVDQU64 704(AX), Z11
   169  	VMOVDQU64 640(AX), Z10
   170  	VMOVDQU64 576(AX), Z9
   171  	VMOVDQU64 512(AX), Z8
   172  	VMOVDQU64 448(AX), Z7
   173  	VMOVDQU64 384(AX), Z6
   174  	VMOVDQU64 320(AX), Z5
   175  	VMOVDQU64 256(AX), Z4
   176  	VMOVDQU64 192(AX), Z3
   177  	VMOVDQU64 128(AX), Z2
   178  	VMOVDQU64 64(AX), Z1
   179  	VMOVDQU64 0(AX), Z0
   180  	JMP restoreGPs
   181  restoreGPs:
   182  	// Restore GPs
   183  	MOVQ 104(SP), R15
   184  	MOVQ 96(SP), R14
   185  	MOVQ 88(SP), R13
   186  	MOVQ 80(SP), R12
   187  	MOVQ 72(SP), R11
   188  	MOVQ 64(SP), R10
   189  	MOVQ 56(SP), R9
   190  	MOVQ 48(SP), R8
   191  	MOVQ 40(SP), DI
   192  	MOVQ 32(SP), SI
   193  	MOVQ 24(SP), BX
   194  	MOVQ 16(SP), DX
   195  	MOVQ 8(SP), CX
   196  	MOVQ 0(SP), AX
   197  	ADJSP $-112
   198  	POPFQ
   199  	POPQ BP
   200  	RET
   201  

View as plain text