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