| | |
| | |
| | |
| |
|
| | #include "go_asm.h" |
| | #include "go_tls.h" |
| | #include "funcdata.h" |
| | #include "textflag.h" |
| |
|
| | TEXT runtime路rt0_go(SB), NOSPLIT|NOFRAME|TOPFRAME, $0 |
| | |
| | MOVD $runtime路g0(SB), runtime路m0+m_g0(SB) |
| | |
| | MOVD $runtime路m0(SB), runtime路g0+g_m(SB) |
| | |
| | MOVD $runtime路g0(SB), g |
| | CALLNORESUME runtime路check(SB) |
| | #ifdef GOOS_js |
| | CALLNORESUME runtime路args(SB) |
| | #endif |
| | CALLNORESUME runtime路osinit(SB) |
| | CALLNORESUME runtime路schedinit(SB) |
| | MOVD $runtime路mainPC(SB), 0(SP) |
| | CALLNORESUME runtime路newproc(SB) |
| | CALL runtime路mstart(SB) |
| | UNDEF |
| |
|
| | TEXT runtime路mstart(SB),NOSPLIT|TOPFRAME,$0 |
| | CALL runtime路mstart0(SB) |
| | RET |
| |
|
| | DATA runtime路mainPC+0(SB)/8,$runtime路main(SB) |
| | GLOBL runtime路mainPC(SB),RODATA,$8 |
| |
|
| | |
| | TEXT 路checkASM(SB), NOSPLIT, $0-1 |
| | MOVB $1, ret+0(FP) |
| | RET |
| |
|
| | TEXT runtime路gogo(SB), NOSPLIT, $0-8 |
| | MOVD buf+0(FP), R0 |
| | MOVD gobuf_g(R0), R1 |
| | MOVD 0(R1), R2 |
| | MOVD R1, g |
| | MOVD gobuf_sp(R0), SP |
| |
|
| | |
| | Get SP |
| | I32Const $8 |
| | I32Sub |
| | I64Load gobuf_pc(R0) |
| | I64Store $0 |
| |
|
| | MOVD gobuf_ctxt(R0), CTXT |
| | |
| | MOVD $0, gobuf_sp(R0) |
| | MOVD $0, gobuf_ctxt(R0) |
| |
|
| | I32Const $1 |
| | Return |
| |
|
| | |
| | |
| | |
| | |
| | TEXT runtime路mcall(SB), NOSPLIT, $0-8 |
| | |
| | MOVD fn+0(FP), CTXT |
| | |
| | MOVD g_m(g), R1 |
| | |
| | MOVD m_g0(R1), R2 |
| |
|
| | |
| | MOVD 0(SP), g_sched+gobuf_pc(g) |
| | MOVD $fn+0(FP), g_sched+gobuf_sp(g) |
| |
|
| | |
| | Get g |
| | Get R2 |
| | I64Eq |
| | If |
| | JMP runtime路badmcall(SB) |
| | End |
| |
|
| | |
| | I64Load (g_sched+gobuf_sp)(R2) |
| | I64Const $8 |
| | I64Sub |
| | I32WrapI64 |
| | Set SP |
| |
|
| | |
| | MOVD g, 0(SP) |
| |
|
| | |
| | MOVD R2, g |
| |
|
| | |
| | Get CTXT |
| | I32WrapI64 |
| | I64Load $0 |
| | CALL |
| |
|
| | Get SP |
| | I32Const $8 |
| | I32Add |
| | Set SP |
| |
|
| | JMP runtime路badmcall2(SB) |
| |
|
| | |
| | TEXT runtime路systemstack(SB), NOSPLIT, $0-8 |
| | |
| | MOVD fn+0(FP), R0 |
| | |
| | MOVD g_m(g), R1 |
| | |
| | MOVD m_g0(R1), R2 |
| |
|
| | |
| | Get g |
| | Get R2 |
| | I64Eq |
| | If |
| | |
| | MOVD R0, CTXT |
| |
|
| | Get CTXT |
| | I32WrapI64 |
| | I64Load $0 |
| | JMP |
| | End |
| |
|
| | |
| | Get g |
| | I64Load m_curg(R1) |
| | I64Ne |
| | If |
| | CALLNORESUME runtime路badsystemstack(SB) |
| | CALLNORESUME runtime路abort(SB) |
| | End |
| |
|
| | |
| |
|
| | |
| | |
| | MOVD $runtime路systemstack_switch(SB), g_sched+gobuf_pc(g) |
| |
|
| | MOVD SP, g_sched+gobuf_sp(g) |
| |
|
| | |
| | MOVD R2, g |
| |
|
| | |
| | I64Load (g_sched+gobuf_sp)(R2) |
| | I64Const $8 |
| | I64Sub |
| | Set R3 |
| |
|
| | MOVD $runtime路mstart(SB), 0(R3) |
| | MOVD R3, SP |
| |
|
| | |
| | MOVD R0, CTXT |
| |
|
| | Get CTXT |
| | I32WrapI64 |
| | I64Load $0 |
| | CALL |
| |
|
| | |
| | MOVD g_m(g), R1 |
| | MOVD m_curg(R1), R2 |
| | MOVD R2, g |
| | MOVD g_sched+gobuf_sp(R2), SP |
| | MOVD $0, g_sched+gobuf_sp(R2) |
| | RET |
| |
|
| | TEXT runtime路systemstack_switch(SB), NOSPLIT, $0-0 |
| | RET |
| |
|
| | TEXT runtime路abort(SB),NOSPLIT|NOFRAME,$0-0 |
| | UNDEF |
| |
|
| | |
| | TEXT runtime路memhash(SB),NOSPLIT|NOFRAME,$0-32 |
| | JMP runtime路memhashFallback(SB) |
| | TEXT runtime路strhash(SB),NOSPLIT|NOFRAME,$0-24 |
| | JMP runtime路strhashFallback(SB) |
| | TEXT runtime路memhash32(SB),NOSPLIT|NOFRAME,$0-24 |
| | JMP runtime路memhash32Fallback(SB) |
| | TEXT runtime路memhash64(SB),NOSPLIT|NOFRAME,$0-24 |
| | JMP runtime路memhash64Fallback(SB) |
| |
|
| | TEXT runtime路asminit(SB), NOSPLIT, $0-0 |
| | |
| | RET |
| |
|
| | TEXT 路publicationBarrier(SB), NOSPLIT, $0-0 |
| | RET |
| |
|
| | TEXT runtime路procyieldAsm(SB), NOSPLIT, $0-0 |
| | RET |
| |
|
| | TEXT runtime路breakpoint(SB), NOSPLIT, $0-0 |
| | UNDEF |
| |
|
| | |
| | TEXT runtime路switchToCrashStack0(SB), NOSPLIT, $0-8 |
| | MOVD fn+0(FP), CTXT |
| | MOVD g_m(g), R2 |
| |
|
| | |
| | MOVD $runtime路gcrash(SB), g |
| | MOVD R2, g_m(g) |
| | MOVD g, m_g0(R2) |
| |
|
| | |
| | I64Load (g_stack+stack_hi)(g) |
| | I64Const $(-4*8) |
| | I64Add |
| | I32WrapI64 |
| | Set SP |
| |
|
| | |
| | Get CTXT |
| | I32WrapI64 |
| | I64Load $0 |
| | CALL |
| |
|
| | |
| | CALL runtime路abort(SB) |
| | UNDEF |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT runtime路morestack(SB), NOSPLIT, $0-0 |
| | |
| | MOVD g_m(g), R1 |
| |
|
| | |
| | MOVD m_g0(R1), R2 |
| |
|
| | |
| | NOP SP |
| | MOVD 0(SP), g_sched+gobuf_pc(g) |
| | MOVD $8(SP), g_sched+gobuf_sp(g) |
| | MOVD CTXT, g_sched+gobuf_ctxt(g) |
| |
|
| | |
| | Get g |
| | Get R2 |
| | I64Eq |
| | If |
| | CALLNORESUME runtime路badmorestackg0(SB) |
| | CALLNORESUME runtime路abort(SB) |
| | End |
| |
|
| | |
| | Get g |
| | I64Load m_gsignal(R1) |
| | I64Eq |
| | If |
| | CALLNORESUME runtime路badmorestackgsignal(SB) |
| | CALLNORESUME runtime路abort(SB) |
| | End |
| |
|
| | |
| | |
| | MOVD 8(SP), m_morebuf+gobuf_pc(R1) |
| | MOVD $16(SP), m_morebuf+gobuf_sp(R1) |
| | MOVD g, m_morebuf+gobuf_g(R1) |
| |
|
| | |
| | MOVD R2, g |
| | MOVD g_sched+gobuf_sp(R2), SP |
| | CALL runtime路newstack(SB) |
| | UNDEF |
| |
|
| | |
| | TEXT runtime路morestack_noctxt(SB),NOSPLIT,$0 |
| | MOVD $0, CTXT |
| | JMP runtime路morestack(SB) |
| |
|
| | TEXT 路asmcgocall(SB), NOSPLIT, $0-0 |
| | UNDEF |
| |
|
| | #define DISPATCH(NAME, MAXSIZE) \ |
| | Get R0; \ |
| | I64Const $MAXSIZE; \ |
| | I64LeU; \ |
| | If; \ |
| | JMP NAME(SB); \ |
| | End |
| |
|
| | TEXT 路reflectcall(SB), NOSPLIT, $0-48 |
| | I64Load fn+8(FP) |
| | I64Eqz |
| | If |
| | CALLNORESUME runtime路sigpanic<ABIInternal>(SB) |
| | End |
| |
|
| | MOVW frameSize+32(FP), R0 |
| |
|
| | 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) |
| | JMP runtime路badreflectcall(SB) |
| |
|
| | #define CALLFN(NAME, MAXSIZE) \ |
| | TEXT NAME(SB), WRAPPER, $MAXSIZE-48; \ |
| | NO_LOCAL_POINTERS; \ |
| | MOVW stackArgsSize+24(FP), R0; \ |
| | \ |
| | Get R0; \ |
| | I64Eqz; \ |
| | Not; \ |
| | If; \ |
| | Get SP; \ |
| | I64Load stackArgs+16(FP); \ |
| | I32WrapI64; \ |
| | I64Load stackArgsSize+24(FP); \ |
| | I32WrapI64; \ |
| | MemoryCopy; \ |
| | End; \ |
| | \ |
| | MOVD f+8(FP), CTXT; \ |
| | Get CTXT; \ |
| | I32WrapI64; \ |
| | I64Load $0; \ |
| | CALL; \ |
| | \ |
| | I64Load32U stackRetOffset+28(FP); \ |
| | Set R0; \ |
| | \ |
| | MOVD stackArgsType+0(FP), RET0; \ |
| | \ |
| | I64Load stackArgs+16(FP); \ |
| | Get R0; \ |
| | I64Add; \ |
| | Set RET1; \ |
| | \ |
| | Get SP; \ |
| | I64ExtendI32U; \ |
| | Get R0; \ |
| | I64Add; \ |
| | Set RET2; \ |
| | \ |
| | I64Load32U stackArgsSize+24(FP); \ |
| | Get R0; \ |
| | I64Sub; \ |
| | Set RET3; \ |
| | \ |
| | CALL callRet<>(SB); \ |
| | RET |
| |
|
| | |
| | |
| | |
| | |
| | TEXT callRet<>(SB), NOSPLIT, $40-0 |
| | NO_LOCAL_POINTERS |
| | MOVD RET0, 0(SP) |
| | MOVD RET1, 8(SP) |
| | MOVD RET2, 16(SP) |
| | MOVD RET3, 24(SP) |
| | MOVD $0, 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路goexit(SB), NOSPLIT|TOPFRAME, $0-0 |
| | NOP |
| | CALL runtime路goexit1(SB) |
| | UNDEF |
| |
|
| | TEXT runtime路cgocallback(SB), NOSPLIT, $0-24 |
| | UNDEF |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | TEXT gcWriteBarrier<>(SB), NOSPLIT, $0 |
| | Loop |
| | |
| | MOVD g_m(g), R3 |
| | |
| | MOVD m_p(R3), R4 |
| | |
| | MOVD p_wbBuf+wbBuf_next(R4), R5 |
| |
|
| | |
| | Get R5 |
| | Get R0 |
| | I64Add |
| | Set R5 |
| |
|
| | |
| | Get R5 |
| | I64Load (p_wbBuf+wbBuf_end)(R4) |
| | I64LeU |
| | If |
| | |
| | MOVD R5, p_wbBuf+wbBuf_next(R4) |
| |
|
| | |
| | Get R5 |
| | Get R0 |
| | I64Sub |
| |
|
| | Return |
| | End |
| |
|
| | |
| | CALLNORESUME runtime路wbBufFlush(SB) |
| |
|
| | |
| | Br $0 |
| | End |
| |
|
| | TEXT runtime路gcWriteBarrier1<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $8 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier2<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $16 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier3<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $24 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier4<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $32 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier5<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $40 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier6<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $48 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier7<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $56 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| | TEXT runtime路gcWriteBarrier8<ABIInternal>(SB),NOSPLIT,$0 |
| | I64Const $64 |
| | Call gcWriteBarrier<>(SB) |
| | Return |
| |
|
| | TEXT wasm_pc_f_loop(SB),NOSPLIT,$0 |
| | |
| | |
| | |
| | |
| | |
| | Get PAUSE |
| | I32Eqz |
| | If |
| | loop: |
| | Loop |
| | |
| | Get SP |
| | I32Const $8 |
| | I32Sub |
| | I32Load16U $0 |
| |
|
| | Get SP |
| | I32Const $8 |
| | I32Sub |
| | I32Load $2 |
| |
|
| | CallIndirect $0 |
| | Drop |
| |
|
| | Get PAUSE |
| | I32Eqz |
| | BrIf loop |
| | End |
| | End |
| |
|
| | I32Const $0 |
| | Set PAUSE |
| |
|
| | Return |
| |
|
| | |
| | |
| | |
| | |
| | |
| | TEXT wasm_pc_f_loop_export(SB),NOSPLIT,$0 |
| | Get PAUSE |
| | I32Eqz |
| | outer: |
| | If |
| | |
| | |
| | I32Const $1 |
| | Set R1 |
| | loop: |
| | Loop |
| | |
| | Get SP |
| | I32Const $8 |
| | I32Sub |
| | I32Load $2 |
| | Tee R2 |
| |
|
| | Get R0 |
| | I32Eq |
| | If |
| | Get R1 |
| | I32Eqz |
| | |
| | BrIf outer |
| | End |
| |
|
| | Get SP |
| | I32Const $8 |
| | I32Sub |
| | I32Load16U $0 |
| |
|
| | Get R2 |
| | CallIndirect $0 |
| | Set R1 |
| |
|
| | Get PAUSE |
| | I32Eqz |
| | BrIf loop |
| | End |
| | End |
| |
|
| | I32Const $0 |
| | Set PAUSE |
| |
|
| | Return |
| |
|
| | TEXT wasm_export_lib(SB),NOSPLIT,$0 |
| | UNDEF |
| |
|
| | TEXT runtime路pause(SB), NOSPLIT, $0-8 |
| | MOVD newsp+0(FP), SP |
| | I32Const $1 |
| | Set PAUSE |
| | RETUNWIND |
| |
|
| | |
| | TEXT runtime路notInitialized(SB), NOSPLIT, $0 |
| | MOVD $runtime路wasmStack+(m0Stack__size-16-8)(SB), SP |
| | I32Const $0 |
| | Call runtime路notInitialized1(SB) |
| | Drop |
| | I32Const $0 |
| | Call runtime路abort(SB) |
| | UNDEF |
| |
|