mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 23:58:50 +00:00
big: add shl1, shr1.
This commit is contained in:
@@ -212,4 +212,36 @@ xor :: proc(dest, a, b: ^Int) -> (err: Error) {
|
||||
dest.used = used;
|
||||
dest.sign = .Negative if neg else .Zero_or_Positive;
|
||||
return clamp(dest);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
dest = ~src
|
||||
*/
|
||||
int_complement :: proc(dest, src: ^Int) -> (err: Error) {
|
||||
/*
|
||||
Check that src and dest are usable.
|
||||
*/
|
||||
if err = clear_if_uninitialized(src); err != .None {
|
||||
return err;
|
||||
}
|
||||
if err = clear_if_uninitialized(dest); err != .None {
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
Temporarily fix sign.
|
||||
*/
|
||||
old_sign := src.sign;
|
||||
z, _ := is_zero(src);
|
||||
|
||||
src.sign = .Negative if (src.sign == .Zero_or_Positive || z) else .Zero_or_Positive;
|
||||
|
||||
err = sub(dest, src, 1);
|
||||
/*
|
||||
Restore sign.
|
||||
*/
|
||||
src.sign = old_sign;
|
||||
|
||||
return err;
|
||||
}
|
||||
complement :: proc { int_complement, };
|
||||
Reference in New Issue
Block a user