summaryrefslogtreecommitdiffstats
path: root/src/H5T.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5T.c')
-rw-r--r--src/H5T.c570
1 files changed, 381 insertions, 189 deletions
diff --git a/src/H5T.c b/src/H5T.c
index 7d3db70..1fb4b21 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -100,6 +100,30 @@
dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO; \
}
+/* Define the code templates for standard 16-bit floats for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_FLOAT16_COMMON(ENDIANNESS) \
+ { \
+ H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS) \
+ dt->shared->u.atomic.u.f.sign = 15; \
+ dt->shared->u.atomic.u.f.epos = 10; \
+ dt->shared->u.atomic.u.f.esize = 5; \
+ dt->shared->u.atomic.u.f.ebias = 0xf; \
+ dt->shared->u.atomic.u.f.mpos = 0; \
+ dt->shared->u.atomic.u.f.msize = 10; \
+ dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED; \
+ dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO; \
+ }
+
+#define H5T_INIT_TYPE_FLOAT16LE_CORE \
+ { \
+ H5T_INIT_TYPE_FLOAT16_COMMON(H5T_ORDER_LE) \
+ }
+
+#define H5T_INIT_TYPE_FLOAT16BE_CORE \
+ { \
+ H5T_INIT_TYPE_FLOAT16_COMMON(H5T_ORDER_BE) \
+ }
+
/* Define the code templates for standard floats for the "GUTS" in the H5T_INIT_TYPE macro */
#define H5T_INIT_TYPE_FLOAT_COMMON(ENDIANNESS) \
{ \
@@ -375,102 +399,105 @@ H5T_order_t H5T_native_order_g = H5T_ORDER_ERROR;
* If more of these are added, the new ones must be added to the list of
* types to reset in H5T_term_package().
*/
-hid_t H5T_IEEE_F32BE_g = FAIL;
-hid_t H5T_IEEE_F32LE_g = FAIL;
-hid_t H5T_IEEE_F64BE_g = FAIL;
-hid_t H5T_IEEE_F64LE_g = FAIL;
-
-hid_t H5T_VAX_F32_g = FAIL;
-hid_t H5T_VAX_F64_g = FAIL;
-
-hid_t H5T_STD_I8BE_g = FAIL;
-hid_t H5T_STD_I8LE_g = FAIL;
-hid_t H5T_STD_I16BE_g = FAIL;
-hid_t H5T_STD_I16LE_g = FAIL;
-hid_t H5T_STD_I32BE_g = FAIL;
-hid_t H5T_STD_I32LE_g = FAIL;
-hid_t H5T_STD_I64BE_g = FAIL;
-hid_t H5T_STD_I64LE_g = FAIL;
-hid_t H5T_STD_U8BE_g = FAIL;
-hid_t H5T_STD_U8LE_g = FAIL;
-hid_t H5T_STD_U16BE_g = FAIL;
-hid_t H5T_STD_U16LE_g = FAIL;
-hid_t H5T_STD_U32BE_g = FAIL;
-hid_t H5T_STD_U32LE_g = FAIL;
-hid_t H5T_STD_U64BE_g = FAIL;
-hid_t H5T_STD_U64LE_g = FAIL;
-hid_t H5T_STD_B8BE_g = FAIL;
-hid_t H5T_STD_B8LE_g = FAIL;
-hid_t H5T_STD_B16BE_g = FAIL;
-hid_t H5T_STD_B16LE_g = FAIL;
-hid_t H5T_STD_B32BE_g = FAIL;
-hid_t H5T_STD_B32LE_g = FAIL;
-hid_t H5T_STD_B64BE_g = FAIL;
-hid_t H5T_STD_B64LE_g = FAIL;
-hid_t H5T_STD_REF_OBJ_g = FAIL;
-hid_t H5T_STD_REF_DSETREG_g = FAIL;
-hid_t H5T_STD_REF_g = FAIL;
-
-hid_t H5T_UNIX_D32BE_g = FAIL;
-hid_t H5T_UNIX_D32LE_g = FAIL;
-hid_t H5T_UNIX_D64BE_g = FAIL;
-hid_t H5T_UNIX_D64LE_g = FAIL;
-
-hid_t H5T_C_S1_g = FAIL;
-
-hid_t H5T_FORTRAN_S1_g = FAIL;
-
-hid_t H5T_NATIVE_SCHAR_g = FAIL;
-hid_t H5T_NATIVE_UCHAR_g = FAIL;
-hid_t H5T_NATIVE_SHORT_g = FAIL;
-hid_t H5T_NATIVE_USHORT_g = FAIL;
-hid_t H5T_NATIVE_INT_g = FAIL;
-hid_t H5T_NATIVE_UINT_g = FAIL;
-hid_t H5T_NATIVE_LONG_g = FAIL;
-hid_t H5T_NATIVE_ULONG_g = FAIL;
-hid_t H5T_NATIVE_LLONG_g = FAIL;
-hid_t H5T_NATIVE_ULLONG_g = FAIL;
-hid_t H5T_NATIVE_FLOAT_g = FAIL;
-hid_t H5T_NATIVE_DOUBLE_g = FAIL;
-hid_t H5T_NATIVE_LDOUBLE_g = FAIL;
-hid_t H5T_NATIVE_B8_g = FAIL;
-hid_t H5T_NATIVE_B16_g = FAIL;
-hid_t H5T_NATIVE_B32_g = FAIL;
-hid_t H5T_NATIVE_B64_g = FAIL;
-hid_t H5T_NATIVE_OPAQUE_g = FAIL;
-hid_t H5T_NATIVE_HADDR_g = FAIL;
-hid_t H5T_NATIVE_HSIZE_g = FAIL;
-hid_t H5T_NATIVE_HSSIZE_g = FAIL;
-hid_t H5T_NATIVE_HERR_g = FAIL;
-hid_t H5T_NATIVE_HBOOL_g = FAIL;
-
-hid_t H5T_NATIVE_INT8_g = FAIL;
-hid_t H5T_NATIVE_UINT8_g = FAIL;
-hid_t H5T_NATIVE_INT_LEAST8_g = FAIL;
-hid_t H5T_NATIVE_UINT_LEAST8_g = FAIL;
-hid_t H5T_NATIVE_INT_FAST8_g = FAIL;
-hid_t H5T_NATIVE_UINT_FAST8_g = FAIL;
-
-hid_t H5T_NATIVE_INT16_g = FAIL;
-hid_t H5T_NATIVE_UINT16_g = FAIL;
-hid_t H5T_NATIVE_INT_LEAST16_g = FAIL;
-hid_t H5T_NATIVE_UINT_LEAST16_g = FAIL;
-hid_t H5T_NATIVE_INT_FAST16_g = FAIL;
-hid_t H5T_NATIVE_UINT_FAST16_g = FAIL;
-
-hid_t H5T_NATIVE_INT32_g = FAIL;
-hid_t H5T_NATIVE_UINT32_g = FAIL;
-hid_t H5T_NATIVE_INT_LEAST32_g = FAIL;
-hid_t H5T_NATIVE_UINT_LEAST32_g = FAIL;
-hid_t H5T_NATIVE_INT_FAST32_g = FAIL;
-hid_t H5T_NATIVE_UINT_FAST32_g = FAIL;
-
-hid_t H5T_NATIVE_INT64_g = FAIL;
-hid_t H5T_NATIVE_UINT64_g = FAIL;
-hid_t H5T_NATIVE_INT_LEAST64_g = FAIL;
-hid_t H5T_NATIVE_UINT_LEAST64_g = FAIL;
-hid_t H5T_NATIVE_INT_FAST64_g = FAIL;
-hid_t H5T_NATIVE_UINT_FAST64_g = FAIL;
+hid_t H5T_IEEE_F16BE_g = H5I_INVALID_HID;
+hid_t H5T_IEEE_F16LE_g = H5I_INVALID_HID;
+hid_t H5T_IEEE_F32BE_g = H5I_INVALID_HID;
+hid_t H5T_IEEE_F32LE_g = H5I_INVALID_HID;
+hid_t H5T_IEEE_F64BE_g = H5I_INVALID_HID;
+hid_t H5T_IEEE_F64LE_g = H5I_INVALID_HID;
+
+hid_t H5T_VAX_F32_g = H5I_INVALID_HID;
+hid_t H5T_VAX_F64_g = H5I_INVALID_HID;
+
+hid_t H5T_STD_I8BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I8LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I16BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I16LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I32BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I32LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I64BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_I64LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U8BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U8LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U16BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U16LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U32BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U32LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U64BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_U64LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B8BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B8LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B16BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B16LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B32BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B32LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B64BE_g = H5I_INVALID_HID;
+hid_t H5T_STD_B64LE_g = H5I_INVALID_HID;
+hid_t H5T_STD_REF_OBJ_g = H5I_INVALID_HID;
+hid_t H5T_STD_REF_DSETREG_g = H5I_INVALID_HID;
+hid_t H5T_STD_REF_g = H5I_INVALID_HID;
+
+hid_t H5T_UNIX_D32BE_g = H5I_INVALID_HID;
+hid_t H5T_UNIX_D32LE_g = H5I_INVALID_HID;
+hid_t H5T_UNIX_D64BE_g = H5I_INVALID_HID;
+hid_t H5T_UNIX_D64LE_g = H5I_INVALID_HID;
+
+hid_t H5T_C_S1_g = H5I_INVALID_HID;
+
+hid_t H5T_FORTRAN_S1_g = H5I_INVALID_HID;
+
+hid_t H5T_NATIVE_SCHAR_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UCHAR_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_SHORT_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_USHORT_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_LONG_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_ULONG_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_LLONG_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_ULLONG_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_FLOAT_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_B8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_B16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_B32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_B64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_HADDR_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_HSIZE_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_HERR_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_HBOOL_g = H5I_INVALID_HID;
+
+hid_t H5T_NATIVE_INT8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_LEAST8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_LEAST8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_FAST8_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_FAST8_g = H5I_INVALID_HID;
+
+hid_t H5T_NATIVE_INT16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_LEAST16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_LEAST16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_FAST16_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_FAST16_g = H5I_INVALID_HID;
+
+hid_t H5T_NATIVE_INT32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_LEAST32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_LEAST32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_FAST32_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_FAST32_g = H5I_INVALID_HID;
+
+hid_t H5T_NATIVE_INT64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_LEAST64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_LEAST64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_INT_FAST64_g = H5I_INVALID_HID;
+hid_t H5T_NATIVE_UINT_FAST64_g = H5I_INVALID_HID;
/*
* Alignment constraints for HDF5 types. Accessing objects of these
@@ -498,6 +525,7 @@ size_t H5T_NATIVE_LONG_ALIGN_g = 0;
size_t H5T_NATIVE_ULONG_ALIGN_g = 0;
size_t H5T_NATIVE_LLONG_ALIGN_g = 0;
size_t H5T_NATIVE_ULLONG_ALIGN_g = 0;
+size_t H5T_NATIVE_FLOAT16_ALIGN_g = 0;
size_t H5T_NATIVE_FLOAT_ALIGN_g = 0;
size_t H5T_NATIVE_DOUBLE_ALIGN_g = 0;
size_t H5T_NATIVE_LDOUBLE_ALIGN_g = 0;
@@ -533,6 +561,15 @@ size_t H5T_NATIVE_UINT_FAST64_ALIGN_g = 0;
/* Useful floating-point values for conversion routines */
/* (+/- Inf for all floating-point types) */
+#ifdef H5_HAVE__FLOAT16
+/* Initialize these with a float literal since the f16 suffix
+ * is non-standard C and gives warnings when compiling the
+ * library with the -pedantic flag. These values will be
+ * overwritten anyway.
+ */
+H5__Float16 H5T_NATIVE_FLOAT16_POS_INF_g = 0.0f;
+H5__Float16 H5T_NATIVE_FLOAT16_NEG_INF_g = 0.0f;
+#endif
float H5T_NATIVE_FLOAT_POS_INF_g = 0.0F;
float H5T_NATIVE_FLOAT_NEG_INF_g = 0.0F;
double H5T_NATIVE_DOUBLE_POS_INF_g = 0.0;
@@ -685,6 +722,49 @@ H5T__init_inf(void)
} /* end for */
} /* end if */
+#ifdef H5_HAVE__FLOAT16
+ /* Get the _Float16 datatype */
+ if (NULL == (dst_p = (H5T_t *)H5I_object(H5T_NATIVE_FLOAT16_g)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+ dst = &dst_p->shared->u.atomic;
+
+ /* Check that we can re-order the bytes correctly */
+ if (H5T_ORDER_LE != H5T_native_order_g && H5T_ORDER_BE != H5T_native_order_g)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+
+ /* +Inf */
+ d = (uint8_t *)&H5T_NATIVE_FLOAT16_POS_INF_g;
+ H5T__bit_set(d, dst->u.f.sign, (size_t)1, false);
+ H5T__bit_set(d, dst->u.f.epos, dst->u.f.esize, true);
+ H5T__bit_set(d, dst->u.f.mpos, dst->u.f.msize, false);
+
+ /* Swap the bytes if the machine architecture is big-endian */
+ if (H5T_ORDER_BE == H5T_native_order_g) {
+ half_size = dst_p->shared->size / 2;
+ for (u = 0; u < half_size; u++) {
+ uint8_t tmp = d[dst_p->shared->size - (u + 1)];
+ d[dst_p->shared->size - (u + 1)] = d[u];
+ d[u] = tmp;
+ } /* end for */
+ } /* end if */
+
+ /* -Inf */
+ d = (uint8_t *)&H5T_NATIVE_FLOAT16_NEG_INF_g;
+ H5T__bit_set(d, dst->u.f.sign, (size_t)1, true);
+ H5T__bit_set(d, dst->u.f.epos, dst->u.f.esize, true);
+ H5T__bit_set(d, dst->u.f.mpos, dst->u.f.msize, false);
+
+ /* Swap the bytes if the machine architecture is big-endian */
+ if (H5T_ORDER_BE == H5T_native_order_g) {
+ half_size = dst_p->shared->size / 2;
+ for (u = 0; u < half_size; u++) {
+ uint8_t tmp = d[dst_p->shared->size - (u + 1)];
+ d[dst_p->shared->size - (u + 1)] = d[u];
+ d[u] = tmp;
+ } /* end for */
+ } /* end if */
+#endif
+
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5T__init_inf() */
@@ -738,6 +818,9 @@ H5T_init(void)
herr_t status;
bool copied_dtype =
true; /* Flag to indicate whether datatype was copied or allocated (for error cleanup) */
+#ifdef H5_HAVE__FLOAT16
+ H5T_t *native_float16 = NULL; /* Datatype structure for native _Float16 type */
+#endif
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -779,6 +862,10 @@ H5T_init(void)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
if (NULL == (native_ullong = (H5T_t *)H5I_object(H5T_NATIVE_ULLONG_g)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+#ifdef H5_HAVE__FLOAT16
+ if (NULL == (native_float16 = (H5T_t *)H5I_object(H5T_NATIVE_FLOAT16_g)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+#endif
if (NULL == (native_float = (H5T_t *)H5I_object(H5T_NATIVE_FLOAT_g)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
if (NULL == (native_double = (H5T_t *)H5I_object(H5T_NATIVE_DOUBLE_g)))
@@ -823,6 +910,12 @@ H5T_init(void)
*------------------------------------------------------------
*/
+ /* IEEE 2-byte little-endian float */
+ H5T_INIT_TYPE(FLOAT16LE, H5T_IEEE_F16LE_g, COPY, native_double, SET, 2)
+
+ /* IEEE 2-byte big-endian float */
+ H5T_INIT_TYPE(FLOAT16BE, H5T_IEEE_F16BE_g, COPY, native_double, SET, 2)
+
/* IEEE 4-byte little-endian float */
H5T_INIT_TYPE(FLOATLE, H5T_IEEE_F32LE_g, COPY, native_double, SET, 4)
@@ -1062,6 +1155,22 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "ldbl_flt", native_ldouble, native_float, H5T__conv_ldouble_float);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_dbl", native_ldouble, native_double, H5T__conv_ldouble_double);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "flt16_flt", native_float16, native_float, H5T__conv__Float16_float);
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_dbl", native_float16, native_double,
+ H5T__conv__Float16_double);
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_ldbl", native_float16, native_ldouble,
+ H5T__conv__Float16_ldouble);
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "flt_flt16", native_float, native_float16, H5T__conv_float__Float16);
+ status |= H5T__register_int(H5T_PERS_HARD, "dbl_flt16", native_double, native_float16,
+ H5T__conv_double__Float16);
+#ifdef H5T_CONV_INTERNAL_LDOUBLE_FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "ldbl_flt16", native_ldouble, native_float16,
+ H5T__conv_ldouble__Float16);
+#endif
+#endif
/* from long long */
status |=
@@ -1220,6 +1329,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "schar_dbl", native_schar, native_double, H5T__conv_schar_double);
status |=
H5T__register_int(H5T_PERS_HARD, "schar_ldbl", native_schar, native_ldouble, H5T__conv_schar_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "schar_flt16", native_schar, native_float16,
+ H5T__conv_schar__Float16);
+#endif
/* From unsigned char to floats */
status |=
@@ -1228,6 +1341,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "uchar_dbl", native_uchar, native_double, H5T__conv_uchar_double);
status |=
H5T__register_int(H5T_PERS_HARD, "uchar_ldbl", native_uchar, native_ldouble, H5T__conv_uchar_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "uchar_flt16", native_uchar, native_float16,
+ H5T__conv_uchar__Float16);
+#endif
/* From short to floats */
status |=
@@ -1236,6 +1353,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "short_dbl", native_short, native_double, H5T__conv_short_double);
status |=
H5T__register_int(H5T_PERS_HARD, "short_ldbl", native_short, native_ldouble, H5T__conv_short_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "short_flt16", native_short, native_float16,
+ H5T__conv_short__Float16);
+#endif
/* From unsigned short to floats */
status |=
@@ -1244,23 +1365,39 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "ushort_dbl", native_ushort, native_double, H5T__conv_ushort_double);
status |= H5T__register_int(H5T_PERS_HARD, "ushort_ldbl", native_ushort, native_ldouble,
H5T__conv_ushort_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "ushort_flt16", native_ushort, native_float16,
+ H5T__conv_ushort__Float16);
+#endif
/* From int to floats */
status |= H5T__register_int(H5T_PERS_HARD, "int_flt", native_int, native_float, H5T__conv_int_float);
status |= H5T__register_int(H5T_PERS_HARD, "int_dbl", native_int, native_double, H5T__conv_int_double);
status |= H5T__register_int(H5T_PERS_HARD, "int_ldbl", native_int, native_ldouble, H5T__conv_int_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "int_flt16", native_int, native_float16, H5T__conv_int__Float16);
+#endif
/* From unsigned int to floats */
status |= H5T__register_int(H5T_PERS_HARD, "uint_flt", native_uint, native_float, H5T__conv_uint_float);
status |= H5T__register_int(H5T_PERS_HARD, "uint_dbl", native_uint, native_double, H5T__conv_uint_double);
status |=
H5T__register_int(H5T_PERS_HARD, "uint_ldbl", native_uint, native_ldouble, H5T__conv_uint_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "uint_flt16", native_uint, native_float16, H5T__conv_uint__Float16);
+#endif
/* From long to floats */
status |= H5T__register_int(H5T_PERS_HARD, "long_flt", native_long, native_float, H5T__conv_long_float);
status |= H5T__register_int(H5T_PERS_HARD, "long_dbl", native_long, native_double, H5T__conv_long_double);
status |=
H5T__register_int(H5T_PERS_HARD, "long_ldbl", native_long, native_ldouble, H5T__conv_long_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "long_flt16", native_long, native_float16, H5T__conv_long__Float16);
+#endif
/* From unsigned long to floats */
status |=
@@ -1269,6 +1406,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "ulong_dbl", native_ulong, native_double, H5T__conv_ulong_double);
status |=
H5T__register_int(H5T_PERS_HARD, "ulong_ldbl", native_ulong, native_ldouble, H5T__conv_ulong_ldouble);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "ulong_flt16", native_ulong, native_float16,
+ H5T__conv_ulong__Float16);
+#endif
/* From long long to floats */
status |=
@@ -1279,6 +1420,10 @@ H5T_init(void)
status |=
H5T__register_int(H5T_PERS_HARD, "llong_ldbl", native_llong, native_ldouble, H5T__conv_llong_ldouble);
#endif /* H5T_CONV_INTERNAL_LLONG_LDOUBLE */
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "llong_flt16", native_llong, native_float16,
+ H5T__conv_llong__Float16);
+#endif
/* From unsigned long long to floats */
status |=
@@ -1289,6 +1434,10 @@ H5T_init(void)
status |= H5T__register_int(H5T_PERS_HARD, "ullong_ldbl", native_ullong, native_ldouble,
H5T__conv_ullong_ldouble);
#endif /* H5T_CONV_INTERNAL_ULLONG_LDOUBLE */
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "ullong_flt16", native_ullong, native_float16,
+ H5T__conv_ullong__Float16);
+#endif
/* From floats to char */
status |=
@@ -1297,6 +1446,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "dbl_schar", native_double, native_schar, H5T__conv_double_schar);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_schar", native_ldouble, native_schar, H5T__conv_ldouble_schar);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_schar", native_float16, native_schar,
+ H5T__conv__Float16_schar);
+#endif
/* From floats to unsigned char */
status |=
@@ -1305,6 +1458,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "dbl_uchar", native_double, native_uchar, H5T__conv_double_uchar);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_uchar", native_ldouble, native_uchar, H5T__conv_ldouble_uchar);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_uchar", native_float16, native_uchar,
+ H5T__conv__Float16_uchar);
+#endif
/* From floats to short */
status |=
@@ -1313,6 +1470,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "dbl_short", native_double, native_short, H5T__conv_double_short);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_short", native_ldouble, native_short, H5T__conv_ldouble_short);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_short", native_float16, native_short,
+ H5T__conv__Float16_short);
+#endif
/* From floats to unsigned short */
status |=
@@ -1321,23 +1482,39 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "dbl_ushort", native_double, native_ushort, H5T__conv_double_ushort);
status |= H5T__register_int(H5T_PERS_HARD, "ldbl_ushort", native_ldouble, native_ushort,
H5T__conv_ldouble_ushort);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_ushort", native_float16, native_ushort,
+ H5T__conv__Float16_ushort);
+#endif
/* From floats to int */
status |= H5T__register_int(H5T_PERS_HARD, "flt_int", native_float, native_int, H5T__conv_float_int);
status |= H5T__register_int(H5T_PERS_HARD, "dbl_int", native_double, native_int, H5T__conv_double_int);
status |= H5T__register_int(H5T_PERS_HARD, "ldbl_int", native_ldouble, native_int, H5T__conv_ldouble_int);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "flt16_int", native_float16, native_int, H5T__conv__Float16_int);
+#endif
/* From floats to unsigned int */
status |= H5T__register_int(H5T_PERS_HARD, "flt_uint", native_float, native_uint, H5T__conv_float_uint);
status |= H5T__register_int(H5T_PERS_HARD, "dbl_uint", native_double, native_uint, H5T__conv_double_uint);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_uint", native_ldouble, native_uint, H5T__conv_ldouble_uint);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "flt16_uint", native_float16, native_uint, H5T__conv__Float16_uint);
+#endif
/* From floats to long */
status |= H5T__register_int(H5T_PERS_HARD, "flt_long", native_float, native_long, H5T__conv_float_long);
status |= H5T__register_int(H5T_PERS_HARD, "dbl_long", native_double, native_long, H5T__conv_double_long);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_long", native_ldouble, native_long, H5T__conv_ldouble_long);
+#ifdef H5_HAVE__FLOAT16
+ status |=
+ H5T__register_int(H5T_PERS_HARD, "flt16_long", native_float16, native_long, H5T__conv__Float16_long);
+#endif
/* From floats to unsigned long */
status |=
@@ -1346,6 +1523,10 @@ H5T_init(void)
H5T__register_int(H5T_PERS_HARD, "dbl_ulong", native_double, native_ulong, H5T__conv_double_ulong);
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_ulong", native_ldouble, native_ulong, H5T__conv_ldouble_ulong);
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_ulong", native_float16, native_ulong,
+ H5T__conv__Float16_ulong);
+#endif
/* From floats to long long */
status |=
@@ -1356,6 +1537,10 @@ H5T_init(void)
status |=
H5T__register_int(H5T_PERS_HARD, "ldbl_llong", native_ldouble, native_llong, H5T__conv_ldouble_llong);
#endif /* H5T_CONV_INTERNAL_LDOUBLE_LLONG */
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_llong", native_float16, native_llong,
+ H5T__conv__Float16_llong);
+#endif
/* From floats to unsigned long long */
status |=
@@ -1366,6 +1551,10 @@ H5T_init(void)
status |= H5T__register_int(H5T_PERS_HARD, "ldbl_ullong", native_ldouble, native_ullong,
H5T__conv_ldouble_ullong);
#endif /* H5T_CONV_INTERNAL_LDOUBLE_ULLONG */
+#ifdef H5_HAVE__FLOAT16
+ status |= H5T__register_int(H5T_PERS_HARD, "flt16_ullong", native_float16, native_ullong,
+ H5T__conv__Float16_ullong);
+#endif
/*
* The special no-op conversion is the fastest, so we list it last. The
@@ -1546,99 +1735,102 @@ H5T_top_term_package(void)
/* Reset all the datatype IDs */
if (H5T_IEEE_F32BE_g > 0) {
- H5T_IEEE_F32BE_g = FAIL;
- H5T_IEEE_F32LE_g = FAIL;
- H5T_IEEE_F64BE_g = FAIL;
- H5T_IEEE_F64LE_g = FAIL;
-
- H5T_STD_I8BE_g = FAIL;
- H5T_STD_I8LE_g = FAIL;
- H5T_STD_I16BE_g = FAIL;
- H5T_STD_I16LE_g = FAIL;
- H5T_STD_I32BE_g = FAIL;
- H5T_STD_I32LE_g = FAIL;
- H5T_STD_I64BE_g = FAIL;
- H5T_STD_I64LE_g = FAIL;
- H5T_STD_U8BE_g = FAIL;
- H5T_STD_U8LE_g = FAIL;
- H5T_STD_U16BE_g = FAIL;
- H5T_STD_U16LE_g = FAIL;
- H5T_STD_U32BE_g = FAIL;
- H5T_STD_U32LE_g = FAIL;
- H5T_STD_U64BE_g = FAIL;
- H5T_STD_U64LE_g = FAIL;
- H5T_STD_B8BE_g = FAIL;
- H5T_STD_B8LE_g = FAIL;
- H5T_STD_B16BE_g = FAIL;
- H5T_STD_B16LE_g = FAIL;
- H5T_STD_B32BE_g = FAIL;
- H5T_STD_B32LE_g = FAIL;
- H5T_STD_B64BE_g = FAIL;
- H5T_STD_B64LE_g = FAIL;
- H5T_STD_REF_OBJ_g = FAIL;
- H5T_STD_REF_DSETREG_g = FAIL;
- H5T_STD_REF_g = FAIL;
-
- H5T_UNIX_D32BE_g = FAIL;
- H5T_UNIX_D32LE_g = FAIL;
- H5T_UNIX_D64BE_g = FAIL;
- H5T_UNIX_D64LE_g = FAIL;
-
- H5T_C_S1_g = FAIL;
-
- H5T_FORTRAN_S1_g = FAIL;
-
- H5T_NATIVE_SCHAR_g = FAIL;
- H5T_NATIVE_UCHAR_g = FAIL;
- H5T_NATIVE_SHORT_g = FAIL;
- H5T_NATIVE_USHORT_g = FAIL;
- H5T_NATIVE_INT_g = FAIL;
- H5T_NATIVE_UINT_g = FAIL;
- H5T_NATIVE_LONG_g = FAIL;
- H5T_NATIVE_ULONG_g = FAIL;
- H5T_NATIVE_LLONG_g = FAIL;
- H5T_NATIVE_ULLONG_g = FAIL;
- H5T_NATIVE_FLOAT_g = FAIL;
- H5T_NATIVE_DOUBLE_g = FAIL;
- H5T_NATIVE_LDOUBLE_g = FAIL;
- H5T_NATIVE_B8_g = FAIL;
- H5T_NATIVE_B16_g = FAIL;
- H5T_NATIVE_B32_g = FAIL;
- H5T_NATIVE_B64_g = FAIL;
- H5T_NATIVE_OPAQUE_g = FAIL;
- H5T_NATIVE_HADDR_g = FAIL;
- H5T_NATIVE_HSIZE_g = FAIL;
- H5T_NATIVE_HSSIZE_g = FAIL;
- H5T_NATIVE_HERR_g = FAIL;
- H5T_NATIVE_HBOOL_g = FAIL;
-
- H5T_NATIVE_INT8_g = FAIL;
- H5T_NATIVE_UINT8_g = FAIL;
- H5T_NATIVE_INT_LEAST8_g = FAIL;
- H5T_NATIVE_UINT_LEAST8_g = FAIL;
- H5T_NATIVE_INT_FAST8_g = FAIL;
- H5T_NATIVE_UINT_FAST8_g = FAIL;
-
- H5T_NATIVE_INT16_g = FAIL;
- H5T_NATIVE_UINT16_g = FAIL;
- H5T_NATIVE_INT_LEAST16_g = FAIL;
- H5T_NATIVE_UINT_LEAST16_g = FAIL;
- H5T_NATIVE_INT_FAST16_g = FAIL;
- H5T_NATIVE_UINT_FAST16_g = FAIL;
-
- H5T_NATIVE_INT32_g = FAIL;
- H5T_NATIVE_UINT32_g = FAIL;
- H5T_NATIVE_INT_LEAST32_g = FAIL;
- H5T_NATIVE_UINT_LEAST32_g = FAIL;
- H5T_NATIVE_INT_FAST32_g = FAIL;
- H5T_NATIVE_UINT_FAST32_g = FAIL;
-
- H5T_NATIVE_INT64_g = FAIL;
- H5T_NATIVE_UINT64_g = FAIL;
- H5T_NATIVE_INT_LEAST64_g = FAIL;
- H5T_NATIVE_UINT_LEAST64_g = FAIL;
- H5T_NATIVE_INT_FAST64_g = FAIL;
- H5T_NATIVE_UINT_FAST64_g = FAIL;
+ H5T_IEEE_F16BE_g = H5I_INVALID_HID;
+ H5T_IEEE_F16LE_g = H5I_INVALID_HID;
+ H5T_IEEE_F32BE_g = H5I_INVALID_HID;
+ H5T_IEEE_F32LE_g = H5I_INVALID_HID;
+ H5T_IEEE_F64BE_g = H5I_INVALID_HID;
+ H5T_IEEE_F64LE_g = H5I_INVALID_HID;
+
+ H5T_STD_I8BE_g = H5I_INVALID_HID;
+ H5T_STD_I8LE_g = H5I_INVALID_HID;
+ H5T_STD_I16BE_g = H5I_INVALID_HID;
+ H5T_STD_I16LE_g = H5I_INVALID_HID;
+ H5T_STD_I32BE_g = H5I_INVALID_HID;
+ H5T_STD_I32LE_g = H5I_INVALID_HID;
+ H5T_STD_I64BE_g = H5I_INVALID_HID;
+ H5T_STD_I64LE_g = H5I_INVALID_HID;
+ H5T_STD_U8BE_g = H5I_INVALID_HID;
+ H5T_STD_U8LE_g = H5I_INVALID_HID;
+ H5T_STD_U16BE_g = H5I_INVALID_HID;
+ H5T_STD_U16LE_g = H5I_INVALID_HID;
+ H5T_STD_U32BE_g = H5I_INVALID_HID;
+ H5T_STD_U32LE_g = H5I_INVALID_HID;
+ H5T_STD_U64BE_g = H5I_INVALID_HID;
+ H5T_STD_U64LE_g = H5I_INVALID_HID;
+ H5T_STD_B8BE_g = H5I_INVALID_HID;
+ H5T_STD_B8LE_g = H5I_INVALID_HID;
+ H5T_STD_B16BE_g = H5I_INVALID_HID;
+ H5T_STD_B16LE_g = H5I_INVALID_HID;
+ H5T_STD_B32BE_g = H5I_INVALID_HID;
+ H5T_STD_B32LE_g = H5I_INVALID_HID;
+ H5T_STD_B64BE_g = H5I_INVALID_HID;
+ H5T_STD_B64LE_g = H5I_INVALID_HID;
+ H5T_STD_REF_OBJ_g = H5I_INVALID_HID;
+ H5T_STD_REF_DSETREG_g = H5I_INVALID_HID;
+ H5T_STD_REF_g = H5I_INVALID_HID;
+
+ H5T_UNIX_D32BE_g = H5I_INVALID_HID;
+ H5T_UNIX_D32LE_g = H5I_INVALID_HID;
+ H5T_UNIX_D64BE_g = H5I_INVALID_HID;
+ H5T_UNIX_D64LE_g = H5I_INVALID_HID;
+
+ H5T_C_S1_g = H5I_INVALID_HID;
+
+ H5T_FORTRAN_S1_g = H5I_INVALID_HID;
+
+ H5T_NATIVE_SCHAR_g = H5I_INVALID_HID;
+ H5T_NATIVE_UCHAR_g = H5I_INVALID_HID;
+ H5T_NATIVE_SHORT_g = H5I_INVALID_HID;
+ H5T_NATIVE_USHORT_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_g = H5I_INVALID_HID;
+ H5T_NATIVE_LONG_g = H5I_INVALID_HID;
+ H5T_NATIVE_ULONG_g = H5I_INVALID_HID;
+ H5T_NATIVE_LLONG_g = H5I_INVALID_HID;
+ H5T_NATIVE_ULLONG_g = H5I_INVALID_HID;
+ H5T_NATIVE_FLOAT16_g = H5I_INVALID_HID;
+ H5T_NATIVE_FLOAT_g = H5I_INVALID_HID;
+ H5T_NATIVE_DOUBLE_g = H5I_INVALID_HID;
+ H5T_NATIVE_LDOUBLE_g = H5I_INVALID_HID;
+ H5T_NATIVE_B8_g = H5I_INVALID_HID;
+ H5T_NATIVE_B16_g = H5I_INVALID_HID;
+ H5T_NATIVE_B32_g = H5I_INVALID_HID;
+ H5T_NATIVE_B64_g = H5I_INVALID_HID;
+ H5T_NATIVE_OPAQUE_g = H5I_INVALID_HID;
+ H5T_NATIVE_HADDR_g = H5I_INVALID_HID;
+ H5T_NATIVE_HSIZE_g = H5I_INVALID_HID;
+ H5T_NATIVE_HSSIZE_g = H5I_INVALID_HID;
+ H5T_NATIVE_HERR_g = H5I_INVALID_HID;
+ H5T_NATIVE_HBOOL_g = H5I_INVALID_HID;
+
+ H5T_NATIVE_INT8_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT8_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_LEAST8_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_LEAST8_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_FAST8_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_FAST8_g = H5I_INVALID_HID;
+
+ H5T_NATIVE_INT16_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT16_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_LEAST16_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_LEAST16_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_FAST16_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_FAST16_g = H5I_INVALID_HID;
+
+ H5T_NATIVE_INT32_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT32_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_LEAST32_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_LEAST32_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_FAST32_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_FAST32_g = H5I_INVALID_HID;
+
+ H5T_NATIVE_INT64_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT64_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_LEAST64_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_LEAST64_g = H5I_INVALID_HID;
+ H5T_NATIVE_INT_FAST64_g = H5I_INVALID_HID;
+ H5T_NATIVE_UINT_FAST64_g = H5I_INVALID_HID;
n++;
} /* end if */