Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,8 @@ set(TARGET_MKALIAS "mkalias")
set(TARGET_LIBCOMMON_OBJ "common")
set(TARGET_LIBARRAYMAP_OBJ "arraymap")
set(TARGET_PSHA_OBJ "psha_obj")
set(TARGET_TESTERUTIL_OBJ "testerutil_obj")
set(TARGET_QTESTERUTIL_OBJ "qtesterutil_obj")

# Function used to add an executable that is executed on host
function(add_host_executable TARGETNAME)
Expand All @@ -276,7 +278,7 @@ endfunction()

function(host_target_AAVPCS_definitions TARGETNAME)
if (NOT CMAKE_CROSSCOMPILING)
target_compile_definitions(${TARGETNAME} PRIVATE ENABLE_AAVPCS=1)
# target_compile_definitions(${TARGETNAME} PRIVATE ENABLE_AAVPCS=1)
endif()
endfunction()

Expand Down
26 changes: 26 additions & 0 deletions src/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,29 @@ else()
target_include_directories(test_psha_capi PRIVATE ${SLEEF_OPENSSL_INCLUDE_DIR})
add_test(NAME test_psha_capi COMMAND test_psha_capi)
endif()

# Target TARGET_TESTERUTIL_OBJ
add_library(${TARGET_TESTERUTIL_OBJ} OBJECT testerutil.c)
target_compile_definitions(${TARGET_TESTERUTIL_OBJ} PRIVATE ${COMMON_TARGET_DEFINITIONS})
if(LIB_MPFR)
target_compile_definitions(${TARGET_TESTERUTIL_OBJ} PRIVATE USEMPFR=1)
target_link_libraries(${TARGET_TESTERUTIL_OBJ} ${LIB_MPFR} ${LIBGMP})
endif()
if (MPFR_INCLUDE_DIR)
target_include_directories(${TARGET_TESTERUTIL_OBJ} PRIVATE ${MPFR_INCLUDE_DIR})
endif()

# Target TARGET_QTESTERUTIL_OBJ
add_library(${TARGET_QTESTERUTIL_OBJ} OBJECT qtesterutil.c)
target_compile_definitions(${TARGET_QTESTERUTIL_OBJ} PRIVATE ${COMMON_TARGET_DEFINITIONS})
if(LIB_MPFR)
target_compile_definitions(${TARGET_QTESTERUTIL_OBJ} PRIVATE USEMPFR=1)
target_link_libraries(${TARGET_QTESTERUTIL_OBJ} ${LIB_MPFR} ${LIBGMP})
endif()
if (MPFR_INCLUDE_DIR)
target_include_directories(${TARGET_QTESTERUTIL_OBJ} PRIVATE ${MPFR_INCLUDE_DIR})
endif()
if(COMPILER_SUPPORTS_QUADMATH)
target_link_libraries(${TARGET_QTESTERUTIL_OBJ} "-lquadmath")
target_compile_definitions(${TARGET_QTESTERUTIL_OBJ} PRIVATE ENABLEFLOAT128=1)
endif()
92 changes: 0 additions & 92 deletions src/common/f128util.h

This file was deleted.

64 changes: 12 additions & 52 deletions src/quad-tester/qtesterutil.c → src/common/qtesterutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
#include <mpfr.h>
#endif

#ifdef ENABLEFLOAT128
#include <quadmath.h>
#endif

#if defined(__MINGW32__) || defined(__MINGW64__) || defined(_MSC_VER)
#define STDIN_FILENO 0
#else
Expand All @@ -42,33 +46,6 @@

//

int readln(int fd, char *buf, int cnt) {
int i, rcnt = 0;

if (cnt < 1) return -1;

while(cnt >= 2) {
i = read(fd, buf, 1);
if (i != 1) return i;

if (*buf == '\n') break;

rcnt++;
buf++;
cnt--;
}

*++buf = '\0';
rcnt++;
return rcnt;
}

int startsWith(char *str, char *prefix) {
return strncmp(str, prefix, strlen(prefix)) == 0;
}

//

xuint128 xu(uint64_t h, uint64_t l) {
xuint128 r = { .l = l, .h = h };
return r;
Expand Down Expand Up @@ -150,31 +127,6 @@ int isnanf128(Sleef_quad a) {

//

static uint64_t xseed;

uint64_t xrand() {
uint64_t u = xseed;
xseed = xseed * UINT64_C(6364136223846793005) + 1;
u = (u & ((~UINT64_C(0)) << 32)) | (xseed >> 32);
xseed = xseed * UINT64_C(6364136223846793005) + 1;
return u;
}

void xsrand(uint64_t s) {
xseed = s;
xrand();
xrand();
xrand();
}

void memrand(void *p, int size) {
uint64_t *q = (uint64_t *)p;
int i;
for(i=0;i<size;i+=8) *q++ = xrand();
uint8_t *r = (uint8_t *)q;
for(;i<size;i++) *r++ = xrand() & 0xff;
}

Sleef_quad rndf128(Sleef_quad min, Sleef_quad max, int setSignRandomly) {
cnv_t cmin = { .q = min }, cmax = { .q = max }, c;
do {
Expand Down Expand Up @@ -581,6 +533,14 @@ char *sprintf128(Sleef_quad q) {
return ret;
}

#ifdef QUADMATH_H
void printf128(Sleef_quad f) {
char s[128];
quadmath_snprintf(s, 120, "%.50Qg", f);
printf("%s", s);
}
#endif

double cast_d_q(Sleef_quad q) {
mpfr_t fr;
mpfr_inits(fr, NULL);
Expand Down
23 changes: 5 additions & 18 deletions src/quad-tester/qtesterutil.h → src/common/qtesterutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
// http://www.boost.org/LICENSE_1_0.txt)

#include "quaddef.h"
#include "testerutil.h"

typedef struct {
#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
Expand Down Expand Up @@ -33,24 +34,6 @@ int isinff128(Sleef_quad a);
int isnonnumberf128(Sleef_quad a);
int isnanf128(Sleef_quad a);

static double u2d(uint64_t u) {
union {
double f;
uint64_t i;
} tmp;
tmp.i = u;
return tmp.f;
}

static uint64_t d2u(double d) {
union {
double f;
uint64_t i;
} tmp;
tmp.f = d;
return tmp.i;
}

#ifdef USEMPFR
void mpfr_set_f128(mpfr_t frx, Sleef_quad a, mpfr_rnd_t rnd);
Sleef_quad mpfr_get_f128(mpfr_t m, mpfr_rnd_t rnd);
Expand All @@ -59,6 +42,10 @@ double countULPf128(Sleef_quad d, mpfr_t c, int checkNegZero);
char *sprintfr(mpfr_t fr);
char *sprintf128(Sleef_quad x);

#ifdef QUADMATH_H
void printf128(Sleef_quad f);
#endif

double cast_d_q(Sleef_quad q);
Sleef_quad cast_q_str(const char *s);
Sleef_quad cast_q_str_hex(const char *s);
Expand Down
20 changes: 14 additions & 6 deletions src/libm-tester/testerutil.c → src/common/testerutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
#define POSITIVE_INFINITYf ((float)INFINITY)
#define NEGATIVE_INFINITYf (-(float)INFINITY)

int isnumber(double x) { return !isinf(x) && !isnan(x); }
int xisnumber(double x) { return !isinf(x) && !isnan(x); }
int isPlusZero(double x) { return x == 0 && copysign(1, x) == 1; }
int isMinusZero(double x) { return x == 0 && copysign(1, x) == -1; }
double sign(double d) { return d < 0 ? -1 : 1; }
Expand Down Expand Up @@ -83,21 +83,29 @@ int readln(int fd, char *buf, int cnt) {
static uint64_t xseed;

uint64_t xrand() {
uint64_t u = xseed;
xseed = xseed * UINT64_C(6364136223846793005) + 1;
return xseed;
u = (u & ((~UINT64_C(0)) << 32)) | (xseed >> 32);
xseed = xseed * UINT64_C(6364136223846793005) + 1;
return u;
}

void xsrand(uint64_t s) {
xseed = s;
xrand();
xrand();
xrand();
}

// Fill memory with random bits
void memrand(void *p, int size) {
uint64_t *q = (uint64_t *)p;
int i;
for(i=0;i<size/8;i++) *q++ = xrand();
for(i=0;i<size;i+=8) *q++ = xrand();
uint8_t *r = (uint8_t *)q;
for(i *= 8;i<size;i++) *r++ = xrand() & 0xff;
for(;i<size;i++) *r++ = xrand() & 0xff;
}

void xsrand(uint64_t s) { xseed = s; }

//

#ifdef USEMPFR
Expand Down
2 changes: 1 addition & 1 deletion src/libm-tester/testerutil.h → src/common/testerutil.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
extern int enableFlushToZero;
double flushToZero(double y);

int isnumber(double x);
int xisnumber(double x);
int isPlusZero(double x);
int isMinusZero(double x);
int xisnan(double x);
Expand Down
Loading
Loading