Text file src/runtime/rt0_js_wasm.s

     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·exit(SB), NOSPLIT, $0-4
    57  	I32Const $0
    58  	Call runtime·wasmExit(SB)
    59  	I32Const $1
    60  	Set PAUSE
    61  	RETUNWIND
    62  

View as plain text