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