podman

Форк
0
331 строка · 4.3 Кб
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 "github.com/twitchyliquid64/golang-asm/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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.