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