Petar Jovanovic 58c1c98db4 mips64: update tests for N32 ABI
Fix n32/n64 types mismatch in none, memcheck and helgrind tests.

BZ issue - #345763.

Contributed by:
  Dimitrije Nikolic, Aleksandar Rikalo, Tamara Vlahovic.
2018-06-14 17:40:08 +00:00

41 lines
1.7 KiB
C

#include <stdio.h>
#include "pub_core_basics.h"
/*
* Bits 18 (NAN2008) and 19 (ABS2008) are preset by hardware and may differ
* between platforms. Hence a macro to clear them before printing FCSR
* values.
*/
#define FCSR_NAN2008 1 << 18
#define FCSR_ABS2008 1 << 19
#define FLAGS_RM_MASK 0xFFFFFFFF & ~(FCSR_ABS2008 | FCSR_NAN2008)
#define CLEAR_PRESETBITS_FCSR(fcsr) (fcsr & FLAGS_RM_MASK)
int main ()
{
#if defined(__mips_hard_float)
RegWord out [] = {0, 0};
__asm__ volatile("cfc1 $a1, $31" "\n\t"
"dli $t0, 0x405ee0a3d70a3d71" "\n\t"
"dmtc1 $t0, $f0" "\n\t"
"ctc1 $zero, $31" "\n\t"
"round.w.d $f0, $f0" "\n\t"
"cfc1 $a2, $31" "\n\t"
"sd $a2, 0(%0)" "\n\t"
"dli $t0, 0x3ff0000000000000" "\n\t"
"dmtc1 $t0, $f0" "\n\t"
"ctc1 $zero, $31" "\n\t"
"round.w.d $f0, $f0" "\n\t"
"cfc1 $a2, $31" "\n\t"
"sd $a2, 8(%0)" "\n\t"
"ctc1 $a1, $31" "\n\t"
:
: "r" (out)
: "a1", "a2", "t0", "$f0"
);
printf("FCSR::1: 0x%" FMT_REGWORD "x, 2: 0x%" FMT_REGWORD "x\n",
CLEAR_PRESETBITS_FCSR(out[0]), CLEAR_PRESETBITS_FCSR(out[1]));
#endif
return 0;
}