summaryrefslogtreecommitdiffstats
path: root/tests/assemble1.bench
blob: 4f4dbce22b01778ebdae0ee2f830c0d34fa66714 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
proc ulam1 {n} {
    set max $n
    while {$n != 1} {
	if {$n > $max} {
	    set max $n
	}
	if {$n % 2} {
	    set n [expr {3 * $n + 1}]
	} else {
	    set n [expr {$n / 2}]
	}
    }
    return $max
}
set i 0
puts [time {ulam1 [incr i]} 10000]

regsub -all {\#[^\n]*} {
    {load n}	     # max
    {dup}	     # max n
    {jump start}     # max n
    
  {label loop}       # max n
    {over 1}         # max n max
    {over 1}         # max n max n
    {ge}             # man n max>=n
    {jumpTrue skip}  # max n
    
    {reverse 2}      # n max
    {pop}            # n
    {dup}            # n n
    
  {label skip}       # max n
    {dup}            # max n n
    {push 2}         # max n n 2
    {mod}            # max n n%2
    {jumpTrue odd}   # max n
    
    {push 2}         # max n 2
    {div}            # max n/2 -> max n
    {jump start}     # max n
    
  {label odd}        # max n
    {push 3}         # max n 3
    {mult}           # max 3*n
    {push 1}         # max 3*n 1
    {add}            # max 3*n+1
    
  {label start}     # max n
    {dup}           # max n n
    {push 1}        # max n n 1
    {neq}           # max n n>1
    {jumpTrue loop} # max n
    
    {pop}           # max
    
} {} code
proc ulam2 n [list tcl::unsupported::assemble $code]
set i 0
puts [time {ulam2 [incr i]} 10000]