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