blob: 40b8ccdb54d66d9dd5e372b385f0aa51b8a8433e (
plain) (
blame)
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
|
fn abs n: int -> _/eax: int {
compare n, 0
{
break-if->=
negate n
}
return n
}
fn sgn n: int -> _/eax: int {
compare n, 0
{
break-if-<=
return 1
}
{
break-if->=
return -1
}
return 0
}
fn shift-left-by n: int, bits: int -> _/eax: int {
var i/eax: int <- copy bits
{
compare i, 0
break-if-<=
shift-left n, 1
i <- decrement
loop
}
return n
}
fn shift-right-by n: int, bits: int -> _/eax: int {
var i/eax: int <- copy bits
{
compare i, 0
break-if-<=
shift-right n, 1
i <- decrement
loop
}
return n
}
fn clear-lowest-bits _n: (addr int), bits: int {
var dest/edi: (addr int) <- copy _n
var n/eax: int <- copy *dest
n <- shift-right-by n, bits
n <- shift-left-by n, bits
copy-to *dest, n
}
|