• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14---
15
16chapters:
17  - name: General design
18    text: >
19      VM is register based with dedicated accumulator register, which serves as an implicit operand to instructions.
20
21  - name: Registers
22    text: >
23      Registers are wide enough to hold a single reference when working with objects.
24      When used for primitive types, registers width should be considered as 64 bits.
25      When used for object types, registers should be considered wide enough to hold a reference to an object.
26      The scope of a register is function frame (also known as activation record). If instruction defines not all 64
27      bits of a register, undefined bits shall not be accessed in verified code.
28      Register field width in instruction encoding could be 4 (16 addressable registers), 8 (256 registers) or
29      16 (65536 registers) bits.
30
31  - name: Accumulator
32    text: >
33      Accumulator is a special register which is implicitly used by instructions as a source and/or destination operand.
34      The main goal of using accumulator is to improve encoding density without losing much in performance. Therefore,
35      the general intuition regarding accumulator usage is to utilize the accumulator as much as possible taking it as
36      a source from previous instruction result and passing it to the next instruction in its destination operand.
37      Moreover, when instruction has more than one source operands, the value which lives shorter should be passed
38      through the accumulator. If it is profitable however, variations of instructions that don't write into the
39      accumulator are also introduced. For example, moving arguments for `call.range` instruction may be done by
40      register-to-register moves.
41
42  - name: Calling sequence
43    text: >
44      On execution of a call bytecode a new function frame is created. All necessary arguments are copied from the
45      caller frame onto the top of the callee frame such as the last argument is placed in the register with the largest
46      index and the first argument is placed into the register with the index equal to the size of frame subtracted by
47      the number of arguments. Accumulator value is considered as undefined and shall not be read in verified bytecode.
48      On return, callee frame is destroyed. If function return value is non-void, it is passed to caller via
49      accumulator. Otherwise accumulator content in caller frame is considered as undefined and shall not
50      be read in verified bytecode.
51
52  - name: Supported primitive types
53    text: |
54      VM support operations on registers with i32 and i64 integral values. However, 8-bit and 16-bit integral values
55      can be loaded/stored into records and arrays with corresponding bytecodes. In that case, VM will extend/truncate
56      value to match storage size with i32. Similarly, passing an 8-bit or 16-bit value to a function can be emulated by
57      passing a value, which is zero or sign-extended to i32.
58      VM support operations on registers with f32 and f64 values, which corresponds to IEEE-754 single and double precision
59      floating-point represenation.
60      Primitive data type of a register is not tracked by VM and is interpreted by separate bytecodes.
61      Integral values are not inherently signed or unsigned, signedness is interpreted by bytecodes as well.
62      If bytecode treats register value as signed integer, it uses two's complement representation.
63      To denote that bytecode treats register values as unsigned integer, u32/u64 notation is used.
64      For moves, loads and stores it is not always possible to denote a type of result, because it depends on type
65      of source object. In that case, bNN notation is used, where NN is bit size of result. Therefore, for example,
66      b64 is a union of f64 and i64.
67
68      ### Floating-point literals
69
70      Decimal floating-point literals can have the following parts:
71
72      - Sign ("`+`" or "`-`")
73      - Whole number part
74      - Decimal point
75      - Fractional part
76      - Exponent indicator ("`e`")
77      - Exponent sign
78      - Exponent
79
80      Decimal floating-point literals must have at least one digit and either decimal point or exponent part.
81
82      Special values:
83
84      - Positive zero (+0.0, hexadecimal representation is `0x0000000000000000`)
85      - Negative zero (-0.0, hexadecimal representation is `0x8000000000000000`)
86      - Minimal positive value (4.9E-324, hexadecimal representation is `0x0000000000000001`)
87      - Maximal negative value (-4.9E-324, hexadecimal representation is `0x8000000000000001`)
88      - Maximal positive value (1.7976931348623157e308, hexadecimal representation is `0x7fefffffffffffff`)
89      - Minimal negative value (-1.7976931348623157e308, hexadecimal representation is `0xffefffffffffffff`)
90      - Positive infinity (hexadecimal representation is `0x7ff0000000000000`)
91      - Negative infinity (hexadecimal representation is `0xfff0000000000000`)
92      - Not a number - set of all NaN values (one of hexadecimal representations is `0x7ff8000000000000`)
93
94  - name: Language-dependent types
95    text: >
96      Panda VM supports type hierarchies according to the language it executes. That way, creation (or loading
97      from constant pool) of strings, arrays, exception objects results into an object of type native to language,
98      including inheritance relations.
99
100  - name: Dynamically-typed languages support
101    text: >
102      Panda VM supports languages with dynamic types. It represents dynamic values through special 'any' values,
103      which wraps a value itself (both primitive and objects) and corresponding type info. VM tracks type of registers,
104      that hold 'any' value, whether they are primitive or not. Virtual registers and accumulator are wide enough
105      to hold 'any' value. When VM executes code inside dynamically-typed language context, regular static instructions
106      also may be used.
107
108# File format and ISA versioning
109min_version: 0.0.0.2
110version: 12.0.6.0
111
112# 0 is default value, alaways reflects to the newest version
113api_version_map: [[0, 12.0.6.0], [9, 9.0.0.0], [10, 9.0.0.0], [11, 11.0.2.0], [12, 12.0.6.0]]
114
115# When delete bytecode or having any incompatible modification on bytecode,
116# please add the incompatible version in this list for prompting error message.
117incompatible_version: [11.0.0.0, 11.0.1.0]
118
119properties:
120  - tag: type_id
121    description: Use an id which resolves into a type constant.
122  - tag: method_id
123    description: Use an id which resolves into a method constant.
124  - tag: string_id
125    description: Use an id which resolves into a string constant.
126  - tag: literalarray_id
127    description: Use an id which resolves into a constant literalarray.
128  - tag: field_id
129    description: Use an id which resolves into a field reference.
130  - tag: call
131    description: Pass control to the callee method.
132  - tag: call_virt
133    description: Pass control to the callee method via virtual call.
134  - tag: return
135    description: Pass control to the caller method.
136  - tag: suspend
137    description: Suspend current method and pass control to the caller one.
138  - tag: jump
139    description: Pass control to another bytecode in a current method.
140  - tag: conditional
141    description: Operate based on computed condition, otherwise is no operation.
142  - tag: float
143    description: Perform floating point operation.
144  - tag: dynamic
145    description: Operates on 'any' values.
146  - tag: maybe_dynamic
147    description: May operate on 'any' values depending on language context.
148  - tag: language_type
149    description: Creates objects of type depending on language context.
150  - tag: initialize_type
151    description: May initialize type instance during execution.
152  - tag: ic_slot
153    description: Use the immedate number after opcode of length 8-bit or 16-bit as ic slot.
154  - tag: jit_ic_slot
155    description: Use the immedate number after opcode of length 8-bit as jit ic slot.
156  - tag: one_slot
157    description: The intruction occupies one ic slot.
158  - tag: two_slot
159    description: The intruction occupies two ic slots.
160  - tag: eight_bit_ic
161    description: The instruction occupies ic slots of 8 bit width.
162  - tag: sixteen_bit_ic
163    description: The instruction occupies ic slots of 16 bit width.
164  - tag: eight_sixteen_bit_ic
165    description: The instruction occupies ic slots of both 8 and 16 bit width.
166
167exceptions:
168  - tag: x_none
169    description: Bytecode doesn't throw exceptions.
170  - tag: x_null
171    description: Bytecode throws NullPointerException in case of null reference as a source.
172  - tag: x_bounds
173    description: Bytecode throws ArrayIndexOutOfBoundsException if index is out of bounds of an array.
174  - tag: x_negsize
175    description: Bytecode throws NegativeArraySizeException if index is less than zero.
176  - tag: x_store
177    description: Bytecode throws ArrayStoreException if element isn't instance of array's element type.
178  - tag: x_abstract
179    description: Bytecode throws AbstractMethodError if resolved method has no implementation.
180  - tag: x_arith
181    description: Bytecode throws ArithmeticException if the divisor is 0.
182  - tag: x_cast
183    description: Bytecode throws ClassCastException if type cast failed.
184  - tag: x_classdef
185    description: Bytecode throws NoClassDefFoundError if type cast failed.
186  - tag: x_oom
187    description: Bytecode throws OutOfMemoryError if failed to allocate object.
188  - tag: x_init
189    description: Bytecode throws ExceptionInInitializerError if unexpected exception occurred in a static initializer.
190  - tag: x_call
191    description: Bytecode may throw an error if an exception occures in the called bytecode.
192  - tag: x_throw
193    description: Bytecode's primary role is to throw provided exception object.
194  - tag: x_link
195    description: Bytecode may throw NoClassDefFoundError if failed to resolve id.
196verification:
197  - tag: none
198    description: Instruction is always valid.
199  - tag: v1_array
200    description: First operand contains a reference to an array.
201  - tag: v1_object
202    description: First operand contains a reference to an object (other than array).
203  - tag: v1_array_type
204    # TODO: specify
205    description: First operand contains a reference to an array of elements of type corresponding to bytecode.
206  - tag: v1_i32
207    description: First operand contains a value of i32 type.
208  - tag: v1_type
209    description: First operand contains a value of type corresponding to bytecode.
210  - tag: v1_obj_or_null
211    description: First operand contains a reference to an object or null.
212  - tag: v2_i32
213    description: Second operand contains a value of i32 type.
214  - tag: v2_object
215    description: Second operand contains a reference to an object (other than array).
216  - tag: v2_type
217    description: Second operand contains a value of type corresponding to bytecode.
218  - tag: acc_i32
219    description: Accumulator contains a value of i32 type.
220  - tag: acc_type
221    description: Accumulator contains a value of type corresponding to bytecode.  # TODO: specify
222  - tag: acc_return_type
223    # TODO: specify, including assignment compatibility (see Java 'areturn')
224    description: Accumulator type is compatible with method return type.
225  - tag: v1_throw_type
226    description: First operand contains a reference to an instance of class Throwable or of a subclass of Throwable.
227  - tag: acc_obj_or_null
228    description: Accumulator contains a reference to an object or null.
229  - tag: type_id_array
230    description: Type_id operand must correspond to an array type.
231  - tag: type_id_object
232    description: Type_id operand must correspond to an object type (other than array).
233  - tag: type_id_any_object
234    description: Type_id operand must correspond to any object type.
235  - tag: method_id_static
236    description: Method_id must resolve to a static method or into initializer for a type other than one-dimensional array.
237  - tag: method_id_non_static
238    description: Method_id must resolve to a non-static method.
239  - tag: method_id_non_abstract
240    description: Method_id must resolve to a method that has implementation.
241  - tag: method_id_accessible
242    description: Method_id must resolve to a method which is accessible.
243  - tag: constant_string_id
244    description: Id must resolve into a constant-pool string.
245  - tag: constant_literalarray_id
246    description: Id must resolve into a constant literalarray.
247  - tag: compatible_arguments
248    description: Arguments provided to a method must be of compatible types.  # TODO: specify compatibility
249  - tag: method_init_obj
250    description: Method_id must resolve into initializer for a type other than one-dimensional array.
251  - tag: branch_target
252    description: Branch target should point to a beginning of an instruction of the same method.
253  - tag: field_id_non_static
254    description: Field_id must resolve to a non-static object field.
255  - tag: field_id_static
256    description: Field_id must resolve to a static field.
257  - tag: field_id_size
258    description: Field_id must resolve to a field of size corresponding to bytecode.
259  - tag: valid_in_dynamic_context
260    description: Instruction valid only for dynamically-typed language context.
261
262isa_information:
263    - description: The last encoding number of various ISA. It should be maintained as long as ISA changes.
264      last_opcode_idx: 0xdc
265      last_throw_prefixed_opcode_idx: 0x09
266      last_wide_prefixed_opcode_idx: 0x13
267      last_deprecated_prefixed_opcode_idx: 0x2e
268      last_callruntime_prefixed_opcode_idx: 0x18
269
270prefixes:
271  - name: throw
272    description: throw operations.
273    opcode_idx: 0xfe
274  - name: wide
275    description: operations with wider width.
276    opcode_idx: 0xfd
277  - name: deprecated
278    description: deprecated instructions but are keeped for compatibility.
279    opcode_idx: 0xfc
280  - name: callruntime
281    description: call runtime methods.
282    opcode_idx: 0xfb
283
284groups:
285  - title: constant object loaders
286    description: instructions which operate on constant objects.
287    verification:
288      - none
289    exceptions:
290      - x_none
291    properties:
292      - acc_read
293      - acc_write
294    namespace: ecmascript
295    pseudo: |
296      acc = ecma_op(acc, operand_0, ..., operands_n)
297    semantics: |
298      skip
299    instructions:
300      - sig: ldnan
301        acc: out:top
302        opcode_idx: [0x6a]
303        format: [op_none]
304      - sig: ldinfinity
305        acc: out:top
306        opcode_idx: [0x6b]
307        format: [op_none]
308      - sig: ldundefined
309        acc: out:top
310        opcode_idx: [0x00]
311        format: [op_none]
312      - sig: ldnull
313        acc: out:top
314        opcode_idx: [0x01]
315        format: [op_none]
316      - sig: ldsymbol
317        acc: out:top
318        opcode_idx: [0xad]
319        format: [op_none]
320      - sig: ldglobal
321        opcode_idx: [0x6d]
322        acc: out:top
323        format: [op_none]
324      - sig: ldtrue
325        acc: out:top
326        opcode_idx: [0x02]
327        format: [op_none]
328      - sig: ldfalse
329        acc: out:top
330        opcode_idx: [0x03]
331        format: [op_none]
332      - sig: ldhole
333        acc: out:top
334        opcode_idx: [0x70]
335        format: [op_none]
336      - sig: deprecated.ldlexenv
337        acc: out:top
338        opcode_idx: [0x00]
339        format: [pref_op_none]
340        prefix: deprecated
341      - sig: ldnewtarget
342        acc: out:top
343        opcode_idx: [0x6e]
344        format: [op_none]
345      - sig: ldthis
346        acc: out:top
347        opcode_idx: [0x6f]
348        format: [op_none]
349      - sig: poplexenv
350        acc: none
351        opcode_idx: [0x69]
352        format: [op_none]
353      - sig: deprecated.poplexenv
354        acc: out:top
355        opcode_idx: [0x01]
356        format: [pref_op_none]
357        prefix: deprecated
358      - sig: getunmappedargs
359        acc: out:top
360        opcode_idx: [0x6c]
361        format: [op_none]
362      - sig: asyncfunctionenter
363        acc: out:top
364        opcode_idx: [0xae]
365        format: [op_none]
366      - sig: ldfunction
367        acc: out:top
368        opcode_idx: [0xaf]
369        format: [op_none]
370      - sig: debugger
371        acc: none
372        opcode_idx: [0xb0]
373        format: [op_none]
374
375  - title: iterator instructions
376    description: iterator instructions
377    verification:
378      - none
379    exceptions:
380      - x_none
381    properties:
382      - acc_read
383      - acc_write
384    namespace: ecmascript
385    pseudo: |
386      acc = ecma_op(acc, operand_0, ..., operands_n)
387    semantics: |
388      skip
389    instructions:
390      - sig: getpropiterator
391        acc: inout:top
392        opcode_idx: [0x66]
393        format: [op_none]
394      - sig: getiterator imm:u16
395        acc: inout:top
396        opcode_idx: [0x67, 0xab]
397        format: [op_imm_8, op_imm_16]
398        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
399      - sig: closeiterator imm:u16, v:in:top
400        acc: out:top
401        opcode_idx: [0x68, 0xac]
402        format: [op_imm_8_v_8, op_imm_16_v_8]
403        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
404      - sig: deprecated.getiteratornext v1:in:top, v2:in:top
405        acc: out:top
406        opcode_idx: [0x02]
407        format: [pref_op_v1_8_v2_8]
408        prefix: deprecated
409      - sig: getasynciterator imm:u8
410        acc: inout:top
411        opcode_idx: [0xd7]
412        format: [op_imm_8]
413        properties: [ic_slot, eight_bit_ic]
414      - sig: ldprivateproperty imm1:u8, imm2:u16, imm3:u16
415        acc: inout:top
416        opcode_idx: [0xd8]
417        format: [op_imm1_8_imm2_16_imm3_16]
418        properties: [ic_slot, two_slot, eight_bit_ic]
419      - sig: stprivateproperty imm1:u8, imm2:u16, imm3:u16, v:in:top
420        acc: in:top
421        opcode_idx: [0xd9]
422        format: [op_imm1_8_imm2_16_imm3_16_v_8]
423        properties: [ic_slot, two_slot, eight_bit_ic]
424      - sig: testin imm1:u8, imm2:u16, imm3:u16
425        acc: inout:top
426        opcode_idx: [0xda]
427        format: [op_imm1_8_imm2_16_imm3_16]
428        properties: [ic_slot, two_slot, eight_bit_ic]
429      - sig: definefieldbyname imm:u8, string_id, v:in:top
430        acc: in:top
431        opcode_idx: [0xdb]
432        format: [op_imm_8_id_16_v_8]
433        properties: [string_id, ic_slot, two_slot, eight_bit_ic]
434      - sig: definepropertybyname imm:u8, string_id, v:in:top
435        acc: in:top
436        opcode_idx: [0xdc]
437        format: [op_imm_8_id_16_v_8]
438        properties: [string_id, ic_slot, two_slot, eight_bit_ic]
439
440  - title: object creaters
441    description: instructions which create objects
442    verification:
443      - none
444    exceptions:
445      - x_none
446    properties:
447      - acc_read
448      - acc_write
449    namespace: ecmascript
450    pseudo: |
451      acc = ecma_op(acc, operand_0, ..., operands_n)
452    semantics: |
453      skip
454    instructions:
455      - sig: createemptyobject
456        acc: out:top
457        opcode_idx: [0x04]
458        format: [op_none]
459      - sig: createemptyarray imm:u16
460        acc: out:top
461        opcode_idx: [0x05, 0x80]
462        format: [op_imm_8, op_imm_16]
463        properties: [ic_slot, one_slot, eight_sixteen_bit_ic]
464      - sig: creategeneratorobj v:in:top
465        acc: out:top
466        opcode_idx: [0xb1]
467        format: [op_v_8]
468      - sig: createiterresultobj v1:in:top, v2:in:top
469        acc: out:top
470        opcode_idx: [0xb2]
471        format: [op_v1_8_v2_8]
472      - sig: createobjectwithexcludedkeys imm:u8, v1:in:top, v2:in:top
473        acc: out:top
474        opcode_idx: [0xb3]
475        format: [op_imm_8_v1_8_v2_8]
476      - sig: wide.createobjectwithexcludedkeys imm:u16, v1:in:top, v2:in:top
477        acc: out:top
478        opcode_idx: [0x00]
479        format: [pref_op_imm_16_v1_8_v2_8]
480        prefix: wide
481      - sig: createarraywithbuffer imm:u16, literalarray_id
482        acc: out:top
483        opcode_idx: [0x06, 0x81]
484        format: [op_imm_8_id_16, op_imm_16_id_16]
485        properties: [ic_slot, one_slot, eight_sixteen_bit_ic, literalarray_id]
486      - sig: deprecated.createarraywithbuffer imm:u16
487        acc: out:top
488        opcode_idx: [0x03]
489        format: [pref_op_imm_16]
490        prefix: deprecated
491      - sig: createobjectwithbuffer imm:u16, literalarray_id
492        opcode_idx: [0x07, 0x82]
493        acc: out:top
494        format: [op_imm_8_id_16, op_imm_16_id_16]
495        properties: [ic_slot, one_slot, eight_sixteen_bit_ic, literalarray_id]
496      - sig: deprecated.createobjectwithbuffer imm:u16
497        acc: out:top
498        opcode_idx: [0x04]
499        format: [pref_op_imm_16]
500        prefix: deprecated
501      - sig: createregexpwithliteral imm1:u16, string_id, imm2:u8
502        acc: out:top
503        opcode_idx: [0x71, 0x72]
504        format: [op_imm1_8_id_16_imm2_8, op_imm1_16_id_16_imm2_8]
505        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
506      - sig: newobjapply imm:u16, v:in:top
507        acc: inout:top
508        opcode_idx: [0xb4, 0xb5]
509        format: [op_imm_8_v_8, op_imm_16_v_8]
510        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
511      - sig: newobjrange imm1:u16, imm2:u8, v:in:top
512        acc: out:top
513        opcode_idx: [0x08, 0x83]
514        format: [op_imm1_8_imm2_8_v_8, op_imm1_16_imm2_8_v_8]
515        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
516      - sig: wide.newobjrange imm:u16, v:in:top
517        acc: out:top
518        opcode_idx: [0x01]
519        format: [pref_op_imm_16_v_8]
520        prefix: wide
521      - sig: newlexenv imm:u8
522        acc: out:top
523        opcode_idx: [0x09]
524        format: [op_imm_8]
525      - sig: wide.newlexenv imm:u16
526        acc: out:top
527        opcode_idx: [0x02]
528        format: [pref_op_imm_16]
529        prefix: wide
530      - sig: newlexenvwithname imm:u8, literalarray_id
531        acc: out:top
532        opcode_idx: [0xb6]
533        format: [op_imm_8_id_16]
534        properties: [literalarray_id]
535      - sig: wide.newlexenvwithname imm:u16, literalarray_id
536        acc: out:top
537        opcode_idx: [0x03]
538        format: [pref_op_imm_16_id_16]
539        prefix: wide
540        properties: [literalarray_id]
541      - sig: createasyncgeneratorobj v:in:top
542        acc: out:top
543        opcode_idx: [0xb7]
544        format: [op_v_8]
545      - sig: asyncgeneratorresolve v1:in:top, v2:in:top, v3:in:top
546        acc: out:top
547        opcode_idx: [0xb8]
548        format: [op_v1_8_v2_8_v3_8]
549
550  - title: binary operations
551    description: binary operations
552    verification:
553      - none
554    exceptions:
555      - x_none
556    properties:
557      - acc_read
558      - acc_write
559    namespace: ecmascript
560    pseudo: |
561      acc = ecma_op(acc, operand_0, ..., operands_n)
562    semantics: |
563      skip
564    instructions:
565      - sig: add2 imm:u8, v:in:top
566        acc: inout:top
567        opcode_idx: [0x0a]
568        format: [op_imm_8_v_8]
569        properties: [jit_ic_slot, one_slot, eight_bit_ic]
570      - sig: sub2 imm:u8, v:in:top
571        acc: inout:top
572        opcode_idx: [0x0b]
573        format: [op_imm_8_v_8]
574        properties: [jit_ic_slot, one_slot, eight_bit_ic]
575      - sig: mul2 imm:u8, v:in:top
576        acc: inout:top
577        opcode_idx: [0x0c]
578        format: [op_imm_8_v_8]
579        properties: [jit_ic_slot, one_slot, eight_bit_ic]
580      - sig: div2 imm:u8, v:in:top
581        acc: inout:top
582        opcode_idx: [0x0d]
583        format: [op_imm_8_v_8]
584        properties: [jit_ic_slot, one_slot, eight_bit_ic]
585      - sig: mod2 imm:u8, v:in:top
586        acc: inout:top
587        opcode_idx: [0x0e]
588        format: [op_imm_8_v_8]
589        properties: [jit_ic_slot, one_slot, eight_bit_ic]
590      - sig: eq imm:u8, v:in:top
591        acc: inout:top
592        opcode_idx: [0x0f]
593        format: [op_imm_8_v_8]
594        properties: [jit_ic_slot, one_slot, eight_bit_ic]
595      - sig: noteq imm:u8, v:in:top
596        acc: inout:top
597        opcode_idx: [0x10]
598        format: [op_imm_8_v_8]
599        properties: [jit_ic_slot, one_slot, eight_bit_ic]
600      - sig: less imm:u8, v:in:top
601        acc: inout:top
602        opcode_idx: [0x11]
603        format: [op_imm_8_v_8]
604        properties: [jit_ic_slot, one_slot, eight_bit_ic]
605      - sig: lesseq imm:u8, v:in:top
606        acc: inout:top
607        opcode_idx: [0x12]
608        format: [op_imm_8_v_8]
609        properties: [jit_ic_slot, one_slot, eight_bit_ic]
610      - sig: greater imm:u8, v:in:top
611        acc: inout:top
612        opcode_idx: [0x13]
613        format: [op_imm_8_v_8]
614        properties: [jit_ic_slot, one_slot, eight_bit_ic]
615      - sig: greatereq imm:u8, v:in:top
616        acc: inout:top
617        opcode_idx: [0x14]
618        format: [op_imm_8_v_8]
619        properties: [jit_ic_slot, one_slot, eight_bit_ic]
620      - sig: shl2 imm:u8, v:in:top
621        acc: inout:top
622        opcode_idx: [0x15]
623        format: [op_imm_8_v_8]
624        properties: [jit_ic_slot, one_slot, eight_bit_ic]
625      - sig: shr2 imm:u8, v:in:top
626        acc: inout:top
627        opcode_idx: [0x16]
628        format: [op_imm_8_v_8]
629        properties: [jit_ic_slot, one_slot, eight_bit_ic]
630      - sig: ashr2 imm:u8, v:in:top
631        acc: inout:top
632        opcode_idx: [0x17]
633        format: [op_imm_8_v_8]
634        properties: [jit_ic_slot, one_slot, eight_bit_ic]
635      - sig: and2 imm:u8, v:in:top
636        acc: inout:top
637        opcode_idx: [0x18]
638        format: [op_imm_8_v_8]
639        properties: [jit_ic_slot, one_slot, eight_bit_ic]
640      - sig: or2 imm:u8, v:in:top
641        acc: inout:top
642        opcode_idx: [0x19]
643        format: [op_imm_8_v_8]
644        properties: [jit_ic_slot, one_slot, eight_bit_ic]
645      - sig: xor2 imm:u8, v:in:top
646        acc: inout:top
647        opcode_idx: [0x1a]
648        format: [op_imm_8_v_8]
649        properties: [jit_ic_slot, one_slot, eight_bit_ic]
650      - sig: exp imm:u8, v:in:top
651        acc: inout:top
652        opcode_idx: [0x1b]
653        format: [op_imm_8_v_8]
654        properties: [jit_ic_slot, one_slot, eight_bit_ic]
655
656  - title: unary operations
657    description: unary operations
658    verification:
659      - none
660    exceptions:
661      - x_none
662    properties:
663      - acc_read
664      - acc_write
665    namespace: ecmascript
666    pseudo: |
667      acc = ecma_op(acc, operand_0, ..., operands_n)
668    semantics: |
669      skip
670    instructions:
671      - sig: typeof imm:u16
672        acc: inout:top
673        opcode_idx: [0x1c, 0x84]
674        format: [op_imm_8, op_imm_16]
675        properties: [ic_slot, two_slot, sixteen_bit_ic]
676      - sig: tonumber imm:u8
677        acc: inout:top
678        opcode_idx: [0x1d]
679        format: [op_imm_8]
680        properties: [jit_ic_slot, one_slot, eight_bit_ic]
681      - sig: deprecated.tonumber v:in:top
682        acc: inout:top
683        opcode_idx: [0x05]
684        format: [pref_op_v_8]
685        prefix: deprecated
686      - sig: tonumeric imm:u8
687        acc: inout:top
688        opcode_idx: [0x1e]
689        format: [op_imm_8]
690        properties: [jit_ic_slot, one_slot, eight_bit_ic]
691      - sig: deprecated.tonumeric v:in:top
692        opcode_idx: [0x06]
693        acc: inout:top
694        prefix: deprecated
695        format: [pref_op_v_8]
696      - sig: neg imm:u8
697        acc: inout:top
698        opcode_idx: [0x1f]
699        format: [op_imm_8]
700        properties: [jit_ic_slot, one_slot, eight_bit_ic]
701      - sig: deprecated.neg v:in:top
702        acc: out:top
703        opcode_idx: [0x07]
704        format: [pref_op_v_8]
705        prefix: deprecated
706      - sig: not imm:u8
707        acc: inout:top
708        opcode_idx: [0x20]
709        format: [op_imm_8]
710        properties: [jit_ic_slot, one_slot, eight_bit_ic]
711      - sig: deprecated.not v:in:top
712        acc: out:top
713        opcode_idx: [0x08]
714        prefix: deprecated
715        format: [pref_op_v_8]
716      - sig: inc imm:u8
717        acc: inout:top
718        opcode_idx: [0x21]
719        format: [op_imm_8]
720        properties: [jit_ic_slot, one_slot, eight_bit_ic]
721      - sig: deprecated.inc v:in:top
722        acc: out:top
723        opcode_idx: [0x09]
724        prefix: deprecated
725        format: [pref_op_v_8]
726      - sig: dec imm:u8
727        acc: inout:top
728        opcode_idx: [0x22]
729        format: [op_imm_8]
730        properties: [jit_ic_slot, one_slot, eight_bit_ic]
731      - sig: deprecated.dec v:in:top
732        acc: out:top
733        opcode_idx: [0x0a]
734        format: [pref_op_v_8]
735        prefix: deprecated
736      - sig: istrue
737        acc: inout:top
738        opcode_idx: [0x23]
739        format: [op_none]
740      - sig: isfalse
741        acc: inout:top
742        opcode_idx: [0x24]
743        format: [op_none]
744
745  - title: comparation instructions
746    description: comparation instructions
747    verification:
748      - none
749    exceptions:
750      - x_none
751    properties:
752      - acc_read
753      - acc_write
754    namespace: ecmascript
755    pseudo: |
756      acc = ecma_op(acc, operand_0, ..., operands_n)
757    semantics: |
758      skip
759    instructions:
760      - sig: isin imm:u8, v:in:top
761        acc: inout:top
762        opcode_idx: [0x25]
763        format: [op_imm_8_v_8]
764        properties: [jit_ic_slot, one_slot, eight_bit_ic]
765      - sig: instanceof imm:u8, v:in:top
766        acc: inout:top
767        opcode_idx: [0x26]
768        format: [op_imm_8_v_8]
769        properties: [jit_ic_slot, two_slot, eight_bit_ic]
770      - sig: strictnoteq imm:u8, v:in:top
771        acc: inout:top
772        opcode_idx: [0x27]
773        format: [op_imm_8_v_8]
774        properties: [jit_ic_slot, one_slot, eight_bit_ic]
775      - sig: stricteq imm:u8, v:in:top
776        acc: inout:top
777        opcode_idx: [0x28]
778        format: [op_imm_8_v_8]
779        properties: [jit_ic_slot, one_slot, eight_bit_ic]
780
781  - title: call runtime functions
782    description: instructions which call runtime functions
783    verification:
784      - none
785    exceptions:
786      - x_none
787    properties:
788      - acc_read
789      - acc_write
790    namespace: ecmascript
791    pseudo: |
792      acc = ecma_op(acc, operand_0, ..., operands_n)
793    semantics: |
794      skip
795    instructions:
796      - sig: callruntime.notifyconcurrentresult
797        acc: in:top
798        opcode_idx: [0x00]
799        format: [pref_op_none]
800        prefix: callruntime
801      - sig: callruntime.definefieldbyvalue imm:u8, v1:in:top, v2:in:top
802        acc: in:top
803        opcode_idx: [0x01]
804        prefix: callruntime
805        format: [pref_op_imm_8_v1_8_v2_8]
806        properties: [ic_slot, two_slot, eight_bit_ic]
807      - sig: callruntime.definefieldbyindex imm1:u8, imm2:u32, v:in:top
808        acc: in:top
809        opcode_idx: [0x02]
810        prefix: callruntime
811        format: [pref_op_imm1_8_imm2_32_v_8]
812        properties: [ic_slot, two_slot, eight_bit_ic]
813      - sig: callruntime.topropertykey
814        acc: inout:top
815        opcode_idx: [0x03]
816        format: [pref_op_none]
817        prefix: callruntime
818      - sig: callruntime.createprivateproperty imm:u16, literalarray_id
819        acc: none
820        opcode_idx: [0x04]
821        format: [pref_op_imm_16_id_16]
822        prefix: callruntime
823        properties: [literalarray_id]
824      - sig: callruntime.defineprivateproperty imm1:u8, imm2:u16, imm3:u16, v:in:top
825        acc: in:top
826        opcode_idx: [0x05]
827        format: [pref_op_imm1_8_imm2_16_imm3_16_v_8]
828        prefix: callruntime
829        properties: [ic_slot, two_slot, eight_bit_ic]
830      - sig: callruntime.callinit imm:u8, v:in:top
831        acc: in:top
832        opcode_idx: [0x06]
833        format: [pref_op_imm_8_v_8]
834        prefix: callruntime
835        properties: [jit_ic_slot, two_slot, eight_bit_ic]
836      - sig: callruntime.definesendableclass imm1:u16, method_id, literalarray_id, imm2:u16, v:in:top
837        acc: out:top
838        opcode_idx: [0x07]
839        format: [pref_op_imm1_16_id1_16_id2_16_imm2_16_v_8]
840        prefix: callruntime
841        properties: [method_id, ic_slot, one_slot, sixteen_bit_ic, literalarray_id]
842      - sig: callruntime.ldsendableclass imm:u16
843        acc: out:top
844        opcode_idx: [0x08]
845        format: [pref_op_imm_16]
846        prefix: callruntime
847      - sig: callruntime.ldsendableexternalmodulevar imm:u8
848        acc: out:top
849        opcode_idx: [0x09]
850        format: [pref_op_imm_8]
851        prefix: callruntime
852      - sig: callruntime.wideldsendableexternalmodulevar imm:u16
853        acc: out:top
854        opcode_idx: [0x0a]
855        format: [pref_op_imm_16]
856        prefix: callruntime
857      - sig: callruntime.newsendableenv imm:u8
858        acc: none
859        opcode_idx: [0x0b]
860        format: [pref_op_imm_8]
861        prefix: callruntime
862      - sig: callruntime.widenewsendableenv imm:u16
863        acc: none
864        opcode_idx: [0x0c]
865        format: [pref_op_imm_16]
866        prefix: callruntime
867      - sig: callruntime.stsendablevar imm1:u8, imm2:u8
868        acc: in:top
869        opcode_idx: [0x0d, 0x0e]
870        format: [pref_op_imm1_4_imm2_4, pref_op_imm1_8_imm2_8]
871        prefix: callruntime
872      - sig: callruntime.widestsendablevar imm1:u16, imm2:u16
873        acc: in:top
874        opcode_idx: [0x0f]
875        format: [pref_op_imm1_16_imm2_16]
876        prefix: callruntime
877      - sig: callruntime.ldsendablevar imm1:u8, imm2:u8
878        acc: out:top
879        opcode_idx: [0x10, 0x11]
880        format: [pref_op_imm1_4_imm2_4, pref_op_imm1_8_imm2_8]
881        prefix: callruntime
882      - sig: callruntime.wideldsendablevar imm1:u16, imm2:u16
883        acc: out:top
884        opcode_idx: [0x12]
885        format: [pref_op_imm1_16_imm2_16]
886        prefix: callruntime
887      - sig: callruntime.istrue imm:u8
888        acc: inout:top
889        opcode_idx: [0x13]
890        format: [pref_op_imm_8]
891        prefix: callruntime
892        properties: [ic_slot, eight_bit_ic]
893      - sig: callruntime.isfalse imm:u8
894        acc: inout:top
895        opcode_idx: [0x14]
896        format: [pref_op_imm_8]
897        prefix: callruntime
898        properties: [ic_slot, eight_bit_ic]
899      - sig: callruntime.ldlazymodulevar imm:u8
900        acc: out:top
901        opcode_idx: [0x15]
902        format: [pref_op_imm_8]
903        prefix: callruntime
904      - sig: callruntime.wideldlazymodulevar imm:u16
905        acc: out:top
906        opcode_idx: [0x16]
907        format: [pref_op_imm_16]
908        prefix: callruntime
909      - sig: callruntime.ldlazysendablemodulevar imm:u8
910        acc: out:top
911        opcode_idx: [0x17]
912        format: [pref_op_imm_8]
913        prefix: callruntime
914      - sig: callruntime.wideldlazysendablemodulevar imm:u16
915        acc: out:top
916        opcode_idx: [0x18]
917        format: [pref_op_imm_16]
918        prefix: callruntime
919
920  - title: throw instructions
921    description: throw instructions
922    verification:
923      - none
924    exceptions:
925      - x_none
926    properties:
927      - acc_read
928      - acc_write
929    namespace: ecmascript
930    pseudo: |
931      acc = ecma_op(acc, operand_0, ..., operands_n)
932    semantics: |
933      skip
934    instructions:
935      - sig: throw
936        acc: in:top
937        opcode_idx: [0x00]
938        format: [pref_op_none]
939        prefix: throw
940        exceptions:
941          - x_throw
942      - sig: throw.notexists
943        acc: none
944        opcode_idx: [0x01]
945        format: [pref_op_none]
946        prefix: throw
947      - sig: throw.patternnoncoercible
948        acc: none
949        opcode_idx: [0x02]
950        format: [pref_op_none]
951        prefix: throw
952      - sig: throw.deletesuperproperty
953        acc: none
954        opcode_idx: [0x03]
955        format: [pref_op_none]
956        prefix: throw
957      - sig: throw.constassignment v:in:top
958        acc: none
959        opcode_idx: [0x04]
960        format: [pref_op_v_8]
961        prefix: throw
962      - sig: throw.ifnotobject v:in:top
963        acc: none
964        opcode_idx: [0x05]
965        format: [pref_op_v_8]
966        prefix: throw
967      - sig: throw.undefinedifhole v1:in:top, v2:in:top
968        acc: none
969        opcode_idx: [0x06]
970        format: [pref_op_v1_8_v2_8]
971        prefix: throw
972      - sig: throw.ifsupernotcorrectcall imm:u16
973        acc: in:top
974        opcode_idx: [0x07, 0x08]
975        format: [pref_op_imm_8, pref_op_imm_16]
976        prefix: throw
977      - sig: throw.undefinedifholewithname string_id
978        acc: in:top
979        opcode_idx: [0x09]
980        format: [pref_op_id_16]
981        prefix: throw
982        properties: [string_id]
983
984  - title: call instructions
985    description: call
986    verification:
987      - none
988    exceptions:
989      - x_none
990    properties:
991      - acc_read
992      - acc_write
993    namespace: ecmascript
994    pseudo: |
995      acc = ecma_op(acc, operand_0, ..., operands_n)
996    semantics: |
997      skip
998    instructions:
999      - sig: callarg0 imm:u8
1000        acc: inout:top
1001        opcode_idx: [0x29]
1002        format: [op_imm_8]
1003        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1004      - sig: deprecated.callarg0 v:in:top
1005        acc: out:top
1006        opcode_idx: [0x0b]
1007        format: [pref_op_v_8]
1008        prefix: deprecated
1009      - sig: callarg1 imm:u8, v:in:top
1010        acc: inout:top
1011        opcode_idx: [0x2a]
1012        format: [op_imm_8_v_8]
1013        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1014      - sig: deprecated.callarg1 v1:in:top, v2:in:top
1015        acc: out:top
1016        opcode_idx: [0x0c]
1017        format: [pref_op_v1_8_v2_8]
1018        prefix: deprecated
1019      - sig: callargs2 imm:u8, v1:in:top, v2:in:top
1020        acc: inout:top
1021        opcode_idx: [0x2b]
1022        format: [op_imm_8_v1_8_v2_8]
1023        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1024      - sig: deprecated.callargs2 v1:in:top, v2:in:top, v3:in:top
1025        acc: out:top
1026        opcode_idx: [0x0d]
1027        format: [pref_op_v1_8_v2_8_v3_8]
1028        prefix: deprecated
1029      - sig: callargs3 imm:u8, v1:in:top, v2:in:top, v3:in:top
1030        acc: inout:top
1031        opcode_idx: [0x2c]
1032        format: [op_imm_8_v1_8_v2_8_v3_8]
1033        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1034      - sig: deprecated.callargs3 v1:in:top, v2:in:top, v3:in:top, v4:in:top
1035        acc: out:top
1036        opcode_idx: [0x0e]
1037        format: [pref_op_v1_8_v2_8_v3_8_v4_8]
1038        prefix: deprecated
1039      - sig: callrange imm1:u8, imm2:u8, v:in:top
1040        acc: inout:top
1041        opcode_idx: [0x73]
1042        format: [op_imm1_8_imm2_8_v_8]
1043        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1044      - sig: wide.callrange imm:u16, v:in:top
1045        acc: inout:top
1046        opcode_idx: [0x04]
1047        format: [pref_op_imm_16_v_8]
1048        prefix: wide
1049      - sig: deprecated.callrange imm:u16, v:in:top
1050        acc: out:top
1051        opcode_idx: [0x0f]
1052        format: [pref_op_imm_16_v_8]
1053        prefix: deprecated
1054      - sig: supercallspread imm:u8, v:in:top
1055        acc: inout:top
1056        opcode_idx: [0xb9]
1057        format: [op_imm_8_v_8]
1058        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1059      - sig: apply imm:u8, v1:in:top, v2:in:top
1060        acc: inout:top
1061        opcode_idx: [0xba]
1062        format: [op_imm_8_v1_8_v2_8]
1063        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1064      - sig: deprecated.callspread v1:in:top, v2:in:top, v3:in:top
1065        acc: out:top
1066        opcode_idx: [0x10]
1067        format: [pref_op_v1_8_v2_8_v3_8]
1068        prefix: deprecated
1069      - sig: callthis0 imm:u8, v:in:top
1070        acc: inout:top
1071        opcode_idx: [0x2d]
1072        format: [op_imm_8_v_8]
1073        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1074      - sig: callthis1 imm:u8, v1:in:top, v2:in:top
1075        acc: inout:top
1076        opcode_idx: [0x2e]
1077        format: [op_imm_8_v1_8_v2_8]
1078        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1079      - sig: callthis2 imm:u8, v1:in:top, v2:in:top, v3:in:top
1080        acc: inout:top
1081        opcode_idx: [0x2f]
1082        format: [op_imm_8_v1_8_v2_8_v3_8]
1083        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1084      - sig: callthis3 imm:u8, v1:in:top, v2:in:top, v3:in:top, v4:in:top
1085        acc: inout:top
1086        opcode_idx: [0x30]
1087        format: [op_imm_8_v1_8_v2_8_v3_8_v4_8]
1088        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1089      - sig: callthisrange imm1:u8, imm2:u8, v:in:top
1090        acc: inout:top
1091        opcode_idx: [0x31]
1092        format: [op_imm1_8_imm2_8_v_8]
1093        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1094      - sig: wide.callthisrange imm:u16, v:in:top
1095        acc: inout:top
1096        opcode_idx: [0x05]
1097        format: [pref_op_imm_16_v_8]
1098        prefix: wide
1099      - sig: deprecated.callthisrange imm:u16, v:in:top
1100        acc: out:top
1101        opcode_idx: [0x11]
1102        format: [pref_op_imm_16_v_8]
1103        prefix: deprecated
1104      - sig: supercallthisrange imm1:u8, imm2:u8, v:in:top
1105        acc: out:top
1106        opcode_idx: [0x32]
1107        format: [op_imm1_8_imm2_8_v_8]
1108        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1109      - sig: wide.supercallthisrange imm:u16, v:in:top
1110        acc: out:top
1111        opcode_idx: [0x06]
1112        format: [pref_op_imm_16_v_8]
1113        prefix: wide
1114      - sig: supercallarrowrange imm1:u8, imm2:u8, v:in:top
1115        acc: inout:top
1116        opcode_idx: [0xbb]
1117        format: [op_imm1_8_imm2_8_v_8]
1118        properties: [jit_ic_slot, two_slot, eight_bit_ic]
1119      - sig: wide.supercallarrowrange imm:u16, v:in:top
1120        acc: inout:top
1121        opcode_idx: [0x07]
1122        format: [pref_op_imm_16_v_8]
1123        prefix: wide
1124
1125  - title: definition instuctions
1126    description: instructions which define object
1127    verification:
1128      - none
1129    exceptions:
1130      - x_none
1131    properties:
1132      - acc_read
1133      - acc_write
1134    namespace: ecmascript
1135    pseudo: |
1136      acc = ecma_op(acc, operand_0, ..., operands_n)
1137    semantics: |
1138      skip
1139    instructions:
1140      - sig: definegettersetterbyvalue v1:in:top, v2:in:top, v3:in:top, v4:in:top
1141        acc: inout:top
1142        opcode_idx: [0xbc]
1143        format: [op_v1_8_v2_8_v3_8_v4_8]
1144      - sig: definefunc imm1:u16, method_id, imm2:u8
1145        acc: out:top
1146        opcode_idx: [0x33, 0x74]
1147        format: [op_imm1_8_id_16_imm2_8, op_imm1_16_id_16_imm2_8]
1148        properties: [method_id, ic_slot, one_slot, eight_sixteen_bit_ic]
1149      - sig: definemethod imm1:u16, method_id, imm2:u8
1150        acc: inout:top
1151        opcode_idx: [0x34, 0xbe]
1152        format: [op_imm1_8_id_16_imm2_8, op_imm1_16_id_16_imm2_8]
1153        properties: [method_id, ic_slot, one_slot, eight_sixteen_bit_ic]
1154      - sig: defineclasswithbuffer imm1:u16, method_id, literalarray_id, imm2:u16, v:in:top
1155        acc: out:top
1156        opcode_idx: [0x35, 0x75]
1157        format: [op_imm1_8_id1_16_id2_16_imm2_16_v_8, op_imm1_16_id1_16_id2_16_imm2_16_v_8]
1158        properties: [method_id, ic_slot, one_slot, eight_sixteen_bit_ic, literalarray_id]
1159      - sig: deprecated.defineclasswithbuffer method_id, imm1:u16, imm2:u16, v1:in:top, v2:in:top
1160        acc: out:top
1161        opcode_idx: [0x12]
1162        format: [pref_op_id_16_imm1_16_imm2_16_v1_8_v2_8]
1163        prefix: deprecated
1164        properties: [method_id]
1165
1166  - title: object visitors
1167    description: instructions which visit object
1168    verification:
1169      - none
1170    exceptions:
1171      - x_none
1172    properties:
1173      - acc_read
1174      - acc_write
1175    namespace: ecmascript
1176    pseudo: |
1177      acc = ecma_op(acc, operand_0, ..., operands_n)
1178    semantics: |
1179      skip
1180    instructions:
1181      - sig: resumegenerator
1182        acc: inout:top
1183        opcode_idx: [0xbf]
1184        format: [op_none]
1185      - sig: deprecated.resumegenerator v:in:top
1186        acc: out:top
1187        opcode_idx: [0x13]
1188        format: [pref_op_v_8]
1189        prefix: deprecated
1190      - sig: getresumemode
1191        acc: inout:top
1192        opcode_idx: [0xc0]
1193        format: [op_none]
1194      - sig: deprecated.getresumemode v:in:top
1195        acc: out:top
1196        opcode_idx: [0x14]
1197        format: [pref_op_v_8]
1198        prefix: deprecated
1199      - sig: gettemplateobject imm:u16
1200        acc: inout:top
1201        opcode_idx: [0x76, 0xc1]
1202        format: [op_imm_8, op_imm_16]
1203        properties: [ic_slot, one_slot, eight_sixteen_bit_ic]
1204      - sig: deprecated.gettemplateobject v:in:top
1205        acc: inout:top
1206        opcode_idx: [0x15]
1207        format: [pref_op_v_8]
1208        prefix: deprecated
1209      - sig: getnextpropname v:in:top
1210        acc: out:top
1211        opcode_idx: [0x36]
1212        format: [op_v_8]
1213      - sig: delobjprop v:in:top
1214        acc: inout:top
1215        opcode_idx: [0xc2]
1216        format: [op_v_8]
1217      - sig: deprecated.delobjprop v1:in:top, v2:in:top
1218        acc: out:top
1219        opcode_idx: [0x16]
1220        format: [pref_op_v1_8_v2_8]
1221        prefix: deprecated
1222      - sig: suspendgenerator v:in:top
1223        acc: inout:top
1224        opcode_idx: [0xc3]
1225        format: [op_v_8]
1226      - sig: deprecated.suspendgenerator v1:in:top, v2:in:top
1227        acc: out:top
1228        opcode_idx: [0x17]
1229        format: [pref_op_v1_8_v2_8]
1230        prefix: deprecated
1231      - sig: asyncfunctionawaituncaught v:in:top
1232        acc: inout:top
1233        opcode_idx: [0xc4]
1234        format: [op_v_8]
1235      - sig: deprecated.asyncfunctionawaituncaught v1:in:top, v2:in:top
1236        acc: out:top
1237        opcode_idx: [0x18]
1238        format: [pref_op_v1_8_v2_8]
1239        prefix: deprecated
1240      - sig: copydataproperties v:in:top
1241        acc: inout:top
1242        opcode_idx: [0xc5]
1243        format: [op_v_8]
1244      - sig: deprecated.copydataproperties v1:in:top, v2:in:top
1245        acc: out:top
1246        opcode_idx: [0x19]
1247        format: [pref_op_v1_8_v2_8]
1248        prefix: deprecated
1249      - sig: starrayspread v1:in:top, v2:in:top
1250        acc: inout:top
1251        opcode_idx: [0xc6]
1252        format: [op_v1_8_v2_8]
1253      - sig: setobjectwithproto imm:u16, v:in:top
1254        acc: in:top
1255        opcode_idx: [0x77, 0xc7]
1256        format: [op_imm_8_v_8, op_imm_16_v_8]
1257        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1258      - sig: deprecated.setobjectwithproto v1:in:top, v2:in:top
1259        acc: none
1260        opcode_idx: [0x1a]
1261        format: [pref_op_v1_8_v2_8]
1262        prefix: deprecated
1263      - sig: ldobjbyvalue imm:u16, v:in:top
1264        acc: inout:top
1265        opcode_idx: [0x37, 0x85]
1266        format: [op_imm_8_v_8, op_imm_16_v_8]
1267        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1268      - sig: deprecated.ldobjbyvalue v1:in:top, v2:in:top
1269        acc: out:top
1270        opcode_idx: [0x1b]
1271        format: [pref_op_v1_8_v2_8]
1272        prefix: deprecated
1273      - sig: stobjbyvalue imm:u16, v1:in:top, v2:in:top
1274        acc: in:top
1275        opcode_idx: [0x38, 0x86]
1276        format: [op_imm_8_v1_8_v2_8, op_imm_16_v1_8_v2_8]
1277        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1278      - sig: stownbyvalue imm:u16, v1:in:top, v2:in:top
1279        acc: in:top
1280        opcode_idx: [0x78, 0xc8]
1281        format: [op_imm_8_v1_8_v2_8, op_imm_16_v1_8_v2_8]
1282        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1283      - sig: ldsuperbyvalue imm:u16, v:in:top
1284        acc: inout:top
1285        opcode_idx: [0x39, 0x87]
1286        format: [op_imm_8_v_8, op_imm_16_v_8]
1287        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1288      - sig: deprecated.ldsuperbyvalue v1:in:top, v2:in:top
1289        acc: out:top
1290        opcode_idx: [0x1c]
1291        format: [pref_op_v1_8_v2_8]
1292        prefix: deprecated
1293      - sig: stsuperbyvalue imm:u16, v1:in:top, v2:in:top
1294        acc: in:top
1295        opcode_idx: [0xc9, 0xca]
1296        format: [op_imm_8_v1_8_v2_8, op_imm_16_v1_8_v2_8]
1297        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1298      - sig: ldobjbyindex imm1:u16, imm2:u16
1299        acc: inout:top
1300        opcode_idx: [0x3a, 0x88]
1301        format: [op_imm1_8_imm2_16, op_imm1_16_imm2_16]
1302        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1303      - sig: wide.ldobjbyindex imm:u32
1304        acc: inout:top
1305        opcode_idx: [0x08]
1306        format: [pref_op_imm_32]
1307        prefix: wide
1308      - sig: deprecated.ldobjbyindex v:in:top, imm:u32
1309        acc: out:top
1310        opcode_idx: [0x1d]
1311        format: [pref_op_v_8_imm_32]
1312        prefix: deprecated
1313      - sig: stobjbyindex imm1:u16, v:in:top, imm2:u16
1314        acc: in:top
1315        opcode_idx: [0x3b, 0x89]
1316        format: [op_imm1_8_v_8_imm2_16, op_imm1_16_v_8_imm2_16]
1317        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1318      - sig: wide.stobjbyindex v:in:top, imm:u32
1319        acc: in:top
1320        opcode_idx: [0x09]
1321        format: [pref_op_v_8_imm_32]
1322        prefix: wide
1323      - sig: stownbyindex imm1:u16, v:in:top, imm2:u16
1324        acc: in:top
1325        opcode_idx: [0x79, 0xcb]
1326        format: [op_imm1_8_v_8_imm2_16, op_imm1_16_v_8_imm2_16]
1327        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1328      - sig: wide.stownbyindex v:in:top, imm:u32
1329        acc: in:top
1330        opcode_idx: [0x0a]
1331        format: [pref_op_v_8_imm_32]
1332        prefix: wide
1333      - sig: asyncfunctionresolve v:in:top
1334        acc: inout:top
1335        opcode_idx: [0xcd]
1336        format: [op_v_8]
1337      - sig: deprecated.asyncfunctionresolve v1:in:top, v2:in:top, v3:in:top
1338        acc: out:top
1339        opcode_idx: [0x1e]
1340        format: [pref_op_v1_8_v2_8_v3_8]
1341        prefix: deprecated
1342      - sig: asyncfunctionreject v:in:top
1343        acc: inout:top
1344        opcode_idx: [0xce]
1345        format: [op_v_8]
1346      - sig: deprecated.asyncfunctionreject v1:in:top, v2:in:top, v3:in:top
1347        acc: out:top
1348        opcode_idx: [0x1f]
1349        format: [pref_op_v1_8_v2_8_v3_8]
1350        prefix: deprecated
1351      - sig: copyrestargs imm:u8
1352        acc: out:top
1353        opcode_idx: [0xcf]
1354        format: [op_imm_8]
1355      - sig: wide.copyrestargs imm:u16
1356        acc: out:top
1357        opcode_idx: [0x0b]
1358        format: [pref_op_imm_16]
1359        prefix: wide
1360      - sig: ldlexvar imm1:u8, imm2:u8
1361        acc: out:top
1362        opcode_idx: [0x3c, 0x8a]
1363        format: [op_imm1_4_imm2_4, op_imm1_8_imm2_8]
1364      - sig: wide.ldlexvar imm1:u16, imm2:u16
1365        acc: out:top
1366        opcode_idx: [0x0c]
1367        format: [pref_op_imm1_16_imm2_16]
1368        prefix: wide
1369      - sig: stlexvar imm1:u8, imm2:u8
1370        acc: in:top
1371        opcode_idx: [0x3d, 0x8b]
1372        format: [op_imm1_4_imm2_4, op_imm1_8_imm2_8]
1373      - sig: wide.stlexvar imm1:u16, imm2:u16
1374        acc: in:top
1375        opcode_idx: [0x0d]
1376        format: [pref_op_imm1_16_imm2_16]
1377        prefix: wide
1378      - sig: deprecated.stlexvar imm1:u16, imm2:u16, v:in:top
1379        acc: none
1380        opcode_idx: [0x20, 0x21, 0x22]
1381        format: [pref_op_imm1_4_imm2_4_v_8, pref_op_imm1_8_imm2_8_v_8, pref_op_imm1_16_imm2_16_v_8]
1382        prefix: deprecated
1383      - sig: getmodulenamespace imm:u8
1384        acc: out:top
1385        opcode_idx: [0x7b]
1386        format: [op_imm_8]
1387      - sig: wide.getmodulenamespace imm:u16
1388        acc: out:top
1389        opcode_idx: [0x0e]
1390        format: [pref_op_imm_16]
1391        prefix: wide
1392      - sig: deprecated.getmodulenamespace string_id
1393        acc: out:top
1394        opcode_idx: [0x23]
1395        format: [pref_op_id_32]
1396        properties: [string_id]
1397        prefix: deprecated
1398      - sig: stmodulevar imm:u8
1399        acc: in:top
1400        opcode_idx: [0x7c]
1401        format: [op_imm_8]
1402      - sig: wide.stmodulevar imm:u16
1403        acc: in:top
1404        opcode_idx: [0x0f]
1405        format: [pref_op_imm_16]
1406        prefix: wide
1407      - sig: deprecated.stmodulevar string_id
1408        acc: in:top
1409        opcode_idx: [0x24]
1410        format: [pref_op_id_32]
1411        properties: [string_id]
1412        prefix: deprecated
1413      - sig: tryldglobalbyname imm:u16, string_id
1414        acc: out:top
1415        opcode_idx: [0x3f, 0x8c]
1416        format: [op_imm_8_id_16, op_imm_16_id_16]
1417        properties: [string_id, ic_slot, one_slot, eight_sixteen_bit_ic]
1418      - sig: trystglobalbyname imm:u16, string_id
1419        acc: in:top
1420        opcode_idx: [0x40, 0x8d]
1421        format: [op_imm_8_id_16, op_imm_16_id_16]
1422        properties: [string_id, ic_slot, one_slot, eight_sixteen_bit_ic]
1423      - sig: ldglobalvar imm:u16, string_id
1424        acc: out:top
1425        opcode_idx: [0x41]
1426        format: [op_imm_16_id_16]
1427        properties: [string_id, ic_slot, one_slot, sixteen_bit_ic]
1428      - sig: stglobalvar imm:u16, string_id
1429        acc: in:top
1430        opcode_idx: [0x7f]
1431        format: [op_imm_16_id_16]
1432        properties: [string_id, ic_slot, one_slot, sixteen_bit_ic]
1433      - sig: ldobjbyname imm:u16, string_id
1434        acc: inout:top
1435        opcode_idx: [0x42, 0x90]
1436        format: [op_imm_8_id_16, op_imm_16_id_16]
1437        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1438      - sig: deprecated.ldobjbyname string_id, v:in:top
1439        acc: out:top
1440        opcode_idx: [0x25]
1441        format: [pref_op_id_32_v_8]
1442        properties: [string_id]
1443        prefix: deprecated
1444      - sig: stobjbyname imm:u16, string_id, v:in:top
1445        acc: in:top
1446        opcode_idx: [0x43, 0x91]
1447        format: [op_imm_8_id_16_v_8, op_imm_16_id_16_v_8]
1448        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1449      - sig: stownbyname imm:u16, string_id, v:in:top
1450        acc: in:top
1451        opcode_idx: [0x7a, 0xcc]
1452        format: [op_imm_8_id_16_v_8, op_imm_16_id_16_v_8]
1453        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1454      - sig: ldsuperbyname imm:u16, string_id
1455        acc: inout:top
1456        opcode_idx: [0x46, 0x92]
1457        format: [op_imm_8_id_16, op_imm_16_id_16]
1458        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1459      - sig: deprecated.ldsuperbyname string_id, v:in:top
1460        acc: out:top
1461        opcode_idx: [0x26]
1462        format: [pref_op_id_32_v_8]
1463        properties: [string_id]
1464        prefix: deprecated
1465      - sig: stsuperbyname imm:u16, string_id, v:in:top
1466        acc: in:top
1467        opcode_idx: [0xd0, 0xd1]
1468        format: [op_imm_8_id_16_v_8, op_imm_16_id_16_v_8]
1469        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1470      - sig: ldlocalmodulevar imm:u8
1471        opcode_idx: [0x7d]
1472        acc: out:top
1473        format: [op_imm_8]
1474      - sig: wide.ldlocalmodulevar imm:u16
1475        acc: out:top
1476        opcode_idx: [0x10]
1477        format: [pref_op_imm_16]
1478        prefix: wide
1479      - sig: ldexternalmodulevar imm:u8
1480        acc: out:top
1481        opcode_idx: [0x7e]
1482        format: [op_imm_8]
1483      - sig: wide.ldexternalmodulevar imm:u16
1484        acc: out:top
1485        opcode_idx: [0x11]
1486        format: [pref_op_imm_16]
1487        prefix: wide
1488      - sig: deprecated.ldmodulevar string_id, imm:u8
1489        acc: out:top
1490        opcode_idx: [0x27]
1491        format: [pref_op_id_32_imm_8]
1492        prefix: deprecated
1493        properties: [string_id]
1494      - sig: stconsttoglobalrecord imm:u16, string_id
1495        acc: in:top
1496        opcode_idx: [0x47]
1497        format: [op_imm_16_id_16]
1498        properties: [string_id, ic_slot, one_slot, sixteen_bit_ic]
1499      - sig: deprecated.stconsttoglobalrecord string_id
1500        acc: in:top
1501        opcode_idx: [0x28]
1502        format: [pref_op_id_32]
1503        properties: [string_id]
1504        prefix: deprecated
1505      - sig: sttoglobalrecord imm:u16, string_id
1506        acc: in:top
1507        opcode_idx: [0x48]
1508        format: [op_imm_16_id_16]
1509        properties: [string_id, ic_slot, one_slot, sixteen_bit_ic]
1510      - sig: deprecated.stlettoglobalrecord string_id
1511        acc: in:top
1512        opcode_idx: [0x29]
1513        format: [pref_op_id_32]
1514        properties: [string_id]
1515        prefix: deprecated
1516      - sig: deprecated.stclasstoglobalrecord string_id
1517        acc: in:top
1518        opcode_idx: [0x2a]
1519        format: [pref_op_id_32]
1520        properties: [string_id]
1521        prefix: deprecated
1522      - sig: deprecated.ldhomeobject
1523        acc: out:top
1524        opcode_idx: [0x2b]
1525        format: [pref_op_none]
1526        prefix: deprecated
1527      - sig: deprecated.createobjecthavingmethod imm:u16
1528        acc: inout:top
1529        opcode_idx: [0x2c]
1530        format: [pref_op_imm_16]
1531        prefix: deprecated
1532      - sig: stownbyvaluewithnameset imm:u16, v1:in:top, v2:in:top
1533        acc: in:top
1534        opcode_idx: [0x99, 0xd2]
1535        format: [op_imm_8_v1_8_v2_8, op_imm_16_v1_8_v2_8]
1536        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1537      - sig: stownbynamewithnameset imm:u16, string_id, v:in:top
1538        acc: in:top
1539        opcode_idx: [0x8e, 0xd4]
1540        format: [op_imm_8_id_16_v_8, op_imm_16_id_16_v_8]
1541        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1542      - sig: ldbigint string_id
1543        acc: out:top
1544        opcode_idx: [0xd3]
1545        format: [op_id_16]
1546        properties: [string_id]
1547      - sig: ldthisbyname imm:u16, string_id
1548        acc: out:top
1549        opcode_idx: [0x49, 0x93]
1550        format: [op_imm_8_id_16, op_imm_16_id_16]
1551        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1552      - sig: stthisbyname imm:u16, string_id
1553        acc: in:top
1554        opcode_idx: [0x4a, 0x94]
1555        format: [op_imm_8_id_16, op_imm_16_id_16]
1556        properties: [string_id, ic_slot, two_slot, eight_sixteen_bit_ic]
1557      - sig: ldthisbyvalue imm:u16
1558        acc: inout:top
1559        opcode_idx: [0x4b, 0x95]
1560        format: [op_imm_8, op_imm_16]
1561        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1562      - sig: stthisbyvalue imm:u16, v:in:top
1563        acc: in:top
1564        opcode_idx: [0x4c, 0x96]
1565        format: [op_imm_8_v_8, op_imm_16_v_8]
1566        properties: [ic_slot, two_slot, eight_sixteen_bit_ic]
1567      - sig: wide.ldpatchvar imm:u16
1568        acc: out:top
1569        opcode_idx: [0x12]
1570        format: [pref_op_imm_16]
1571        prefix: wide
1572      - sig: wide.stpatchvar imm:u16
1573        acc: in:top
1574        opcode_idx: [0x13]
1575        format: [pref_op_imm_16]
1576        prefix: wide
1577      - sig: dynamicimport
1578        acc: inout:top
1579        opcode_idx: [0xbd]
1580        format: [op_none]
1581      - sig: deprecated.dynamicimport v:in:top
1582        acc: out:top
1583        opcode_idx: [0x2d]
1584        format: [pref_op_v_8]
1585        prefix: deprecated
1586      - sig: asyncgeneratorreject v:in:top
1587        acc: inout:top
1588        opcode_idx: [0x97]
1589        format: [op_v_8]
1590      - sig: deprecated.asyncgeneratorreject v1:in:top, v2:in:top
1591        acc: out:top
1592        opcode_idx: [0x2e]
1593        format: [pref_op_v1_8_v2_8]
1594        prefix: deprecated
1595      - sig: setgeneratorstate imm:u8
1596        acc: in:top
1597        opcode_idx: [0xd6]
1598        format: [op_imm_8]
1599
1600  - title: Load accumulator from string constant pool
1601    description: >
1602      Load string specified by id into accumulator. In dynamically-typed language context
1603      load string as 'any' value.
1604    properties:
1605      - string_id
1606      - language_type
1607      - maybe_dynamic
1608    exceptions:
1609      - x_oom
1610    verification:
1611      - constant_string_id
1612    pseudo: |
1613      acc = load(id)
1614    instructions:
1615      - sig: lda.str string_id
1616        acc: out:ref
1617        opcode_idx: [0x3e]
1618        format: [op_id_16]
1619
1620  - title: jump operations
1621    description: >
1622      Transfer execution to an instruction at offset bytes from the beginning of the current
1623      instruction. Offset is sign extended to the size of instruction address.
1624    properties:
1625      - jump
1626    exceptions:
1627      - x_none
1628    verification:
1629      - branch_target
1630    pseudo: |
1631      pc += imm
1632    instructions:
1633      - sig: jmp imm:i32
1634        acc: none
1635        opcode_idx: [0x4d, 0x4e, 0x98]
1636        format: [op_imm_8, op_imm_16, op_imm_32]
1637      - sig: jeqz imm:i32
1638        acc: in:top
1639        opcode_idx: [0x4f, 0x50, 0x9a]
1640        format: [op_imm_8, op_imm_16, op_imm_32]
1641        properties: [conditional]
1642      - sig: jnez imm:i32
1643        acc: in:top
1644        opcode_idx: [0x51, 0x9b, 0x9c]
1645        format: [op_imm_8, op_imm_16, op_imm_32]
1646        properties: [conditional]
1647      - sig: jstricteqz imm:i16
1648        acc: in:top
1649        opcode_idx: [0x52, 0x9d]
1650        format: [op_imm_8, op_imm_16]
1651        properties: [conditional]
1652      - sig: jnstricteqz imm:i16
1653        acc: in:top
1654        opcode_idx: [0x53, 0x9e]
1655        format: [op_imm_8, op_imm_16]
1656        properties: [conditional]
1657      - sig: jeqnull imm:i16
1658        acc: in:top
1659        opcode_idx: [0x54, 0x9f]
1660        format: [op_imm_8, op_imm_16]
1661        properties: [conditional]
1662      - sig: jnenull imm:i16
1663        acc: in:top
1664        opcode_idx: [0x55, 0xa0]
1665        format: [op_imm_8, op_imm_16]
1666        properties: [conditional]
1667      - sig: jstricteqnull imm:i16
1668        acc: in:top
1669        opcode_idx: [0x56, 0xa1]
1670        format: [op_imm_8, op_imm_16]
1671        properties: [conditional]
1672      - sig: jnstricteqnull imm:i16
1673        acc: in:top
1674        opcode_idx: [0x57, 0xa2]
1675        format: [op_imm_8, op_imm_16]
1676        properties: [conditional]
1677      - sig: jequndefined imm:i16
1678        acc: in:top
1679        opcode_idx: [0x58, 0xa3]
1680        format: [op_imm_8, op_imm_16]
1681        properties: [conditional]
1682      - sig: jneundefined imm:i16
1683        acc: in:top
1684        opcode_idx: [0x59, 0xa4]
1685        format: [op_imm_8, op_imm_16]
1686        properties: [conditional]
1687      - sig: jstrictequndefined imm:i16
1688        acc: in:top
1689        opcode_idx: [0x5a, 0xa5]
1690        format: [op_imm_8, op_imm_16]
1691        properties: [conditional]
1692      - sig: jnstrictequndefined imm:i16
1693        acc: in:top
1694        opcode_idx: [0x5b, 0xa6]
1695        format: [op_imm_8, op_imm_16]
1696        properties: [conditional]
1697      - sig: jeq v:in:top, imm:i16
1698        acc: in:top
1699        opcode_idx: [0x5c, 0xa7]
1700        format: [op_v_8_imm_8, op_v_8_imm_16]
1701        properties: [conditional]
1702      - sig: jne v:in:top, imm:i16
1703        acc: in:top
1704        opcode_idx: [0x5d, 0xa8]
1705        format: [op_v_8_imm_8, op_v_8_imm_16]
1706        properties: [conditional]
1707      - sig: jstricteq v:in:top, imm:i16
1708        acc: in:top
1709        opcode_idx: [0x5e, 0xa9]
1710        format: [op_v_8_imm_8, op_v_8_imm_16]
1711        properties: [conditional]
1712      - sig: jnstricteq v:in:top, imm:i16
1713        acc: in:top
1714        opcode_idx: [0x5f, 0xaa]
1715        format: [op_v_8_imm_8, op_v_8_imm_16]
1716        properties: [conditional]
1717
1718  - title: Dynamic move register-to-register
1719    description: >
1720      Move 'any' values between registers
1721    verification:
1722      - valid_in_dynamic_context
1723    exceptions:
1724      - x_none
1725    properties:
1726      - dynamic
1727    pseudo: |
1728      vd = vs
1729    instructions:
1730      - sig: mov v1:out:any, v2:in:any
1731        acc: none
1732        opcode_idx: [0x44, 0x45, 0x8f]
1733        format: [op_v1_4_v2_4, op_v1_8_v2_8, op_v1_16_v2_16]
1734
1735  - title: Dynamic load accumulator from register
1736    description: >
1737      Move 'any' value from register to accumulator
1738    verification:
1739      - valid_in_dynamic_context
1740    exceptions:
1741      - x_none
1742    properties:
1743      - dynamic
1744    pseudo: |
1745      acc = v
1746    instructions:
1747      - sig: lda v:in:any
1748        acc: out:any
1749        opcode_idx: [0x60]
1750        format: [op_v_8]
1751
1752  - title: Dynamic store accumulator
1753    description: >
1754      Move 'any' value from accumulator to register
1755    verification:
1756      - valid_in_dynamic_context
1757    exceptions:
1758      - x_none
1759    properties:
1760      - dynamic
1761    pseudo: |
1762      v = acc
1763    instructions:
1764      - sig: sta v:out:any
1765        acc: in:any
1766        opcode_idx: [0x61]
1767        format: [op_v_8]
1768
1769  - title: Dynamic load accumulator from immediate
1770    description: >
1771      Move immediate as 'any' value to accumulator
1772    verification:
1773      - valid_in_dynamic_context
1774    exceptions:
1775      - x_none
1776    properties:
1777      - dynamic
1778    pseudo: |
1779      acc = imm
1780    instructions:
1781      - sig: ldai imm:i32
1782        acc: out:any
1783        opcode_idx: [0x62]
1784        format: [op_imm_32]
1785      - sig: fldai imm:f64
1786        acc: out:any
1787        opcode_idx: [0x63]
1788        format: [op_imm_64]
1789        properties: [float, dynamic]
1790
1791  - title: dynamic return
1792    description: dynamic return from method
1793    verification:
1794      - valid_in_dynamic_context
1795    exceptions:
1796      - x_none
1797    properties:
1798      - dynamic
1799      - return
1800    namespace: ecmascript
1801    pseudo: |
1802      return acc
1803    instructions:
1804      - sig: return
1805        acc: in:any
1806        opcode_idx: [0x64]
1807        format: [op_none]
1808        properties: [return]
1809      - sig: returnundefined
1810        acc: none
1811        opcode_idx: [0x65]
1812        properties: [return]
1813        format: [op_none]
1814
1815  - title: no operation
1816    description: Perform an operation without behavior
1817    exceptions:
1818      - x_none
1819    verification:
1820      - none
1821    pseudo: |
1822      skip
1823    instructions:
1824      - sig: nop
1825        acc: none
1826        opcode_idx: [0xd5]
1827        format: [op_none]
1828