Merge pull request #718 from pcercuei/update-lightrec-20230224
[pcsx_rearmed.git] / deps / lightning / check / factorial.tst
1 .data   32
2 str:
3 .c      "%.0lf\n"
4 .code
5         jmpi main
6 /*
7  *      double factorial(unsigned long n) {
8  *              double r = 1;
9  *              while (n > 1) {
10  *                      r *= n;
11  *                      --n;
12  *              }
13  *              return r;
14  *      }
15  */
16 factorial:
17         prolog
18         arg $n
19         getarg %r0 $n
20         movi_d %f0 1.0
21         extr_d %f1 %r0
22         movr_d %f2 %f0
23 loop:
24         bltr_d done %f1 %f2
25         mulr_d %f0 %f0 %f1
26         subr_d %f1 %f1 %f2
27         jmpi loop
28 done:
29         retr_d %f0
30         epilog
31
32 /*
33  *      int main(int argc, char *argv[]) {
34  *              unsigned long v;
35  *              double d;
36  *              if (argc == 2)
37  *                      v = strtoul(argv[1], NULL, 0);
38  *              else
39  *                      v = 32;
40  *              d = factorial(v);
41  *              printf("%.0lf\n", d);
42  *              return 0;
43  *      }
44  */
45 main:
46         prolog
47         arg $argc
48         arg $argv
49         getarg %r0 $argc
50         bnei default %r0 2
51         getarg %v0 $argv
52         ldxi %r0 %v0 $(__WORDSIZE >> 3)
53         prepare
54                 pushargr %r0
55                 pushargi 0
56                 pushargi 0
57         finishi @strtoul
58         retval %v0
59         jmpi call
60 default:
61     movi %v0 32
62 call:
63         prepare
64                 pushargr %v0
65         finishi factorial
66         retval_d %f0
67         prepare
68                 pushargi str
69                 ellipsis
70                 pushargr_d %f0
71         finishi @printf
72         reti 0
73         epilog