add f16 type
Add support for half-precision floating point operations. Introduce `__extendhfsf2` and `__truncsfhf2` in std/special/compiler_rt. Add `__gnu_h2f_ieee` and `__gnu_f2h_ieee` as aliases that are used in Windows builds. The logic in std/special/compiler_rt/extendXfYf2.zig has been reworked and can now operate on 16 bits floating point types. `extendXfYf2()` and `truncXfYf2()` are marked `inline` to work around a not entirely understood stack alignment issue on Windows when calling the f16 versions of the builtins. closes #1122
This commit is contained in:
@@ -18,6 +18,10 @@ void bigfloat_init_128(BigFloat *dest, float128_t x) {
|
||||
dest->value = x;
|
||||
}
|
||||
|
||||
void bigfloat_init_16(BigFloat *dest, float16_t x) {
|
||||
f16_to_f128M(x, &dest->value);
|
||||
}
|
||||
|
||||
void bigfloat_init_32(BigFloat *dest, float x) {
|
||||
float32_t f32_val;
|
||||
memcpy(&f32_val, &x, sizeof(float));
|
||||
@@ -146,6 +150,10 @@ Cmp bigfloat_cmp(const BigFloat *op1, const BigFloat *op2) {
|
||||
}
|
||||
}
|
||||
|
||||
float16_t bigfloat_to_f16(const BigFloat *bigfloat) {
|
||||
return f128M_to_f16(&bigfloat->value);
|
||||
}
|
||||
|
||||
float bigfloat_to_f32(const BigFloat *bigfloat) {
|
||||
float32_t f32_value = f128M_to_f32(&bigfloat->value);
|
||||
float result;
|
||||
|
||||
Reference in New Issue
Block a user