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