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 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: PandaAssembly_header 41 template: | 42 .language PandaAssembly 43 .record panda.Object <external> 44 .record I <panda.interface> {} 45 .record Q <panda.implements=I> {} 46 .record R <panda.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 panda.Object fObj 64 panda.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:b32, 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-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 PandaAssembly context 124 isa: 125 description: Store register content into object field by field_id. 126 header-template: ['PandaAssembly_header'] 127 check-type: exit-positive 128 tags: [verifier, pa-verifier] 129 runner-options: ['use-pa', 'verifier-failure', 'verifier-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 tags: ['irtoc_ignore'] 171 code-template: | 172 .record panda.NullPointerException <external> 173 174 .function R get_null() { 175 lda.null 176 return.obj 177 } 178 179 .function i32 main() { 180 call.short get_null 181 sta.obj v0 182 %s 183 try_begin: 184 stobj.v v1, v0, %s 185 ldai 1 186 return 187 try_end: 188 ldai 0 189 return 190 .catch panda.NullPointerException, try_begin, try_end, try_end 191 } 192 cases: 193 - values: 194 - movi v1, 1 195 - R.fu1 196 - values: 197 - movi v1, 1 198 - R.fu8 199 - values: 200 - movi v1, 1 201 - R.fi8 202 - values: 203 - movi v1, 1 204 - R.fu16 205 - values: 206 - movi v1, 1 207 - R.fi16 208 - values: 209 - movi v1, 1 210 - R.fu32 211 - values: 212 - movi v1, 1 213 - R.fi32 214 - values: 215 - fmovi v1, -1.1 216 - R.ff32 217 218 219 - file-name: "with_null_ref_j" 220 description: Check that NullPointerException is thrown if object ref is null in PandaAssembly context 221 isa: 222 exceptions: 223 - x_null 224 header-template: ['PandaAssembly_header'] 225 runner-options: ['use-pa'] 226 check-type: empty 227 tags: ['irtoc_ignore'] 228 code-template: | 229 .record panda.NullPointerException <external> 230 231 .function R get_null() { 232 lda.null 233 return.obj 234 } 235 236 .function i32 main() { 237 call.short get_null 238 sta.obj v0 239 %s 240 try_begin: 241 stobj.v v1, v0, %s 242 ldai 1 243 return 244 try_end: 245 ldai 0 246 return 247 .catch panda.NullPointerException, try_begin, try_end, try_end 248 } 249 cases: 250 - values: 251 - movi v1, 1 252 - R.fu1 253 - values: 254 - movi v1, 1 255 - R.fi8 256 - values: 257 - movi v1, 1 258 - R.fu16 259 - values: 260 - movi v1, 1 261 - R.fi16 262 - values: 263 - movi v1, 1 264 - R.fi32 265 - values: 266 - fmovi v1, 1.1 267 - R.ff32 268 269 270 - file-name: "with_non_object_ref_p" 271 description: Check that verifier reports error when the 2nd register is not a ref to an object (other than array) in PandaAssembly context 272 isa: 273 verification: 274 - v2_object 275 header-template: ['pandasm_header'] 276 check-type: exit-positive 277 tags: ['verifier'] 278 runner-options: ['verifier-failure', 'verifier-config'] 279 code-template: | 280 281 .function i32 main() { 282 *s 283 movi v1, 1 284 stobj.v v1, v0, %s 285 template-cases: 286 - values: ['R.fu1'] 287 bugid: ['5502'] 288 - values: ['R.fi8'] 289 bugid: ['5502'] 290 ignore: true 291 - values: ['R.fu8'] 292 bugid: ['5502'] 293 ignore: true 294 - values: ['R.fi16'] 295 bugid: ['5502'] 296 ignore: true 297 - values: ['R.fu16'] 298 bugid: ['5502'] 299 ignore: true 300 - values: ['R.fi32'] 301 - values: ['R.fu32'] 302 bugid: ['5502'] 303 ignore: true 304 cases: 305 - values: 306 - movi v0, 0 307 - values: 308 - movi v0, 1 309 - values: 310 - movi.64 v0, 0x00 311 - values: 312 - movi.64 v0, 0xCAFECAFECAFECAFE 313 - values: 314 - fmovi.64 v0, 0.0 315 - values: 316 - fmovi.64 v0, 6.62607015 317 - values: 318 - | 319 # 320 movi v1, 10 321 newarr v0, v1, panda.Object[] 322 323 324 - file-name: "with_non_object_ref_j" 325 description: Check that verifier reports error when the 2nd register is not a ref to an object (other than array) in PandaAssembly context 326 isa: 327 verification: 328 - v2_object 329 header-template: ['PandaAssembly_header'] 330 check-type: exit-positive 331 tags: [verifier, pa-verifier] 332 runner-options: ['use-pa', 'verifier-failure', 'verifier-config'] 333 code-template: | 334 335 .function i32 main() { 336 *s 337 movi v1, 1 338 stobj.v v1, v0, %s 339 template-cases: 340 - values: ['R.fu1'] 341 bugid: ['5502'] 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, panda.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-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-config'] 412 tags: ['verifier'] 413 - values: 414 - random_record.random_static_field 415 runner-options: ['verifier-failure', 'verifier-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 PandaAssembly context 431 isa: 432 verification: 433 - field_id_non_static 434 header-template: [] 435 check-type: exit-positive 436 runner-options: ['use-pa', 'verifier-failure', 'verifier-config'] 437 tags: [verifier, pa-verifier] 438 code-template: | 439 .language PandaAssembly 440 .record A { 441 i32 a_field <static> 442 } 443 .record B <panda.extends=A> { 444 i32 b_field <static> 445 } 446 .record C <panda.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-config'] 485 code-template: | 486 .function i32 main() { 487 newobj v0, R 488 %s 489 stobj.v v2, v0, %s 490 cases: 491 - values: 492 - movi v2, 0 493 - R.fi64 494 - values: 495 - movi v2, 0 496 - R.fu64 497 - values: 498 - fmovi v2, 0.0 499 - R.ff64 500 - values: 501 - movi v2, 0 502 - R.fObj 503 - values: 504 - movi v2, 0 505 - R.fObjArray 506 - values: 507 - movi v2, 0 508 - R.fi32Array 509 510 511 - file-name: "with_wrong_field_size_j" 512 description: Check that verifier reports error when the field resolves to a field with size that is not corresponding to bytecode in PandaAssembly context. 513 isa: 514 verification: 515 - field_id_size 516 header-template: ['PandaAssembly_header'] 517 check-type: exit-positive 518 tags: [verifier, pa-verifier] 519 runner-options: ['use-pa', 'verifier-failure', 'verifier-config'] 520 code-template: | 521 .function i32 main() { 522 newobj v0, R 523 %s 524 stobj.v v2, v0, %s 525 cases: 526 - values: 527 - movi v2, 0 528 - R.fi64 529 - values: 530 - fmovi v2, 0.0 531 - R.ff64 532 - values: 533 - fmovi v2, 0.1 534 - R.fObj 535 - values: 536 - movi v2, 0 537 - R.fObjArray 538 - values: 539 - movi v2, 0 540 - R.fi32Array 541 - values: 542 - fmovi v2, 0.2 543 - R.fI 544 - values: 545 - movi v2, 0 546 - R.fIArray 547 548 549 - file-name: "with_correct_field_size_or_type" 550 description: Check that verifier does not report any error when the field has size or type corresponding to bytecode 551 isa: 552 verification: 553 - field_id_size 554 header-template: ['pandasm_header'] 555 check-type: exit-positive 556 tags: ['verifier'] 557 runner-options: ['verifier-only', 'verifier-config'] 558 code-template: | 559 .function i32 main() { 560 newobj v0, R 561 %s 562 stobj.v v2, v0, %s 563 cases: 564 - values: 565 - movi v2, 1 566 - R.fu1 567 - values: 568 - movi v2, 1 569 - R.fu8 570 - values: 571 - movi v2, -1 572 - R.fi8 573 - values: 574 - movi v2, 1 575 - R.fu16 576 - values: 577 - movi v2, -1 578 - R.fi16 579 - values: 580 - movi v2, 1 581 - R.fu32 582 - values: 583 - movi v2, -1 584 - R.fi32 585 - values: 586 - fmovi v2, -0.1 587 - R.ff32 588 589 590 - file-name: "with_wrong_reg_type_p" 591 description: Check that verifier reports error when the register contains a value of type not corresponding to the bytecode in PandaAssembly context 592 isa: 593 verification: 594 - v1_type 595 header-template: ['pandasm_header'] 596 check-type: exit-positive 597 tags: ['verifier'] 598 runner-options: ['verifier-failure', 'verifier-config'] 599 code-template: | 600 .function i32 main() { 601 newobj v0, R 602 %s 603 stobj.v v1, v0, %s 604 cases: 605 - values: 606 - movi.64 v1, 0xF000F000F000F000 607 - R.fu1 608 bugid: ['4166'] 609 - values: 610 - movi.64 v1, 0 611 - R.fi8 612 bugid: ['4166'] 613 - values: 614 - movi.64 v1, 0xCAFECAFECAFECAFE 615 - R.fu8 616 bugid: ['4166'] 617 - values: 618 - movi.64 v1, 0 619 - R.fi16 620 bugid: ['4166'] 621 - values: 622 - movi.64 v1, 0x5A5A5A5A5A5A5A5A 623 - R.fi32 624 bugid: ['4166'] 625 - values: 626 - movi.64 v1, 1234567890 627 - R.fu32 628 bugid: ['4166'] 629 - values: 630 - fmovi.64 v1, 0x7FFFFFFFFFFFFFFF 631 - R.fu1 632 - values: 633 - fmovi.64 v1, 0.0 634 - R.fu8 635 - values: 636 - fmovi.64 v1, -0.0 637 - R.fi8 638 - values: 639 - fmovi.64 v1, 1.0 640 - R.fu16 641 - values: 642 - fmovi.64 v1, 3.0 643 - R.fi16 644 - values: 645 - fmovi.64 v1, 0.123456 646 - R.fu32 647 - values: 648 - fmovi.64 v1, 123456.0 649 - R.fi32 650 - values: 651 - movi.64 v1, 7890 652 - R.ff32 653 - values: 654 - fmovi.64 v1, 7890.0 655 - R.ff32 656 bugid: ['4166'] 657 - values: 658 - mov.null v1 659 - R.fu32 660 - values: 661 - newobj v1, panda.Object 662 - R.fi32 663 - values: 664 - | 665 # 666 movi v1, 10 667 newarr v1, v1, i32[] 668 - R.fi32 669 670 671 - file-name: "with_wrong_reg_type_j" 672 description: > 673 Check that verifier reports error when the register contains 674 a value of type not corresponding to the bytecode in PandaAssembly context. 675 isa: 676 verification: 677 - v1_type 678 header-template: ['PandaAssembly_header'] 679 check-type: exit-positive 680 tags: [verifier, pa-verifier] 681 runner-options: ['use-pa', 'verifier-failure', 'verifier-config'] 682 code-template: | 683 .function i32 main() { 684 newobj v0, R 685 %s 686 stobj.v v1, v0, %s 687 cases: 688 - values: 689 - movi.64 v1, 0xF000F000F000F000 690 - R.fu1 691 bugid: ['4166'] 692 - values: 693 - movi.64 v1, 0 694 - R.fi8 695 bugid: ['4166'] 696 - values: 697 - movi.64 v1, 0 698 - R.fi16 699 bugid: ['4166'] 700 - values: 701 - movi.64 v1, 0x5A5A5A5A5A5A5A5A 702 - R.fi32 703 bugid: ['4166'] 704 - values: 705 - fmovi.64 v1, 0x7FFFFFFFFFFFFFFF 706 - R.fu1 707 - values: 708 - fmovi.64 v1, -0.0 709 - R.fi8 710 - values: 711 - fmovi.64 v1, 1.0 712 - R.fu16 713 - values: 714 - fmovi.64 v1, 3.0 715 - R.fi16 716 - values: 717 - fmovi.64 v1, 123456.0 718 - R.fi32 719 - values: 720 - movi.64 v1, 7890 721 - R.ff32 722 - values: 723 - fmovi.64 v1, 7890.0 724 - R.ff32 725 bugid: ['4166'] 726 - values: 727 - mov.null v1 728 - R.fi32 729 - values: 730 - newobj v1, Q 731 - R.fi16 732 - values: 733 - | 734 # 735 movi v1, 10 736 newarr v1, v1, i32[] 737 - R.fi32 738 - values: 739 - | 740 # 741 movi v1, 10 742 newarr v1, v1, panda.Object[][] 743 - R.fi8 744 745 746 - file-name: "op_v1_4_v2_4_id_16" 747 description: Check that compiler reports error when the register number is out of 4 bit size 748 isa: 749 instructions: 750 - sig: stobj.v v1:in:b32, v2:in:ref, field_id 751 acc: none 752 format: [op_v1_4_v2_4_id_16] 753 header-template: ['pandasm_header'] 754 runner-options: ['compile-failure'] 755 check-type: exit-positive 756 code-template: | 757 758 .function i32 main() { 759 stobj.v %s, R.fi32 760 cases: 761 - values: ['v15, v15'] 762 runner-options: ['compile-only'] 763 - values: ['v16, v15'] 764 - values: ['v15, v16'] 765 - values: ['v255, v0'] 766 - values: ['v15, v256'] 767 - values: ['v65535, v65535'] 768 - values: ['v32767, v0'] 769 770 771 - file-name: "into_all_unsigned_field_types" 772 description: Check that register value is stored in field. Unsigned cases. 773 isa: 774 description: If field type size is less than 32, register content will be truncated to storage size before storing. 775 header-template: ['pandasm_header'] 776 check-type: exit-positive 777 tags: ['tsan', 'irtoc_ignore'] 778 code-template: | 779 780 .function i32 main() { 781 movi v7, 123456789 782 newobj v0, R 783 %s 784 ldai 123456789 785 stobj.v v1, v0, R.%s 786 jeq v7, cont # check acc_none 787 ldai 2 788 return 789 cont: 790 ldobj.v v2, v0, R.%s 791 lda v2 792 movi v1, %s 793 ucmp v1 794 jeqz success 795 ldai 1 796 return 797 success: 798 cases: 799 # u1 800 - values: ['movi v1, 0x00000000', 'fu1', 'fu1', 0] 801 - values: ['movi v1, 0xffffffff', 'fu1', 'fu1', 1] 802 bugid: ['1848'] 803 ignore: true 804 - values: ['movi v1, 0x00000001', 'fu1', 'fu1', 1] 805 - values: ['movi v1, 0xfffffffe', 'fu1', 'fu1', 0] 806 bugid: ['1848'] 807 ignore: true 808 - values: ['movi v1, 0x11111111', 'fu1', 'fu1', 1] 809 bugid: ['1848'] 810 ignore: true 811 - values: ['movi v1, 0x88888888', 'fu1', 'fu1', 0] 812 bugid: ['1848'] 813 ignore: true 814 # u8 815 - values: ['movi v1, 0x00000000', 'fu8', 'fu8', 0] 816 - values: ['movi v1, 0xffffffff', 'fu8', 'fu8', 255] 817 - values: ['movi v1, 0x000000ff', 'fu8', 'fu8', 255] 818 - values: ['movi v1, 0xffffff00', 'fu8', 'fu8', 0] 819 - values: ['movi v1, 0x11111111', 'fu8', 'fu8', 17] 820 - values: ['movi v1, 0x88888888', 'fu8', 'fu8', 136] 821 # u16 822 - values: ['movi v1, 0x00000000', 'fu16', 'fu16', 0] 823 - values: ['movi v1, 0xffffffff', 'fu16', 'fu16', 65535] 824 - values: ['movi v1, 0x0000ffff', 'fu16', 'fu16', 65535] 825 - values: ['movi v1, 0xffff0000', 'fu16', 'fu16', 0] 826 - values: ['movi v1, 0x11111111', 'fu16', 'fu16', 4369] 827 - values: ['movi v1, 0x88888888', 'fu16', 'fu16', 34952] 828 # u32 829 - values: ['movi v1, 0x00000000', 'fu32', 'fu32', 0] 830 - values: ['movi v1, 0xffffffff', 'fu32', 'fu32', 4294967295] 831 - values: ['movi v1, 0x11111111', 'fu32', 'fu32', 286331153] 832 - values: ['movi v1, 0x88888888', 'fu32', 'fu32', 2290649224] 833 834 835 - file-name: "into_float_field_type" 836 description: Check that register value is stored in field. 837 isa: 838 instructions: 839 - sig: stobj.v v1:in:b32, v2:in:ref, field_id 840 acc: none 841 format: [op_v1_4_v2_4_id_16] 842 header-template: ['pandasm_header'] 843 check-type: exit-positive 844 tags: ['tsan', 'irtoc_ignore'] 845 code-template: | 846 .function i32 main() { 847 movi v7, 5151515 848 newobj v0, R 849 %s 850 ldai 5151515 851 stobj.v v1, v0, R.%s 852 jeq v7, cont # check acc_none 853 ldai 2 854 return 855 cont: 856 ldobj.v v2, v0, R.%s 857 lda v2 858 %s 859 jeqz success 860 ldai 1 861 return 862 success: 863 cases: 864 # f32 865 - values: 866 - fmovi v1, 0.0 867 - ff32 868 - ff32 869 - | 870 # 871 fmovi v1, 0.0 872 fcmpg v1 873 - values: 874 - fmovi v1, -6510615.0 875 - ff32 876 - ff32 877 - | 878 # 879 fmovi v1, -6510615.0 880 fcmpg v1 881 - values: 882 - fmovi v1, 0x7fffffff # NaN 883 - ff32 884 - ff32 885 - | 886 # 887 fmovi v1, 0.0 888 fcmpg v1 889 subi 1 890 - values: 891 - fmovi v1, 0x7f800000 # + Inf 892 - ff32 893 - ff32 894 - | 895 # 896 fmovi v1, 0x7f800000 897 fcmpg v1 898 - values: 899 - fmovi v1, 0xff800000 # - Inf 900 - ff32 901 - ff32 902 - | 903 # 904 fmovi v1, 0xff800000 905 fcmpg v1 906 907 908 - file-name: "into_all_field_types_int" 909 description: Check that register value is stored in field. Version for signed types. 910 isa: 911 description: If field type size is less than 32, register content will be truncated to storage size before storing. 912 header-template: ['pandasm_header'] 913 check-type: exit-positive 914 tags: ['tsan', 'irtoc_ignore'] 915 code-template: | 916 917 .function i32 main() { 918 movi v7, 123456789 919 newobj v0, R 920 %s 921 ldai 123456789 922 stobj.v v1, v0, R.%s 923 jeq v7, cont # check acc_none 924 ldai 2 925 return 926 cont: 927 ldobj.v v2, v0, R.%s 928 lda v2 929 movi v1, %s 930 jeq v1, success 931 ldai 1 932 return 933 success: 934 cases: 935 # i8 936 - values: ['movi v1, 0x00000000', 'fi8', 'fi8', 0] 937 - values: ['movi v1, 0xffffffff', 'fi8', 'fi8', -1] 938 - values: ['movi v1, 0x000000ff', 'fi8', 'fi8', -1] 939 - values: ['movi v1, 0xffffff00', 'fi8', 'fi8', 0] 940 - values: ['movi v1, 0x11111111', 'fi8', 'fi8', 17] 941 - values: ['movi v1, 0x88888888', 'fi8', 'fi8', -120] 942 # i16 943 - values: ['movi v1, 0x00000000', 'fi16', 'fi16', 0] 944 - values: ['movi v1, 0xffffffff', 'fi16', 'fi16', -1] 945 - values: ['movi v1, 0x0000ffff', 'fi16', 'fi16', -1] 946 - values: ['movi v1, 0xffff0000', 'fi16', 'fi16', 0] 947 - values: ['movi v1, 0x11111111', 'fi16', 'fi16', 4369] 948 - values: ['movi v1, 0x88888888', 'fi16', 'fi16', -30584] 949 # i32 950 - values: ['movi v1, 0x00000000', 'fi32', 'fi32', 0] 951 - values: ['movi v1, 0xffffffff', 'fi32', 'fi32', -1] 952 - values: ['movi v1, 0x11111111', 'fi32', 'fi32', 286331153] 953 - values: ['movi v1, 0x88888888', 'fi32', 'fi32', -2004318072] 954