forked from extern/whisper.cpp
add fp16/fp32 convert intrinsics
This commit is contained in:
parent
9fe7306f4b
commit
35b40a93b9
11
ggml.c
11
ggml.c
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user