github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/runtime/rt0_js_wasm.s (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "go_asm.h" 6 #include "textflag.h" 7 8 // _rt0_wasm_js is not used itself. It only exists to mark the exported functions as alive. 9 TEXT _rt0_wasm_js(SB),NOSPLIT,$0 10 I32Const $wasm_export_run(SB) 11 Drop 12 I32Const $wasm_export_resume(SB) 13 Drop 14 I32Const $wasm_export_getsp(SB) 15 Drop 16 17 // wasm_export_run gets called from JavaScript. It initializes the Go runtime and executes Go code until it needs 18 // to wait for an event. It does NOT follow the Go ABI. It has two WebAssembly parameters: 19 // R0: argc (i32) 20 // R1: argv (i32) 21 TEXT wasm_export_run(SB),NOSPLIT,$0 22 MOVD $runtime·wasmStack+(m0Stack__size-16)(SB), SP 23 24 Get SP 25 Get R0 // argc 26 I64ExtendI32U 27 I64Store $0 28 29 Get SP 30 Get R1 // argv 31 I64ExtendI32U 32 I64Store $8 33 34 I32Const $0 // entry PC_B 35 Call runtime·rt0_go(SB) 36 Drop 37 Call wasm_pc_f_loop(SB) 38 39 Return 40 41 // wasm_export_resume gets called from JavaScript. It resumes the execution of Go code until it needs to wait for 42 // an event. 43 TEXT wasm_export_resume(SB),NOSPLIT,$0 44 I32Const $0 45 Call runtime·handleEvent(SB) 46 Drop 47 Call wasm_pc_f_loop(SB) 48 49 Return 50 51 // wasm_export_getsp gets called from JavaScript to retrieve the SP. 52 TEXT wasm_export_getsp(SB),NOSPLIT,$0 53 Get SP 54 Return 55 56 TEXT runtime·pause(SB), NOSPLIT, $0-8 57 MOVD newsp+0(FP), SP 58 I32Const $1 59 Set PAUSE 60 RETUNWIND 61 62 TEXT runtime·exit(SB), NOSPLIT, $0-4 63 I32Const $0 64 Call runtime·wasmExit(SB) 65 I32Const $1 66 Set PAUSE 67 RETUNWIND