Source file src/cmd/internal/obj/wasm/a.out.go

     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  package wasm
     6  
     7  import "cmd/internal/obj"
     8  
     9  //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p wasm
    10  
    11  const (
    12  	/* mark flags */
    13  	DONE          = 1 << iota
    14  	PRESERVEFLAGS // not allowed to clobber flags
    15  )
    16  
    17  /*
    18   *	wasm
    19   */
    20  const (
    21  	ACallImport = obj.ABaseWasm + obj.A_ARCHSPECIFIC + iota
    22  	AGet
    23  	ASet
    24  	ATee
    25  	ANot // alias for I32Eqz
    26  
    27  	// The following are low-level WebAssembly instructions.
    28  	// Their order matters, since it matches the opcode encoding.
    29  	// Gaps in the encoding are indicated by comments.
    30  
    31  	AUnreachable // opcode 0x00
    32  	ANop
    33  	ABlock
    34  	ALoop
    35  	AIf
    36  	AElse
    37  
    38  	AEnd // opcode 0x0B
    39  	ABr
    40  	ABrIf
    41  	ABrTable
    42  	// ACall and AReturn are WebAssembly instructions. obj.ACALL and obj.ARET are higher level instructions
    43  	// with Go semantics, e.g. they manipulate the Go stack on the linear memory.
    44  	AReturn
    45  	ACall
    46  	ACallIndirect
    47  
    48  	ADrop // opcode 0x1A
    49  	ASelect
    50  
    51  	ALocalGet // opcode 0x20
    52  	ALocalSet
    53  	ALocalTee
    54  	AGlobalGet
    55  	AGlobalSet
    56  
    57  	AI32Load // opcode 0x28
    58  	AI64Load
    59  	AF32Load
    60  	AF64Load
    61  	AI32Load8S
    62  	AI32Load8U
    63  	AI32Load16S
    64  	AI32Load16U
    65  	AI64Load8S
    66  	AI64Load8U
    67  	AI64Load16S
    68  	AI64Load16U
    69  	AI64Load32S
    70  	AI64Load32U
    71  	AI32Store
    72  	AI64Store
    73  	AF32Store
    74  	AF64Store
    75  	AI32Store8
    76  	AI32Store16
    77  	AI64Store8
    78  	AI64Store16
    79  	AI64Store32
    80  	ACurrentMemory
    81  	AGrowMemory
    82  
    83  	AI32Const
    84  	AI64Const
    85  	AF32Const
    86  	AF64Const
    87  
    88  	AI32Eqz
    89  	AI32Eq
    90  	AI32Ne
    91  	AI32LtS
    92  	AI32LtU
    93  	AI32GtS
    94  	AI32GtU
    95  	AI32LeS
    96  	AI32LeU
    97  	AI32GeS
    98  	AI32GeU
    99  
   100  	AI64Eqz
   101  	AI64Eq
   102  	AI64Ne
   103  	AI64LtS
   104  	AI64LtU
   105  	AI64GtS
   106  	AI64GtU
   107  	AI64LeS
   108  	AI64LeU
   109  	AI64GeS
   110  	AI64GeU
   111  
   112  	AF32Eq
   113  	AF32Ne
   114  	AF32Lt
   115  	AF32Gt
   116  	AF32Le
   117  	AF32Ge
   118  
   119  	AF64Eq
   120  	AF64Ne
   121  	AF64Lt
   122  	AF64Gt
   123  	AF64Le
   124  	AF64Ge
   125  
   126  	AI32Clz
   127  	AI32Ctz
   128  	AI32Popcnt
   129  	AI32Add
   130  	AI32Sub
   131  	AI32Mul
   132  	AI32DivS
   133  	AI32DivU
   134  	AI32RemS
   135  	AI32RemU
   136  	AI32And
   137  	AI32Or
   138  	AI32Xor
   139  	AI32Shl
   140  	AI32ShrS
   141  	AI32ShrU
   142  	AI32Rotl
   143  	AI32Rotr
   144  
   145  	AI64Clz
   146  	AI64Ctz
   147  	AI64Popcnt
   148  	AI64Add
   149  	AI64Sub
   150  	AI64Mul
   151  	AI64DivS
   152  	AI64DivU
   153  	AI64RemS
   154  	AI64RemU
   155  	AI64And
   156  	AI64Or
   157  	AI64Xor
   158  	AI64Shl
   159  	AI64ShrS
   160  	AI64ShrU
   161  	AI64Rotl
   162  	AI64Rotr
   163  
   164  	AF32Abs
   165  	AF32Neg
   166  	AF32Ceil
   167  	AF32Floor
   168  	AF32Trunc
   169  	AF32Nearest
   170  	AF32Sqrt
   171  	AF32Add
   172  	AF32Sub
   173  	AF32Mul
   174  	AF32Div
   175  	AF32Min
   176  	AF32Max
   177  	AF32Copysign
   178  
   179  	AF64Abs
   180  	AF64Neg
   181  	AF64Ceil
   182  	AF64Floor
   183  	AF64Trunc
   184  	AF64Nearest
   185  	AF64Sqrt
   186  	AF64Add
   187  	AF64Sub
   188  	AF64Mul
   189  	AF64Div
   190  	AF64Min
   191  	AF64Max
   192  	AF64Copysign
   193  
   194  	AI32WrapI64
   195  	AI32TruncF32S
   196  	AI32TruncF32U
   197  	AI32TruncF64S
   198  	AI32TruncF64U
   199  	AI64ExtendI32S
   200  	AI64ExtendI32U
   201  	AI64TruncF32S
   202  	AI64TruncF32U
   203  	AI64TruncF64S
   204  	AI64TruncF64U
   205  	AF32ConvertI32S
   206  	AF32ConvertI32U
   207  	AF32ConvertI64S
   208  	AF32ConvertI64U
   209  	AF32DemoteF64
   210  	AF64ConvertI32S
   211  	AF64ConvertI32U
   212  	AF64ConvertI64S
   213  	AF64ConvertI64U
   214  	AF64PromoteF32
   215  	AI32ReinterpretF32
   216  	AI64ReinterpretF64
   217  	AF32ReinterpretI32
   218  	AF64ReinterpretI64
   219  	AI32Extend8S
   220  	AI32Extend16S
   221  	AI64Extend8S
   222  	AI64Extend16S
   223  	AI64Extend32S
   224  
   225  	AI32TruncSatF32S // opcode 0xFC 0x00
   226  	AI32TruncSatF32U
   227  	AI32TruncSatF64S
   228  	AI32TruncSatF64U
   229  	AI64TruncSatF32S
   230  	AI64TruncSatF32U
   231  	AI64TruncSatF64S
   232  	AI64TruncSatF64U
   233  
   234  	ALast // Sentinel: End of low-level WebAssembly instructions.
   235  
   236  	ARESUMEPOINT
   237  	// ACALLNORESUME is a call which is not followed by a resume point.
   238  	// It is allowed inside of WebAssembly blocks, whereas obj.ACALL is not.
   239  	// However, it is not allowed to switch goroutines while inside of an ACALLNORESUME call.
   240  	ACALLNORESUME
   241  
   242  	ARETUNWIND
   243  
   244  	AMOVB
   245  	AMOVH
   246  	AMOVW
   247  	AMOVD
   248  
   249  	AWORD
   250  	ALAST
   251  )
   252  
   253  const (
   254  	REG_NONE = 0
   255  )
   256  
   257  const (
   258  	// globals
   259  	REG_SP = obj.RBaseWasm + iota // SP is currently 32-bit, until 64-bit memory operations are available
   260  	REG_CTXT
   261  	REG_g
   262  	// RET* are used by runtime.return0 and runtime.reflectcall. These functions pass return values in registers.
   263  	REG_RET0
   264  	REG_RET1
   265  	REG_RET2
   266  	REG_RET3
   267  	REG_PAUSE
   268  
   269  	// i32 locals
   270  	REG_R0
   271  	REG_R1
   272  	REG_R2
   273  	REG_R3
   274  	REG_R4
   275  	REG_R5
   276  	REG_R6
   277  	REG_R7
   278  	REG_R8
   279  	REG_R9
   280  	REG_R10
   281  	REG_R11
   282  	REG_R12
   283  	REG_R13
   284  	REG_R14
   285  	REG_R15
   286  
   287  	// f32 locals
   288  	REG_F0
   289  	REG_F1
   290  	REG_F2
   291  	REG_F3
   292  	REG_F4
   293  	REG_F5
   294  	REG_F6
   295  	REG_F7
   296  	REG_F8
   297  	REG_F9
   298  	REG_F10
   299  	REG_F11
   300  	REG_F12
   301  	REG_F13
   302  	REG_F14
   303  	REG_F15
   304  
   305  	// f64 locals
   306  	REG_F16
   307  	REG_F17
   308  	REG_F18
   309  	REG_F19
   310  	REG_F20
   311  	REG_F21
   312  	REG_F22
   313  	REG_F23
   314  	REG_F24
   315  	REG_F25
   316  	REG_F26
   317  	REG_F27
   318  	REG_F28
   319  	REG_F29
   320  	REG_F30
   321  	REG_F31
   322  
   323  	REG_PC_B // also first parameter, i32
   324  
   325  	MAXREG
   326  
   327  	MINREG  = REG_SP
   328  	REGSP   = REG_SP
   329  	REGCTXT = REG_CTXT
   330  	REGG    = REG_g
   331  )
   332  

View as plain text