github.com/megatontech/mynoteforgo@v0.0.0-20200507084910-5d0c6ea6e890/源码/runtime/sys_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 "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  	I64TruncSF64
   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  	I64TruncUF64
   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