...
Text file
src/runtime/rt0_js_wasm.s
Documentation: runtime
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.
9TEXT _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)
21TEXT 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.
43TEXT 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.
52TEXT wasm_export_getsp(SB),NOSPLIT,$0
53 Get SP
54 Return
55
56TEXT runtime·pause(SB), NOSPLIT, $0-8
57 MOVD newsp+0(FP), SP
58 I32Const $1
59 Set PAUSE
60 RETUNWIND
61
62TEXT runtime·exit(SB), NOSPLIT, $0-4
63 I32Const $0
64 Call runtime·wasmExit(SB)
65 I32Const $1
66 Set PAUSE
67 RETUNWIND
View as plain text