xref: /openbmc/qemu/tests/tcg/openrisc/test_lf_lts.c (revision d3da41e3)
1*d901eff3SJia Liu #include <stdio.h>
2*d901eff3SJia Liu 
main(void)3*d901eff3SJia Liu int main(void)
4*d901eff3SJia Liu {
5*d901eff3SJia Liu     int a;
6*d901eff3SJia Liu     float b, c, d;
7*d901eff3SJia Liu     int result;
8*d901eff3SJia Liu 
9*d901eff3SJia Liu     a = 0;
10*d901eff3SJia Liu     b = 124.5;
11*d901eff3SJia Liu     c = 1.4;
12*d901eff3SJia Liu     result = 1;
13*d901eff3SJia Liu     __asm
14*d901eff3SJia Liu     ("lfltd:\n\t"
15*d901eff3SJia Liu      "l.addi    %0, %0, 0x1\n\t"
16*d901eff3SJia Liu      "lf.sflt.s %1, %2\n\t"
17*d901eff3SJia Liu      "l.bf      lfltd\n\t"
18*d901eff3SJia Liu      "l.nop\n\t"
19*d901eff3SJia Liu      : "+r"(a)
20*d901eff3SJia Liu      : "r"(b), "r"(c)
21*d901eff3SJia Liu     );
22*d901eff3SJia Liu     if (a != result) {
23*d901eff3SJia Liu         printf("lf.sflt.s error\n");
24*d901eff3SJia Liu         return -1;
25*d901eff3SJia Liu     }
26*d901eff3SJia Liu 
27*d901eff3SJia Liu     a = 0;
28*d901eff3SJia Liu     b = 11.1;
29*d901eff3SJia Liu     c = 13.1;
30*d901eff3SJia Liu     d = 1.0;
31*d901eff3SJia Liu     result = 2;
32*d901eff3SJia Liu     __asm
33*d901eff3SJia Liu     ("1:\n\t"
34*d901eff3SJia Liu      "lf.add.s  %1, %1, %3\n\t"
35*d901eff3SJia Liu      "l.addi    %0, %0, 1\n\t"
36*d901eff3SJia Liu      "lf.sflt.s %1, %2\n\t"
37*d901eff3SJia Liu      "l.bf      1b\n\t"
38*d901eff3SJia Liu      "l.nop\n\t"
39*d901eff3SJia Liu      : "+r"(a)
40*d901eff3SJia Liu      : "r"(b), "r"(c), "r"(d)
41*d901eff3SJia Liu     );
42*d901eff3SJia Liu     if (a != result) {
43*d901eff3SJia Liu         printf("lf.sflt.s error\n");
44*d901eff3SJia Liu         return -1;
45*d901eff3SJia Liu     }
46*d901eff3SJia Liu 
47*d901eff3SJia Liu /*    int a;
48*d901eff3SJia Liu     double b, c;
49*d901eff3SJia Liu     int result;
50*d901eff3SJia Liu 
51*d901eff3SJia Liu     a = 0;
52*d901eff3SJia Liu     b = 1432.1;
53*d901eff3SJia Liu     c = 2.4;
54*d901eff3SJia Liu     result = 0x1;
55*d901eff3SJia Liu     __asm
56*d901eff3SJia Liu     ("lfltd:\n\t"
57*d901eff3SJia Liu      "l.addi    %0, %0, 0x1\n\t"
58*d901eff3SJia Liu      "lf.sflt.d %1, %2\n\t"
59*d901eff3SJia Liu      "l.bf      lfltd\n\t"
60*d901eff3SJia Liu      "l.nop\n\t"
61*d901eff3SJia Liu      : "+r"(a)
62*d901eff3SJia Liu      : "r"(b), "r"(c)
63*d901eff3SJia Liu     );
64*d901eff3SJia Liu     if (a != result) {
65*d901eff3SJia Liu         printf("lf.sflt.d error\n");
66*d901eff3SJia Liu         return -1;
67*d901eff3SJia Liu     }
68*d901eff3SJia Liu 
69*d901eff3SJia Liu     a = 0;
70*d901eff3SJia Liu     b = 1.1;
71*d901eff3SJia Liu     c = 19.7;
72*d901eff3SJia Liu     result = 2;
73*d901eff3SJia Liu     __asm
74*d901eff3SJia Liu     ("lf.sflt.d %1, %2\n\t"
75*d901eff3SJia Liu      "l.bf      1f\n\t"
76*d901eff3SJia Liu      "l.nop\n\t"
77*d901eff3SJia Liu      "l.addi %0, %0, 1\n\t"
78*d901eff3SJia Liu      "l.addi %0, %0, 1\n\t"
79*d901eff3SJia Liu      "l.addi %0, %0, 1\n\t"
80*d901eff3SJia Liu      "1:\n\t"
81*d901eff3SJia Liu      "l.addi %0, %0, 1\n\t"
82*d901eff3SJia Liu      "l.addi %0, %0, 1\n\t"
83*d901eff3SJia Liu      : "+r"(a), "+r"(b)
84*d901eff3SJia Liu      : "r"(c)
85*d901eff3SJia Liu     );
86*d901eff3SJia Liu     if (a != result) {
87*d901eff3SJia Liu         printf("lf.sflt.d error\n");
88*d901eff3SJia Liu         return -1;
89*d901eff3SJia Liu     }*/
90*d901eff3SJia Liu 
91*d901eff3SJia Liu     return 0;
92*d901eff3SJia Liu }
93