notaz.gp2x.de
/
pcsx_rearmed.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
try a new github issue template
[pcsx_rearmed.git]
/
deps
/
lightning
/
check
/
collatz.tst
1
.data 32
2
str:
3
.c "%lu\n"
4
.code
5
jmpi main
6
/*
7
* unsigned long collatz(unsigned long n) {
8
* unsigned long r = n;
9
* if (!(r & 1)) {
10
* r = r / 2;
11
* return r;
12
* }
13
* r = r * 3;
14
* r = r + 1;
15
* return r;
16
* }
17
*/
18
collatz:
19
prolog
20
arg $n
21
getarg %r0 $n
22
bmsi odd %r0 1
23
//divi_u %r0 %r0 2
24
rshi_u %r0 %r0 1
25
retr %r0
26
odd:
27
muli %r0 %r0 3
28
addi %r0 %r0 1
29
retr %r0
30
epilog
31
32
/*
33
* int main(int argc, char *argv[]) {
34
* unsigned long v;
35
* if (argc == 2)
36
* v = strtoul(argv[1], NULL, 0);
37
* else
38
* v = (1L << __WORDSIZE / 2) - 1;
39
* while (1) {
40
* printf("%ld\n", v);
41
* if (v <= 1)
42
* break;
43
* v = collatz(v);
44
* }
45
* return 0;
46
* }
47
*/
48
main:
49
prolog
50
arg $argc
51
arg $argv
52
getarg %r0 $argc
53
bnei default %r0 2
54
getarg %v0 $argv
55
ldxi %r0 %v0 $(__WORDSIZE >> 3)
56
prepare
57
pushargr %r0
58
pushargi 0
59
pushargi 0
60
finishi @strtoul
61
retval %v0
62
jmpi loop
63
default:
64
movi %v0 $((1 << __WORDSIZE / 2) - 1)
65
loop:
66
prepare
67
pushargi str
68
ellipsis
69
pushargr %v0
70
finishi @printf
71
blei_u done %v0 1
72
prepare
73
pushargr %v0
74
finishi collatz
75
retval %v0
76
jmpi loop
77
done:
78
reti 0
79
epilog