123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- // Copyright 2018 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package wasm
- import "github.com/twitchyliquid64/golang-asm/obj"
- //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p wasm
- const (
- /* mark flags */
- DONE = 1 << iota
- PRESERVEFLAGS // not allowed to clobber flags
- )
- /*
- * wasm
- */
- const (
- ACallImport = obj.ABaseWasm + obj.A_ARCHSPECIFIC + iota
- AGet
- ASet
- ATee
- ANot // alias for I32Eqz
- // The following are low-level WebAssembly instructions.
- // Their order matters, since it matches the opcode encoding.
- // Gaps in the encoding are indicated by comments.
- AUnreachable // opcode 0x00
- ANop
- ABlock
- ALoop
- AIf
- AElse
- AEnd // opcode 0x0B
- ABr
- ABrIf
- ABrTable
- // ACall and AReturn are WebAssembly instructions. obj.ACALL and obj.ARET are higher level instructions
- // with Go semantics, e.g. they manipulate the Go stack on the linear memory.
- AReturn
- ACall
- ACallIndirect
- ADrop // opcode 0x1A
- ASelect
- ALocalGet // opcode 0x20
- ALocalSet
- ALocalTee
- AGlobalGet
- AGlobalSet
- AI32Load // opcode 0x28
- AI64Load
- AF32Load
- AF64Load
- AI32Load8S
- AI32Load8U
- AI32Load16S
- AI32Load16U
- AI64Load8S
- AI64Load8U
- AI64Load16S
- AI64Load16U
- AI64Load32S
- AI64Load32U
- AI32Store
- AI64Store
- AF32Store
- AF64Store
- AI32Store8
- AI32Store16
- AI64Store8
- AI64Store16
- AI64Store32
- ACurrentMemory
- AGrowMemory
- AI32Const
- AI64Const
- AF32Const
- AF64Const
- AI32Eqz
- AI32Eq
- AI32Ne
- AI32LtS
- AI32LtU
- AI32GtS
- AI32GtU
- AI32LeS
- AI32LeU
- AI32GeS
- AI32GeU
- AI64Eqz
- AI64Eq
- AI64Ne
- AI64LtS
- AI64LtU
- AI64GtS
- AI64GtU
- AI64LeS
- AI64LeU
- AI64GeS
- AI64GeU
- AF32Eq
- AF32Ne
- AF32Lt
- AF32Gt
- AF32Le
- AF32Ge
- AF64Eq
- AF64Ne
- AF64Lt
- AF64Gt
- AF64Le
- AF64Ge
- AI32Clz
- AI32Ctz
- AI32Popcnt
- AI32Add
- AI32Sub
- AI32Mul
- AI32DivS
- AI32DivU
- AI32RemS
- AI32RemU
- AI32And
- AI32Or
- AI32Xor
- AI32Shl
- AI32ShrS
- AI32ShrU
- AI32Rotl
- AI32Rotr
- AI64Clz
- AI64Ctz
- AI64Popcnt
- AI64Add
- AI64Sub
- AI64Mul
- AI64DivS
- AI64DivU
- AI64RemS
- AI64RemU
- AI64And
- AI64Or
- AI64Xor
- AI64Shl
- AI64ShrS
- AI64ShrU
- AI64Rotl
- AI64Rotr
- AF32Abs
- AF32Neg
- AF32Ceil
- AF32Floor
- AF32Trunc
- AF32Nearest
- AF32Sqrt
- AF32Add
- AF32Sub
- AF32Mul
- AF32Div
- AF32Min
- AF32Max
- AF32Copysign
- AF64Abs
- AF64Neg
- AF64Ceil
- AF64Floor
- AF64Trunc
- AF64Nearest
- AF64Sqrt
- AF64Add
- AF64Sub
- AF64Mul
- AF64Div
- AF64Min
- AF64Max
- AF64Copysign
- AI32WrapI64
- AI32TruncF32S
- AI32TruncF32U
- AI32TruncF64S
- AI32TruncF64U
- AI64ExtendI32S
- AI64ExtendI32U
- AI64TruncF32S
- AI64TruncF32U
- AI64TruncF64S
- AI64TruncF64U
- AF32ConvertI32S
- AF32ConvertI32U
- AF32ConvertI64S
- AF32ConvertI64U
- AF32DemoteF64
- AF64ConvertI32S
- AF64ConvertI32U
- AF64ConvertI64S
- AF64ConvertI64U
- AF64PromoteF32
- AI32ReinterpretF32
- AI64ReinterpretF64
- AF32ReinterpretI32
- AF64ReinterpretI64
- AI32Extend8S
- AI32Extend16S
- AI64Extend8S
- AI64Extend16S
- AI64Extend32S
- AI32TruncSatF32S // opcode 0xFC 0x00
- AI32TruncSatF32U
- AI32TruncSatF64S
- AI32TruncSatF64U
- AI64TruncSatF32S
- AI64TruncSatF32U
- AI64TruncSatF64S
- AI64TruncSatF64U
- ALast // Sentinel: End of low-level WebAssembly instructions.
- ARESUMEPOINT
- // ACALLNORESUME is a call which is not followed by a resume point.
- // It is allowed inside of WebAssembly blocks, whereas obj.ACALL is not.
- // However, it is not allowed to switch goroutines while inside of an ACALLNORESUME call.
- ACALLNORESUME
- ARETUNWIND
- AMOVB
- AMOVH
- AMOVW
- AMOVD
- AWORD
- ALAST
- )
- const (
- REG_NONE = 0
- )
- const (
- // globals
- REG_SP = obj.RBaseWasm + iota // SP is currently 32-bit, until 64-bit memory operations are available
- REG_CTXT
- REG_g
- // RET* are used by runtime.return0 and runtime.reflectcall. These functions pass return values in registers.
- REG_RET0
- REG_RET1
- REG_RET2
- REG_RET3
- REG_PAUSE
- // i32 locals
- REG_R0
- REG_R1
- REG_R2
- REG_R3
- REG_R4
- REG_R5
- REG_R6
- REG_R7
- REG_R8
- REG_R9
- REG_R10
- REG_R11
- REG_R12
- REG_R13
- REG_R14
- REG_R15
- // f32 locals
- REG_F0
- REG_F1
- REG_F2
- REG_F3
- REG_F4
- REG_F5
- REG_F6
- REG_F7
- REG_F8
- REG_F9
- REG_F10
- REG_F11
- REG_F12
- REG_F13
- REG_F14
- REG_F15
- // f64 locals
- REG_F16
- REG_F17
- REG_F18
- REG_F19
- REG_F20
- REG_F21
- REG_F22
- REG_F23
- REG_F24
- REG_F25
- REG_F26
- REG_F27
- REG_F28
- REG_F29
- REG_F30
- REG_F31
- REG_PC_B // also first parameter, i32
- MAXREG
- MINREG = REG_SP
- REGSP = REG_SP
- REGCTXT = REG_CTXT
- REGG = REG_g
- )
|