Blame src/logging.c

Packit Service 2e9770
/* logging.c -- "Dummy" functions logging calls to real mpc functions.
Packit Service 2e9770
Packit Service 2e9770
Copyright (C) 2011 INRIA
Packit Service 2e9770
Packit Service 2e9770
This file is part of GNU MPC.
Packit Service 2e9770
Packit Service 2e9770
GNU MPC is free software; you can redistribute it and/or modify it under
Packit Service 2e9770
the terms of the GNU Lesser General Public License as published by the
Packit Service 2e9770
Free Software Foundation; either version 3 of the License, or (at your
Packit Service 2e9770
option) any later version.
Packit Service 2e9770
Packit Service 2e9770
GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
Packit Service 2e9770
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
Packit Service 2e9770
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
Packit Service 2e9770
more details.
Packit Service 2e9770
Packit Service 2e9770
You should have received a copy of the GNU Lesser General Public License
Packit Service 2e9770
along with this program. If not, see http://www.gnu.org/licenses/ .
Packit Service 2e9770
*/
Packit Service 2e9770
Packit Service 2e9770
#include "config.h"
Packit Service 2e9770
#include <stdio.h>
Packit Service 2e9770
Packit Service 2e9770
#ifdef HAVE_INTTYPES_H
Packit Service 2e9770
#include <inttypes.h>
Packit Service 2e9770
#endif
Packit Service 2e9770
#ifdef HAVE_STDINT_H
Packit Service 2e9770
#include <stdint.h>
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
#define __MPC_LIBRARY_BUILD
Packit Service 2e9770
   /* to indicate we are inside the library build; needed here since mpc-log.h
Packit Service 2e9770
      includes mpc.h and not mpc-impl.h */
Packit Service 2e9770
#include "mpc-log.h"
Packit Service 2e9770
Packit Service 2e9770
#ifdef HAVE_DLFCN_H
Packit Service 2e9770
#include <dlfcn.h>
Packit Service 2e9770
#endif
Packit Service 2e9770
Packit Service 2e9770
typedef int (*c_c_func_ptr) (mpc_ptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
typedef int (*c_cc_func_ptr) (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
typedef int (*c_ccc_func_ptr) (mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t);
Packit Service 2e9770
typedef int (*cc_c_func_ptr) (mpc_ptr, mpc_ptr, mpc_srcptr, mpc_rnd_t, mpc_rnd_t);
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_OUT_PREC(z) \
Packit Service 2e9770
   do { \
Packit Service 2e9770
      fprintf (stderr, " %li %li", (long) mpfr_get_prec (mpc_realref (z)),  \
Packit Service 2e9770
                                (long) mpfr_get_prec (mpc_imagref (z))); \
Packit Service 2e9770
   } while (0);
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_OUT_C(z) \
Packit Service 2e9770
   do { \
Packit Service 2e9770
      MPC_LOGGING_OUT_PREC (z); \
Packit Service 2e9770
      fprintf (stderr, " "); \
Packit Service 2e9770
      mpc_out_str (stderr, 16, 0, z, MPC_RNDNN); \
Packit Service 2e9770
   } while (0);
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_FUNC_TYPE(funcname, type) \
Packit Service 2e9770
   do { \
Packit Service 2e9770
      fprintf (stderr, "mpc_"#funcname" "#type); \
Packit Service 2e9770
   } while (0);
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_C_C(funcname) \
Packit Service 2e9770
__MPC_DECLSPEC int mpc_log_##funcname (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd) \
Packit Service 2e9770
{ \
Packit Service 2e9770
   static c_c_func_ptr func = NULL; \
Packit Service 2e9770
   if (func == NULL) \
Packit Service 2e9770
      func = (c_c_func_ptr) (intptr_t) dlsym (NULL, "mpc_"#funcname); \
Packit Service 2e9770
   MPC_LOGGING_FUNC_TYPE (funcname, c_c); \
Packit Service 2e9770
   MPC_LOGGING_OUT_PREC (rop); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op); \
Packit Service 2e9770
   fprintf (stderr, "\n"); \
Packit Service 2e9770
   return func (rop, op, rnd); \
Packit Service 2e9770
}
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_C_CC(funcname) \
Packit Service 2e9770
__MPC_DECLSPEC int mpc_log_##funcname (mpc_ptr rop, mpc_srcptr op1, mpc_srcptr op2, mpc_rnd_t rnd) \
Packit Service 2e9770
{ \
Packit Service 2e9770
   static c_cc_func_ptr func = NULL; \
Packit Service 2e9770
   if (func == NULL) \
Packit Service 2e9770
      func = (c_cc_func_ptr) (intptr_t) dlsym (NULL, "mpc_"#funcname); \
Packit Service 2e9770
   MPC_LOGGING_FUNC_TYPE (funcname, c_cc); \
Packit Service 2e9770
   MPC_LOGGING_OUT_PREC (rop); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op1); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op2); \
Packit Service 2e9770
   fprintf (stderr, "\n"); \
Packit Service 2e9770
   return func (rop, op1, op2, rnd); \
Packit Service 2e9770
}
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_C_CCC(funcname) \
Packit Service 2e9770
__MPC_DECLSPEC int mpc_log_##funcname (mpc_ptr rop, mpc_srcptr op1, mpc_srcptr op2, mpc_srcptr op3, mpc_rnd_t rnd) \
Packit Service 2e9770
{ \
Packit Service 2e9770
   static c_ccc_func_ptr func = NULL; \
Packit Service 2e9770
   if (func == NULL) \
Packit Service 2e9770
      func = (c_ccc_func_ptr) (intptr_t) dlsym (NULL, "mpc_"#funcname); \
Packit Service 2e9770
   MPC_LOGGING_FUNC_TYPE (funcname, c_ccc); \
Packit Service 2e9770
   MPC_LOGGING_OUT_PREC (rop); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op1); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op2); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op3); \
Packit Service 2e9770
   fprintf (stderr, "\n"); \
Packit Service 2e9770
   return func (rop, op1, op2, op3, rnd); \
Packit Service 2e9770
}
Packit Service 2e9770
Packit Service 2e9770
#define MPC_LOGGING_CC_C(funcname) \
Packit Service 2e9770
__MPC_DECLSPEC int mpc_log_##funcname (mpc_ptr rop1, mpc_ptr rop2, mpc_srcptr op, mpc_rnd_t rnd1, mpc_rnd_t rnd2) \
Packit Service 2e9770
{ \
Packit Service 2e9770
   static cc_c_func_ptr func = NULL; \
Packit Service 2e9770
   if (func == NULL) \
Packit Service 2e9770
      func = (cc_c_func_ptr) (intptr_t) dlsym (NULL, "mpc_"#funcname); \
Packit Service 2e9770
   MPC_LOGGING_FUNC_TYPE (funcname, cc_c); \
Packit Service 2e9770
   MPC_LOGGING_OUT_PREC (rop1); \
Packit Service 2e9770
   MPC_LOGGING_OUT_PREC (rop2); \
Packit Service 2e9770
   MPC_LOGGING_OUT_C (op); \
Packit Service 2e9770
   fprintf (stderr, "\n"); \
Packit Service 2e9770
   return func (rop1, rop2, op, rnd1, rnd2); \
Packit Service 2e9770
}
Packit Service 2e9770
Packit Service 2e9770
MPC_LOGGING_C_C (sqr)
Packit Service 2e9770
MPC_LOGGING_C_C (conj)
Packit Service 2e9770
MPC_LOGGING_C_C (neg)
Packit Service 2e9770
MPC_LOGGING_C_C (sqrt)
Packit Service 2e9770
MPC_LOGGING_C_C (proj)
Packit Service 2e9770
MPC_LOGGING_C_C (exp)
Packit Service 2e9770
MPC_LOGGING_C_C (log)
Packit Service 2e9770
MPC_LOGGING_C_C (sin)
Packit Service 2e9770
MPC_LOGGING_C_C (cos)
Packit Service 2e9770
MPC_LOGGING_C_C (tan)
Packit Service 2e9770
MPC_LOGGING_C_C (sinh)
Packit Service 2e9770
MPC_LOGGING_C_C (cosh)
Packit Service 2e9770
MPC_LOGGING_C_C (tanh)
Packit Service 2e9770
MPC_LOGGING_C_C (asin)
Packit Service 2e9770
MPC_LOGGING_C_C (acos)
Packit Service 2e9770
MPC_LOGGING_C_C (atan)
Packit Service 2e9770
MPC_LOGGING_C_C (asinh)
Packit Service 2e9770
MPC_LOGGING_C_C (acosh)
Packit Service 2e9770
MPC_LOGGING_C_C (atanh)
Packit Service 2e9770
Packit Service 2e9770
MPC_LOGGING_C_CC (add)
Packit Service 2e9770
MPC_LOGGING_C_CC (sub)
Packit Service 2e9770
MPC_LOGGING_C_CC (mul)
Packit Service 2e9770
MPC_LOGGING_C_CC (div)
Packit Service 2e9770
MPC_LOGGING_C_CC (pow)
Packit Service 2e9770
Packit Service 2e9770
MPC_LOGGING_C_CCC (fma)
Packit Service 2e9770
Packit Service 2e9770
MPC_LOGGING_CC_C (sin_cos)