MLIR  20.0.0git
Float16bits.h
Go to the documentation of this file.
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" {
36  f16(float f = 0);
37  uint16_t bits;
38 };
39 
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_
MLIR_FLOAT16_EXPORT std::ostream & operator<<(std::ostream &os, const f16 &f)
MLIR_FLOAT16_EXPORT bool operator==(const f16 &f1, const f16 &f2)
MLIR_FLOAT16_EXPORT void printBF16(uint16_t bits)
MLIR_FLOAT16_EXPORT void printF16(uint16_t bits)
#define MLIR_FLOAT16_EXPORT
Definition: Float16bits.h:28
uint16_t bits
Definition: Float16bits.h:42
bf16(float f=0)
uint16_t bits
Definition: Float16bits.h:37
f16(float f=0)