git subrepo pull (merge) --force deps/lightning
[pcsx_rearmed.git] / deps / lightning / check / divi.tst
1 .data   128
2 small_ops:
3 .i      40 64 80
4 large_ops:
5 .i      98304 65536 163840
6 fmt:
7 .c      "%i/%i = %i (expected %i)\n"
8 x:
9 .c      "%d\n"
10 .code
11         jmpi main
12
13 #define generate_divider(operand)       \
14         name divider_##operand          \
15 divider_##operand:                      \
16         prolog                          \
17         arg $i                          \
18         getarg %r1 $i                   \
19         divi %r2 %r1 operand            \
20         retr %r2                        \
21         epilog
22 generate_divider(8)
23 generate_divider(32768)
24
25 #define generate_test_divider(divisor)  \
26         name test_divider_##divisor     \
27 test_divider_##divisor:                 \
28         prolog                          \
29         allocai 4 $loc                  \
30         arg $p                          \
31         arg $c                          \
32         getarg %v0 $p                   \
33         getarg %v1 $c                   \
34         muli %v1 %v1 4                  \
35         addr %v1 %v0 %v1                \
36 loop_##divisor:                         \
37         bger done_##divisor %v0 %v1     \
38         ldr_i %v2 %v0                   \
39         prepare                         \
40                 pushargr %v2            \
41         finishi divider_##divisor       \
42         retval %v2                      \
43         ldr_i %r2 %v0                   \
44         divi %r0 %r2 divisor            \
45         /* save div result */           \
46         stxi_i $loc %fp %r0             \
47         prepare                         \
48                 pushargi fmt            \
49                 ellipsis                \
50                 pushargr %r2            \
51                 pushargi divisor        \
52                 pushargr %v2            \
53                 pushargr %r0            \
54         finishi @printf                 \
55         addi %v0 %v0 4                  \
56         /* reload div result */         \
57         ldxi_i %r0 %fp $loc             \
58         beqr loop_##divisor %r0 %v2     \
59         /* return if failed */          \
60         reti 1                          \
61 done_##divisor:                         \
62         reti 0                          \
63         epilog
64 generate_test_divider(8)
65 generate_test_divider(32768)
66
67         name main
68 main:
69         prolog
70         prepare
71                 pushargi small_ops
72                 pushargi 3
73         finishi test_divider_8
74         retval %r0
75         bnei fail %r0 0 
76         prepare
77                 pushargi large_ops
78                 pushargi 3
79         finishi test_divider_32768
80         retval %r0
81         bnei fail %r0 0 
82         reti 0
83 fail:
84         reti 1
85         epilog