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