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