uint32_t nr_attr;
uint32_t byte_order; /* enum side_type_byte_order */
union {
- union side_float_value float_value;
uint8_t side_bool;
uint8_t side_byte;
uint64_t string; /* const char * */
union side_integer_value value;
} side_integer;
+ struct {
+ struct side_type_float type;
+ union side_float_value value;
+ } side_float;
+
/* Compound types */
const struct side_arg_dynamic_event_struct *side_dynamic_struct;
struct {
_side_arg_dynamic_integer(SIDE_PTR_HOST, (uintptr_t) (_val), SIDE_DYNAMIC_TYPE_POINTER_HOST, false, _byte_order, \
SIDE_BITS_PER_LONG, SIDE_BITS_PER_LONG, SIDE_PARAM(_attr))
-#define _side_arg_dynamic_float_binary16(_val, _byte_order, _attr) \
+#define _side_arg_dynamic_float(_field, _val, _type, _byte_order, _float_size_bits, _attr) \
{ \
- .dynamic_type = SIDE_DYNAMIC_TYPE_FLOAT_BINARY16, \
+ .dynamic_type = _type, \
.u = { \
- .side_basic = { \
- .attr = _attr, \
- .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
- .byte_order = _byte_order, \
- .u = { \
- .float_value.side_float_binary16 = (_val), \
+ .side_float = { \
+ .type = { \
+ .attr = _attr, \
+ .nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
+ .byte_order = _byte_order, \
+ .float_size_bits = _float_size_bits, \
}, \
- }, \
- }, \
- }
-#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 = { \
- .float_value.side_float_binary32 = (_val), \
+ .value = { \
+ _field = (_val), \
}, \
}, \
}, \
}
+
+#define _side_arg_dynamic_float_binary16(_val, _byte_order, _attr) \
+ _side_arg_dynamic_float(.side_float_binary16, _val, SIDE_DYNAMIC_TYPE_FLOAT_BINARY16, _byte_order, 16, SIDE_PARAM(_attr))
+#define _side_arg_dynamic_float_binary32(_val, _byte_order, _attr) \
+ _side_arg_dynamic_float(.side_float_binary32, _val, SIDE_DYNAMIC_TYPE_FLOAT_BINARY32, _byte_order, 32, SIDE_PARAM(_attr))
#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 = { \
- .float_value.side_float_binary64 = (_val), \
- }, \
- }, \
- }, \
- }
+ _side_arg_dynamic_float(.side_float_binary64, _val, SIDE_DYNAMIC_TYPE_FLOAT_BINARY64, _byte_order, 64, SIDE_PARAM(_attr))
#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 = { \
- .float_value.side_float_binary128 = (_val), \
- }, \
- }, \
- }, \
- }
+ _side_arg_dynamic_float(.side_float_binary128, _val, SIDE_DYNAMIC_TYPE_FLOAT_BINARY128, _byte_order, 128, SIDE_PARAM(_attr))
/* Host endian */
#define side_arg_dynamic_u16(_val, _attr) _side_arg_dynamic_u16(_val, SIDE_TYPE_BYTE_ORDER_HOST, SIDE_PARAM(_attr))
case SIDE_TYPE_FLOAT_BINARY32:
case SIDE_TYPE_FLOAT_BINARY64:
case SIDE_TYPE_FLOAT_BINARY128:
- if (type_desc->u.side_basic.byte_order != SIDE_TYPE_FLOAT_WORD_ORDER_HOST)
+ if (type_desc->u.side_float.byte_order != SIDE_TYPE_FLOAT_WORD_ORDER_HOST)
return true;
else
return false;
case SIDE_DYNAMIC_TYPE_FLOAT_BINARY32:
case SIDE_DYNAMIC_TYPE_FLOAT_BINARY64:
case SIDE_DYNAMIC_TYPE_FLOAT_BINARY128:
- if (item->u.side_basic.byte_order != SIDE_TYPE_FLOAT_WORD_ORDER_HOST)
+ if (item->u.side_float.type.byte_order != SIDE_TYPE_FLOAT_WORD_ORDER_HOST)
return true;
else
return false;
}
static
-void tracer_print_basic_type_header(const struct side_type_description *type_desc)
-{
- print_attributes("attr", ":", type_desc->u.side_basic.attr, type_desc->u.side_basic.nr_attr);
- printf("%s", type_desc->u.side_basic.nr_attr ? ", " : "");
- printf("value: ");
-}
-
-static
-void tracer_print_integer_type_header(const struct side_type_description *type_desc)
+void tracer_print_type_header(const char *separator,
+ const struct side_attr *attr, uint32_t nr_attr)
{
- print_attributes("attr", ":", type_desc->u.side_integer.attr, type_desc->u.side_integer.nr_attr);
- printf("%s", type_desc->u.side_integer.nr_attr ? ", " : "");
- printf("value: ");
+ print_attributes("attr", separator, attr, nr_attr);
+ printf("%s", nr_attr ? ", " : "");
+ printf("value%s ", separator);
}
static
-void tracer_print_type_integer(enum side_type type, const struct side_type_description *type_desc, const struct side_arg_vec *item)
+void tracer_print_type_integer(const char *separator, enum side_type type,
+ const struct side_type_description *type_desc, const struct side_arg_vec *item)
{
enum tracer_display_base base;
union {
}
if (type_desc->u.side_integer.len_bits < 64)
v.v_unsigned &= (1ULL << type_desc->u.side_integer.len_bits) - 1;
- tracer_print_integer_type_header(type_desc);
+ tracer_print_type_header(separator, type_desc->u.side_integer.attr, type_desc->u.side_integer.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v.v_unsigned, type_desc->u.side_integer.len_bits);
printf("{ ");
switch (type) {
case SIDE_TYPE_BOOL:
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_basic.attr, type_desc->u.side_basic.nr_attr);
printf("%s", item->u.side_bool ? "true" : "false");
break;
case SIDE_TYPE_S16:
case SIDE_TYPE_S32:
case SIDE_TYPE_S64:
- tracer_print_type_integer(type, type_desc, item);
+ tracer_print_type_integer(":", type, type_desc, item);
break;
case SIDE_TYPE_POINTER32:
v = item->u.integer_value.side_u32;
if (type_to_host_reverse_bo(type_desc))
v = side_bswap_32(v);
- tracer_print_integer_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_integer.attr, type_desc->u.side_integer.nr_attr);
printf("0x%" PRIx32, v);
break;
}
v = item->u.integer_value.side_u64;
if (type_to_host_reverse_bo(type_desc))
v = side_bswap_64(v);
- tracer_print_integer_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_integer.attr, type_desc->u.side_integer.nr_attr);
printf("0x%" PRIx64, v);
break;
}
case SIDE_TYPE_BYTE:
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_basic.attr, type_desc->u.side_basic.nr_attr);
printf("0x%" PRIx8, item->u.side_byte);
break;
if (type_to_host_reverse_bo(type_desc))
float16.u = side_bswap_16(float16.u);
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_float.attr, type_desc->u.side_float.nr_attr);
printf("%g", (double) float16.f);
break;
#else
if (type_to_host_reverse_bo(type_desc))
float32.u = side_bswap_32(float32.u);
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_float.attr, type_desc->u.side_float.nr_attr);
printf("%g", (double) float32.f);
break;
#else
if (type_to_host_reverse_bo(type_desc))
float64.u = side_bswap_64(float64.u);
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_float.attr, type_desc->u.side_float.nr_attr);
printf("%g", (double) float64.f);
break;
#else
if (type_to_host_reverse_bo(type_desc))
side_bswap_128p(float128.arr);
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_float.attr, type_desc->u.side_float.nr_attr);
printf("%Lg", (long double) float128.f);
break;
#else
#endif
}
case SIDE_TYPE_STRING:
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_basic.attr, type_desc->u.side_basic.nr_attr);
printf("\"%s\"", (const char *)(uintptr_t) item->u.string);
break;
case SIDE_TYPE_STRUCT:
tracer_print_vla_fixint(type_desc, item);
break;
case SIDE_TYPE_DYNAMIC:
- tracer_print_basic_type_header(type_desc);
+ tracer_print_type_header(":", type_desc->u.side_basic.attr, type_desc->u.side_basic.nr_attr);
tracer_print_dynamic(&item->u.dynamic);
break;
default:
printf(" ]");
}
-static
-void tracer_print_dynamic_basic_type_header(const struct side_arg_dynamic_vec *item)
-{
- print_attributes("attr", "::", item->u.side_basic.attr, item->u.side_basic.nr_attr);
- printf("%s", item->u.side_basic.nr_attr ? ", " : "");
- printf("value:: ");
-}
-
-static
-void tracer_print_dynamic_integer_type_header(const struct side_arg_dynamic_vec *item)
-{
- print_attributes("attr", "::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
- printf("%s", item->u.side_integer.type.nr_attr ? ", " : "");
- printf("value:: ");
-}
-
static
void tracer_print_dynamic(const struct side_arg_dynamic_vec *item)
{
break;
}
-
printf("{ ");
switch (item->dynamic_type) {
case SIDE_DYNAMIC_TYPE_NULL:
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_basic.attr, item->u.side_basic.nr_attr);
printf("<NULL TYPE>");
break;
case SIDE_DYNAMIC_TYPE_BOOL:
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_basic.attr, item->u.side_basic.nr_attr);
printf("%s", item->u.side_basic.u.side_bool ? "true" : "false");
break;
case SIDE_DYNAMIC_TYPE_U8:
uint8_t v;
v = item->u.side_integer.value.side_u8;
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 8);
v = item->u.side_integer.value.side_u16;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_16(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 16);
v = item->u.side_integer.value.side_u32;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_32(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 32);
v = item->u.side_integer.value.side_u64;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_64(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 64);
int8_t v;
v = item->u.side_integer.value.side_s8;
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 8);
v = item->u.side_integer.value.side_s16;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_16(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 16);
v = item->u.side_integer.value.side_s32;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_32(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 32);
v = item->u.side_integer.value.side_s64;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_64(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
switch (base) {
case TRACER_DISPLAY_BASE_2:
print_integer_binary(v, 64);
break;
}
case SIDE_DYNAMIC_TYPE_BYTE:
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_basic.attr, item->u.side_basic.nr_attr);
printf("0x%" PRIx8, item->u.side_basic.u.side_byte);
break;
case SIDE_DYNAMIC_TYPE_POINTER32:
v = item->u.side_integer.value.side_u32;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_32(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
printf("0x%" PRIx32, v);
break;
}
v = item->u.side_integer.value.side_u64;
if (dynamic_type_to_host_reverse_bo(item))
v = side_bswap_64(v);
- tracer_print_dynamic_integer_type_header(item);
+ tracer_print_type_header("::", item->u.side_integer.type.attr, item->u.side_integer.type.nr_attr);
printf("0x%" PRIx64, v);
break;
}
_Float16 f;
uint16_t u;
} float16 = {
- .f = item->u.side_basic.u.float_value.side_float_binary16,
+ .f = item->u.side_float.value.side_float_binary16,
};
if (dynamic_type_to_host_reverse_bo(item))
float16.u = side_bswap_16(float16.u);
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_float.type.attr, item->u.side_float.type.nr_attr);
printf("%g", (double) float16.f);
break;
#else
_Float32 f;
uint32_t u;
} float32 = {
- .f = item->u.side_basic.u.float_value.side_float_binary32,
+ .f = item->u.side_float.value.side_float_binary32,
};
if (dynamic_type_to_host_reverse_bo(item))
float32.u = side_bswap_32(float32.u);
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_float.type.attr, item->u.side_float.type.nr_attr);
printf("%g", (double) float32.f);
break;
#else
_Float64 f;
uint64_t u;
} float64 = {
- .f = item->u.side_basic.u.float_value.side_float_binary64,
+ .f = item->u.side_float.value.side_float_binary64,
};
if (dynamic_type_to_host_reverse_bo(item))
float64.u = side_bswap_64(float64.u);
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_float.type.attr, item->u.side_float.type.nr_attr);
printf("%g", (double) float64.f);
break;
#else
_Float128 f;
char arr[16];
} float128 = {
- .f = item->u.side_basic.u.float_value.side_float_binary128,
+ .f = item->u.side_float.value.side_float_binary128,
};
if (dynamic_type_to_host_reverse_bo(item))
side_bswap_128p(float128.arr);
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_float.type.attr, item->u.side_float.type.nr_attr);
printf("%Lg", (long double) float128.f);
break;
#else
#endif
}
case SIDE_DYNAMIC_TYPE_STRING:
- tracer_print_dynamic_basic_type_header(item);
+ tracer_print_type_header("::", item->u.side_basic.attr, item->u.side_basic.nr_attr);
printf("\"%s\"", (const char *)(uintptr_t) item->u.side_basic.u.string);
break;
case SIDE_DYNAMIC_TYPE_STRUCT: