MLX
Loading...
Searching...
No Matches
fp16.h File Reference
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <vector>

Go to the source code of this file.

Classes

struct  mlx::core::_MLX_Float16
 

Namespaces

namespace  mlx
 
namespace  mlx::core
 

Macros

#define __MLX_HALF_NAN__   0x7D00
 
#define half_binop_base(__op__, __operator__, otype, atype, btype, ctype)
 
#define half_binop_helper(__op__, __operator__, otype, itype, ctype)
 
#define half_binop(__op__, __operator__)
 
#define half_compop(__op__, __operator__)
 
#define half_inplace_op(__op__, __operator__)
 
#define half_bitop(__op__, __operator__)
 
#define half_inplace_bitop(__op__, __operator__)
 

Functions

_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
float mlx::core::operator+ (_MLX_Float16 lhs, float rhs)
 
float mlx::core::operator+ (float lhs, _MLX_Float16 rhs)
 
double mlx::core::operator+ (_MLX_Float16 lhs, double rhs)
 
double mlx::core::operator+ (double lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, bool rhs)
 
_MLX_Float16 mlx::core::operator+ (bool lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, int32_t rhs)
 
_MLX_Float16 mlx::core::operator+ (int32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, uint32_t rhs)
 
_MLX_Float16 mlx::core::operator+ (uint32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, int64_t rhs)
 
_MLX_Float16 mlx::core::operator+ (int64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator+ (_MLX_Float16 lhs, uint64_t rhs)
 
_MLX_Float16 mlx::core::operator+ (uint64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
float mlx::core::operator- (_MLX_Float16 lhs, float rhs)
 
float mlx::core::operator- (float lhs, _MLX_Float16 rhs)
 
double mlx::core::operator- (_MLX_Float16 lhs, double rhs)
 
double mlx::core::operator- (double lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, bool rhs)
 
_MLX_Float16 mlx::core::operator- (bool lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, int32_t rhs)
 
_MLX_Float16 mlx::core::operator- (int32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, uint32_t rhs)
 
_MLX_Float16 mlx::core::operator- (uint32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, int64_t rhs)
 
_MLX_Float16 mlx::core::operator- (int64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs, uint64_t rhs)
 
_MLX_Float16 mlx::core::operator- (uint64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
float mlx::core::operator* (_MLX_Float16 lhs, float rhs)
 
float mlx::core::operator* (float lhs, _MLX_Float16 rhs)
 
double mlx::core::operator* (_MLX_Float16 lhs, double rhs)
 
double mlx::core::operator* (double lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, bool rhs)
 
_MLX_Float16 mlx::core::operator* (bool lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, int32_t rhs)
 
_MLX_Float16 mlx::core::operator* (int32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, uint32_t rhs)
 
_MLX_Float16 mlx::core::operator* (uint32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, int64_t rhs)
 
_MLX_Float16 mlx::core::operator* (int64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator* (_MLX_Float16 lhs, uint64_t rhs)
 
_MLX_Float16 mlx::core::operator* (uint64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
float mlx::core::operator/ (_MLX_Float16 lhs, float rhs)
 
float mlx::core::operator/ (float lhs, _MLX_Float16 rhs)
 
double mlx::core::operator/ (_MLX_Float16 lhs, double rhs)
 
double mlx::core::operator/ (double lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, bool rhs)
 
_MLX_Float16 mlx::core::operator/ (bool lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, int32_t rhs)
 
_MLX_Float16 mlx::core::operator/ (int32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, uint32_t rhs)
 
_MLX_Float16 mlx::core::operator/ (uint32_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, int64_t rhs)
 
_MLX_Float16 mlx::core::operator/ (int64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator/ (_MLX_Float16 lhs, uint64_t rhs)
 
_MLX_Float16 mlx::core::operator/ (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator> (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator> (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator> (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator> (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator> (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator> (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator> (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator< (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator< (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator< (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator< (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator< (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator< (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator< (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator>= (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator>= (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator>= (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator>= (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator>= (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator>= (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator>= (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator<= (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator<= (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator<= (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator<= (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator<= (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator<= (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator<= (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator== (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator== (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator== (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator== (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator== (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator== (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator== (uint64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, float rhs)
 
bool mlx::core::operator!= (float lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, double rhs)
 
bool mlx::core::operator!= (double lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, int32_t rhs)
 
bool mlx::core::operator!= (int32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, uint32_t rhs)
 
bool mlx::core::operator!= (uint32_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, int64_t rhs)
 
bool mlx::core::operator!= (int64_t lhs, _MLX_Float16 rhs)
 
bool mlx::core::operator!= (_MLX_Float16 lhs, uint64_t rhs)
 
bool mlx::core::operator!= (uint64_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator- (_MLX_Float16 lhs)
 
_MLX_Float16mlx::core::operator+= (_MLX_Float16 &lhs, const float &rhs)
 
float & mlx::core::operator+= (float &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator-= (_MLX_Float16 &lhs, const float &rhs)
 
float & mlx::core::operator-= (float &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator*= (_MLX_Float16 &lhs, const float &rhs)
 
float & mlx::core::operator*= (float &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator/= (_MLX_Float16 &lhs, const float &rhs)
 
float & mlx::core::operator/= (float &lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator| (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator| (_MLX_Float16 lhs, uint16_t rhs)
 
_MLX_Float16 mlx::core::operator| (uint16_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator& (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator& (_MLX_Float16 lhs, uint16_t rhs)
 
_MLX_Float16 mlx::core::operator& (uint16_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator^ (_MLX_Float16 lhs, _MLX_Float16 rhs)
 
_MLX_Float16 mlx::core::operator^ (_MLX_Float16 lhs, uint16_t rhs)
 
_MLX_Float16 mlx::core::operator^ (uint16_t lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator|= (_MLX_Float16 &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator|= (_MLX_Float16 &lhs, uint16_t rhs)
 
_MLX_Float16mlx::core::operator&= (_MLX_Float16 &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator&= (_MLX_Float16 &lhs, uint16_t rhs)
 
_MLX_Float16mlx::core::operator^= (_MLX_Float16 &lhs, _MLX_Float16 rhs)
 
_MLX_Float16mlx::core::operator^= (_MLX_Float16 &lhs, uint16_t rhs)
 

Macro Definition Documentation

◆ __MLX_HALF_NAN__

#define __MLX_HALF_NAN__   0x7D00

◆ half_binop

#define half_binop ( __op__,
__operator__ )
Value:
__op__, __operator__, _MLX_Float16, _MLX_Float16, _MLX_Float16, float); \
half_binop_helper(__op__, __operator__, float, float, float); \
half_binop_helper(__op__, __operator__, double, double, double); \
half_binop_helper(__op__, __operator__, _MLX_Float16, bool, float); \
half_binop_helper(__op__, __operator__, _MLX_Float16, int32_t, float); \
half_binop_helper(__op__, __operator__, _MLX_Float16, uint32_t, float); \
half_binop_helper(__op__, __operator__, _MLX_Float16, int64_t, float); \
half_binop_helper(__op__, __operator__, _MLX_Float16, uint64_t, float);
#define half_binop_base(__op__, __operator__, otype, atype, btype, ctype)
Definition fp16.h:118

◆ half_binop_base

#define half_binop_base ( __op__,
__operator__,
otype,
atype,
btype,
ctype )
Value:
inline otype __operator__(atype lhs, btype rhs) { \
return static_cast<ctype>(lhs) __op__ static_cast<ctype>(rhs); \
}

◆ half_binop_helper

#define half_binop_helper ( __op__,
__operator__,
otype,
itype,
ctype )
Value:
inline otype __operator__(_MLX_Float16 lhs, itype rhs) { \
return static_cast<ctype>(lhs) __op__ static_cast<ctype>(rhs); \
} \
inline otype __operator__(itype lhs, _MLX_Float16 rhs) { \
return static_cast<ctype>(lhs) __op__ static_cast<ctype>(rhs); \
}

◆ half_bitop

#define half_bitop ( __op__,
__operator__ )
Value:
inline _MLX_Float16 __operator__(_MLX_Float16 lhs, _MLX_Float16 rhs) { \
_MLX_Float16 out; \
out.bits_ = lhs.bits_ __op__ rhs.bits_; \
return out; \
} \
inline _MLX_Float16 __operator__(_MLX_Float16 lhs, uint16_t rhs) { \
_MLX_Float16 out; \
out.bits_ = lhs.bits_ __op__ rhs; \
return out; \
} \
inline _MLX_Float16 __operator__(uint16_t lhs, _MLX_Float16 rhs) { \
_MLX_Float16 out; \
out.bits_ = lhs __op__ rhs.bits_; \
return out; \
}

◆ half_compop

#define half_compop ( __op__,
__operator__ )
Value:
__op__, __operator__, bool, _MLX_Float16, _MLX_Float16, float); \
half_binop_helper(__op__, __operator__, bool, float, float); \
half_binop_helper(__op__, __operator__, bool, double, double); \
half_binop_helper(__op__, __operator__, bool, int32_t, float); \
half_binop_helper(__op__, __operator__, bool, uint32_t, float); \
half_binop_helper(__op__, __operator__, bool, int64_t, float); \
half_binop_helper(__op__, __operator__, bool, uint64_t, float);

◆ half_inplace_bitop

#define half_inplace_bitop ( __op__,
__operator__ )
Value:
inline _MLX_Float16& __operator__(_MLX_Float16& lhs, _MLX_Float16 rhs) { \
lhs.bits_ = lhs.bits_ __op__ rhs.bits_; \
return lhs; \
} \
inline _MLX_Float16& __operator__(_MLX_Float16& lhs, uint16_t rhs) { \
lhs.bits_ = lhs.bits_ __op__ rhs; \
return lhs; \
}

◆ half_inplace_op

#define half_inplace_op ( __op__,
__operator__ )
Value:
inline _MLX_Float16& __operator__(_MLX_Float16& lhs, const float& rhs) { \
lhs = lhs __op__ rhs; \
return lhs; \
} \
inline float& __operator__(float& lhs, _MLX_Float16 rhs) { \
lhs = lhs __op__ rhs; \
return lhs; \
}

Variable Documentation

◆ f

float f

◆ u

uint32_t u