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