1 //===--- Float16bits.h - supports 2-byte floats ---------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements f16 and bf16 to support the compilation and execution 10 // of programs using these types. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef MLIR_EXECUTIONENGINE_FLOAT16BITS_H_ 15 #define MLIR_EXECUTIONENGINE_FLOAT16BITS_H_ 16 17 #include <cstdint> 18 #include <iostream> 19 20 #ifdef _WIN32 21 #ifdef mlir_float16_utils_EXPORTS // We are building this library 22 #define MLIR_FLOAT16_EXPORT __declspec(dllexport) 23 #define MLIR_FLOAT16_DEFINE_FUNCTIONS 24 #else // We are using this library 25 #define MLIR_FLOAT16_EXPORT __declspec(dllimport) 26 #endif // mlir_float16_utils_EXPORTS 27 #else // Non-windows: use visibility attributes. 28 #define MLIR_FLOAT16_EXPORT __attribute__((visibility("default"))) 29 #define MLIR_FLOAT16_DEFINE_FUNCTIONS 30 #endif // _WIN32 31 32 // Implements half precision and bfloat with f16 and bf16, using the MLIR type 33 // names. These data types are also used for c-interface runtime routines. 34 extern "C" { 35 struct MLIR_FLOAT16_EXPORT f16 { 36 f16(float f = 0); 37 uint16_t bits; 38 }; 39 40 struct MLIR_FLOAT16_EXPORT bf16 { 41 bf16(float f = 0); 42 uint16_t bits; 43 }; 44 } 45 46 // Outputs a half precision value. 47 MLIR_FLOAT16_EXPORT std::ostream &operator<<(std::ostream &os, const f16 &f); 48 // Outputs a bfloat value. 49 MLIR_FLOAT16_EXPORT std::ostream &operator<<(std::ostream &os, const bf16 &d); 50 51 MLIR_FLOAT16_EXPORT bool operator==(const f16 &f1, const f16 &f2); 52 MLIR_FLOAT16_EXPORT bool operator==(const bf16 &bf1, const bf16 &bf2); 53 54 extern "C" MLIR_FLOAT16_EXPORT void printF16(uint16_t bits); 55 extern "C" MLIR_FLOAT16_EXPORT void printBF16(uint16_t bits); 56 57 #undef MLIR_FLOAT16_EXPORT 58 #endif // MLIR_EXECUTIONENGINE_FLOAT16BITS_H_ 59