1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef DFP_UTILS_H
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define DFP_UTILS_H
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <stddef.h>      /* size_t */
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include <stdio.h>       /* printf */
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* convinience macros to print DFP values to avoid linking libdfp to
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant   DFP testcases */
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define DFP_VAL_PRINT(op, type)                                         \
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  {                                                                     \
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    size_t n = sizeof(type);                                            \
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    if (n == 4)                                                         \
14712522cfd8f61321b4f197ec0de02b0146afb5a5Howard Hinnant      printf("%x", *((unsigned int *) &op));                            \
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    else if (n == 8)                                                    \
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      printf("%lx", *((unsigned long *) &op));                          \
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    else                                                                \
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      printf("%lx%08lx", *((unsigned long *) &op),                      \
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant             *(((unsigned long *) &op) + 1));                           \
2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow  }
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define DFP_BINOP_PRINT(op1, op2, result, type, op, cc)                 \
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  {                                                                     \
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    DFP_VAL_PRINT(op1, type);                                           \
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    printf(" "op" ");                                                   \
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    DFP_VAL_PRINT(op2, type);                                           \
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    printf(" = ");                                                      \
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    DFP_VAL_PRINT(result, type);                                        \
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    printf(" cc = %d\n", cc);                                           \
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  }
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif /* DFP_UTILS_H */
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant