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 14definitions: 15 - name: pandasm_header 16 template: | 17 .language PandaAssembly 18 .record panda.Object <external> 19 .record Q {} 20 .record R { 21 u1 fu1 22 u8 fu8 23 i8 fi8 24 u16 fu16 25 i16 fi16 26 u32 fu32 27 i32 fi32 28 u64 fu64 29 i64 fi64 30 f32 ff32 31 f64 ff64 32 # objects: 33 i32[] fi32Array 34 Q fQ 35 Q[] fQArray 36 panda.Object fObj 37 panda.Object[] fObjArray 38 } 39 40 - name: java_header 41 template: | 42 .language Java 43 .record java.lang.Object <external> 44 .record I <java.interface> {} 45 .record Q <java.implements=I> {} 46 .record R <java.extends=Q> { 47 u1 fu1 48 i8 fi8 49 u16 fu16 50 i16 fi16 51 i32 fi32 52 i64 fi64 53 f32 ff32 54 f64 ff64 55 # objects 56 i32[] fi32Array 57 Q fQ 58 Q[] fQArray 59 R fR 60 R[] fRArray 61 I fI 62 I[] fIArray 63 java.lang.Object fObj 64 java.lang.Object[] fObjArray 65 } 66 67 68tests: 69 - file-name: "stobj.v" 70 isa: 71 title: Store register content into object field 72 description: > 73 Store register content into object field by field_id. For non-object variant the size of actually stored 74 value is determined by field_id, other register bits are discarded. 75 instructions: 76 - sig: stobj.v v1:in:i32, v2:in:ref, field_id 77 acc: none 78 format: [op_v1_4_v2_4_id_16] 79 commands: 80 81 - file-name: "check_if_regs_initialized_p" 82 description: Check that verifier reports error if a register is not initialized in PandaAssembly context. 83 isa: 84 description: Store register content into object field by field_id. 85 header-template: ['pandasm_header'] 86 check-type: exit-positive 87 tags: ['verifier'] 88 runner-options: ['verifier-failure', 'verifier-debug-config'] 89 code-template: | 90 91 %s 92 93 .function i32 main() { 94 newobj v0, R 95 movi v1, 1 96 %s 97 cases: 98 - values: 99 - "" 100 - stobj.v v2, v0, R.fi32 101 - values: 102 - "" 103 - stobj.v v1, v2, R.fi32 104 - values: 105 - | 106 # v0 (value) not initialized in the frame 107 .function void check(R a0) <static> { 108 stobj.v v0, a0, R.fi32 109 return.void 110 } 111 - call.short check, v0 112 - values: 113 - | 114 # v0 (object) not initialized in the frame 115 .function void check(i32 a0) <static> { 116 stobj.v a0, v0, R.fi32 117 return.void 118 } 119 - call.short check, v1 120 121 122 - file-name: "check_if_regs_initialized_j" 123 description: Check that verifier reports error if a register is not initialized in Java context 124 isa: 125 description: Store register content into object field by field_id. 126 header-template: ['java_header'] 127 check-type: exit-positive 128 tags: ['verifier'] 129 runner-options: ['use-java', 'verifier-failure', 'verifier-debug-config'] 130 code-template: | 131 132 %s 133 134 .function i32 main() { 135 newobj v0, R 136 movi v1, 1 137 %s 138 cases: 139 - values: 140 - "" 141 - stobj.v v2, v0, R.fi32 142 - values: 143 - "" 144 - stobj.v v1, v2, R.fi32 145 - values: 146 - | 147 # v0 (value) not initialized in the frame 148 .function void check(R a0) <static> { 149 stobj.v v0, a0, R.fi32 150 return.void 151 } 152 - call.short check, v0 153 - values: 154 - | 155 # v0 (object) not initialized in the frame 156 .function void check(i32 a0) <static> { 157 stobj.v a0, v0, R.fi32 158 return.void 159 } 160 - call.short check, v1 161 162 163 - file-name: "with_null_ref_p" 164 description: Check that NullPointerException is thrown if object ref is null in PandaAssembly context 165 isa: 166 exceptions: 167 - x_null 168 header-template: ['pandasm_header'] 169 check-type: empty 170 code-template: | 171 .record panda.NullPointerException <external> 172 173 .function R get_null() { 174 lda.null 175 return.obj 176 } 177 178 .function i32 main() { 179 call.short get_null 180 sta.obj v0 181 %s 182 try_begin: 183 stobj.v v1, v0, %s 184 ldai 1 185 return 186 try_end: 187 ldai 0 188 return 189 .catch panda.NullPointerException, try_begin, try_end, try_end 190 } 191 cases: 192 - values: 193 - movi v1, 1 194 - R.fu1 195 - values: 196 - movi v1, 1 197 - R.fu8 198 - values: 199 - movi v1, 1 200 - R.fi8 201 - values: 202 - movi v1, 1 203 - R.fu16 204 - values: 205 - movi v1, 1 206 - R.fi16 207 - values: 208 - movi v1, 1 209 - R.fu32 210 - values: 211 - movi v1, 1 212 - R.fi32 213 - values: 214 - fmovi v1, -1.1 215 - R.ff32 216 217 218 - file-name: "with_null_ref_j" 219 description: Check that NullPointerException is thrown if object ref is null in Java context 220 isa: 221 exceptions: 222 - x_null 223 header-template: ['java_header'] 224 runner-options: ['use-java'] 225 check-type: empty 226 code-template: | 227 .record java.lang.NullPointerException <external> 228 229 .function R get_null() { 230 lda.null 231 return.obj 232 } 233 234 .function i32 main() { 235 call.short get_null 236 sta.obj v0 237 %s 238 try_begin: 239 stobj.v v1, v0, %s 240 ldai 1 241 return 242 try_end: 243 ldai 0 244 return 245 .catch java.lang.NullPointerException, try_begin, try_end, try_end 246 } 247 cases: 248 - values: 249 - movi v1, 1 250 - R.fu1 251 - values: 252 - movi v1, 1 253 - R.fi8 254 - values: 255 - movi v1, 1 256 - R.fu16 257 - values: 258 - movi v1, 1 259 - R.fi16 260 - values: 261 - movi v1, 1 262 - R.fi32 263 - values: 264 - fmovi v1, -1.1 265 - R.ff32 266 267 268 - file-name: "with_non_object_ref_p" 269 description: Check that verifier reports error when the 2nd register is not a ref to an object (other than array) in PandaAssembly context 270 isa: 271 verification: 272 - v2_object 273 header-template: ['pandasm_header'] 274 check-type: exit-positive 275 tags: ['verifier'] 276 runner-options: ['verifier-failure', 'verifier-debug-config'] 277 code-template: | 278 279 .function i32 main() { 280 *s 281 movi v1, 1 282 stobj.v v1, v0, %s 283 template-cases: 284 - values: ['R.fu1'] 285 bugid: ['5502'] 286 ignore: true 287 - values: ['R.fi8'] 288 bugid: ['5502'] 289 ignore: true 290 - values: ['R.fu8'] 291 bugid: ['5502'] 292 ignore: true 293 - values: ['R.fi16'] 294 bugid: ['5502'] 295 ignore: true 296 - values: ['R.fu16'] 297 bugid: ['5502'] 298 ignore: true 299 - values: ['R.fi32'] 300 - values: ['R.fu32'] 301 bugid: ['5502'] 302 ignore: true 303 cases: 304 - values: 305 - movi v0, 0 306 - values: 307 - movi v0, 1 308 - values: 309 - movi.64 v0, 0x00 310 - values: 311 - movi.64 v0, 0xCAFECAFECAFECAFE 312 - values: 313 - fmovi.64 v0, 0.0 314 - values: 315 - fmovi.64 v0, 6.62607015 316 - values: 317 - | 318 # 319 movi v1, 10 320 newarr v0, v1, panda.Object[] 321 322 323 - file-name: "with_non_object_ref_j" 324 description: Check that verifier reports error when the 2nd register is not a ref to an object (other than array) in Java context 325 isa: 326 verification: 327 - v2_object 328 header-template: ['java_header'] 329 check-type: exit-positive 330 tags: ['verifier'] 331 runner-options: ['use-java', 'verifier-failure', 'verifier-debug-config'] 332 code-template: | 333 334 .function i32 main() { 335 *s 336 movi v1, 1 337 stobj.v v1, v0, %s 338 template-cases: 339 - values: ['R.fu1'] 340 bugid: ['5502'] 341 ignore: true 342 - values: ['R.fi8'] 343 bugid: ['5502'] 344 ignore: true 345 - values: ['R.fi16'] 346 bugid: ['5502'] 347 ignore: true 348 - values: ['R.fu16'] 349 bugid: ['5502'] 350 ignore: true 351 - values: ['R.fi32'] 352 cases: 353 - values: 354 - movi v0, 0 355 - values: 356 - movi v0, 1 357 - values: 358 - movi.64 v0, 0x00 359 - values: 360 - movi.64 v0, 0xCAFECAFECAFECAFE 361 - values: 362 - fmovi.64 v0, 0.0 363 - values: 364 - fmovi.64 v0, 6.62607015 365 - values: 366 - | 367 # 368 movi v1, 10 369 newarr v0, v1, java.lang.Object[] 370 371 372 - file-name: "with_static_field_id_p" 373 description: > 374 Check that verifier reports error if the field doesn't resolve to 375 a non-static valid object field in PandaAssembly context 376 isa: 377 verification: 378 - field_id_non_static 379 header-template: [] 380 check-type: exit-positive 381 runner-options: ['compile-failure'] 382 code-template: | 383 .record W { 384 i32 static_field <static> 385 } 386 .record random_record { 387 i32 random_field 388 i32 random_static_field <static> 389 } 390 .function void random_function() { 391 return.void 392 } 393 394 .function i32 main() { 395 newobj v0, W 396 movi v2, 1 397 stobj.v v2, v0, %s 398 cases: 399 - values: 400 - W.static_field 401 runner-options: ['verifier-failure', 'verifier-debug-config'] 402 tags: ['verifier'] 403 - values: 404 - random_record 405 - values: 406 - random_function 407 - values: 408 - W.field_not_exists 409 - values: 410 - random_record.random_field 411 runner-options: ['verifier-failure', 'verifier-debug-config'] 412 tags: ['verifier'] 413 - values: 414 - random_record.random_static_field 415 runner-options: ['verifier-failure', 'verifier-debug-config'] 416 tags: ['verifier'] 417 - values: 418 - 0 419 - values: 420 - -1.1 421 - values: 422 - "null" 423 - values: 424 - "\"abc\"" 425 426 427 - file-name: "with_static_field_id_j" 428 description: > 429 Check that verifier reports error if the field doesn't resolve to 430 a non-static valid object field in Java context 431 isa: 432 verification: 433 - field_id_non_static 434 header-template: [] 435 check-type: exit-positive 436 runner-options: ['use-java', 'verifier-failure', 'verifier-debug-config'] 437 tags: ['verifier'] 438 code-template: | 439 .language Java 440 .record A { 441 i32 a_field <static> 442 } 443 .record B <java.extends=A> { 444 i32 b_field <static> 445 } 446 .record C <java.extends=B> { 447 i32 c_field <static> 448 } 449 450 .function i32 main() { 451 newobj v0, %s 452 movi v2, 1 453 stobj.v v2, v0, %s 454 cases: 455 - values: 456 - C 457 - C.c_field 458 - values: 459 - C 460 - B.b_field 461 - values: 462 - C 463 - A.a_field 464 - values: 465 - B 466 - B.a_field 467 runner-options: ['compile-failure'] 468 - values: 469 - B 470 - B.c_field 471 runner-options: ['compile-failure'] 472 473 474 - file-name: "with_wrong_field_size_p" 475 description: > 476 Check that verifier reports error when the field resolves to a field with size 477 that is not corresponding to bytecode in PandaAssembly context. 478 isa: 479 verification: 480 - field_id_size 481 header-template: ['pandasm_header'] 482 check-type: exit-positive 483 tags: ['verifier'] 484 runner-options: ['verifier-failure', 'verifier-debug-config'] 485 code-template: | 486 .function i32 main() { 487 newobj v0, R 488 movi v2, 0 489 stobj.v v2, v0, %s 490 cases: 491 - values: 492 - R.fi64 493 - values: 494 - R.fu64 495 - values: 496 - R.ff64 497 - values: 498 - R.ff32 499 - values: 500 - R.fObj 501 - values: 502 - R.fObjArray 503 - values: 504 - R.fi32Array 505 506 507 - file-name: "with_wrong_field_size_j" 508 description: Check that verifier reports error when the field resolves to a field with size that is not corresponding to bytecode in Java context. 509 isa: 510 verification: 511 - field_id_size 512 header-template: ['java_header'] 513 check-type: exit-positive 514 tags: ['verifier'] 515 runner-options: ['use-java', 'verifier-failure', 'verifier-debug-config'] 516 code-template: | 517 .function i32 main() { 518 newobj v0, R 519 movi v2, 0 520 stobj.v v2, v0, %s 521 cases: 522 - values: 523 - R.fi64 524 - values: 525 - R.ff64 526 - values: 527 - R.ff32 528 - values: 529 - R.fObj 530 - values: 531 - R.fObjArray 532 - values: 533 - R.fi32Array 534 - values: 535 - R.fI 536 - values: 537 - R.fIArray 538 539 540 - file-name: "with_wrong_reg_type_p" 541 description: Check that verifier reports error when the register contains a value of type not corresponding to the bytecode in PandaAssembly context 542 isa: 543 verification: 544 - v1_type 545 header-template: ['pandasm_header'] 546 check-type: exit-positive 547 tags: ['verifier'] 548 runner-options: ['verifier-failure', 'verifier-debug-config'] 549 code-template: | 550 .function i32 main() { 551 newobj v0, R 552 %s 553 stobj.v v1, v0, %s 554 cases: 555 - values: 556 - movi.64 v1, 0xF000F000F000F000 557 - R.fu1 558 ignore: true 559 bugid: ['4166'] 560 - values: 561 - movi.64 v1, 0 562 - R.fi8 563 ignore: true 564 bugid: ['4166'] 565 - values: 566 - movi.64 v1, 0xCAFECAFECAFECAFE 567 - R.fu8 568 ignore: true 569 bugid: ['4166'] 570 - values: 571 - movi.64 v1, 0 572 - R.fi16 573 ignore: true 574 bugid: ['4166'] 575 - values: 576 - movi.64 v1, 0x5A5A5A5A5A5A5A5A 577 - R.fi32 578 ignore: true 579 bugid: ['4166'] 580 - values: 581 - movi.64 v1, 1234567890 582 - R.fu32 583 ignore: true 584 bugid: ['4166'] 585 - values: 586 - fmovi.64 v1, 0x7FFFFFFFFFFFFFFF 587 - R.fu1 588 - values: 589 - fmovi.64 v1, 0.0 590 - R.fu8 591 - values: 592 - fmovi.64 v1, -0.0 593 - R.fi8 594 - values: 595 - fmovi.64 v1, 1.0 596 - R.fu16 597 - values: 598 - fmovi.64 v1, 3.0 599 - R.fi16 600 - values: 601 - fmovi.64 v1, 0.123456 602 - R.fu32 603 - values: 604 - fmovi.64 v1, 123456.0 605 - R.fi32 606 - values: 607 - mov.null v1 608 - R.fu32 609 - values: 610 - newobj v1, panda.Object 611 - R.fi32 612 - values: 613 - | 614 # 615 movi v1, 10 616 newarr v1, v1, i32[] 617 - R.fi32 618 619 620 - file-name: "with_wrong_reg_type_j" 621 description: > 622 Check that verifier reports error when the register contains 623 a value of type not corresponding to the bytecode in Java context. 624 isa: 625 verification: 626 - v1_type 627 header-template: ['java_header'] 628 check-type: exit-positive 629 tags: ['verifier'] 630 runner-options: ['use-java', 'verifier-failure', 'verifier-debug-config'] 631 code-template: | 632 .function i32 main() { 633 newobj v0, R 634 %s 635 stobj.v v1, v0, %s 636 cases: 637 - values: 638 - movi.64 v1, 0xF000F000F000F000 639 - R.fu1 640 ignore: true 641 bugid: ['4166'] 642 - values: 643 - movi.64 v1, 0 644 - R.fi8 645 ignore: true 646 bugid: ['4166'] 647 - values: 648 - movi.64 v1, 0 649 - R.fi16 650 ignore: true 651 bugid: ['4166'] 652 - values: 653 - movi.64 v1, 0x5A5A5A5A5A5A5A5A 654 - R.fi32 655 ignore: true 656 bugid: ['4166'] 657 - values: 658 - fmovi.64 v1, 0x7FFFFFFFFFFFFFFF 659 - R.fu1 660 - values: 661 - fmovi.64 v1, -0.0 662 - R.fi8 663 - values: 664 - fmovi.64 v1, 1.0 665 - R.fu16 666 - values: 667 - fmovi.64 v1, 3.0 668 - R.fi16 669 - values: 670 - fmovi.64 v1, 123456.0 671 - R.fi32 672 - values: 673 - mov.null v1 674 - R.fi32 675 - values: 676 - newobj v1, Q 677 - R.fi16 678 - values: 679 - | 680 # 681 movi v1, 10 682 newarr v1, v1, i32[] 683 - R.fi32 684 - values: 685 - | 686 # 687 movi v1, 10 688 newarr v1, v1, java.lang.Object[][] 689 - R.fi8 690 691 692 - file-name: "op_v1_4_v2_4_id_16" 693 description: Check that compiler reports error when the register number is out of 4 bit size 694 isa: 695 instructions: 696 - sig: stobj.v v1:in:i32, v2:in:ref, field_id 697 acc: none 698 format: [op_v1_4_v2_4_id_16] 699 header-template: ['pandasm_header'] 700 runner-options: ['compile-failure'] 701 check-type: exit-positive 702 code-template: | 703 704 .function i32 main() { 705 stobj.v %s, R.fi32 706 cases: 707 - values: ['v15, v15'] 708 runner-options: ['compile-only'] 709 - values: ['v16, v15'] 710 - values: ['v15, v16'] 711 - values: ['v255, v0'] 712 - values: ['v15, v256'] 713 - values: ['v65535, v65535'] 714 - values: ['v32767, v0'] 715 716 717 - file-name: "into_all_unsigned_field_types" 718 description: Check that register value is stored in field. Unsigned cases. 719 isa: 720 description: If field type size is less than 32, register content will be truncated to storage size before storing. 721 header-template: ['pandasm_header'] 722 check-type: exit-positive 723 tags: ['tsan'] 724 code-template: | 725 726 .function i32 main() { 727 movi v7, 123456789 728 newobj v0, R 729 %s 730 ldai 123456789 731 stobj.v v1, v0, R.%s 732 jeq v7, cont # check acc_none 733 ldai 2 734 return 735 cont: 736 ldobj.v v2, v0, R.%s 737 lda v2 738 movi v1, %s 739 ucmp v1 740 jeqz success 741 ldai 1 742 return 743 success: 744 cases: 745 # u1 746 - values: ['movi v1, 0x00000000', 'fu1', 'fu1', 0] 747 - values: ['movi v1, 0xffffffff', 'fu1', 'fu1', 1] 748 bugid: ['1848'] 749 ignore: true 750 - values: ['movi v1, 0x00000001', 'fu1', 'fu1', 1] 751 - values: ['movi v1, 0xfffffffe', 'fu1', 'fu1', 0] 752 bugid: ['1848'] 753 ignore: true 754 - values: ['movi v1, 0x11111111', 'fu1', 'fu1', 1] 755 bugid: ['1848'] 756 ignore: true 757 - values: ['movi v1, 0x88888888', 'fu1', 'fu1', 0] 758 bugid: ['1848'] 759 ignore: true 760 # u8 761 - values: ['movi v1, 0x00000000', 'fu8', 'fu8', 0] 762 - values: ['movi v1, 0xffffffff', 'fu8', 'fu8', 255] 763 - values: ['movi v1, 0x000000ff', 'fu8', 'fu8', 255] 764 - values: ['movi v1, 0xffffff00', 'fu8', 'fu8', 0] 765 - values: ['movi v1, 0x11111111', 'fu8', 'fu8', 17] 766 - values: ['movi v1, 0x88888888', 'fu8', 'fu8', 136] 767 # u16 768 - values: ['movi v1, 0x00000000', 'fu16', 'fu16', 0] 769 - values: ['movi v1, 0xffffffff', 'fu16', 'fu16', 65535] 770 - values: ['movi v1, 0x0000ffff', 'fu16', 'fu16', 65535] 771 - values: ['movi v1, 0xffff0000', 'fu16', 'fu16', 0] 772 - values: ['movi v1, 0x11111111', 'fu16', 'fu16', 4369] 773 - values: ['movi v1, 0x88888888', 'fu16', 'fu16', 34952] 774 # u32 775 - values: ['movi v1, 0x00000000', 'fu32', 'fu32', 0] 776 - values: ['movi v1, 0xffffffff', 'fu32', 'fu32', 4294967295] 777 - values: ['movi v1, 0x11111111', 'fu32', 'fu32', 286331153] 778 - values: ['movi v1, 0x88888888', 'fu32', 'fu32', 2290649224] 779 780 - file-name: "into_float_field_type" 781 description: Check that register value is stored in field. 782 isa: 783 instructions: 784 - sig: stobj v:in:ref, field_id 785 acc: in:b32 786 format: [op_v_8_id_16] 787 header-template: ['pandasm_header'] 788 check-type: exit-positive 789 tags: ['tsan'] 790 code-template: | 791 .function i32 main() { 792 movi v7, 5151515 793 newobj v0, R 794 %s 795 ldai 5151515 796 stobj.v v1, v0, R.%s 797 jeq v7, cont # check acc_none 798 ldai 2 799 return 800 cont: 801 ldobj.v v2, v0, R.%s 802 lda v2 803 %s 804 jeqz success 805 ldai 1 806 return 807 success: 808 cases: 809 # f32 810 - values: 811 - fmovi v1, 0.0 812 - ff32 813 - ff32 814 - | 815 # 816 fmovi v1, 0.0 817 fcmpg v1 818 - values: 819 - fmovi v1, -6510615.0 820 - ff32 821 - ff32 822 - | 823 # 824 fmovi v1, -6510615.0 825 fcmpg v1 826 - values: 827 - fmovi v1, 0x7fffffff # NaN 828 - ff32 829 - ff32 830 - | 831 # 832 fmovi v1, 0.0 833 fcmpg v1 834 subi 1 835 - values: 836 - fmovi v1, 0x7f800000 # + Inf 837 - ff32 838 - ff32 839 - | 840 # 841 fmovi v1, 0x7f800000 842 fcmpg v1 843 - values: 844 - fmovi v1, 0xff800000 # - Inf 845 - ff32 846 - ff32 847 - | 848 # 849 fmovi v1, 0xff800000 850 fcmpg v1 851 852 - file-name: "into_all_field_types_int" 853 description: Check that register value is stored in field. Version for signed types. 854 isa: 855 description: If field type size is less than 32, register content will be truncated to storage size before storing. 856 header-template: ['pandasm_header'] 857 check-type: exit-positive 858 tags: ['tsan'] 859 code-template: | 860 861 .function i32 main() { 862 movi v7, 123456789 863 newobj v0, R 864 %s 865 ldai 123456789 866 stobj.v v1, v0, R.%s 867 jeq v7, cont # check acc_none 868 ldai 2 869 return 870 cont: 871 ldobj.v v2, v0, R.%s 872 lda v2 873 movi v1, %s 874 jeq v1, success 875 ldai 1 876 return 877 success: 878 cases: 879 # i8 880 - values: ['movi v1, 0x00000000', 'fi8', 'fi8', 0] 881 - values: ['movi v1, 0xffffffff', 'fi8', 'fi8', -1] 882 - values: ['movi v1, 0x000000ff', 'fi8', 'fi8', -1] 883 - values: ['movi v1, 0xffffff00', 'fi8', 'fi8', 0] 884 - values: ['movi v1, 0x11111111', 'fi8', 'fi8', 17] 885 - values: ['movi v1, 0x88888888', 'fi8', 'fi8', -120] 886 # i16 887 - values: ['movi v1, 0x00000000', 'fi16', 'fi16', 0] 888 - values: ['movi v1, 0xffffffff', 'fi16', 'fi16', -1] 889 - values: ['movi v1, 0x0000ffff', 'fi16', 'fi16', -1] 890 - values: ['movi v1, 0xffff0000', 'fi16', 'fi16', 0] 891 - values: ['movi v1, 0x11111111', 'fi16', 'fi16', 4369] 892 - values: ['movi v1, 0x88888888', 'fi16', 'fi16', -30584] 893 # i32 894 - values: ['movi v1, 0x00000000', 'fi32', 'fi32', 0] 895 - values: ['movi v1, 0xffffffff', 'fi32', 'fi32', -1] 896 - values: ['movi v1, 0x11111111', 'fi32', 'fi32', 286331153] 897 - values: ['movi v1, 0x88888888', 'fi32', 'fi32', -2004318072] 898