mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Added clz, ctz, popcount, bswap, bitreverse.
This commit is contained in:
41
lib/std/bits.c3
Normal file
41
lib/std/bits.c3
Normal file
@@ -0,0 +1,41 @@
|
||||
module std::bits;
|
||||
|
||||
/**
|
||||
* @require types::is_intlike($typeof(i)) `The input must be an integer or integer vector`
|
||||
**/
|
||||
macro popcount(i)
|
||||
{
|
||||
return $$popcount(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* @require types::is_intlike($typeof(i)) `The input must be an integer or integer vector`
|
||||
**/
|
||||
macro reverse(i)
|
||||
{
|
||||
return $$bitreverse(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* @require types::is_intlike($typeof(i)) `The input must be an integer or integer vector`
|
||||
**/
|
||||
macro bswap(i) @builtin
|
||||
{
|
||||
return $$bswap(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* @require types::is_intlike($typeof(i)) `The input must be an integer or integer vector`
|
||||
**/
|
||||
macro ctz(i) @builtin
|
||||
{
|
||||
return $$ctz(i);
|
||||
}
|
||||
|
||||
/**
|
||||
* @require types::is_intlike($typeof(i)) `The input must be an integer or integer vector`
|
||||
**/
|
||||
macro clz(i) @builtin
|
||||
{
|
||||
return $$clz(i);
|
||||
}
|
||||
@@ -121,6 +121,19 @@ macro bool is_subarray_convertable($Type)
|
||||
$endswitch;
|
||||
}
|
||||
|
||||
macro bool is_intlike($Type)
|
||||
{
|
||||
$switch ($Type.kind):
|
||||
$case SIGNED_INT:
|
||||
$case UNSIGNED_INT:
|
||||
return true;
|
||||
$case VECTOR:
|
||||
return is_intlike($Type.inner);
|
||||
$default:
|
||||
return false;
|
||||
$endswitch;
|
||||
}
|
||||
|
||||
macro bool is_equatable_value(value)
|
||||
{
|
||||
$if ($defined(value.less) || $defined(value.compare_to) || $defined(value.equals)):
|
||||
|
||||
Reference in New Issue
Block a user