move comment to a clearer location
[mu.git] / 506math.mu
blob40b8ccdb54d66d9dd5e372b385f0aa51b8a8433e
1 fn abs n: int -> _/eax: int {
2   compare n, 0
3   {
4     break-if->=
5     negate n
6   }
7   return n
10 fn sgn n: int -> _/eax: int {
11   compare n, 0
12   {
13     break-if-<=
14     return 1
15   }
16   {
17     break-if->=
18     return -1
19   }
20   return 0
23 fn shift-left-by n: int, bits: int -> _/eax: int {
24   var i/eax: int <- copy bits
25   {
26     compare i, 0
27     break-if-<=
28     shift-left n, 1
29     i <- decrement
30     loop
31   }
32   return n
35 fn shift-right-by n: int, bits: int -> _/eax: int {
36   var i/eax: int <- copy bits
37   {
38     compare i, 0
39     break-if-<=
40     shift-right n, 1
41     i <- decrement
42     loop
43   }
44   return n
47 fn clear-lowest-bits _n: (addr int), bits: int {
48   var dest/edi: (addr int) <- copy _n
49   var n/eax: int <- copy *dest
50   n <- shift-right-by n, bits
51   n <- shift-left-by n, bits
52   copy-to *dest, n