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