1# Copyright (c) 2021 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 14prefixes: 15 - name: ecma 16 description: Extension for ecma support. 17 18groups: 19 - title: Ecma extension instructions 20 description: Ecma extension instructions with prefix ecma 21 verification: 22 - none 23 exceptions: 24 - x_none 25 properties: 26 - acc_read 27 - acc_write 28 namespace: ecmascript 29 pseudo: | 30 acc = ecma_op(acc, operand_0, ..., operands_n) 31 semantics: | 32 skip 33 instructions: 34 - sig: ecma.ldnan 35 acc: out:top 36 prefix: ecma 37 format: [pref_op_none] 38 - sig: ecma.ldinfinity 39 acc: out:top 40 prefix: ecma 41 format: [pref_op_none] 42 - sig: ecma.ldglobalthis 43 acc: out:top 44 prefix: ecma 45 format: [pref_op_none] 46 - sig: ecma.ldundefined 47 acc: out:top 48 prefix: ecma 49 format: [pref_op_none] 50 - sig: ecma.ldnull 51 acc: out:top 52 prefix: ecma 53 format: [pref_op_none] 54 - sig: ecma.ldsymbol 55 acc: out:top 56 prefix: ecma 57 format: [pref_op_none] 58 - sig: ecma.ldglobal 59 acc: out:top 60 prefix: ecma 61 format: [pref_op_none] 62 - sig: ecma.ldtrue 63 acc: out:top 64 prefix: ecma 65 format: [pref_op_none] 66 - sig: ecma.ldfalse 67 acc: out:top 68 prefix: ecma 69 format: [pref_op_none] 70 - sig: ecma.throwdyn 71 acc: in:top 72 prefix: ecma 73 format: [pref_op_none] 74 - sig: ecma.typeofdyn 75 acc: inout:top 76 prefix: ecma 77 format: [pref_op_none] 78 - sig: ecma.ldlexenvdyn 79 acc: out:top 80 prefix: ecma 81 format: [pref_op_none] 82 - sig: ecma.poplexenvdyn 83 acc: out:top 84 prefix: ecma 85 format: [pref_op_none] 86 - sig: ecma.getunmappedargs 87 acc: out:top 88 prefix: ecma 89 format: [pref_op_none] 90 - sig: ecma.getpropiterator 91 acc: inout:top 92 prefix: ecma 93 format: [pref_op_none] 94 - sig: ecma.asyncfunctionenter 95 acc: out:top 96 prefix: ecma 97 format: [pref_op_none] 98 - sig: ecma.ldhole 99 acc: out:top 100 prefix: ecma 101 format: [pref_op_none] 102 - sig: ecma.returnundefined 103 acc: none 104 prefix: ecma 105 properties: [return] 106 format: [pref_op_none] 107 - sig: ecma.createemptyobject 108 acc: out:top 109 prefix: ecma 110 format: [pref_op_none] 111 - sig: ecma.createemptyarray 112 acc: out:top 113 prefix: ecma 114 format: [pref_op_none] 115 - sig: ecma.getiterator 116 acc: inout:top 117 prefix: ecma 118 format: [pref_op_none] 119 - sig: ecma.throwthrownotexists 120 acc: none 121 prefix: ecma 122 format: [pref_op_none] 123 - sig: ecma.throwpatternnoncoercible 124 acc: none 125 prefix: ecma 126 format: [pref_op_none] 127 - sig: ecma.ldhomeobject 128 acc: out:top 129 prefix: ecma 130 format: [pref_op_none] 131 - sig: ecma.throwdeletesuperproperty 132 acc: none 133 prefix: ecma 134 format: [pref_op_none] 135 - sig: ecma.debugger 136 acc: none 137 prefix: ecma 138 format: [pref_op_none] 139 - sig: ecma.add2dyn v:in:top 140 acc: inout:top 141 prefix: ecma 142 format: [pref_op_v_8] 143 - sig: ecma.sub2dyn v:in:top 144 acc: inout:top 145 prefix: ecma 146 format: [pref_op_v_8] 147 - sig: ecma.mul2dyn v:in:top 148 acc: inout:top 149 prefix: ecma 150 format: [pref_op_v_8] 151 - sig: ecma.div2dyn v:in:top 152 acc: inout:top 153 prefix: ecma 154 format: [pref_op_v_8] 155 - sig: ecma.mod2dyn v:in:top 156 acc: inout:top 157 prefix: ecma 158 format: [pref_op_v_8] 159 - sig: ecma.eqdyn v:in:top 160 acc: inout:top 161 prefix: ecma 162 format: [pref_op_v_8] 163 - sig: ecma.noteqdyn v:in:top 164 acc: inout:top 165 prefix: ecma 166 format: [pref_op_v_8] 167 - sig: ecma.lessdyn v:in:top 168 acc: inout:top 169 prefix: ecma 170 format: [pref_op_v_8] 171 - sig: ecma.lesseqdyn v:in:top 172 acc: inout:top 173 prefix: ecma 174 format: [pref_op_v_8] 175 - sig: ecma.greaterdyn v:in:top 176 acc: inout:top 177 prefix: ecma 178 format: [pref_op_v_8] 179 - sig: ecma.greatereqdyn v:in:top 180 acc: inout:top 181 prefix: ecma 182 format: [pref_op_v_8] 183 - sig: ecma.shl2dyn v:in:top 184 acc: inout:top 185 prefix: ecma 186 format: [pref_op_v_8] 187 - sig: ecma.shr2dyn v:in:top 188 acc: inout:top 189 prefix: ecma 190 format: [pref_op_v_8] 191 - sig: ecma.ashr2dyn v:in:top 192 acc: inout:top 193 prefix: ecma 194 format: [pref_op_v_8] 195 - sig: ecma.and2dyn v:in:top 196 acc: inout:top 197 prefix: ecma 198 format: [pref_op_v_8] 199 - sig: ecma.or2dyn v:in:top 200 acc: inout:top 201 prefix: ecma 202 format: [pref_op_v_8] 203 - sig: ecma.xor2dyn v:in:top 204 acc: inout:top 205 prefix: ecma 206 format: [pref_op_v_8] 207 - sig: ecma.tonumber v:in:top 208 acc: inout:top 209 prefix: ecma 210 format: [pref_op_v_8] 211 - sig: ecma.negdyn v:in:top 212 acc: out:top 213 prefix: ecma 214 format: [pref_op_v_8] 215 - sig: ecma.notdyn v:in:top 216 acc: out:top 217 prefix: ecma 218 format: [pref_op_v_8] 219 - sig: ecma.incdyn v:in:top 220 acc: out:top 221 prefix: ecma 222 format: [pref_op_v_8] 223 - sig: ecma.decdyn v:in:top 224 acc: out:top 225 prefix: ecma 226 format: [pref_op_v_8] 227 - sig: ecma.expdyn v:in:top 228 acc: inout:top 229 prefix: ecma 230 format: [pref_op_v_8] 231 - sig: ecma.isindyn v:in:top 232 acc: inout:top 233 prefix: ecma 234 format: [pref_op_v_8] 235 - sig: ecma.instanceofdyn v:in:top 236 acc: inout:top 237 prefix: ecma 238 format: [pref_op_v_8] 239 - sig: ecma.strictnoteqdyn v:in:top 240 acc: inout:top 241 prefix: ecma 242 format: [pref_op_v_8] 243 - sig: ecma.stricteqdyn v:in:top 244 acc: inout:top 245 prefix: ecma 246 format: [pref_op_v_8] 247 - sig: ecma.resumegenerator v:in:top 248 acc: out:top 249 prefix: ecma 250 format: [pref_op_v_8] 251 - sig: ecma.getresumemode v:in:top 252 acc: out:top 253 prefix: ecma 254 format: [pref_op_v_8] 255 - sig: ecma.creategeneratorobj v:in:top 256 acc: out:top 257 prefix: ecma 258 format: [pref_op_v_8] 259 - sig: ecma.throwconstassignment v:in:top 260 acc: none 261 prefix: ecma 262 format: [pref_op_v_8] 263 - sig: ecma.gettemplateobject v:in:top 264 acc: out:top 265 prefix: ecma 266 format: [pref_op_v_8] 267 - sig: ecma.getnextpropname v:in:top 268 acc: out:top 269 prefix: ecma 270 format: [pref_op_v_8] 271 - sig: ecma.callarg0dyn v:in:top 272 acc: out:top 273 prefix: ecma 274 format: [pref_op_v_8] 275 - sig: ecma.throwifnotobject v:in:top 276 acc: none 277 prefix: ecma 278 format: [pref_op_v_8] 279 - sig: ecma.iternext v:in:top 280 acc: out:top 281 prefix: ecma 282 format: [pref_op_v_8] 283 - sig: ecma.closeiterator v:in:top 284 acc: out:top 285 prefix: ecma 286 format: [pref_op_v_8] 287 - sig: ecma.copymodule v:in:top 288 acc: out:top 289 prefix: ecma 290 format: [pref_op_v_8] 291 - sig: ecma.supercallspread v:in:top 292 acc: inout:top 293 prefix: ecma 294 format: [pref_op_v_8] 295 - sig: ecma.delobjprop v1:in:top, v2:in:top 296 acc: out:top 297 prefix: ecma 298 format: [pref_op_v1_8_v2_8] 299 - sig: ecma.newobjspreaddyn v1:in:top, v2:in:top 300 acc: inout:top 301 prefix: ecma 302 format: [pref_op_v1_8_v2_8] 303 - sig: ecma.createiterresultobj v1:in:top, v2:in:top 304 acc: inout:top 305 prefix: ecma 306 format: [pref_op_v1_8_v2_8] 307 - sig: ecma.suspendgenerator v1:in:top, v2:in:top 308 acc: out:top 309 prefix: ecma 310 format: [pref_op_v1_8_v2_8] 311 - sig: ecma.asyncfunctionawaituncaught v1:in:top, v2:in:top 312 acc: out:top 313 prefix: ecma 314 format: [pref_op_v1_8_v2_8] 315 - sig: ecma.throwundefinedifhole v1:in:top, v2:in:top 316 acc: none 317 prefix: ecma 318 format: [pref_op_v1_8_v2_8] 319 - sig: ecma.callarg1dyn v1:in:top, v2:in:top 320 acc: out:top 321 prefix: ecma 322 format: [pref_op_v1_8_v2_8] 323 - sig: ecma.copydataproperties v1:in:top, v2:in:top 324 acc: out:top 325 prefix: ecma 326 format: [pref_op_v1_8_v2_8] 327 - sig: ecma.starrayspread v1:in:top, v2:in:top 328 acc: inout:top 329 prefix: ecma 330 format: [pref_op_v1_8_v2_8] 331 - sig: ecma.getiteratornext v1:in:top, v2:in:top 332 acc: out:top 333 prefix: ecma 334 format: [pref_op_v1_8_v2_8] 335 - sig: ecma.setobjectwithproto v1:in:top, v2:in:top 336 acc: none 337 prefix: ecma 338 format: [pref_op_v1_8_v2_8] 339 - sig: ecma.ldobjbyvalue v1:in:top, v2:in:top 340 acc: out:top 341 prefix: ecma 342 format: [pref_op_v1_8_v2_8] 343 - sig: ecma.stobjbyvalue v1:in:top, v2:in:top 344 acc: in:top 345 prefix: ecma 346 format: [pref_op_v1_8_v2_8] 347 - sig: ecma.stownbyvalue v1:in:top, v2:in:top 348 acc: in:top 349 prefix: ecma 350 format: [pref_op_v1_8_v2_8] 351 - sig: ecma.ldsuperbyvalue v1:in:top, v2:in:top 352 acc: out:top 353 prefix: ecma 354 format: [pref_op_v1_8_v2_8] 355 - sig: ecma.stsuperbyvalue v1:in:top, v2:in:top 356 acc: in:top 357 prefix: ecma 358 format: [pref_op_v1_8_v2_8] 359 - sig: ecma.ldobjbyindex v:in:top, imm 360 acc: out:top 361 prefix: ecma 362 format: [pref_op_v_8_imm_32] 363 - sig: ecma.stobjbyindex v:in:top, imm 364 acc: in:top 365 prefix: ecma 366 format: [pref_op_v_8_imm_32] 367 - sig: ecma.stownbyindex v:in:top, imm 368 acc: in:top 369 prefix: ecma 370 format: [pref_op_v_8_imm_32] 371 - sig: ecma.callspreaddyn v1:in:top, v2:in:top, v3:in:top 372 acc: out:top 373 prefix: ecma 374 format: [pref_op_v1_8_v2_8_v3_8] 375 - sig: ecma.asyncfunctionresolve v1:in:top, v2:in:top, v3:in:top 376 acc: out:top 377 prefix: ecma 378 format: [pref_op_v1_8_v2_8_v3_8] 379 - sig: ecma.asyncfunctionreject v1:in:top, v2:in:top, v3:in:top 380 acc: out:top 381 prefix: ecma 382 format: [pref_op_v1_8_v2_8_v3_8] 383 - sig: ecma.callargs2dyn v1:in:top, v2:in:top, v3:in:top 384 acc: out:top 385 prefix: ecma 386 format: [pref_op_v1_8_v2_8_v3_8] 387 - sig: ecma.callargs3dyn v1:in:top, v2:in:top, v3:in:top, v4:in:top 388 acc: out:top 389 prefix: ecma 390 format: [pref_op_v1_8_v2_8_v3_8_v4_8] 391 - sig: ecma.definegettersetterbyvalue v1:in:top, v2:in:top, v3:in:top, v4:in:top 392 acc: inout:top 393 prefix: ecma 394 format: [pref_op_v1_8_v2_8_v3_8_v4_8] 395 - sig: ecma.newobjdynrange imm, v:in:top 396 acc: out:top 397 prefix: ecma 398 format: [pref_op_imm_16_v_8] 399 - sig: ecma.callirangedyn imm, v:in:top 400 acc: out:top 401 prefix: ecma 402 format: [pref_op_imm_16_v_8] 403 - sig: ecma.callithisrangedyn imm, v:in:top 404 acc: out:top 405 prefix: ecma 406 format: [pref_op_imm_16_v_8] 407 - sig: ecma.supercall imm, v:in:top 408 acc: inout:top 409 prefix: ecma 410 format: [pref_op_imm_16_v_8] 411 - sig: ecma.createobjectwithexcludedkeys imm, v1:in:top, v2:in:top 412 acc: out:top 413 prefix: ecma 414 format: [pref_op_imm_16_v1_8_v2_8] 415 - sig: ecma.definefuncdyn method_id, imm, v:in:top 416 acc: out:top 417 prefix: ecma 418 format: [pref_op_id_16_imm_16_v_8] 419 properties: [method_id] 420 - sig: ecma.definencfuncdyn method_id, imm, v:in:top 421 acc: inout:top 422 prefix: ecma 423 format: [pref_op_id_16_imm_16_v_8] 424 properties: [method_id] 425 - sig: ecma.definegeneratorfunc method_id, imm, v:in:top 426 acc: out:top 427 prefix: ecma 428 format: [pref_op_id_16_imm_16_v_8] 429 properties: [method_id] 430 - sig: ecma.defineasyncfunc method_id, imm, v:in:top 431 acc: out:top 432 prefix: ecma 433 format: [pref_op_id_16_imm_16_v_8] 434 properties: [method_id] 435 - sig: ecma.definemethod method_id, imm, v:in:top 436 acc: inout:top 437 prefix: ecma 438 format: [pref_op_id_16_imm_16_v_8] 439 properties: [method_id] 440 - sig: ecma.newlexenvdyn imm 441 acc: out:top 442 prefix: ecma 443 format: [pref_op_imm_16] 444 - sig: ecma.copyrestargs imm 445 acc: out:top 446 prefix: ecma 447 format: [pref_op_imm_16] 448 - sig: ecma.createarraywithbuffer imm 449 acc: out:top 450 prefix: ecma 451 format: [pref_op_imm_16] 452 - sig: ecma.createobjecthavingmethod imm 453 acc: inout:top 454 prefix: ecma 455 format: [pref_op_imm_16] 456 - sig: ecma.throwifsupernotcorrectcall imm 457 acc: in:top 458 prefix: ecma 459 format: [pref_op_imm_16] 460 - sig: ecma.createobjectwithbuffer imm 461 acc: out:top 462 prefix: ecma 463 format: [pref_op_imm_16] 464 - sig: ecma.ldlexvardyn imm1, imm2 465 acc: out:top 466 prefix: ecma 467 format: [pref_op_imm1_4_imm2_4] 468 - sig: ecma.ldlexvardyn imm1, imm2 469 acc: out:top 470 prefix: ecma 471 format: [pref_op_imm1_8_imm2_8] 472 - sig: ecma.ldlexvardyn imm1, imm2 473 acc: out:top 474 prefix: ecma 475 format: [pref_op_imm1_16_imm2_16] 476 - sig: ecma.stlexvardyn imm1, imm2, v:in:top 477 acc: out:top 478 prefix: ecma 479 format: [pref_op_imm1_4_imm2_4_v_8] 480 - sig: ecma.stlexvardyn imm1, imm2, v:in:top 481 acc: out:top 482 prefix: ecma 483 format: [pref_op_imm1_8_imm2_8_v_8] 484 - sig: ecma.stlexvardyn imm1, imm2, v:in:top 485 acc: out:top 486 prefix: ecma 487 format: [pref_op_imm1_16_imm2_16_v_8] 488 - sig: ecma.defineclasswithbuffer method_id, imm1, imm2, v1:in:top, v2:in:top 489 acc: out:top 490 prefix: ecma 491 format: [pref_op_id_16_imm1_16_imm2_16_v1_8_v2_8] 492 properties: [method_id] 493 - sig: ecma.getmodulenamespace string_id 494 acc: out:top 495 prefix: ecma 496 format: [pref_op_id_32] 497 properties: [string_id] 498 - sig: ecma.stmodulevar string_id 499 acc: in:top 500 prefix: ecma 501 format: [pref_op_id_32] 502 properties: [string_id] 503 - sig: ecma.tryldglobalbyname string_id 504 acc: out:top 505 prefix: ecma 506 format: [pref_op_id_32] 507 properties: [string_id] 508 - sig: ecma.trystglobalbyname string_id 509 acc: in:top 510 prefix: ecma 511 format: [pref_op_id_32] 512 properties: [string_id] 513 - sig: ecma.ldglobalvar string_id 514 acc: out:top 515 prefix: ecma 516 format: [pref_op_id_32] 517 properties: [string_id] 518 - sig: ecma.stglobalvar string_id 519 acc: in:top 520 prefix: ecma 521 format: [pref_op_id_32] 522 properties: [string_id] 523 - sig: ecma.ldobjbyname string_id, v:in:top 524 acc: out:top 525 prefix: ecma 526 format: [pref_op_id_32_v_8] 527 properties: [string_id] 528 - sig: ecma.stobjbyname string_id, v:in:top 529 acc: in:top 530 prefix: ecma 531 format: [pref_op_id_32_v_8] 532 properties: [string_id] 533 - sig: ecma.stownbyname string_id, v:in:top 534 acc: in:top 535 prefix: ecma 536 format: [pref_op_id_32_v_8] 537 properties: [string_id] 538 - sig: ecma.ldsuperbyname string_id, v:in:top 539 acc: out:top 540 prefix: ecma 541 format: [pref_op_id_32_v_8] 542 properties: [string_id] 543 - sig: ecma.stsuperbyname string_id, v:in:top 544 acc: in:top 545 prefix: ecma 546 format: [pref_op_id_32_v_8] 547 properties: [string_id] 548 - sig: ecma.ldmodulevar string_id, imm 549 acc: out:top 550 prefix: ecma 551 format: [pref_op_id_32_imm_8] 552 properties: [string_id] 553 - sig: ecma.createregexpwithliteral string_id, imm 554 acc: out:top 555 prefix: ecma 556 format: [pref_op_id_32_imm_8] 557 properties: [string_id] 558 - sig: ecma.istrue 559 acc: inout:top 560 prefix: ecma 561 format: [pref_op_none] 562 - sig: ecma.isfalse 563 acc: inout:top 564 prefix: ecma 565 format: [pref_op_none] 566 - sig: ecma.stconsttoglobalrecord string_id 567 acc: in:top 568 prefix: ecma 569 format: [pref_op_id_32] 570 properties: [string_id] 571 - sig: ecma.stlettoglobalrecord string_id 572 acc: in:top 573 prefix: ecma 574 format: [pref_op_id_32] 575 properties: [string_id] 576 - sig: ecma.stclasstoglobalrecord string_id 577 acc: in:top 578 prefix: ecma 579 format: [pref_op_id_32] 580 properties: [string_id] 581 - sig: ecma.stownbyvaluewithnameset v1:in:top, v2:in:top 582 acc: in:top 583 prefix: ecma 584 format: [pref_op_v1_8_v2_8] 585 - sig: ecma.stownbynamewithnameset string_id, v:in:top 586 acc: in:top 587 prefix: ecma 588 format: [pref_op_id_32_v_8] 589 properties: [string_id] 590 - sig: ecma.ldfunction 591 acc: out:top 592 prefix: ecma 593 format: [pref_op_none] 594 - sig: ecma.newlexenvwithnamedyn imm1, imm2 595 acc: out:top 596 prefix: ecma 597 format: [pref_op_imm1_16_imm2_16] 598 - sig: ecma.ldbigint string_id 599 acc: out:top 600 prefix: ecma 601 format: [pref_op_id_32] 602 properties: [string_id] 603 - sig: ecma.tonumeric v:in:top 604 acc: inout:top 605 prefix: ecma 606 format: [pref_op_v_8] 607 - sig: ecma.createasyncgeneratorobj v:in:top 608 acc: out:top 609 prefix: ecma 610 format: [pref_op_v_8] 611 - sig: ecma.asyncgeneratorresolve v1:in:top, v2:in:top, v3:in:top 612 acc: out:top 613 prefix: ecma 614 format: [pref_op_v1_8_v2_8_v3_8] 615 - sig: ecma.defineasyncgeneratorfunc method_id, imm, v:in:top 616 acc: out:top 617 prefix: ecma 618 format: [pref_op_id_16_imm_16_v_8] 619 properties: [method_id] 620 - sig: ecma.dynamicimport v:in:top 621 acc: out:top 622 prefix: ecma 623 format: [pref_op_v_8] 624 - sig: ecma.ldpatchvar imm 625 acc: out:top 626 prefix: ecma 627 format: [pref_op_imm_16] 628 - sig: ecma.stpatchvar imm 629 acc: in:top 630 prefix: ecma 631 format: [pref_op_imm_16] 632 - sig: ecma.asyncgeneratorreject v1:in:top, v2:in:top 633 acc: out:top 634 prefix: ecma 635 format: [pref_op_v1_8_v2_8] 636 - sig: ecma.notifyconcurrentresult 637 acc: in:top 638 prefix: ecma 639 format: [pref_op_none] 640