add fp16/fp32 convert intrinsics

This commit is contained in:
katsu560 2022-12-07 03:32:48 +09:00 committed by Georgi Gerganov
parent 9fe7306f4b
commit 35b40a93b9

11
ggml.c
View File

@ -131,6 +131,16 @@ ggml_fp16_t ggml_fp32_to_fp16(float x) {
// FP16 <-> FP32 // FP16 <-> FP32
// ref: https://github.com/Maratyszcza/FP16 // ref: https://github.com/Maratyszcza/FP16
#ifdef __F16C__
float ggml_fp16_to_fp32(ggml_fp16_t h) {
return _cvtsh_ss(h);
}
ggml_fp16_t ggml_fp32_to_fp16(float f) {
return _cvtss_sh(f, 0);
}
#else
static inline float fp32_from_bits(uint32_t w) { static inline float fp32_from_bits(uint32_t w) {
union { union {
uint32_t as_bits; uint32_t as_bits;
@ -196,6 +206,7 @@ ggml_fp16_t ggml_fp32_to_fp16(float f) {
return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign); return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign);
} }
#endif #endif
#endif
// //
// global data // global data