blob: f26c589080fab570b341dcc73d647f98406d90f8 [file] [log] [blame]
//
// This confidential and proprietary software may be used only as
// authorised by a licensing agreement from ARM Limited
// (C) COPYRIGHT 2020-2024 ARM Limited
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorised
// copies and copies may only be made to the extent permitted
// by a licensing agreement from ARM Limited.
// Returns a signed version of the given type
// A no-op for floating-point types
Type make_signed(Type in_t)
{
switch(in_t) {
case bool_t:
return bool_t;
case i8_t:
return int8_t;
case i16_t:
return int16_t;
case i32_t:
return int32_t;
case i48_t:
return int48_t;
case fp16_t:
return fp16_t;
case bf16_t:
return bf16_t;
case fp32_t:
return fp32_t;
}
}
// Returns the usigned type of the given type
// Error to call this with anything but i8_t or i16_t
Type make_unsigned(Type in_t)
{
ERROR_IF(in_t != i8_t && in_t != i16_t);
switch(in_t) {
case i8_t:
return uint8_t;
case i16_t:
return uint16_t;
}
}
out_t static_cast<out_t>(in_t value)
{
// Operates similar to the c++ standard static_cast
// Limited to simple numeric conversion for TOSA.
// Sign extends signed integer input types if needed
// Zero extends unsigned integer input types if needed
// Truncates when converting to a smaller width data type
// Conversion from integer to floating-point is exact if possible
// If converting between signless integer types, treated as signed integer
}
out_t bitcast<out_t>(in_t value)
{
// Treats the bits of value as if they were of type out_t
// Only supported for integer types of the same bit width
}