| | |
| | |
| | |
| |
|
| | #include "go_asm.h" |
| | #include "go_tls.h" |
| | #include "funcdata.h" |
| | #include "textflag.h" |
| | #include "cgo/abi_amd64.h" |
| |
|
| | |
| | |
| | |
| | |
| | TEXT _rt0_amd64(SB),NOSPLIT,$-8 |
| | MOVQ 0(SP), DI |
| | LEAQ 8(SP), SI |
| | JMP runtime路rt0_go(SB) |
| |
|
| | |
| | |
| | |
| | TEXT main(SB),NOSPLIT,$-8 |
| | JMP runtime路rt0_go(SB) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT _rt0_amd64_lib(SB),NOSPLIT|NOFRAME,$0 |
| | |
| | PUSH_REGS_HOST_TO_ABI0() |
| |
|
| | MOVQ DI, _rt0_amd64_lib_argc<>(SB) |
| | MOVQ SI, _rt0_amd64_lib_argv<>(SB) |
| |
|
| | |
| | #ifndef GOOS_windows |
| | |
| | |
| | |
| | CALL runtime路libpreinit(SB) |
| | #endif |
| |
|
| | |
| | MOVQ _cgo_sys_thread_create(SB), AX |
| | TESTQ AX, AX |
| | JZ nocgo |
| |
|
| | |
| | |
| | MOVQ SP, BX |
| | ANDQ $~15, SP |
| | MOVQ $_rt0_amd64_lib_go(SB), DI |
| | MOVQ $0, SI |
| | #ifdef GOOS_windows |
| | |
| | MOVQ DI, CX |
| | MOVQ SI, DX |
| | |
| | |
| | ADJSP $32 |
| | #endif |
| | CALL AX |
| | #ifdef GOOS_windows |
| | ADJSP $-32 |
| | #endif |
| | MOVQ BX, SP |
| | JMP restore |
| |
|
| | nocgo: |
| | ADJSP $16 |
| | MOVQ $0x800000, 0(SP) |
| | MOVQ $_rt0_amd64_lib_go(SB), AX |
| | MOVQ AX, 8(SP) |
| | CALL runtime路newosproc0(SB) |
| | ADJSP $-16 |
| |
|
| | restore: |
| | POP_REGS_HOST_TO_ABI0() |
| | RET |
| |
|
| | |
| | |
| | TEXT _rt0_amd64_lib_go(SB),NOSPLIT,$0 |
| | MOVQ _rt0_amd64_lib_argc<>(SB), DI |
| | MOVQ _rt0_amd64_lib_argv<>(SB), SI |
| | JMP runtime路rt0_go(SB) |
| |
|
| | DATA _rt0_amd64_lib_argc<>(SB)/8, $0 |
| | GLOBL _rt0_amd64_lib_argc<>(SB),NOPTR, $8 |
| | DATA _rt0_amd64_lib_argv<>(SB)/8, $0 |
| | GLOBL _rt0_amd64_lib_argv<>(SB),NOPTR, $8 |
| |
|
| | #ifdef GOAMD64_v2 |
| | DATA bad_cpu_msg<>+0x00(SB)/84, $"This program can only be run on AMD64 processors with v2 microarchitecture support.\n" |
| | #endif |
| |
|
| | #ifdef GOAMD64_v3 |
| | DATA bad_cpu_msg<>+0x00(SB)/84, $"This program can only be run on AMD64 processors with v3 microarchitecture support.\n" |
| | #endif |
| |
|
| | #ifdef GOAMD64_v4 |
| | DATA bad_cpu_msg<>+0x00(SB)/84, $"This program can only be run on AMD64 processors with v4 microarchitecture support.\n" |
| | #endif |
| |
|
| | GLOBL bad_cpu_msg<>(SB), RODATA, $84 |
| |
|
| | |
| | |
| |
|
| | |
| | #define V2_FEATURES_CX (1 << 0 | 1 << 9 | 1 << 13 | 1 << 19 | 1 << 20 | 1 << 23) |
| | |
| | #define V2_EXT_FEATURES_CX (1 << 0) |
| | |
| | #define V3_FEATURES_CX (V2_FEATURES_CX | 1 << 12 | 1 << 22 | 1 << 27 | 1 << 28 | 1 << 29) |
| | |
| | #define V3_EXT_FEATURES_CX (V2_EXT_FEATURES_CX | 1 << 5) |
| | |
| | #define V3_EXT_FEATURES_BX (1 << 3 | 1 << 5 | 1 << 8) |
| | |
| | #define V3_OS_SUPPORT_AX (1 << 1 | 1 << 2) |
| |
|
| | #define V4_FEATURES_CX V3_FEATURES_CX |
| |
|
| | #define V4_EXT_FEATURES_CX V3_EXT_FEATURES_CX |
| | |
| | #define V4_EXT_FEATURES_BX (V3_EXT_FEATURES_BX | 1 << 16 | 1 << 17 | 1 << 28 | 1 << 30 | 1 << 31) |
| | |
| | #define V4_OS_SUPPORT_AX (V3_OS_SUPPORT_AX | 1 << 5 | (1 << 6 | 1 << 7)) |
| |
|
| | #ifdef GOAMD64_v2 |
| | #define NEED_MAX_CPUID 0x80000001 |
| | #define NEED_FEATURES_CX V2_FEATURES_CX |
| | #define NEED_EXT_FEATURES_CX V2_EXT_FEATURES_CX |
| | #endif |
| |
|
| | #ifdef GOAMD64_v3 |
| | #define NEED_MAX_CPUID 0x80000001 |
| | #define NEED_FEATURES_CX V3_FEATURES_CX |
| | #define NEED_EXT_FEATURES_CX V3_EXT_FEATURES_CX |
| | #define NEED_EXT_FEATURES_BX V3_EXT_FEATURES_BX |
| | #define NEED_OS_SUPPORT_AX V3_OS_SUPPORT_AX |
| | #endif |
| |
|
| | #ifdef GOAMD64_v4 |
| | #define NEED_MAX_CPUID 0x80000001 |
| | #define NEED_FEATURES_CX V4_FEATURES_CX |
| | #define NEED_EXT_FEATURES_CX V4_EXT_FEATURES_CX |
| | #define NEED_EXT_FEATURES_BX V4_EXT_FEATURES_BX |
| |
|
| | |
| | #ifdef GOOS_darwin |
| | #define NEED_OS_SUPPORT_AX V3_OS_SUPPORT_AX |
| | |
| | |
| | #define commpage64_base_address 0x00007fffffe00000 |
| | #define commpage64_cpu_capabilities64 (commpage64_base_address+0x010) |
| | #define commpage64_version (commpage64_base_address+0x01E) |
| | #define AVX512F 0x0000004000000000 |
| | #define AVX512CD 0x0000008000000000 |
| | #define AVX512DQ 0x0000010000000000 |
| | #define AVX512BW 0x0000020000000000 |
| | #define AVX512VL 0x0000100000000000 |
| | #define NEED_DARWIN_SUPPORT (AVX512F | AVX512DQ | AVX512CD | AVX512BW | AVX512VL) |
| | #else |
| | #define NEED_OS_SUPPORT_AX V4_OS_SUPPORT_AX |
| | #endif |
| |
|
| | #endif |
| |
|
| | TEXT runtime路rt0_go(SB),NOSPLIT|NOFRAME|TOPFRAME,$0 |
| | |
| | MOVQ DI, AX |
| | MOVQ SI, BX |
| | SUBQ $(5*8), SP |
| | ANDQ $~15, SP |
| | MOVQ AX, 24(SP) |
| | MOVQ BX, 32(SP) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ $0, BP |
| |
|
| | |
| | |
| | MOVQ $runtime路g0(SB), DI |
| | LEAQ (-64*1024)(SP), BX |
| | MOVQ BX, g_stackguard0(DI) |
| | MOVQ BX, g_stackguard1(DI) |
| | MOVQ BX, (g_stack+stack_lo)(DI) |
| | MOVQ SP, (g_stack+stack_hi)(DI) |
| |
|
| | |
| | MOVL $0, AX |
| | CPUID |
| | CMPL AX, $0 |
| | JE nocpuinfo |
| |
|
| | CMPL BX, $0x756E6547 |
| | JNE notintel |
| | CMPL DX, $0x49656E69 |
| | JNE notintel |
| | CMPL CX, $0x6C65746E |
| | JNE notintel |
| | MOVB $1, runtime路isIntel(SB) |
| |
|
| | notintel: |
| | |
| | MOVL $1, AX |
| | CPUID |
| | MOVL AX, runtime路processorVersionInfo(SB) |
| |
|
| | nocpuinfo: |
| | |
| | MOVQ _cgo_init(SB), AX |
| | TESTQ AX, AX |
| | JZ needtls |
| | |
| | MOVQ $setg_gcc<>(SB), SI |
| | MOVQ $0, DX |
| | MOVQ $0, CX |
| | #ifdef GOOS_android |
| | MOVQ $runtime路tls_g(SB), DX |
| | |
| | |
| | MOVQ -16(TLS), CX |
| | #endif |
| | #ifdef GOOS_windows |
| | MOVQ $runtime路tls_g(SB), DX |
| | |
| | MOVQ CX, R9 |
| | MOVQ DX, R8 |
| | MOVQ SI, DX |
| | MOVQ DI, CX |
| | #endif |
| | CALL AX |
| |
|
| | |
| | MOVQ $runtime路g0(SB), CX |
| | MOVQ (g_stack+stack_lo)(CX), AX |
| | ADDQ $const_stackGuard, AX |
| | MOVQ AX, g_stackguard0(CX) |
| | MOVQ AX, g_stackguard1(CX) |
| |
|
| | #ifndef GOOS_windows |
| | JMP ok |
| | #endif |
| | needtls: |
| | #ifdef GOOS_plan9 |
| | |
| | JMP ok |
| | #endif |
| | #ifdef GOOS_solaris |
| | |
| | JMP ok |
| | #endif |
| | #ifdef GOOS_illumos |
| | |
| | JMP ok |
| | #endif |
| | #ifdef GOOS_darwin |
| | |
| | JMP ok |
| | #endif |
| | #ifdef GOOS_openbsd |
| | |
| | JMP ok |
| | #endif |
| |
|
| | #ifdef GOOS_windows |
| | CALL runtime路wintls(SB) |
| | #endif |
| |
|
| | LEAQ runtime路m0+m_tls(SB), DI |
| | CALL runtime路settls(SB) |
| |
|
| | |
| | get_tls(BX) |
| | MOVQ $0x123, g(BX) |
| | MOVQ runtime路m0+m_tls(SB), AX |
| | CMPQ AX, $0x123 |
| | JEQ 2(PC) |
| | CALL runtime路abort(SB) |
| | ok: |
| | |
| | get_tls(BX) |
| | LEAQ runtime路g0(SB), CX |
| | MOVQ CX, g(BX) |
| | LEAQ runtime路m0(SB), AX |
| |
|
| | |
| | MOVQ CX, m_g0(AX) |
| | |
| | MOVQ AX, g_m(CX) |
| |
|
| | CLD |
| |
|
| | |
| | |
| | |
| | #ifdef NEED_FEATURES_CX |
| | MOVL $0, AX |
| | CPUID |
| | CMPL AX, $0 |
| | JE bad_cpu |
| | MOVL $1, AX |
| | CPUID |
| | ANDL $NEED_FEATURES_CX, CX |
| | CMPL CX, $NEED_FEATURES_CX |
| | JNE bad_cpu |
| | #endif |
| |
|
| | #ifdef NEED_MAX_CPUID |
| | MOVL $0x80000000, AX |
| | CPUID |
| | CMPL AX, $NEED_MAX_CPUID |
| | JL bad_cpu |
| | #endif |
| |
|
| | #ifdef NEED_EXT_FEATURES_BX |
| | MOVL $7, AX |
| | MOVL $0, CX |
| | CPUID |
| | ANDL $NEED_EXT_FEATURES_BX, BX |
| | CMPL BX, $NEED_EXT_FEATURES_BX |
| | JNE bad_cpu |
| | #endif |
| |
|
| | #ifdef NEED_EXT_FEATURES_CX |
| | MOVL $0x80000001, AX |
| | CPUID |
| | ANDL $NEED_EXT_FEATURES_CX, CX |
| | CMPL CX, $NEED_EXT_FEATURES_CX |
| | JNE bad_cpu |
| | #endif |
| |
|
| | #ifdef NEED_OS_SUPPORT_AX |
| | XORL CX, CX |
| | XGETBV |
| | ANDL $NEED_OS_SUPPORT_AX, AX |
| | CMPL AX, $NEED_OS_SUPPORT_AX |
| | JNE bad_cpu |
| | #endif |
| |
|
| | #ifdef NEED_DARWIN_SUPPORT |
| | MOVQ $commpage64_version, BX |
| | CMPW (BX), $13 |
| | JL bad_cpu |
| | MOVQ $commpage64_cpu_capabilities64, BX |
| | MOVQ (BX), BX |
| | MOVQ $NEED_DARWIN_SUPPORT, CX |
| | ANDQ CX, BX |
| | CMPQ BX, CX |
| | JNE bad_cpu |
| | #endif |
| |
|
| | CALL runtime路check(SB) |
| |
|
| | MOVL 24(SP), AX |
| | MOVL AX, 0(SP) |
| | MOVQ 32(SP), AX |
| | MOVQ AX, 8(SP) |
| | CALL runtime路args(SB) |
| | CALL runtime路osinit(SB) |
| | CALL runtime路schedinit(SB) |
| |
|
| | |
| | MOVQ $runtime路mainPC(SB), AX |
| | PUSHQ AX |
| | CALL runtime路newproc(SB) |
| | POPQ AX |
| |
|
| | |
| | CALL runtime路mstart(SB) |
| |
|
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | bad_cpu: |
| | MOVQ $2, 0(SP) |
| | MOVQ $bad_cpu_msg<>(SB), AX |
| | MOVQ AX, 8(SP) |
| | MOVQ $84, 16(SP) |
| | CALL runtime路write(SB) |
| | MOVQ $1, 0(SP) |
| | CALL runtime路exit(SB) |
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | |
| | |
| | MOVQ $runtime路debugPinnerV1<ABIInternal>(SB), AX |
| | MOVQ $runtime路debugCallV2<ABIInternal>(SB), AX |
| | RET |
| |
|
| | |
| | |
| | |
| | DATA runtime路mainPC+0(SB)/8,$runtime路main<ABIInternal>(SB) |
| | GLOBL runtime路mainPC(SB),RODATA,$8 |
| |
|
| | TEXT runtime路breakpoint(SB),NOSPLIT,$0-0 |
| | BYTE $0xcc |
| | RET |
| |
|
| | TEXT runtime路asminit(SB),NOSPLIT,$0-0 |
| | |
| | RET |
| |
|
| | TEXT runtime路mstart(SB),NOSPLIT|TOPFRAME|NOFRAME,$0 |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVD $0, BP |
| | CALL runtime路mstart0(SB) |
| | RET |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | |
| | TEXT runtime路gogo(SB), NOSPLIT, $0-8 |
| | MOVQ buf+0(FP), BX |
| | MOVQ gobuf_g(BX), DX |
| | MOVQ 0(DX), CX |
| | JMP gogo<>(SB) |
| |
|
| | TEXT gogo<>(SB), NOSPLIT, $0 |
| | get_tls(CX) |
| | MOVQ DX, g(CX) |
| | MOVQ DX, R14 |
| | MOVQ gobuf_sp(BX), SP |
| | MOVQ gobuf_ctxt(BX), DX |
| | MOVQ gobuf_bp(BX), BP |
| | MOVQ $0, gobuf_sp(BX) |
| | MOVQ $0, gobuf_ctxt(BX) |
| | MOVQ $0, gobuf_bp(BX) |
| | MOVQ gobuf_pc(BX), BX |
| | JMP BX |
| |
|
| | |
| | |
| | |
| | |
| | TEXT runtime路mcall<ABIInternal>(SB), NOSPLIT, $0-8 |
| | #ifdef GOEXPERIMENT_runtimesecret |
| | CMPL g_secret(R14), $0 |
| | JEQ nosecret |
| | CALL 路secretEraseRegistersMcall(SB) |
| | nosecret: |
| | #endif |
| |
|
| | MOVQ AX, DX |
| |
|
| | |
| | |
| | |
| | MOVQ SP, BX |
| | MOVQ 8(BX), BX |
| | MOVQ BX, (g_sched+gobuf_pc)(R14) |
| | LEAQ fn+0(FP), BX // caller's SP |
| | MOVQ BX, (g_sched+gobuf_sp)(R14) |
| | // Get the caller's frame pointer by dereferencing BP. Storing BP as it is |
| | // can cause a frame pointer cycle, see CL 476235. |
| | MOVQ (BP), BX // caller's BP |
| | MOVQ BX, (g_sched+gobuf_bp)(R14) |
| | |
| | // switch to m->g0 & its stack, call fn |
| | MOVQ g_m(R14), BX |
| | MOVQ m_g0(BX), SI // SI = g.m.g0 |
| | CMPQ SI, R14 |
| | JNE goodm |
| | JMP runtime路badmcall(SB) |
| | goodm: |
| | MOVQ R14, AX |
| | MOVQ SI, R14 |
| | get_tls(CX) |
| | MOVQ R14, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(R14), SP |
| | MOVQ $0, BP |
| | PUSHQ AX |
| | MOVQ 0(DX), R12 |
| | CALL R12 |
| | |
| | |
| | |
| | BYTE $0x90 |
| | POPQ AX |
| | JMP runtime路badmcall2(SB) |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT runtime路systemstack_switch(SB), NOSPLIT, $0-0 |
| | UNDEF |
| | |
| | |
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | |
| | TEXT runtime路systemstack(SB), NOSPLIT, $0-8 |
| | #ifdef GOEXPERIMENT_runtimesecret |
| | |
| | |
| | get_tls(CX) |
| | MOVQ g(CX), AX |
| | CMPL g_secret(AX), $0 |
| | JEQ nosecret |
| | CALL 路secretEraseRegisters(SB) |
| | nosecret: |
| | #endif |
| |
|
| | MOVQ fn+0(FP), DI // DI = fn |
| | get_tls(CX) |
| | MOVQ g(CX), AX // AX = g |
| | MOVQ g_m(AX), BX |
| |
|
| | CMPQ AX, m_gsignal(BX) |
| | JEQ noswitch |
| |
|
| | MOVQ m_g0(BX), DX |
| | CMPQ AX, DX |
| | JEQ noswitch |
| |
|
| | CMPQ AX, m_curg(BX) |
| | JNE bad |
| |
|
| | |
| | |
| | |
| | |
| | |
| | CALL gosave_systemstack_switch<>(SB) |
| |
|
| | |
| | MOVQ DX, g(CX) |
| | MOVQ DX, R14 |
| | MOVQ (g_sched+gobuf_sp)(DX), SP |
| |
|
| | |
| | MOVQ DI, DX |
| | MOVQ 0(DI), DI |
| | CALL DI |
| |
|
| | |
| | get_tls(CX) |
| | MOVQ g(CX), AX |
| | MOVQ g_m(AX), BX |
| | MOVQ m_curg(BX), AX |
| | MOVQ AX, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(AX), SP |
| | MOVQ (g_sched+gobuf_bp)(AX), BP |
| | MOVQ $0, (g_sched+gobuf_sp)(AX) |
| | MOVQ $0, (g_sched+gobuf_bp)(AX) |
| | RET |
| |
|
| | noswitch: |
| | |
| | |
| | |
| | MOVQ DI, DX |
| | MOVQ 0(DI), DI |
| | |
| | |
| | POPQ BP |
| | JMP DI |
| |
|
| | bad: |
| | |
| | MOVQ $runtime路badsystemstack(SB), AX |
| | CALL AX |
| | INT $3 |
| |
|
| | |
| | TEXT runtime路switchToCrashStack0<ABIInternal>(SB), NOSPLIT, $0-8 |
| | MOVQ g_m(R14), BX |
| |
|
| | |
| | LEAQ runtime路gcrash(SB), R14 |
| | MOVQ BX, g_m(R14) |
| | MOVQ R14, m_g0(BX) |
| | get_tls(CX) |
| | MOVQ R14, g(CX) |
| |
|
| | |
| | MOVQ (g_stack+stack_hi)(R14), BX |
| | SUBQ $(4*8), BX |
| | MOVQ BX, SP |
| |
|
| | |
| | MOVQ AX, DX |
| | MOVQ 0(AX), AX |
| | CALL AX |
| |
|
| | |
| | CALL runtime路abort(SB) |
| | UNDEF |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT runtime路morestack(SB),NOSPLIT|NOFRAME,$0-0 |
| | |
| | get_tls(CX) |
| | MOVQ g(CX), DI |
| | MOVQ g_m(DI), BX |
| |
|
| | |
| | MOVQ 0(SP), AX |
| | MOVQ AX, (g_sched+gobuf_pc)(DI) |
| | LEAQ 8(SP), AX |
| | MOVQ AX, (g_sched+gobuf_sp)(DI) |
| | MOVQ BP, (g_sched+gobuf_bp)(DI) |
| | MOVQ DX, (g_sched+gobuf_ctxt)(DI) |
| |
|
| | MOVQ m_g0(BX), SI |
| | CMPQ DI, SI |
| | JNE 3(PC) |
| | CALL runtime路badmorestackg0(SB) |
| | CALL runtime路abort(SB) |
| |
|
| | |
| | MOVQ m_gsignal(BX), SI |
| | CMPQ DI, SI |
| | JNE 3(PC) |
| | CALL runtime路badmorestackgsignal(SB) |
| | CALL runtime路abort(SB) |
| |
|
| | |
| | |
| | NOP SP |
| | MOVQ 8(SP), AX |
| | MOVQ AX, (m_morebuf+gobuf_pc)(BX) |
| | LEAQ 16(SP), AX |
| | MOVQ AX, (m_morebuf+gobuf_sp)(BX) |
| | MOVQ DI, (m_morebuf+gobuf_g)(BX) |
| |
|
| | |
| | |
| | #ifdef GOEXPERIMENT_runtimesecret |
| | CMPL g_secret(DI), $0 |
| | JEQ nosecret |
| | CALL 路secretEraseRegisters(SB) |
| | get_tls(CX) |
| | MOVQ g(CX), DI |
| | MOVQ g_m(DI), BX |
| | nosecret: |
| | #endif |
| |
|
| | |
| | MOVQ m_g0(BX), BX |
| | MOVQ BX, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(BX), SP |
| | MOVQ $0, BP |
| | CALL runtime路newstack(SB) |
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | |
| | TEXT runtime路morestack_noctxt(SB),NOSPLIT,$0 |
| | MOVL $0, DX |
| | JMP runtime路morestack(SB) |
| |
|
| | |
| | TEXT 路spillArgs(SB),NOSPLIT,$0-0 |
| | MOVQ AX, 0(R12) |
| | MOVQ BX, 8(R12) |
| | MOVQ CX, 16(R12) |
| | MOVQ DI, 24(R12) |
| | MOVQ SI, 32(R12) |
| | MOVQ R8, 40(R12) |
| | MOVQ R9, 48(R12) |
| | MOVQ R10, 56(R12) |
| | MOVQ R11, 64(R12) |
| | MOVQ X0, 72(R12) |
| | MOVQ X1, 80(R12) |
| | MOVQ X2, 88(R12) |
| | MOVQ X3, 96(R12) |
| | MOVQ X4, 104(R12) |
| | MOVQ X5, 112(R12) |
| | MOVQ X6, 120(R12) |
| | MOVQ X7, 128(R12) |
| | MOVQ X8, 136(R12) |
| | MOVQ X9, 144(R12) |
| | MOVQ X10, 152(R12) |
| | MOVQ X11, 160(R12) |
| | MOVQ X12, 168(R12) |
| | MOVQ X13, 176(R12) |
| | MOVQ X14, 184(R12) |
| | RET |
| |
|
| | |
| | TEXT 路unspillArgs(SB),NOSPLIT,$0-0 |
| | MOVQ 0(R12), AX |
| | MOVQ 8(R12), BX |
| | MOVQ 16(R12), CX |
| | MOVQ 24(R12), DI |
| | MOVQ 32(R12), SI |
| | MOVQ 40(R12), R8 |
| | MOVQ 48(R12), R9 |
| | MOVQ 56(R12), R10 |
| | MOVQ 64(R12), R11 |
| | MOVQ 72(R12), X0 |
| | MOVQ 80(R12), X1 |
| | MOVQ 88(R12), X2 |
| | MOVQ 96(R12), X3 |
| | MOVQ 104(R12), X4 |
| | MOVQ 112(R12), X5 |
| | MOVQ 120(R12), X6 |
| | MOVQ 128(R12), X7 |
| | MOVQ 136(R12), X8 |
| | MOVQ 144(R12), X9 |
| | MOVQ 152(R12), X10 |
| | MOVQ 160(R12), X11 |
| | MOVQ 168(R12), X12 |
| | MOVQ 176(R12), X13 |
| | MOVQ 184(R12), X14 |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | #define DISPATCH(NAME,MAXSIZE) \ |
| | CMPQ CX, $MAXSIZE; \ |
| | JA 3(PC); \ |
| | MOVQ $NAME(SB), AX; \ |
| | JMP AX |
| | |
| |
|
| | TEXT 路reflectcall(SB), NOSPLIT, $0-48 |
| | MOVLQZX frameSize+32(FP), CX |
| | DISPATCH(runtime路call16, 16) |
| | DISPATCH(runtime路call32, 32) |
| | DISPATCH(runtime路call64, 64) |
| | DISPATCH(runtime路call128, 128) |
| | DISPATCH(runtime路call256, 256) |
| | DISPATCH(runtime路call512, 512) |
| | DISPATCH(runtime路call1024, 1024) |
| | DISPATCH(runtime路call2048, 2048) |
| | DISPATCH(runtime路call4096, 4096) |
| | DISPATCH(runtime路call8192, 8192) |
| | DISPATCH(runtime路call16384, 16384) |
| | DISPATCH(runtime路call32768, 32768) |
| | DISPATCH(runtime路call65536, 65536) |
| | DISPATCH(runtime路call131072, 131072) |
| | DISPATCH(runtime路call262144, 262144) |
| | DISPATCH(runtime路call524288, 524288) |
| | DISPATCH(runtime路call1048576, 1048576) |
| | DISPATCH(runtime路call2097152, 2097152) |
| | DISPATCH(runtime路call4194304, 4194304) |
| | DISPATCH(runtime路call8388608, 8388608) |
| | DISPATCH(runtime路call16777216, 16777216) |
| | DISPATCH(runtime路call33554432, 33554432) |
| | DISPATCH(runtime路call67108864, 67108864) |
| | DISPATCH(runtime路call134217728, 134217728) |
| | DISPATCH(runtime路call268435456, 268435456) |
| | DISPATCH(runtime路call536870912, 536870912) |
| | DISPATCH(runtime路call1073741824, 1073741824) |
| | MOVQ $runtime路badreflectcall(SB), AX |
| | JMP AX |
| |
|
| | #define CALLFN(NAME,MAXSIZE) \ |
| | TEXT NAME(SB), WRAPPER, $MAXSIZE-48; \ |
| | NO_LOCAL_POINTERS; \ |
| | \ |
| | MOVQ stackArgs+16(FP), SI; \ |
| | MOVLQZX stackArgsSize+24(FP), CX; \ |
| | MOVQ SP, DI; \ |
| | REP;MOVSB; \ |
| | \ |
| | MOVQ regArgs+40(FP), R12; \ |
| | CALL 路unspillArgs(SB); \ |
| | \ |
| | MOVQ f+8(FP), DX; \ |
| | PCDATA $PCDATA_StackMapIndex, $0; \ |
| | MOVQ (DX), R12; \ |
| | CALL R12; \ |
| | \ |
| | MOVQ regArgs+40(FP), R12; \ |
| | CALL 路spillArgs(SB); \ |
| | MOVLQZX stackArgsSize+24(FP), CX; \ |
| | MOVLQZX stackRetOffset+28(FP), BX; \ |
| | MOVQ stackArgs+16(FP), DI; \ |
| | MOVQ stackArgsType+0(FP), DX; \ |
| | MOVQ SP, SI; \ |
| | ADDQ BX, DI; \ |
| | ADDQ BX, SI; \ |
| | SUBQ BX, CX; \ |
| | CALL callRet<>(SB); \ |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | TEXT callRet<>(SB), NOSPLIT, $40-0 |
| | NO_LOCAL_POINTERS |
| | MOVQ DX, 0(SP) |
| | MOVQ DI, 8(SP) |
| | MOVQ SI, 16(SP) |
| | MOVQ CX, 24(SP) |
| | MOVQ R12, 32(SP) |
| | CALL runtime路reflectcallmove(SB) |
| | RET |
| |
|
| | CALLFN(路call16, 16) |
| | CALLFN(路call32, 32) |
| | CALLFN(路call64, 64) |
| | CALLFN(路call128, 128) |
| | CALLFN(路call256, 256) |
| | CALLFN(路call512, 512) |
| | CALLFN(路call1024, 1024) |
| | CALLFN(路call2048, 2048) |
| | CALLFN(路call4096, 4096) |
| | CALLFN(路call8192, 8192) |
| | CALLFN(路call16384, 16384) |
| | CALLFN(路call32768, 32768) |
| | CALLFN(路call65536, 65536) |
| | CALLFN(路call131072, 131072) |
| | CALLFN(路call262144, 262144) |
| | CALLFN(路call524288, 524288) |
| | CALLFN(路call1048576, 1048576) |
| | CALLFN(路call2097152, 2097152) |
| | CALLFN(路call4194304, 4194304) |
| | CALLFN(路call8388608, 8388608) |
| | CALLFN(路call16777216, 16777216) |
| | CALLFN(路call33554432, 33554432) |
| | CALLFN(路call67108864, 67108864) |
| | CALLFN(路call134217728, 134217728) |
| | CALLFN(路call268435456, 268435456) |
| | CALLFN(路call536870912, 536870912) |
| | CALLFN(路call1073741824, 1073741824) |
| |
|
| | TEXT runtime路procyieldAsm(SB),NOSPLIT,$0-0 |
| | MOVL cycles+0(FP), AX |
| | TESTL AX, AX |
| | JZ done |
| | again: |
| | PAUSE |
| | SUBL $1, AX |
| | JNZ again |
| | done: |
| | RET |
| |
|
| |
|
| | TEXT 路publicationBarrier<ABIInternal>(SB),NOSPLIT,$0-0 |
| | |
| | |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$0 |
| | |
| | |
| | |
| | MOVQ $runtime路systemstack_switch+8(SB), R9 |
| | MOVQ R9, (g_sched+gobuf_pc)(R14) |
| | LEAQ 8(SP), R9 |
| | MOVQ R9, (g_sched+gobuf_sp)(R14) |
| | MOVQ BP, (g_sched+gobuf_bp)(R14) |
| | |
| | MOVQ (g_sched+gobuf_ctxt)(R14), R9 |
| | TESTQ R9, R9 |
| | JZ 2(PC) |
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | |
| | |
| | |
| | TEXT 路asmcgocall_no_g(SB),NOSPLIT,$32-16 |
| | MOVQ fn+0(FP), AX |
| | MOVQ arg+8(FP), BX |
| | MOVQ SP, DX |
| | ANDQ $~15, SP // alignment |
| | MOVQ DX, 8(SP) |
| | MOVQ BX, DI // DI = first argument in AMD64 ABI |
| | MOVQ BX, CX |
| | CALL AX |
| | MOVQ 8(SP), DX |
| | MOVQ DX, SP |
| | RET |
| |
|
| | |
| | |
| | TEXT 路asmcgocall_landingpad(SB),NOSPLIT,$0-0 |
| | #ifdef GOOS_windows |
| | |
| | |
| | ADJSP $32 |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ BX, CX |
| | CALL AX |
| | |
| | |
| | BYTE $0x90 |
| | ADJSP $-32 |
| | RET |
| | #endif |
| | |
| | MOVQ BX, DI |
| | JMP AX |
| |
|
| | |
| | |
| | |
| | |
| | TEXT 路asmcgocall(SB),NOSPLIT,$0-20 |
| | |
| | |
| | |
| | |
| | get_tls(CX) |
| | MOVQ g(CX), DI |
| | CMPQ DI, $0 |
| | JEQ nosave |
| | MOVQ g_m(DI), R8 |
| | MOVQ m_gsignal(R8), SI |
| | CMPQ DI, SI |
| | JEQ nosave |
| | MOVQ m_g0(R8), SI |
| | CMPQ DI, SI |
| | JEQ nosave |
| |
|
| | |
| | |
| | |
| | |
| | #ifdef GOEXPERIMENT_runtimesecret |
| | CMPL g_secret(DI), $0 |
| | JEQ nosecret |
| | CALL 路secretEraseRegisters(SB) |
| |
|
| | nosecret: |
| | #endif |
| | MOVQ fn+0(FP), AX |
| | MOVQ arg+8(FP), BX |
| | MOVQ SP, DX |
| | |
| | // Switch to system stack. |
| | // The original frame pointer is stored in BP, |
| | // which is useful for stack unwinding. |
| | CALL gosave_systemstack_switch<>(SB) |
| | MOVQ SI, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(SI), SP |
| | |
| | // Now on a scheduling stack (a pthread-created stack). |
| | SUBQ $16, SP |
| | ANDQ $~15, SP // alignment for gcc ABI |
| | MOVQ DI, 8(SP) // save g |
| | MOVQ (g_stack+stack_hi)(DI), DI |
| | SUBQ DX, DI |
| | MOVQ DI, 0(SP) // save depth in stack (can't just save SP, as stack might be copied during a callback) |
| | CALL runtime路asmcgocall_landingpad(SB) |
| | |
| | // Restore registers, g, stack pointer. |
| | get_tls(CX) |
| | MOVQ 8(SP), DI |
| | MOVQ (g_stack+stack_hi)(DI), SI |
| | SUBQ 0(SP), SI |
| | MOVQ DI, g(CX) |
| | MOVQ SI, SP |
| | |
| | MOVL AX, ret+16(FP) |
| | RET |
| | |
| | nosave: |
| | // Running on a system stack, perhaps even without a g. |
| | // Having no g can happen during thread creation or thread teardown |
| | // (see needm/dropm on Solaris, for example). |
| | // This code is like the above sequence but without saving/restoring g |
| | // and without worrying about the stack moving out from under us |
| | // (because we're on a system stack, not a goroutine stack). |
| | // The above code could be used directly if already on a system stack, |
| | // but then the only path through this code would be a rare case on Solaris. |
| | // Using this code for all "already on system stack" calls exercises it more, |
| | // which should help keep it correct. |
| | MOVQ fn+0(FP), AX |
| | MOVQ arg+8(FP), BX |
| | MOVQ SP, DX |
| | |
| | SUBQ $16, SP |
| | ANDQ $~15, SP |
| | MOVQ $0, 8(SP) // where above code stores g, in case someone looks during debugging |
| | MOVQ DX, 0(SP) // save original stack pointer |
| | CALL runtime路asmcgocall_landingpad(SB) |
| | MOVQ 0(SP), SI // restore original stack pointer |
| | MOVQ SI, SP |
| | MOVL AX, ret+16(FP) |
| | RET |
| | |
| | #ifdef GOOS_windows |
| | // Dummy TLS that's used on Windows so that we don't crash trying |
| | // to restore the G register in needm. needm and its callees are |
| | // very careful never to actually use the G, the TLS just can't be |
| | // unset since we're in Go code. |
| | GLOBL zeroTLS<>(SB),RODATA,$const_tlsSize |
| | #endif |
| | |
| | // func cgocallback(fn, frame unsafe.Pointer, ctxt uintptr) |
| | // See cgocall.go for more details. |
| | TEXT 路cgocallback(SB),NOSPLIT,$24-24 |
| | NO_LOCAL_POINTERS |
| | |
| | // Skip cgocallbackg, just dropm when fn is nil, and frame is the saved g. |
| | // It is used to dropm while thread is exiting. |
| | MOVQ fn+0(FP), AX |
| | CMPQ AX, $0 |
| | JNE loadg |
| | // Restore the g from frame. |
| | get_tls(CX) |
| | MOVQ frame+8(FP), BX |
| | MOVQ BX, g(CX) |
| | JMP dropm |
| | |
| | loadg: |
| | // If g is nil, Go did not create the current thread, |
| | // or if this thread never called into Go on pthread platforms. |
| | // Call needm to obtain one m for temporary use. |
| | // In this case, we're running on the thread stack, so there's |
| | // lots of space, but the linker doesn't know. Hide the call from |
| | // the linker analysis by using an indirect call through AX. |
| | get_tls(CX) |
| | #ifdef GOOS_windows |
| | MOVL $0, BX |
| | CMPQ CX, $0 |
| | JEQ 2(PC) |
| | #endif |
| | MOVQ g(CX), BX |
| | CMPQ BX, $0 |
| | JEQ needm |
| | MOVQ g_m(BX), BX |
| | MOVQ BX, savedm-8(SP) // saved copy of oldm |
| | JMP havem |
| | needm: |
| | #ifdef GOOS_windows |
| | // Set up a dummy TLS value. needm is careful not to use it, |
| | // but it needs to be there to prevent autogenerated code from |
| | // crashing when it loads from it. |
| | // We don't need to clear it or anything later because needm |
| | // will set up TLS properly. |
| | MOVQ $zeroTLS<>(SB), DI |
| | CALL runtime路settls(SB) |
| | #endif |
| | // On some platforms (Windows) we cannot call needm through |
| | // an ABI wrapper because there's no TLS set up, and the ABI |
| | // wrapper will try to restore the G register (R14) from TLS. |
| | // Clear X15 because Go expects it and we're not calling |
| | // through a wrapper, but otherwise avoid setting the G |
| | // register in the wrapper and call needm directly. It |
| | // takes no arguments and doesn't return any values so |
| | // there's no need to handle that. Clear R14 so that there's |
| | // a bad value in there, in case needm tries to use it. |
| | XORPS X15, X15 |
| | XORQ R14, R14 |
| | MOVQ $runtime路needAndBindM<ABIInternal>(SB), AX |
| | CALL AX |
| | MOVQ $0, savedm-8(SP) |
| | get_tls(CX) |
| | MOVQ g(CX), BX |
| | MOVQ g_m(BX), BX |
| | |
| | // Set m->sched.sp = SP, so that if a panic happens |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ m_g0(BX), SI |
| | MOVQ SP, (g_sched+gobuf_sp)(SI) |
| |
|
| | havem: |
| | |
| | |
| | |
| | |
| | |
| | MOVQ m_g0(BX), SI |
| | MOVQ (g_sched+gobuf_sp)(SI), AX |
| | MOVQ AX, 0(SP) |
| | MOVQ SP, (g_sched+gobuf_sp)(SI) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ m_curg(BX), SI |
| | MOVQ SI, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(SI), DI |
| | MOVQ (g_sched+gobuf_pc)(SI), BX |
| | MOVQ BX, -8(DI) |
| | |
| | MOVQ fn+0(FP), BX |
| | MOVQ frame+8(FP), CX |
| | MOVQ ctxt+16(FP), DX |
| | // Compute the size of the frame, including return PC and, if |
| | // GOEXPERIMENT=framepointer, the saved base pointer |
| | LEAQ fn+0(FP), AX |
| | SUBQ SP, AX // AX is our actual frame size |
| | SUBQ AX, DI // Allocate the same frame size on the g stack |
| | MOVQ DI, SP |
| | |
| | MOVQ BX, 0(SP) |
| | MOVQ CX, 8(SP) |
| | MOVQ DX, 16(SP) |
| | MOVQ $runtime路cgocallbackg(SB), AX |
| | CALL AX // indirect call to bypass nosplit check. We're on a different stack now. |
| | |
| | // Compute the size of the frame again. FP and SP have |
| | // completely different values here than they did above, |
| | // but only their difference matters. |
| | LEAQ fn+0(FP), AX |
| | SUBQ SP, AX |
| | |
| | // Restore g->sched (== m->curg->sched) from saved values. |
| | get_tls(CX) |
| | MOVQ g(CX), SI |
| | MOVQ SP, DI |
| | ADDQ AX, DI |
| | MOVQ -8(DI), BX |
| | MOVQ BX, (g_sched+gobuf_pc)(SI) |
| | MOVQ DI, (g_sched+gobuf_sp)(SI) |
| |
|
| | |
| | |
| | |
| | MOVQ g(CX), BX |
| | MOVQ g_m(BX), BX |
| | MOVQ m_g0(BX), SI |
| | MOVQ SI, g(CX) |
| | MOVQ (g_sched+gobuf_sp)(SI), SP |
| | MOVQ 0(SP), AX |
| | MOVQ AX, (g_sched+gobuf_sp)(SI) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ savedm-8(SP), BX |
| | CMPQ BX, $0 |
| | JNE done |
| |
|
| | |
| | MOVQ _cgo_pthread_key_created(SB), AX |
| | |
| | CMPQ AX, $0 |
| | JEQ dropm |
| | CMPQ (AX), $0 |
| | JNE done |
| |
|
| | dropm: |
| | MOVQ $runtime路dropm(SB), AX |
| | CALL AX |
| | #ifdef GOOS_windows |
| | |
| | |
| | |
| | XORQ DI, DI |
| | CALL runtime路settls(SB) |
| | #endif |
| | done: |
| |
|
| | |
| | RET |
| |
|
| | |
| | |
| | TEXT runtime路setg(SB), NOSPLIT, $0-8 |
| | MOVQ gg+0(FP), BX |
| | get_tls(CX) |
| | MOVQ BX, g(CX) |
| | RET |
| |
|
| | |
| | TEXT setg_gcc<>(SB),NOSPLIT,$0 |
| | get_tls(AX) |
| | MOVQ DI, g(AX) |
| | MOVQ DI, R14 |
| | RET |
| |
|
| | TEXT runtime路abort(SB),NOSPLIT,$0-0 |
| | INT $3 |
| | loop: |
| | JMP loop |
| |
|
| | |
| | TEXT runtime路stackcheck(SB), NOSPLIT|NOFRAME, $0-0 |
| | get_tls(CX) |
| | MOVQ g(CX), AX |
| | CMPQ (g_stack+stack_hi)(AX), SP |
| | JHI 2(PC) |
| | CALL runtime路abort(SB) |
| | CMPQ SP, (g_stack+stack_lo)(AX) |
| | JHI 2(PC) |
| | CALL runtime路abort(SB) |
| | RET |
| |
|
| | |
| | TEXT runtime路cputicks(SB),NOSPLIT,$0-0 |
| | CMPB internal鈭昪pu路X86+const_offsetX86HasRDTSCP(SB), $1 |
| | JNE fences |
| | |
| | |
| | |
| | RDTSCP |
| | done: |
| | SHLQ $32, DX |
| | ADDQ DX, AX |
| | MOVQ AX, ret+0(FP) |
| | RET |
| | fences: |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MFENCE |
| | LFENCE |
| | RDTSC |
| | JMP done |
| |
|
| | |
| | |
| | TEXT runtime路memhash<ABIInternal>(SB),NOSPLIT,$0-32 |
| | |
| | |
| | |
| | CMPB runtime路useAeshash(SB), $0 |
| | JEQ noaes |
| | JMP aeshashbody<>(SB) |
| | noaes: |
| | JMP runtime路memhashFallback<ABIInternal>(SB) |
| |
|
| | |
| | TEXT runtime路strhash<ABIInternal>(SB),NOSPLIT,$0-24 |
| | |
| | |
| | CMPB runtime路useAeshash(SB), $0 |
| | JEQ noaes |
| | MOVQ 8(AX), CX |
| | MOVQ (AX), AX |
| | JMP aeshashbody<>(SB) |
| | noaes: |
| | JMP runtime路strhashFallback<ABIInternal>(SB) |
| |
|
| | |
| | |
| | |
| | |
| | TEXT aeshashbody<>(SB),NOSPLIT,$0-0 |
| | |
| | MOVQ BX, X0 |
| | PINSRW $4, CX, X0 |
| | PSHUFHW $0, X0, X0 |
| | MOVO X0, X1 |
| | PXOR runtime路aeskeysched(SB), X0 |
| | AESENC X0, X0 |
| |
|
| | CMPQ CX, $16 |
| | JB aes0to15 |
| | JE aes16 |
| | CMPQ CX, $32 |
| | JBE aes17to32 |
| | CMPQ CX, $64 |
| | JBE aes33to64 |
| | CMPQ CX, $128 |
| | JBE aes65to128 |
| | JMP aes129plus |
| |
|
| | aes0to15: |
| | TESTQ CX, CX |
| | JE aes0 |
| |
|
| | ADDQ $16, AX |
| | TESTW $0xff0, AX |
| | JE endofpage |
| |
|
| | |
| | |
| | MOVOU -16(AX), X1 |
| | ADDQ CX, CX |
| | MOVQ $masks<>(SB), AX |
| | PAND (AX)(CX*8), X1 |
| | final1: |
| | PXOR X0, X1 |
| | AESENC X1, X1 |
| | AESENC X1, X1 |
| | AESENC X1, X1 |
| | MOVQ X1, AX |
| | RET |
| |
|
| | endofpage: |
| | |
| | |
| | |
| | MOVOU -32(AX)(CX*1), X1 |
| | ADDQ CX, CX |
| | MOVQ $shifts<>(SB), AX |
| | PSHUFB (AX)(CX*8), X1 |
| | JMP final1 |
| |
|
| | aes0: |
| | |
| | AESENC X0, X0 |
| | MOVQ X0, AX |
| | RET |
| |
|
| | aes16: |
| | MOVOU (AX), X1 |
| | JMP final1 |
| |
|
| | aes17to32: |
| | |
| | PXOR runtime路aeskeysched+16(SB), X1 |
| | AESENC X1, X1 |
| |
|
| | |
| | MOVOU (AX), X2 |
| | MOVOU -16(AX)(CX*1), X3 |
| |
|
| | |
| | PXOR X0, X2 |
| | PXOR X1, X3 |
| |
|
| | |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| |
|
| | |
| | PXOR X3, X2 |
| | MOVQ X2, AX |
| | RET |
| |
|
| | aes33to64: |
| | |
| | MOVO X1, X2 |
| | MOVO X1, X3 |
| | PXOR runtime路aeskeysched+16(SB), X1 |
| | PXOR runtime路aeskeysched+32(SB), X2 |
| | PXOR runtime路aeskeysched+48(SB), X3 |
| | AESENC X1, X1 |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| |
|
| | MOVOU (AX), X4 |
| | MOVOU 16(AX), X5 |
| | MOVOU -32(AX)(CX*1), X6 |
| | MOVOU -16(AX)(CX*1), X7 |
| |
|
| | PXOR X0, X4 |
| | PXOR X1, X5 |
| | PXOR X2, X6 |
| | PXOR X3, X7 |
| |
|
| | AESENC X4, X4 |
| | AESENC X5, X5 |
| | AESENC X6, X6 |
| | AESENC X7, X7 |
| |
|
| | AESENC X4, X4 |
| | AESENC X5, X5 |
| | AESENC X6, X6 |
| | AESENC X7, X7 |
| |
|
| | AESENC X4, X4 |
| | AESENC X5, X5 |
| | AESENC X6, X6 |
| | AESENC X7, X7 |
| |
|
| | PXOR X6, X4 |
| | PXOR X7, X5 |
| | PXOR X5, X4 |
| | MOVQ X4, AX |
| | RET |
| |
|
| | aes65to128: |
| | |
| | MOVO X1, X2 |
| | MOVO X1, X3 |
| | MOVO X1, X4 |
| | MOVO X1, X5 |
| | MOVO X1, X6 |
| | MOVO X1, X7 |
| | PXOR runtime路aeskeysched+16(SB), X1 |
| | PXOR runtime路aeskeysched+32(SB), X2 |
| | PXOR runtime路aeskeysched+48(SB), X3 |
| | PXOR runtime路aeskeysched+64(SB), X4 |
| | PXOR runtime路aeskeysched+80(SB), X5 |
| | PXOR runtime路aeskeysched+96(SB), X6 |
| | PXOR runtime路aeskeysched+112(SB), X7 |
| | AESENC X1, X1 |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| | AESENC X4, X4 |
| | AESENC X5, X5 |
| | AESENC X6, X6 |
| | AESENC X7, X7 |
| |
|
| | |
| | MOVOU (AX), X8 |
| | MOVOU 16(AX), X9 |
| | MOVOU 32(AX), X10 |
| | MOVOU 48(AX), X11 |
| | MOVOU -64(AX)(CX*1), X12 |
| | MOVOU -48(AX)(CX*1), X13 |
| | MOVOU -32(AX)(CX*1), X14 |
| | MOVOU -16(AX)(CX*1), X15 |
| |
|
| | |
| | PXOR X0, X8 |
| | PXOR X1, X9 |
| | PXOR X2, X10 |
| | PXOR X3, X11 |
| | PXOR X4, X12 |
| | PXOR X5, X13 |
| | PXOR X6, X14 |
| | PXOR X7, X15 |
| |
|
| | |
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| |
|
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| |
|
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| |
|
| | |
| | PXOR X12, X8 |
| | PXOR X13, X9 |
| | PXOR X14, X10 |
| | PXOR X15, X11 |
| | PXOR X10, X8 |
| | PXOR X11, X9 |
| | PXOR X9, X8 |
| | |
| | PXOR X15, X15 |
| | MOVQ X8, AX |
| | RET |
| |
|
| | aes129plus: |
| | |
| | MOVO X1, X2 |
| | MOVO X1, X3 |
| | MOVO X1, X4 |
| | MOVO X1, X5 |
| | MOVO X1, X6 |
| | MOVO X1, X7 |
| | PXOR runtime路aeskeysched+16(SB), X1 |
| | PXOR runtime路aeskeysched+32(SB), X2 |
| | PXOR runtime路aeskeysched+48(SB), X3 |
| | PXOR runtime路aeskeysched+64(SB), X4 |
| | PXOR runtime路aeskeysched+80(SB), X5 |
| | PXOR runtime路aeskeysched+96(SB), X6 |
| | PXOR runtime路aeskeysched+112(SB), X7 |
| | AESENC X1, X1 |
| | AESENC X2, X2 |
| | AESENC X3, X3 |
| | AESENC X4, X4 |
| | AESENC X5, X5 |
| | AESENC X6, X6 |
| | AESENC X7, X7 |
| |
|
| | |
| | MOVOU -128(AX)(CX*1), X8 |
| | MOVOU -112(AX)(CX*1), X9 |
| | MOVOU -96(AX)(CX*1), X10 |
| | MOVOU -80(AX)(CX*1), X11 |
| | MOVOU -64(AX)(CX*1), X12 |
| | MOVOU -48(AX)(CX*1), X13 |
| | MOVOU -32(AX)(CX*1), X14 |
| | MOVOU -16(AX)(CX*1), X15 |
| |
|
| | |
| | PXOR X0, X8 |
| | PXOR X1, X9 |
| | PXOR X2, X10 |
| | PXOR X3, X11 |
| | PXOR X4, X12 |
| | PXOR X5, X13 |
| | PXOR X6, X14 |
| | PXOR X7, X15 |
| |
|
| | |
| | DECQ CX |
| | SHRQ $7, CX |
| |
|
| | PCALIGN $16 |
| | aesloop: |
| | |
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| |
|
| | |
| | MOVOU (AX), X0 |
| | MOVOU 16(AX), X1 |
| | MOVOU 32(AX), X2 |
| | MOVOU 48(AX), X3 |
| | AESENC X0, X8 |
| | AESENC X1, X9 |
| | AESENC X2, X10 |
| | AESENC X3, X11 |
| | MOVOU 64(AX), X4 |
| | MOVOU 80(AX), X5 |
| | MOVOU 96(AX), X6 |
| | MOVOU 112(AX), X7 |
| | AESENC X4, X12 |
| | AESENC X5, X13 |
| | AESENC X6, X14 |
| | AESENC X7, X15 |
| |
|
| | ADDQ $128, AX |
| | DECQ CX |
| | JNE aesloop |
| |
|
| | |
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| | AESENC X8, X8 |
| | AESENC X9, X9 |
| | AESENC X10, X10 |
| | AESENC X11, X11 |
| | AESENC X12, X12 |
| | AESENC X13, X13 |
| | AESENC X14, X14 |
| | AESENC X15, X15 |
| |
|
| | PXOR X12, X8 |
| | PXOR X13, X9 |
| | PXOR X14, X10 |
| | PXOR X15, X11 |
| | PXOR X10, X8 |
| | PXOR X11, X9 |
| | PXOR X9, X8 |
| | |
| | PXOR X15, X15 |
| | MOVQ X8, AX |
| | RET |
| |
|
| | |
| | |
| | TEXT runtime路memhash32<ABIInternal>(SB),NOSPLIT,$0-24 |
| | |
| | |
| | CMPB runtime路useAeshash(SB), $0 |
| | JEQ noaes |
| | MOVQ BX, X0 |
| | PINSRD $2, (AX), X0 |
| | AESENC runtime路aeskeysched+0(SB), X0 |
| | AESENC runtime路aeskeysched+16(SB), X0 |
| | AESENC runtime路aeskeysched+32(SB), X0 |
| | MOVQ X0, AX |
| | RET |
| | noaes: |
| | JMP runtime路memhash32Fallback<ABIInternal>(SB) |
| |
|
| | |
| | |
| | TEXT runtime路memhash64<ABIInternal>(SB),NOSPLIT,$0-24 |
| | |
| | |
| | CMPB runtime路useAeshash(SB), $0 |
| | JEQ noaes |
| | MOVQ BX, X0 |
| | PINSRQ $1, (AX), X0 |
| | AESENC runtime路aeskeysched+0(SB), X0 |
| | AESENC runtime路aeskeysched+16(SB), X0 |
| | AESENC runtime路aeskeysched+32(SB), X0 |
| | MOVQ X0, AX |
| | RET |
| | noaes: |
| | JMP runtime路memhash64Fallback<ABIInternal>(SB) |
| |
|
| | |
| | DATA masks<>+0x00(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x08(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x10(SB)/8, $0x00000000000000ff |
| | DATA masks<>+0x18(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x20(SB)/8, $0x000000000000ffff |
| | DATA masks<>+0x28(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x30(SB)/8, $0x0000000000ffffff |
| | DATA masks<>+0x38(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x40(SB)/8, $0x00000000ffffffff |
| | DATA masks<>+0x48(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x50(SB)/8, $0x000000ffffffffff |
| | DATA masks<>+0x58(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x60(SB)/8, $0x0000ffffffffffff |
| | DATA masks<>+0x68(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x70(SB)/8, $0x00ffffffffffffff |
| | DATA masks<>+0x78(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x80(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0x88(SB)/8, $0x0000000000000000 |
| | DATA masks<>+0x90(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0x98(SB)/8, $0x00000000000000ff |
| | DATA masks<>+0xa0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xa8(SB)/8, $0x000000000000ffff |
| | DATA masks<>+0xb0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xb8(SB)/8, $0x0000000000ffffff |
| | DATA masks<>+0xc0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xc8(SB)/8, $0x00000000ffffffff |
| | DATA masks<>+0xd0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xd8(SB)/8, $0x000000ffffffffff |
| | DATA masks<>+0xe0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xe8(SB)/8, $0x0000ffffffffffff |
| | DATA masks<>+0xf0(SB)/8, $0xffffffffffffffff |
| | DATA masks<>+0xf8(SB)/8, $0x00ffffffffffffff |
| | GLOBL masks<>(SB),RODATA,$256 |
| |
|
| | |
| | TEXT 路checkASM(SB),NOSPLIT,$0-1 |
| | |
| | MOVQ $masks<>(SB), AX |
| | MOVQ $shifts<>(SB), BX |
| | ORQ BX, AX |
| | TESTQ $15, AX |
| | SETEQ ret+0(FP) |
| | RET |
| |
|
| | |
| | |
| | |
| | DATA shifts<>+0x00(SB)/8, $0x0000000000000000 |
| | DATA shifts<>+0x08(SB)/8, $0x0000000000000000 |
| | DATA shifts<>+0x10(SB)/8, $0xffffffffffffff0f |
| | DATA shifts<>+0x18(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x20(SB)/8, $0xffffffffffff0f0e |
| | DATA shifts<>+0x28(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x30(SB)/8, $0xffffffffff0f0e0d |
| | DATA shifts<>+0x38(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x40(SB)/8, $0xffffffff0f0e0d0c |
| | DATA shifts<>+0x48(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x50(SB)/8, $0xffffff0f0e0d0c0b |
| | DATA shifts<>+0x58(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x60(SB)/8, $0xffff0f0e0d0c0b0a |
| | DATA shifts<>+0x68(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x70(SB)/8, $0xff0f0e0d0c0b0a09 |
| | DATA shifts<>+0x78(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x80(SB)/8, $0x0f0e0d0c0b0a0908 |
| | DATA shifts<>+0x88(SB)/8, $0xffffffffffffffff |
| | DATA shifts<>+0x90(SB)/8, $0x0e0d0c0b0a090807 |
| | DATA shifts<>+0x98(SB)/8, $0xffffffffffffff0f |
| | DATA shifts<>+0xa0(SB)/8, $0x0d0c0b0a09080706 |
| | DATA shifts<>+0xa8(SB)/8, $0xffffffffffff0f0e |
| | DATA shifts<>+0xb0(SB)/8, $0x0c0b0a0908070605 |
| | DATA shifts<>+0xb8(SB)/8, $0xffffffffff0f0e0d |
| | DATA shifts<>+0xc0(SB)/8, $0x0b0a090807060504 |
| | DATA shifts<>+0xc8(SB)/8, $0xffffffff0f0e0d0c |
| | DATA shifts<>+0xd0(SB)/8, $0x0a09080706050403 |
| | DATA shifts<>+0xd8(SB)/8, $0xffffff0f0e0d0c0b |
| | DATA shifts<>+0xe0(SB)/8, $0x0908070605040302 |
| | DATA shifts<>+0xe8(SB)/8, $0xffff0f0e0d0c0b0a |
| | DATA shifts<>+0xf0(SB)/8, $0x0807060504030201 |
| | DATA shifts<>+0xf8(SB)/8, $0xff0f0e0d0c0b0a09 |
| | GLOBL shifts<>(SB),RODATA,$256 |
| |
|
| | |
| | |
| | TEXT _cgo_topofstack(SB),NOSPLIT,$0 |
| | get_tls(CX) |
| | MOVQ g(CX), AX |
| | MOVQ g_m(AX), AX |
| | MOVQ m_curg(AX), AX |
| | MOVQ (g_stack+stack_hi)(AX), AX |
| | RET |
| |
|
| | |
| | |
| | TEXT runtime路goexit(SB),NOSPLIT|TOPFRAME|NOFRAME,$0-0 |
| | BYTE $0x90 |
| | CALL runtime路goexit1(SB) |
| | |
| | BYTE $0x90 |
| |
|
| | |
| | TEXT runtime路addmoduledata(SB),NOSPLIT,$0-0 |
| | PUSHQ R15 |
| | MOVQ runtime路lastmoduledatap(SB), AX |
| | MOVQ DI, moduledata_next(AX) |
| | MOVQ DI, runtime路lastmoduledatap(SB) |
| | POPQ R15 |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | TEXT 路sigpanic0(SB),NOSPLIT,$0-0 |
| | get_tls(R14) |
| | MOVQ g(R14), R14 |
| | XORPS X15, X15 |
| | JMP 路sigpanic<ABIInternal>(SB) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT gcWriteBarrier<>(SB),NOSPLIT,$112 |
| | |
| | |
| | MOVQ R12, 96(SP) |
| | MOVQ R13, 104(SP) |
| | retry: |
| | |
| | |
| | MOVQ g_m(R14), R13 |
| | MOVQ m_p(R13), R13 |
| | |
| | MOVQ (p_wbBuf+wbBuf_next)(R13), R12 |
| | ADDQ R11, R12 |
| | |
| | CMPQ R12, (p_wbBuf+wbBuf_end)(R13) |
| | JA flush |
| | |
| | MOVQ R12, (p_wbBuf+wbBuf_next)(R13) |
| | |
| | SUBQ R11, R12 |
| | MOVQ R12, R11 |
| | |
| | MOVQ 96(SP), R12 |
| | MOVQ 104(SP), R13 |
| | RET |
| |
|
| | flush: |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | MOVQ DI, 0(SP) |
| | MOVQ AX, 8(SP) |
| | MOVQ BX, 16(SP) |
| | MOVQ CX, 24(SP) |
| | MOVQ DX, 32(SP) |
| | |
| | MOVQ SI, 40(SP) |
| | MOVQ BP, 48(SP) |
| | MOVQ R8, 56(SP) |
| | MOVQ R9, 64(SP) |
| | MOVQ R10, 72(SP) |
| | MOVQ R11, 80(SP) |
| | |
| | |
| | |
| | MOVQ R15, 88(SP) |
| |
|
| | CALL runtime路wbBufFlush(SB) |
| |
|
| | MOVQ 0(SP), DI |
| | MOVQ 8(SP), AX |
| | MOVQ 16(SP), BX |
| | MOVQ 24(SP), CX |
| | MOVQ 32(SP), DX |
| | MOVQ 40(SP), SI |
| | MOVQ 48(SP), BP |
| | MOVQ 56(SP), R8 |
| | MOVQ 64(SP), R9 |
| | MOVQ 72(SP), R10 |
| | MOVQ 80(SP), R11 |
| | MOVQ 88(SP), R15 |
| | JMP retry |
| |
|
| | TEXT runtime路gcWriteBarrier1<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $8, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier2<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $16, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier3<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $24, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier4<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $32, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier5<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $40, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier6<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $48, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier7<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $56, R11 |
| | JMP gcWriteBarrier<>(SB) |
| | TEXT runtime路gcWriteBarrier8<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVL $64, R11 |
| | JMP gcWriteBarrier<>(SB) |
| |
|
| | DATA debugCallFrameTooLarge<>+0x00(SB)/20, $"call frame too large" |
| | GLOBL debugCallFrameTooLarge<>(SB), RODATA, $20 |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT runtime路debugCallV2<ABIInternal>(SB),NOSPLIT,$152-0 |
| | |
| | |
| | |
| | |
| | |
| | MOVQ R15, r15-(14*8+8)(SP) |
| | MOVQ R14, r14-(13*8+8)(SP) |
| | MOVQ R13, r13-(12*8+8)(SP) |
| | MOVQ R12, r12-(11*8+8)(SP) |
| | MOVQ R11, r11-(10*8+8)(SP) |
| | MOVQ R10, r10-(9*8+8)(SP) |
| | MOVQ R9, r9-(8*8+8)(SP) |
| | MOVQ R8, r8-(7*8+8)(SP) |
| | MOVQ DI, di-(6*8+8)(SP) |
| | MOVQ SI, si-(5*8+8)(SP) |
| | MOVQ BP, bp-(4*8+8)(SP) |
| | MOVQ BX, bx-(3*8+8)(SP) |
| | MOVQ DX, dx-(2*8+8)(SP) |
| | |
| | |
| | MOVQ frameSize-24(FP), DX |
| | MOVQ CX, cx-(1*8+8)(SP) |
| | MOVQ AX, ax-(0*8+8)(SP) |
| |
|
| | |
| | MOVQ DX, frameSize-128(SP) |
| |
|
| | |
| | MOVQ retpc-8(FP), AX |
| | MOVQ AX, 0(SP) |
| | CALL runtime路debugCallCheck(SB) |
| | MOVQ 8(SP), AX |
| | TESTQ AX, AX |
| | JZ good |
| | |
| | |
| | MOVQ AX, 0(SP) |
| | MOVQ 16(SP), AX |
| | MOVQ AX, 8(SP) |
| | |
| | |
| | |
| | MOVQ $8, R12 |
| | BYTE $0xcc |
| | JMP restore |
| |
|
| | good: |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | #define DEBUG_CALL_DISPATCH(NAME,MAXSIZE) \ |
| | CMPQ AX, $MAXSIZE; \ |
| | JA 5(PC); \ |
| | MOVQ $NAME(SB), AX; \ |
| | MOVQ AX, 0(SP); \ |
| | CALL runtime路debugCallWrap(SB); \ |
| | JMP restore |
| |
|
| | MOVQ frameSize-128(SP), AX |
| | DEBUG_CALL_DISPATCH(debugCall32<>, 32) |
| | DEBUG_CALL_DISPATCH(debugCall64<>, 64) |
| | DEBUG_CALL_DISPATCH(debugCall128<>, 128) |
| | DEBUG_CALL_DISPATCH(debugCall256<>, 256) |
| | DEBUG_CALL_DISPATCH(debugCall512<>, 512) |
| | DEBUG_CALL_DISPATCH(debugCall1024<>, 1024) |
| | DEBUG_CALL_DISPATCH(debugCall2048<>, 2048) |
| | DEBUG_CALL_DISPATCH(debugCall4096<>, 4096) |
| | DEBUG_CALL_DISPATCH(debugCall8192<>, 8192) |
| | DEBUG_CALL_DISPATCH(debugCall16384<>, 16384) |
| | DEBUG_CALL_DISPATCH(debugCall32768<>, 32768) |
| | DEBUG_CALL_DISPATCH(debugCall65536<>, 65536) |
| | |
| | MOVQ $debugCallFrameTooLarge<>(SB), AX |
| | MOVQ AX, 0(SP) |
| | MOVQ $20, 8(SP) |
| | MOVQ $8, R12 |
| | BYTE $0xcc |
| | JMP restore |
| |
|
| | restore: |
| | |
| | |
| | |
| | |
| | MOVQ $16, R12 |
| | BYTE $0xcc |
| | |
| |
|
| | |
| | |
| | MOVQ ax-(0*8+8)(SP), AX |
| | MOVQ cx-(1*8+8)(SP), CX |
| | MOVQ dx-(2*8+8)(SP), DX |
| | MOVQ bx-(3*8+8)(SP), BX |
| | MOVQ bp-(4*8+8)(SP), BP |
| | MOVQ si-(5*8+8)(SP), SI |
| | MOVQ di-(6*8+8)(SP), DI |
| | MOVQ r8-(7*8+8)(SP), R8 |
| | MOVQ r9-(8*8+8)(SP), R9 |
| | MOVQ r10-(9*8+8)(SP), R10 |
| | MOVQ r11-(10*8+8)(SP), R11 |
| | MOVQ r12-(11*8+8)(SP), R12 |
| | MOVQ r13-(12*8+8)(SP), R13 |
| | MOVQ r14-(13*8+8)(SP), R14 |
| | MOVQ r15-(14*8+8)(SP), R15 |
| |
|
| | RET |
| |
|
| | |
| | |
| | #define DEBUG_CALL_FN(NAME,MAXSIZE) \ |
| | TEXT NAME(SB),WRAPPER,$MAXSIZE-0; \ |
| | NO_LOCAL_POINTERS; \ |
| | MOVQ $0, R12; \ |
| | BYTE $0xcc; \ |
| | MOVQ $1, R12; \ |
| | BYTE $0xcc; \ |
| | RET |
| | DEBUG_CALL_FN(debugCall32<>, 32) |
| | DEBUG_CALL_FN(debugCall64<>, 64) |
| | DEBUG_CALL_FN(debugCall128<>, 128) |
| | DEBUG_CALL_FN(debugCall256<>, 256) |
| | DEBUG_CALL_FN(debugCall512<>, 512) |
| | DEBUG_CALL_FN(debugCall1024<>, 1024) |
| | DEBUG_CALL_FN(debugCall2048<>, 2048) |
| | DEBUG_CALL_FN(debugCall4096<>, 4096) |
| | DEBUG_CALL_FN(debugCall8192<>, 8192) |
| | DEBUG_CALL_FN(debugCall16384<>, 16384) |
| | DEBUG_CALL_FN(debugCall32768<>, 32768) |
| | DEBUG_CALL_FN(debugCall65536<>, 65536) |
| |
|
| | |
| | TEXT runtime路debugCallPanicked(SB),NOSPLIT,$16-16 |
| | |
| | MOVQ val_type+0(FP), AX |
| | MOVQ AX, 0(SP) |
| | MOVQ val_data+8(FP), AX |
| | MOVQ AX, 8(SP) |
| | MOVQ $2, R12 |
| | BYTE $0xcc |
| | RET |
| |
|
| | TEXT runtime路panicBounds<ABIInternal>(SB),NOSPLIT,$144-0 |
| | NO_LOCAL_POINTERS |
| | |
| | |
| | MOVQ AX, 16(SP) |
| | MOVQ CX, 24(SP) |
| | MOVQ DX, 32(SP) |
| | MOVQ BX, 40(SP) |
| | |
| | MOVQ BP, 56(SP) |
| | MOVQ SI, 64(SP) |
| | MOVQ DI, 72(SP) |
| | MOVQ R8, 80(SP) |
| | MOVQ R9, 88(SP) |
| | MOVQ R10, 96(SP) |
| | MOVQ R11, 104(SP) |
| | MOVQ R12, 112(SP) |
| | MOVQ R13, 120(SP) |
| | |
| | MOVQ R15, 136(SP) |
| |
|
| | MOVQ SP, AX |
| | MOVQ 152(AX), AX |
| | LEAQ 16(SP), BX |
| | CALL runtime路panicBounds64<ABIInternal>(SB) |
| | RET |
| |
|
| | #ifdef GOOS_android |
| | |
| | |
| | DATA runtime路tls_g+0(SB)/8, $16 |
| | GLOBL runtime路tls_g+0(SB), NOPTR, $8 |
| | #endif |
| | #ifdef GOOS_windows |
| | GLOBL runtime路tls_g+0(SB), NOPTR, $8 |
| | #endif |
| |
|
| | |
| | |
| | |
| | |
| | #define RETPOLINE(reg) \ |
| | BYTE $0xE8; BYTE $(2+2); BYTE $0; BYTE $0; BYTE $0; \ |
| | \ |
| | BYTE $0xF3; BYTE $0x90; \ |
| | BYTE $0xEB; BYTE $-(2+2); \ |
| | \ |
| | BYTE $0x48|((reg&8)>>1); BYTE $0x89; \ |
| | BYTE $0x04|((reg&7)<<3); BYTE $0x24; \ |
| | BYTE $0xC3 |
| |
|
| | TEXT runtime路retpolineAX(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(0) |
| | TEXT runtime路retpolineCX(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(1) |
| | TEXT runtime路retpolineDX(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(2) |
| | TEXT runtime路retpolineBX(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(3) |
| | |
| | TEXT runtime路retpolineBP(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(5) |
| | TEXT runtime路retpolineSI(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(6) |
| | TEXT runtime路retpolineDI(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(7) |
| | TEXT runtime路retpolineR8(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(8) |
| | TEXT runtime路retpolineR9(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(9) |
| | TEXT runtime路retpolineR10(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(10) |
| | TEXT runtime路retpolineR11(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(11) |
| | TEXT runtime路retpolineR12(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(12) |
| | TEXT runtime路retpolineR13(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(13) |
| | TEXT runtime路retpolineR14(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(14) |
| | TEXT runtime路retpolineR15(SB),NOSPLIT|NOFRAME,$0; RETPOLINE(15) |
| |
|
| | TEXT 路getfp<ABIInternal>(SB),NOSPLIT|NOFRAME,$0 |
| | MOVQ BP, AX |
| | RET |
| |
|