// Copyright 2010 and onwards Google Inc.
// Author: Martin Thuresson
//
// Expose fast k8 implementation of math functions with the prefix
// "acml_".  Currently acml_log(), acml_exp(), and acmp_pow() have
// shown to have significantly better performance over glibc libm
// and atleast as good precision.
// https://wiki.corp.google.com/twiki/bin/view/Main/CompilerMathOptimization
//
// When build with --cpu=piii, acml_* will call the pure libm functions,
// avoiding the need to special case the calls.
//
// TODO(martint): Update glibc to match the libacml performance.

#ifndef THIRD_PARTY__OPEN64_LIBACML_MV__LIBACML_H_
#define THIRD_PARTY__OPEN64_LIBACML_MV__LIBACML_H_

#ifndef USE_LIBACML_IMPLEMENTATION
#define USE_LIBACML_IMPLEMENTATION defined(__x86_64__)
#endif

#if USE_LIBACML_IMPLEMENTATION
#include "third_party/open64_libacml_mv/inc/fn_macros.h"
#else
#include <math.h>
#endif

extern "C" {

#if USE_LIBACML_IMPLEMENTATION
// The k8 implementation of the math functions.
#define acml_exp_k8 FN_PROTOTYPE(exp)
#define acml_expf_k8 FN_PROTOTYPE(expf)
#define acml_log_k8 FN_PROTOTYPE(log)
#define acml_pow_k8 FN_PROTOTYPE(pow)
double acml_exp_k8(double x);
float acml_expf_k8(float x);
double acml_log_k8(double x);
double acml_pow_k8(double x, double y);
#endif

static inline double acml_exp(double x) {
#if USE_LIBACML_IMPLEMENTATION
  return acml_exp_k8(x);
#else
  return exp(x);
#endif
}

static inline float acml_expf(float x) {
#if USE_LIBACML_IMPLEMENTATION
  return acml_expf_k8(x);
#else
  return expf(x);
#endif
}

static inline double acml_log(double x) {
#if USE_LIBACML_IMPLEMENTATION
  return acml_log_k8(x);
#else
  return log(x);
#endif
}

static inline double acml_pow(double x, double y) {
#if USE_LIBACML_IMPLEMENTATION
  return acml_pow_k8(x, y);
#else
  return pow(x, y);
#endif
}

}

#endif  // THIRD_PARTY__OPEN64_LIBACML_MV__LIBACML_H_
