#ifndef COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PROFILE_H_
#define COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PROFILE_H_
#include "libc/intrin/safemacros.internal.h"
#include "libc/log/log.h"
#include "libc/nexgen32e/bench.h"
#include "libc/nexgen32e/rdtsc.h"
#if 1

#define START() \
  {             \
    volatile uint64_t Time = __startbench()
#define STOP(x)                                      \
  fprintf(stderr, "PROFILE %,10ldc %s\n",            \
          unsignedsubtract(__endbench(), Time), #x); \
  }

#define PROFILE(x) \
  ({               \
    typeof(x) Res; \
    START();       \
    Res = (x);     \
    STOP(x);       \
    Res;           \
  })
#define PROFILS(x) \
  do {             \
    START();       \
    x;             \
    STOP(x);       \
  } while (0)
#define PRINT() \
  fprintf(stderr, "PRINT %s called by %s\n", __FUNCTION__, GetCallerName(0))

#else

#define PRINT()    ((void)0)
#define PROFILE(x) x
#define PROFILS(x) x
#define START()    ((void)0)
#define STOP(x)    ((void)0)

#endif
#endif /* COSMOPOLITAN_THIRD_PARTY_MBEDTLS_PROFILE_H_ */