+#define side_arg_dynamic_null(_attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_NULL, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_bool(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_BOOL, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .u = { \
+ .side_bool = !!(_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define side_arg_dynamic_u8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U8, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .u = { \
+ .side_u8 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_s8(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S8, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .u = { \
+ .side_s8 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_byte(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_BYTE, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .u = { \
+ .side_byte = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define side_arg_dynamic_string(_val, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_STRING, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .u = { \
+ .string = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define _side_arg_dynamic_u16(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_u16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_u32(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_u32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_u64(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_U64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_u64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+#define _side_arg_dynamic_s16(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_s16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_s32(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_s32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_s64(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_S64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_s64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_pointer(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_POINTER, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_pointer = (uintptr_t) (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_float_binary16(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY16, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_float_binary16 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_float_binary32(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY32, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_float_binary32 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_float_binary64(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY64, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_float_binary64 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+#define _side_arg_dynamic_float_binary128(_val, _byte_order, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY128, \
+ .u = { \
+ .side_basic = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .u = { \
+ .side_float_binary128 = (_val), \
+ }, \
+ }, \
+ }, \
+ }
+
+/* Host endian */
+#define side_arg_dynamic_u16(_val, _attr) _side_arg_dynamic_u16(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u32(_val, _attr) _side_arg_dynamic_u32(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u64(_val, _attr) _side_arg_dynamic_u64(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s16(_val, _attr) _side_arg_dynamic_s16(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s32(_val, _attr) _side_arg_dynamic_s32(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s64(_val, _attr) _side_arg_dynamic_s64(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_pointer(_val, _attr) _side_arg_dynamic_pointer(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary16(_val, _attr) _side_arg_dynamic_float_binary16(_val, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary32(_val, _attr) _side_arg_dynamic_float_binary32(_val, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary64(_val, _attr) _side_arg_dynamic_float_binary64(_val, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary128(_val, _attr) _side_arg_dynamic_float_binary128(_val, SIDE_TYPE_FLOAT_WORD_ORDER_HOST, SIDE_PARAM(_attr))
+
+/* Little endian */
+#define side_arg_dynamic_u16_le(_val, _attr) _side_arg_dynamic_u16(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u32_le(_val, _attr) _side_arg_dynamic_u32(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u64_le(_val, _attr) _side_arg_dynamic_u64(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s16_le(_val, _attr) _side_arg_dynamic_s16(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s32_le(_val, _attr) _side_arg_dynamic_s32(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s64_le(_val, _attr) _side_arg_dynamic_s64(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_pointer_le(_val, _attr) _side_arg_dynamic_pointer(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary16_le(_val, _attr) _side_arg_dynamic_float_binary16(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary32_le(_val, _attr) _side_arg_dynamic_float_binary32(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary64_le(_val, _attr) _side_arg_dynamic_float_binary64(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary128_le(_val, _attr) _side_arg_dynamic_float_binary128(_val, SIDE_TYPE_BYTE_ORDER_LE, SIDE_PARAM(_attr))
+
+/* Big endian */
+#define side_arg_dynamic_u16_be(_val, _attr) _side_arg_dynamic_u16(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u32_be(_val, _attr) _side_arg_dynamic_u32(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_u64_be(_val, _attr) _side_arg_dynamic_u64(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s16_be(_val, _attr) _side_arg_dynamic_s16(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s32_be(_val, _attr) _side_arg_dynamic_s32(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_s64_be(_val, _attr) _side_arg_dynamic_s64(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_pointer_be(_val, _attr) _side_arg_dynamic_pointer(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary16_be(_val, _attr) _side_arg_dynamic_float_binary16(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary32_be(_val, _attr) _side_arg_dynamic_float_binary32(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary64_be(_val, _attr) _side_arg_dynamic_float_binary64(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+#define side_arg_dynamic_float_binary128_be(_val, _attr) _side_arg_dynamic_float_binary128(_val, SIDE_TYPE_BYTE_ORDER_BE, SIDE_PARAM(_attr))
+
+#define side_arg_dynamic_vla(_vla) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_VLA, \
+ .u = { \
+ .side_dynamic_vla = (_vla), \
+ }, \
+ }
+
+#define side_arg_dynamic_vla_visitor(_dynamic_vla_visitor, _ctx, _attr) \
+ { \
+ .dynamic_type = SIDE_DYNAMIC_TYPE_VLA_VISITOR, \
+ .u = { \
+ .side_dynamic_vla_visitor = { \
+ .app_ctx = _ctx, \
+ .visitor = _dynamic_vla_visitor, \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ }, \
+ }, \
+ }