• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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