git subrepo pull (merge) --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / check / factorial.tst
CommitLineData
79bfeef6
PC
1.data 32
2str:
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 */
16factorial:
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
23loop:
24 bltr_d done %f1 %f2
25 mulr_d %f0 %f0 %f1
26 subr_d %f1 %f1 %f2
27 jmpi loop
28done:
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 */
45main:
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
60default:
61 movi %v0 32
62call:
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