diff --git a/test_common/harness/fpcontrol.h b/test_common/harness/fpcontrol.h index 222aa2c4..12aba0a9 100644 --- a/test_common/harness/fpcontrol.h +++ b/test_common/harness/fpcontrol.h @@ -43,6 +43,8 @@ typedef int64_t FPU_mode_type; #elif defined(__PPC__) #include extern __thread fpu_control_t fpu_control; +#elif defined(__mips__) +#include "mips/m32c1.h" #endif // Set the reference hardware floating point unit to FTZ mode inline void ForceFTZ(FPU_mode_type *mode) @@ -65,6 +67,8 @@ inline void ForceFTZ(FPU_mode_type *mode) __asm__ volatile("mrs %0, fpcr" : "=r"(fpscr)); *mode = fpscr; __asm__ volatile("msr fpcr, %0" ::"r"(fpscr | (1U << 24))); +#elif defined(__mips__) + fpa_bissr(FPA_CSR_FS); #else #error ForceFTZ needs an implentation #endif @@ -91,6 +95,8 @@ inline void DisableFTZ(FPU_mode_type *mode) __asm__ volatile("mrs %0, fpcr" : "=r"(fpscr)); *mode = fpscr; __asm__ volatile("msr fpcr, %0" ::"r"(fpscr & ~(1U << 24))); +#elif defined(__mips__) + fpa_bicsr(FPA_CSR_FS); #else #error DisableFTZ needs an implentation #endif @@ -109,6 +115,8 @@ inline void RestoreFPState(FPU_mode_type *mode) // Add 64 bit support #elif defined(__aarch64__) __asm__ volatile("msr fpcr, %0" ::"r"(*mode)); +#elif defined(__mips__) + // Mips runs by default with DAZ=1 FTZ=1 #else #error RestoreFPState needs an implementation #endif diff --git a/test_common/harness/rounding_mode.cpp b/test_common/harness/rounding_mode.cpp index 1f531478..191c04d9 100644 --- a/test_common/harness/rounding_mode.cpp +++ b/test_common/harness/rounding_mode.cpp @@ -197,6 +197,8 @@ RoundingMode get_round(void) #include #elif defined(__PPC__) #include +#elif defined(__mips__) +#include "mips/m32c1.h" #endif void *FlushToZero(void) { @@ -219,6 +221,9 @@ void *FlushToZero(void) flags |= _FPU_MASK_NI; _FPU_SETCW(flags); return NULL; +#elif defined(__mips__) + fpa_bissr(FPA_CSR_FS); + return NULL; #else #error Unknown arch #endif @@ -247,6 +252,8 @@ void UnFlushToZero(void *p) _FPU_GETCW(flags); flags &= ~_FPU_MASK_NI; _FPU_SETCW(flags); +#elif defined(__mips__) + fpa_bicsr(FPA_CSR_FS); #else #error Unknown arch #endif diff --git a/test_common/harness/testHarness.cpp b/test_common/harness/testHarness.cpp index 3d743e71..3e5d7c95 100644 --- a/test_common/harness/testHarness.cpp +++ b/test_common/harness/testHarness.cpp @@ -1298,6 +1298,8 @@ void PrintArch(void) vlog("ARCH:\taarch64\n"); #elif defined(_WIN32) vlog("ARCH:\tWindows\n"); +#elif defined(__mips__) + vlog("ARCH:\tmips\n"); #else #error unknown arch #endif