github.com/chenzhuoyu/iasm@v0.9.1/repl/asm_amd64.s (about) 1 #include "go_asm.h" 2 #include "funcdata.h" 3 #include "textflag.h" 4 5 TEXT ·dumpregs(SB), (NOSPLIT | NOFRAME), $0 6 NO_LOCAL_POINTERS 7 PUSHFQ 8 PUSHFQ 9 PUSHQ AX 10 MOVQ 0x20(SP), AX 11 POPQ (AX) 12 MOVQ BX, 0x08(AX) 13 MOVQ CX, 0x10(AX) 14 MOVQ DX, 0x18(AX) 15 MOVQ DI, 0x20(AX) 16 MOVQ SI, 0x28(AX) 17 MOVQ BP, 0x30(AX) 18 MOVQ SP, 0x38(AX) 19 ADDQ $16, 0x38(AX) 20 MOVQ R8, 0x40(AX) 21 MOVQ R9, 0x48(AX) 22 MOVQ R10, 0x50(AX) 23 MOVQ R11, 0x58(AX) 24 MOVQ R12, 0x60(AX) 25 MOVQ R13, 0x68(AX) 26 MOVQ R14, 0x70(AX) 27 MOVQ R15, 0x78(AX) 28 MOVQ 16(SP), CX 29 MOVQ CX, 0x80(AX) 30 POPQ 0x88(AX) 31 MOVW CS, 0x90(AX) 32 MOVW FS, 0x98(AX) 33 MOVW GS, 0xa0(AX) 34 35 // SSE xmm0 ~ xmm15 registers 36 MOVOU X0, 0xc0(AX) 37 MOVOU X1, 0xd0(AX) 38 MOVOU X2, 0xe0(AX) 39 MOVOU X3, 0xf0(AX) 40 MOVOU X4, 0x100(AX) 41 MOVOU X5, 0x110(AX) 42 MOVOU X6, 0x120(AX) 43 MOVOU X7, 0x130(AX) 44 MOVOU X8, 0x140(AX) 45 MOVOU X9, 0x150(AX) 46 MOVOU X10, 0x160(AX) 47 MOVOU X11, 0x170(AX) 48 MOVOU X12, 0x180(AX) 49 MOVOU X13, 0x190(AX) 50 MOVOU X14, 0x1a0(AX) 51 MOVOU X15, 0x1b0(AX) 52 53 // check for AVX 54 CMPB ·hasAVX(SB), $0 55 JE _no_avx 56 57 // AVX ymm0 ~ ymm15 registers 58 VMOVDQU Y0, 0x2c0(AX) 59 VMOVDQU Y1, 0x2e0(AX) 60 VMOVDQU Y2, 0x300(AX) 61 VMOVDQU Y3, 0x320(AX) 62 VMOVDQU Y4, 0x340(AX) 63 VMOVDQU Y5, 0x360(AX) 64 VMOVDQU Y6, 0x380(AX) 65 VMOVDQU Y7, 0x3a0(AX) 66 VMOVDQU Y8, 0x3c0(AX) 67 VMOVDQU Y9, 0x3e0(AX) 68 VMOVDQU Y10, 0x400(AX) 69 VMOVDQU Y11, 0x420(AX) 70 VMOVDQU Y12, 0x440(AX) 71 VMOVDQU Y13, 0x460(AX) 72 VMOVDQU Y14, 0x480(AX) 73 VMOVDQU Y15, 0x4a0(AX) 74 75 // check for AVX512VL 76 CMPB ·hasAVX512VL(SB), $0 77 JE _no_avx512vl 78 79 // AVX512VL xmm16 ~ xmm31 registers 80 LONG $0x087fe162; WORD $0x407f; BYTE $0x1c // vmovdqu8 %xmm16, 0x1c0(%rax) 81 LONG $0x087fe162; WORD $0x487f; BYTE $0x1d // vmovdqu8 %xmm17, 0x1d0(%rax) 82 LONG $0x087fe162; WORD $0x507f; BYTE $0x1e // vmovdqu8 %xmm18, 0x1e0(%rax) 83 LONG $0x087fe162; WORD $0x587f; BYTE $0x1f // vmovdqu8 %xmm19, 0x1f0(%rax) 84 LONG $0x087fe162; WORD $0x607f; BYTE $0x20 // vmovdqu8 %xmm20, 0x200(%rax) 85 LONG $0x087fe162; WORD $0x687f; BYTE $0x21 // vmovdqu8 %xmm21, 0x210(%rax) 86 LONG $0x087fe162; WORD $0x707f; BYTE $0x22 // vmovdqu8 %xmm22, 0x220(%rax) 87 LONG $0x087fe162; WORD $0x787f; BYTE $0x23 // vmovdqu8 %xmm23, 0x230(%rax) 88 LONG $0x087f6162; WORD $0x407f; BYTE $0x24 // vmovdqu8 %xmm24, 0x240(%rax) 89 LONG $0x087f6162; WORD $0x487f; BYTE $0x25 // vmovdqu8 %xmm25, 0x250(%rax) 90 LONG $0x087f6162; WORD $0x507f; BYTE $0x26 // vmovdqu8 %xmm26, 0x260(%rax) 91 LONG $0x087f6162; WORD $0x587f; BYTE $0x27 // vmovdqu8 %xmm27, 0x270(%rax) 92 LONG $0x087f6162; WORD $0x607f; BYTE $0x28 // vmovdqu8 %xmm28, 0x280(%rax) 93 LONG $0x087f6162; WORD $0x687f; BYTE $0x29 // vmovdqu8 %xmm29, 0x290(%rax) 94 LONG $0x087f6162; WORD $0x707f; BYTE $0x2a // vmovdqu8 %xmm30, 0x2a0(%rax) 95 LONG $0x087f6162; WORD $0x787f; BYTE $0x2b // vmovdqu8 %xmm31, 0x2b0(%rax) 96 97 // AVX512VL ymm16 ~ ymm31 registers 98 LONG $0x28ffe162; WORD $0x407f; BYTE $0x26 // vmovdqu16 %ymm16, 0x4c0(%rax) 99 LONG $0x28ffe162; WORD $0x487f; BYTE $0x27 // vmovdqu16 %ymm17, 0x4e0(%rax) 100 LONG $0x28ffe162; WORD $0x507f; BYTE $0x28 // vmovdqu16 %ymm18, 0x500(%rax) 101 LONG $0x28ffe162; WORD $0x587f; BYTE $0x29 // vmovdqu16 %ymm19, 0x520(%rax) 102 LONG $0x28ffe162; WORD $0x607f; BYTE $0x2a // vmovdqu16 %ymm20, 0x540(%rax) 103 LONG $0x28ffe162; WORD $0x687f; BYTE $0x2b // vmovdqu16 %ymm21, 0x560(%rax) 104 LONG $0x28ffe162; WORD $0x707f; BYTE $0x2c // vmovdqu16 %ymm22, 0x580(%rax) 105 LONG $0x28ffe162; WORD $0x787f; BYTE $0x2d // vmovdqu16 %ymm23, 0x5a0(%rax) 106 LONG $0x28ff6162; WORD $0x407f; BYTE $0x2e // vmovdqu16 %ymm24, 0x5c0(%rax) 107 LONG $0x28ff6162; WORD $0x487f; BYTE $0x2f // vmovdqu16 %ymm25, 0x5e0(%rax) 108 LONG $0x28ff6162; WORD $0x507f; BYTE $0x30 // vmovdqu16 %ymm26, 0x600(%rax) 109 LONG $0x28ff6162; WORD $0x587f; BYTE $0x31 // vmovdqu16 %ymm27, 0x620(%rax) 110 LONG $0x28ff6162; WORD $0x607f; BYTE $0x32 // vmovdqu16 %ymm28, 0x640(%rax) 111 LONG $0x28ff6162; WORD $0x687f; BYTE $0x33 // vmovdqu16 %ymm29, 0x660(%rax) 112 LONG $0x28ff6162; WORD $0x707f; BYTE $0x34 // vmovdqu16 %ymm30, 0x680(%rax) 113 LONG $0x28ff6162; WORD $0x787f; BYTE $0x35 // vmovdqu16 %ymm31, 0x6a0(%rax) 114 115 _no_avx512vl: 116 CMPB ·hasAVX512F(SB), $0 117 JE _no_avx512f 118 119 // AVX512F zmm0 ~ zmm31 registers 120 LONG $0x487ef162; WORD $0x407f; BYTE $0x1b // vmovdqu32 %zmm0, 0x6c0(%rax) 121 LONG $0x487ef162; WORD $0x487f; BYTE $0x1c // vmovdqu32 %zmm1, 0x700(%rax) 122 LONG $0x487ef162; WORD $0x507f; BYTE $0x1d // vmovdqu32 %zmm2, 0x740(%rax) 123 LONG $0x487ef162; WORD $0x587f; BYTE $0x1e // vmovdqu32 %zmm3, 0x780(%rax) 124 LONG $0x487ef162; WORD $0x607f; BYTE $0x1f // vmovdqu32 %zmm4, 0x7c0(%rax) 125 LONG $0x487ef162; WORD $0x687f; BYTE $0x20 // vmovdqu32 %zmm5, 0x800(%rax) 126 LONG $0x487ef162; WORD $0x707f; BYTE $0x21 // vmovdqu32 %zmm6, 0x840(%rax) 127 LONG $0x487ef162; WORD $0x787f; BYTE $0x22 // vmovdqu32 %zmm7, 0x880(%rax) 128 LONG $0x487e7162; WORD $0x407f; BYTE $0x23 // vmovdqu32 %zmm8, 0x8c0(%rax) 129 LONG $0x487e7162; WORD $0x487f; BYTE $0x24 // vmovdqu32 %zmm9, 0x900(%rax) 130 LONG $0x487e7162; WORD $0x507f; BYTE $0x25 // vmovdqu32 %zmm10, 0x940(%rax) 131 LONG $0x487e7162; WORD $0x587f; BYTE $0x26 // vmovdqu32 %zmm11, 0x980(%rax) 132 LONG $0x487e7162; WORD $0x607f; BYTE $0x27 // vmovdqu32 %zmm12, 0x9c0(%rax) 133 LONG $0x487e7162; WORD $0x687f; BYTE $0x28 // vmovdqu32 %zmm13, 0xa00(%rax) 134 LONG $0x487e7162; WORD $0x707f; BYTE $0x29 // vmovdqu32 %zmm14, 0xa40(%rax) 135 LONG $0x487e7162; WORD $0x787f; BYTE $0x2a // vmovdqu32 %zmm15, 0xa80(%rax) 136 LONG $0x487ee162; WORD $0x407f; BYTE $0x2b // vmovdqu32 %zmm16, 0xac0(%rax) 137 LONG $0x487ee162; WORD $0x487f; BYTE $0x2c // vmovdqu32 %zmm17, 0xb00(%rax) 138 LONG $0x487ee162; WORD $0x507f; BYTE $0x2d // vmovdqu32 %zmm18, 0xb40(%rax) 139 LONG $0x487ee162; WORD $0x587f; BYTE $0x2e // vmovdqu32 %zmm19, 0xb80(%rax) 140 LONG $0x487ee162; WORD $0x607f; BYTE $0x2f // vmovdqu32 %zmm20, 0xbc0(%rax) 141 LONG $0x487ee162; WORD $0x687f; BYTE $0x30 // vmovdqu32 %zmm21, 0xc00(%rax) 142 LONG $0x487ee162; WORD $0x707f; BYTE $0x31 // vmovdqu32 %zmm22, 0xc40(%rax) 143 LONG $0x487ee162; WORD $0x787f; BYTE $0x32 // vmovdqu32 %zmm23, 0xc80(%rax) 144 LONG $0x487e6162; WORD $0x407f; BYTE $0x33 // vmovdqu32 %zmm24, 0xcc0(%rax) 145 LONG $0x487e6162; WORD $0x487f; BYTE $0x34 // vmovdqu32 %zmm25, 0xd00(%rax) 146 LONG $0x487e6162; WORD $0x507f; BYTE $0x35 // vmovdqu32 %zmm26, 0xd40(%rax) 147 LONG $0x487e6162; WORD $0x587f; BYTE $0x36 // vmovdqu32 %zmm27, 0xd80(%rax) 148 LONG $0x487e6162; WORD $0x607f; BYTE $0x37 // vmovdqu32 %zmm28, 0xdc0(%rax) 149 LONG $0x487e6162; WORD $0x687f; BYTE $0x38 // vmovdqu32 %zmm29, 0xe00(%rax) 150 LONG $0x487e6162; WORD $0x707f; BYTE $0x39 // vmovdqu32 %zmm30, 0xe40(%rax) 151 LONG $0x487e6162; WORD $0x787f; BYTE $0x3a // vmovdqu32 %zmm31, 0xe80(%rax) 152 153 // check for AVX512BW 154 CMPB ·hasAVX512BW(SB), $0 155 JE _no_avx512bw 156 157 // AVX512BW 64-bit K registers 158 QUAD $0x000ec08091f8e1c4; BYTE $0x00 // kmovq %k0, 0xec0(%rax) 159 QUAD $0x000ec88891f8e1c4; BYTE $0x00 // kmovq %k1, 0xec8(%rax) 160 QUAD $0x000ed09091f8e1c4; BYTE $0x00 // kmovq %k2, 0xed0(%rax) 161 QUAD $0x000ed89891f8e1c4; BYTE $0x00 // kmovq %k3, 0xed8(%rax) 162 QUAD $0x000ee0a091f8e1c4; BYTE $0x00 // kmovq %k4, 0xee0(%rax) 163 QUAD $0x000ee8a891f8e1c4; BYTE $0x00 // kmovq %k5, 0xee8(%rax) 164 QUAD $0x000ef0b091f8e1c4; BYTE $0x00 // kmovq %k6, 0xef0(%rax) 165 QUAD $0x000ef8b891f8e1c4; BYTE $0x00 // kmovq %k7, 0xef8(%rax) 166 JMP _avx512bw_done 167 168 _no_avx512bw: 169 QUAD $0x00000ec08091f8c5 // kmovw %k0, 0xec0(%rax) 170 QUAD $0x00000ec88891f8c5 // kmovw %k1, 0xec8(%rax) 171 QUAD $0x00000ed09091f8c5 // kmovw %k2, 0xed0(%rax) 172 QUAD $0x00000ed89891f8c5 // kmovw %k3, 0xed8(%rax) 173 QUAD $0x00000ee0a091f8c5 // kmovw %k4, 0xee0(%rax) 174 QUAD $0x00000ee8a891f8c5 // kmovw %k5, 0xee8(%rax) 175 QUAD $0x00000ef0b091f8c5 // kmovw %k6, 0xef0(%rax) 176 QUAD $0x00000ef8b891f8c5 // kmovw %k7, 0xef8(%rax) 177 178 _avx512bw_done: 179 _no_avx512f: 180 _no_avx: 181 MOVQ 0x10(AX), CX 182 MOVQ (AX), AX 183 POPFQ 184 RET 185 186 TEXT ·execaddr(SB), (NOSPLIT | NOFRAME), $0 187 NO_LOCAL_POINTERS 188 LONG $0x102474ff // pushq 0x10(%rsp) 189 CALL ·dumpregs(SB) 190 LEAQ 8(SP), SP 191 CALL exectrampoline(SB) 192 LONG $0x182474ff // pushq 0x18(%rsp) 193 CALL ·dumpregs(SB) 194 LEAQ 8(SP), SP 195 RET 196 197 TEXT exectrampoline(SB), (NOSPLIT | NOFRAME), $0 198 NO_LOCAL_POINTERS 199 JMP 0x10(SP)