...

Text file src/pkg/runtime/sys_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 "textflag.h"
     6	
     7	TEXT runtime·wasmMove(SB), NOSPLIT, $0-0
     8	loop:
     9		Loop
    10			// *dst = *src
    11			Get R0
    12			Get R1
    13			I64Load $0
    14			I64Store $0
    15	
    16			// n--
    17			Get R2
    18			I32Const $1
    19			I32Sub
    20			Set R2
    21	
    22			// n == 0
    23			Get R2
    24			I32Eqz
    25			If
    26				Return
    27			End
    28	
    29			// dst += 8
    30			Get R0
    31			I32Const $8
    32			I32Add
    33			Set R0
    34	
    35			// src += 8
    36			Get R1
    37			I32Const $8
    38			I32Add
    39			Set R1
    40	
    41			Br loop
    42		End
    43		UNDEF
    44	
    45	TEXT runtime·wasmZero(SB), NOSPLIT, $0-0
    46	loop:
    47		Loop
    48			// *dst = 0
    49			Get R0
    50			I64Const $0
    51			I64Store $0
    52	
    53			// n--
    54			Get R1
    55			I32Const $1
    56			I32Sub
    57			Set R1
    58	
    59			// n == 0
    60			Get R1
    61			I32Eqz
    62			If
    63				Return
    64			End
    65	
    66			// dst += 8
    67			Get R0
    68			I32Const $8
    69			I32Add
    70			Set R0
    71	
    72			Br loop
    73		End
    74		UNDEF
    75	
    76	TEXT runtime·wasmDiv(SB), NOSPLIT, $0-0
    77		Get R0
    78		I64Const $-0x8000000000000000
    79		I64Eq
    80		If
    81			Get R1
    82			I64Const $-1
    83			I64Eq
    84			If
    85				I64Const $-0x8000000000000000
    86				Return
    87			End
    88		End
    89		Get R0
    90		Get R1
    91		I64DivS
    92		Return
    93	
    94	TEXT runtime·wasmTruncS(SB), NOSPLIT, $0-0
    95		Get R0
    96		Get R0
    97		F64Ne // NaN
    98		If
    99			I64Const $0x8000000000000000
   100			Return
   101		End
   102	
   103		Get R0
   104		F64Const $9223372036854775807.
   105		F64Gt
   106		If
   107			I64Const $0x8000000000000000
   108			Return
   109		End
   110	
   111		Get R0
   112		F64Const $-9223372036854775808.
   113		F64Lt
   114		If
   115			I64Const $0x8000000000000000
   116			Return
   117		End
   118	
   119		Get R0
   120		I64TruncF64S
   121		Return
   122	
   123	TEXT runtime·wasmTruncU(SB), NOSPLIT, $0-0
   124		Get R0
   125		Get R0
   126		F64Ne // NaN
   127		If
   128			I64Const $0x8000000000000000
   129			Return
   130		End
   131	
   132		Get R0
   133		F64Const $18446744073709551615.
   134		F64Gt
   135		If
   136			I64Const $0x8000000000000000
   137			Return
   138		End
   139	
   140		Get R0
   141		F64Const $0.
   142		F64Lt
   143		If
   144			I64Const $0x8000000000000000
   145			Return
   146		End
   147	
   148		Get R0
   149		I64TruncF64U
   150		Return
   151	
   152	TEXT runtime·exitThread(SB), NOSPLIT, $0-0
   153		UNDEF
   154	
   155	TEXT runtime·osyield(SB), NOSPLIT, $0-0
   156		UNDEF
   157	
   158	TEXT runtime·usleep(SB), NOSPLIT, $0-0
   159		RET // TODO(neelance): implement usleep
   160	
   161	TEXT runtime·currentMemory(SB), NOSPLIT, $0
   162		Get SP
   163		CurrentMemory
   164		I32Store ret+0(FP)
   165		RET
   166	
   167	TEXT runtime·growMemory(SB), NOSPLIT, $0
   168		Get SP
   169		I32Load pages+0(FP)
   170		GrowMemory
   171		I32Store ret+8(FP)
   172		RET
   173	
   174	TEXT ·wasmExit(SB), NOSPLIT, $0
   175		CallImport
   176		RET
   177	
   178	TEXT ·wasmWrite(SB), NOSPLIT, $0
   179		CallImport
   180		RET
   181	
   182	TEXT ·nanotime(SB), NOSPLIT, $0
   183		CallImport
   184		RET
   185	
   186	TEXT ·walltime(SB), NOSPLIT, $0
   187		CallImport
   188		RET
   189	
   190	TEXT ·scheduleTimeoutEvent(SB), NOSPLIT, $0
   191		CallImport
   192		RET
   193	
   194	TEXT ·clearTimeoutEvent(SB), NOSPLIT, $0
   195		CallImport
   196		RET
   197	
   198	TEXT ·getRandomData(SB), NOSPLIT, $0
   199		CallImport
   200		RET

View as plain text