Added a function for memory size alignment
This commit is contained in:
11
lib/math/math.q
Normal file
11
lib/math/math.q
Normal file
@ -0,0 +1,11 @@
|
||||
align2(x uint64) -> uint64 {
|
||||
x -= 1
|
||||
x |= x >> 1
|
||||
x |= x >> 2
|
||||
x |= x >> 4
|
||||
x |= x >> 8
|
||||
x |= x >> 16
|
||||
x |= x >> 32
|
||||
x += 1
|
||||
return x
|
||||
}
|
@ -117,6 +117,9 @@ func TestParse(t *testing.T) {
|
||||
{"Dereferencing 2", "[a+b]", "(@ (+ a b))"},
|
||||
{"Dereferencing 3", "[a+b]=c", "(= (@ (+ a b)) c)"},
|
||||
{"Dereferencing 3", "[a+b]=c+d", "(= (@ (+ a b)) (+ c d))"},
|
||||
|
||||
{"Assign bitwise OR", "a|=b", "(|= a b)"},
|
||||
{"Assign bitwise OR 2", "a|=b<<c", "(|= a (<< b c))"},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
@ -51,6 +51,9 @@ var Operators = [64]Operator{
|
||||
token.MulAssign: {"*=", math.MinInt8, 2},
|
||||
token.DivAssign: {"/=", math.MinInt8, 2},
|
||||
token.ModAssign: {"%=", math.MinInt8, 2},
|
||||
token.AndAssign: {"&=", math.MinInt8, 2},
|
||||
token.OrAssign: {"|=", math.MinInt8, 2},
|
||||
token.XorAssign: {"^=", math.MinInt8, 2},
|
||||
token.ShrAssign: {">>=", math.MinInt8, 2},
|
||||
token.ShlAssign: {"<<=", math.MinInt8, 2},
|
||||
}
|
||||
|
26
tests/programs/align.q
Normal file
26
tests/programs/align.q
Normal file
@ -0,0 +1,26 @@
|
||||
import math
|
||||
|
||||
main() {
|
||||
assert math.align2(0) == 0
|
||||
assert math.align2(1) == 1
|
||||
assert math.align2(2) == 2
|
||||
assert math.align2(3) == 4
|
||||
assert math.align2(4) == 4
|
||||
assert math.align2(5) == 8
|
||||
assert math.align2(6) == 8
|
||||
assert math.align2(7) == 8
|
||||
assert math.align2(8) == 8
|
||||
assert math.align2(9) == 16
|
||||
assert math.align2(10) == 16
|
||||
assert math.align2(30) == 32
|
||||
assert math.align2(60) == 64
|
||||
assert math.align2(100) == 128
|
||||
assert math.align2(200) == 256
|
||||
assert math.align2(500) == 512
|
||||
assert math.align2(1000) == 1024
|
||||
assert math.align2(2000) == 2048
|
||||
assert math.align2(4000) == 4096
|
||||
assert math.align2(8000) == 8192
|
||||
assert math.align2(16000) == 16384
|
||||
assert math.align2(32000) == 32768
|
||||
}
|
@ -40,6 +40,7 @@ var programs = []struct {
|
||||
{"bitwise-or", 0},
|
||||
{"bitwise-xor", 0},
|
||||
{"shift", 0},
|
||||
{"align", 0},
|
||||
{"modulo", 0},
|
||||
{"modulo-assign", 0},
|
||||
{"div-split", 0},
|
||||
|
Reference in New Issue
Block a user