From: Mark Wielaard Date: Wed, 27 May 2026 18:03:47 +0000 (+0200) Subject: Add x86 ROUNDPS and ROUNDPD X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9ba67db1f3a0327d58eb01308fa4aba31bf6315e;p=thirdparty%2Fvalgrind.git Add x86 ROUNDPS and ROUNDPD This completes the ROUNDPS, ROUNDSS, ROUNDPD and ROUNDSD SSE4.1 support for x86. x86 already supported SSE 4.1 ROUNDSS and ROUNDSD instructions. Add ROUNDPS and ROUNDPD support in VEX/priv/guest_x86_toIR.c based on the amd64 implementation. Move the testcases from sse4-64.c to sse4-common.h and make them use XMMREG_DST instead of xmm11 (which isn't available on x86). Add testcase output for test_ROUNDPD_w_immediate_rounding, test_ROUNDPS_w_immediate_rounding, test_ROUNDPD_w_mxcsr_rounding and test_ROUNDPS_w_mxcsr_rounding to sse4-x86.stdout.exp. https://bugs.kde.org/show_bug.cgi?id=518220 --- diff --git a/NEWS b/NEWS index 5d79c0ad5..18c8a403f 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. 519613 Valgrind incorrectly unpacks the result of sys_port (port_getn) on error, leading to a ~60s wallclock time delay on every call 518217 Add PHMINPOSUW SSE4.1 support for x86 +518220 Add ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD SSE4.1 support for x86 520482 Advertise POPCNT on x86 via CPUID 520753 Advertise LZCNT via CPUID for x86 (32-bit) clients 520856 unhandled instruction bytes: 0x2E 0xFF 0x14 0x85 diff --git a/VEX/priv/guest_x86_toIR.c b/VEX/priv/guest_x86_toIR.c index dfba4600a..f0debba4c 100644 --- a/VEX/priv/guest_x86_toIR.c +++ b/VEX/priv/guest_x86_toIR.c @@ -13570,6 +13570,126 @@ DisResult disInstr_X86_WRK ( goto decode_success; } + /* 66 0F 3A 08 /r ib = ROUNDPS imm8, xmm2/m128, xmm1 */ + if (sz == 2 && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x08) { + + IRTemp src0 = newTemp(Ity_F32); + IRTemp src1 = newTemp(Ity_F32); + IRTemp src2 = newTemp(Ity_F32); + IRTemp src3 = newTemp(Ity_F32); + IRTemp res0 = newTemp(Ity_F32); + IRTemp res1 = newTemp(Ity_F32); + IRTemp res2 = newTemp(Ity_F32); + IRTemp res3 = newTemp(Ity_F32); + IRTemp rm = newTemp(Ity_I32); + Int imm = 0; + + modrm = insn[3]; + + if (epartIsReg(modrm)) { + assign( src0, + getXMMRegLane32F( eregOfRM(modrm), 0 ) ); + assign( src1, + getXMMRegLane32F( eregOfRM(modrm), 1 ) ); + assign( src2, + getXMMRegLane32F( eregOfRM(modrm), 2 ) ); + assign( src3, + getXMMRegLane32F( eregOfRM(modrm), 3 ) ); + imm = insn[3+1];; + if (imm & ~15) goto decode_failure; + delta += 3+1+1; + DIP( "roundps $%d,%s,%s\n", + imm, nameXMMReg( eregOfRM(modrm) ), + nameXMMReg( gregOfRM(modrm) ) ); + } else { + addr = disAMode( &alen, sorb, delta+3, dis_buf ); + gen_SEGV_if_not_16_aligned( addr ); + assign( src0, loadLE(Ity_F32, + binop(Iop_Add32, mkexpr(addr), mkU32(0) ))); + assign( src1, loadLE(Ity_F32, + binop(Iop_Add32, mkexpr(addr), mkU32(4) ))); + assign( src2, loadLE(Ity_F32, + binop(Iop_Add32, mkexpr(addr), mkU32(8) ))); + assign( src3, loadLE(Ity_F32, + binop(Iop_Add32, mkexpr(addr), mkU32(12) ))); + imm = insn[3+alen]; + if (imm & ~15) goto decode_failure; + delta += 3+alen+1; + DIP( "roundps $%d,%s,%s\n", + imm, dis_buf, nameXMMReg( gregOfRM(modrm) ) ); + } + + /* (imm & 3) contains an Intel-encoded rounding mode. Because + that encoding is the same as the encoding for IRRoundingMode, + we can use that value directly in the IR as a rounding + mode. */ + assign(rm, (imm & 4) ? get_sse_roundingmode() : mkU32(imm & 3)); + + assign(res0, binop(Iop_RoundF32toInt, mkexpr(rm), mkexpr(src0)) ); + assign(res1, binop(Iop_RoundF32toInt, mkexpr(rm), mkexpr(src1)) ); + assign(res2, binop(Iop_RoundF32toInt, mkexpr(rm), mkexpr(src2)) ); + assign(res3, binop(Iop_RoundF32toInt, mkexpr(rm), mkexpr(src3)) ); + + putXMMRegLane32F( gregOfRM(modrm), 0, mkexpr(res0) ); + putXMMRegLane32F( gregOfRM(modrm), 1, mkexpr(res1) ); + putXMMRegLane32F( gregOfRM(modrm), 2, mkexpr(res2) ); + putXMMRegLane32F( gregOfRM(modrm), 3, mkexpr(res3) ); + + goto decode_success; + } + + /* 66 0F 3A 09 /r ib = ROUNDPD imm8, xmm2/m128, xmm1 */ + if (sz == 2 && insn[0] == 0x0F && insn[1] == 0x3A && insn[2] == 0x09) { + + IRTemp src0 = newTemp(Ity_F64); + IRTemp src1 = newTemp(Ity_F64); + IRTemp res0 = newTemp(Ity_F64); + IRTemp res1 = newTemp(Ity_F64); + IRTemp rm = newTemp(Ity_I32); + Int imm = 0; + + modrm = insn[3]; + + if (epartIsReg(modrm)) { + assign( src0, + getXMMRegLane64F( eregOfRM(modrm), 0 ) ); + assign( src1, + getXMMRegLane64F( eregOfRM(modrm), 1 ) ); + imm = insn[3+1]; + if (imm & ~15) goto decode_failure; + delta += 3+1+1; + DIP( "roundpd $%d,%s,%s\n", + imm, nameXMMReg( eregOfRM(modrm) ), + nameXMMReg( gregOfRM(modrm) ) ); + } else { + addr = disAMode( &alen, sorb, delta+3, dis_buf ); + gen_SEGV_if_not_16_aligned(addr); + assign( src0, loadLE(Ity_F64, + binop(Iop_Add32, mkexpr(addr), mkU32(0) ))); + assign( src1, loadLE(Ity_F64, + binop(Iop_Add32, mkexpr(addr), mkU32(8) ))); + imm = insn[3+alen]; + if (imm & ~15) goto decode_failure; + delta += 3+alen+1; + DIP( "roundpd $%d,%s,%s\n", + imm, dis_buf, nameXMMReg( gregOfRM(modrm) ) ); + } + + /* (imm & 3) contains an Intel-encoded rounding mode. Because + that encoding is the same as the encoding for IRRoundingMode, + we can use that value directly in the IR as a rounding + mode. */ + assign(rm, (imm & 4) ? get_sse_roundingmode() : mkU32(imm & 3)); + + assign(res0, binop(Iop_RoundF64toInt, mkexpr(rm), mkexpr(src0)) ); + assign(res1, binop(Iop_RoundF64toInt, mkexpr(rm), mkexpr(src1)) ); + + putXMMRegLane64F( gregOfRM(modrm), 0, mkexpr(res0) ); + putXMMRegLane64F( gregOfRM(modrm), 1, mkexpr(res1) ); + + goto decode_success; + } + /* 66 0F 3A 0B /r ib = ROUNDSD imm8, xmm2/m64, xmm1 66 0F 3A 0A /r ib = ROUNDSS imm8, xmm2/m32, xmm1 */ diff --git a/none/tests/amd64/sse4-64.c b/none/tests/amd64/sse4-64.c index 43e26b548..f8470f33c 100644 --- a/none/tests/amd64/sse4-64.c +++ b/none/tests/amd64/sse4-64.c @@ -1472,734 +1472,6 @@ void test_PCMPGTQ ( void ) } } -/* ------------ ROUNDPD ------------ */ - -void do_ROUNDPD_000 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundpd $0, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundpd $0, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPD_001 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundpd $1, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundpd $1, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPD_010 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundpd $2, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundpd $2, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPD_011 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundpd $3, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundpd $3, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundpd $4, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundpd $4, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void test_ROUNDPD_w_immediate_rounding ( void ) -{ - double vals[22]; - Int i = 0; - vals[i++] = 0.0; - vals[i++] = -0.0; - vals[i++] = mkPosInf(); - vals[i++] = mkNegInf(); - vals[i++] = mkPosNan(); - vals[i++] = mkNegNan(); - vals[i++] = -1.3; - vals[i++] = -1.1; - vals[i++] = -0.9; - vals[i++] = -0.7; - vals[i++] = -0.50001; - vals[i++] = -0.49999; - vals[i++] = -0.3; - vals[i++] = -0.1; - vals[i++] = 0.1; - vals[i++] = 0.3; - vals[i++] = 0.49999; - vals[i++] = 0.50001; - vals[i++] = 0.7; - vals[i++] = 0.9; - vals[i++] = 1.1; - vals[i++] = 1.3; - assert(i == 22); - - for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { - V128 src, dst; - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_000(False/*reg*/, &src, &dst); - printf("r roundpd_000 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_000(True/*mem*/, &src, &dst); - printf("m roundpd_000 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_001(False/*reg*/, &src, &dst); - printf("r roundpd_001 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_001(True/*mem*/, &src, &dst); - printf("m roundpd_001 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_010(False/*reg*/, &src, &dst); - printf("r roundpd_010 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_010(True/*mem*/, &src, &dst); - printf("m roundpd_010 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_011(False/*reg*/, &src, &dst); - printf("r roundpd_011 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_011(True/*mem*/, &src, &dst); - printf("m roundpd_011 "); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - } -} - -void test_ROUNDPD_w_mxcsr_rounding ( void ) -{ - UInt rm; - double vals[22]; - Int i = 0; - vals[i++] = 0.0; - vals[i++] = -0.0; - vals[i++] = mkPosInf(); - vals[i++] = mkNegInf(); - vals[i++] = mkPosNan(); - vals[i++] = mkNegNan(); - vals[i++] = -1.3; - vals[i++] = -1.1; - vals[i++] = -0.9; - vals[i++] = -0.7; - vals[i++] = -0.50001; - vals[i++] = -0.49999; - vals[i++] = -0.3; - vals[i++] = -0.1; - vals[i++] = 0.1; - vals[i++] = 0.3; - vals[i++] = 0.49999; - vals[i++] = 0.50001; - vals[i++] = 0.7; - vals[i++] = 0.9; - vals[i++] = 1.1; - vals[i++] = 1.3; - assert(i == 22); - - rm = get_sse_roundingmode(); - assert(rm == 0); // 0 == RN == default - - for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { - V128 src, dst; - - for (rm = 0; rm <= 3; rm++) { - set_sse_roundingmode(rm); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_1XX(False/*reg*/, &src, &dst); - printf("r (rm=%u) roundpd_1XX ", rm); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 8); - memcpy(&src[8], &vals[(i+11)%22], 8); - do_ROUNDPD_1XX(True/*mem*/, &src, &dst); - printf("m (rm=%u) roundpd_1XX ", rm); - showV128(&src); - printf(" "); - showV128(&dst); - printf(" "); - print_double_to_double(vals[i], *(double*)(&dst[0])); - printf(" "); - print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); - printf("\n"); - } - } - - rm = get_sse_roundingmode(); - assert(rm == 3); - set_sse_roundingmode(0); - rm = get_sse_roundingmode(); - assert(rm == 0); // 0 == RN == default -} - -/* ------------ ROUNDPS ------------ */ - -void do_ROUNDPS_000 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundps $0, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundps $0, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPS_001 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundps $1, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundps $1, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPS_010 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundps $2, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundps $2, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPS_011 ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundps $3, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundps $3, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void do_ROUNDPS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst ) -{ - if (mem) { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "roundps $4, (%0), %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11" - ); - } else { - __asm__ __volatile__( - "movupd (%1), %%xmm11" "\n\t" - "movupd (%0), %%xmm2" "\n\t" - "roundps $4, %%xmm2, %%xmm11" "\n\t" - "movupd %%xmm11, (%1)" "\n" - : /*OUT*/ - : /*IN*/ "r"(src), "r"(dst) - : /*TRASH*/ "xmm11","xmm2" - ); - } -} - -void test_ROUNDPS_w_immediate_rounding ( void ) -{ - float vals[22]; - Int i = 0; - vals[i++] = 0.0; - vals[i++] = -0.0; - vals[i++] = mkPosInf(); - vals[i++] = mkNegInf(); - vals[i++] = mkPosNan(); - vals[i++] = mkNegNan(); - vals[i++] = -1.3; - vals[i++] = -1.1; - vals[i++] = -0.9; - vals[i++] = -0.7; - vals[i++] = -0.50001; - vals[i++] = -0.49999; - vals[i++] = -0.3; - vals[i++] = -0.1; - vals[i++] = 0.1; - vals[i++] = 0.3; - vals[i++] = 0.49999; - vals[i++] = 0.50001; - vals[i++] = 0.7; - vals[i++] = 0.9; - vals[i++] = 1.1; - vals[i++] = 1.3; - assert(i == 22); - - for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { - V128 src, dst; - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_000(False/*reg*/, &src, &dst); - printf("r roundps_000 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_000(True/*mem*/, &src, &dst); - printf("m roundps_000 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_001(False/*reg*/, &src, &dst); - printf("r roundps_001 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_001(True/*mem*/, &src, &dst); - printf("m roundps_001 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_010(False/*reg*/, &src, &dst); - printf("r roundps_010 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_010(True/*mem*/, &src, &dst); - printf("m roundps_010 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_011(False/*reg*/, &src, &dst); - printf("r roundps_011 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_011(True/*mem*/, &src, &dst); - printf("m roundps_011 "); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - } -} - -void test_ROUNDPS_w_mxcsr_rounding ( void ) -{ - UInt rm; - float vals[22]; - Int i = 0; - vals[i++] = 0.0; - vals[i++] = -0.0; - vals[i++] = mkPosInf(); - vals[i++] = mkNegInf(); - vals[i++] = mkPosNan(); - vals[i++] = mkNegNan(); - vals[i++] = -1.3; - vals[i++] = -1.1; - vals[i++] = -0.9; - vals[i++] = -0.7; - vals[i++] = -0.50001; - vals[i++] = -0.49999; - vals[i++] = -0.3; - vals[i++] = -0.1; - vals[i++] = 0.1; - vals[i++] = 0.3; - vals[i++] = 0.49999; - vals[i++] = 0.50001; - vals[i++] = 0.7; - vals[i++] = 0.9; - vals[i++] = 1.1; - vals[i++] = 1.3; - assert(i == 22); - - rm = get_sse_roundingmode(); - assert(rm == 0); // 0 == RN == default - - for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { - V128 src, dst; - - for (rm = 0; rm <= 3; rm++) { - set_sse_roundingmode(rm); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_1XX(False/*reg*/, &src, &dst); - printf("r (rm=%u) roundps_1XX ", rm); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - - randV128(&src); - randV128(&dst); - memcpy(&src[0], &vals[i], 4); - memcpy(&src[4], &vals[(i+5)%22], 4); - memcpy(&src[8], &vals[(i+11)%22], 4); - memcpy(&src[12], &vals[(i+17)%22], 4); - do_ROUNDPS_1XX(True/*mem*/, &src, &dst); - printf("m (rm=%u) roundps_1XX ", rm); - showV128(&src); - printf(" "); - showV128(&dst); - print_floats(vals[i], *(float*)(&dst[0])); - print_floats(vals[(i+5)%22], *(float*)(&dst[4])); - print_floats(vals[(i+11)%22], *(float*)(&dst[8])); - print_floats(vals[(i+17)%22], *(float*)(&dst[12])); - printf("\n"); - } - } - - rm = get_sse_roundingmode(); - assert(rm == 3); - set_sse_roundingmode(0); - rm = get_sse_roundingmode(); - assert(rm == 0); // 0 == RN == default -} - /* ------------ PTEST ------------ */ void test_PTEST ( void ) diff --git a/none/tests/sse4-common.h b/none/tests/sse4-common.h index 7c0203934..58f3131e6 100644 --- a/none/tests/sse4-common.h +++ b/none/tests/sse4-common.h @@ -36,7 +36,7 @@ typedef } RMArgs; -static UChar randUChar ( void ) +static inline UChar randUChar ( void ) { static UInt seed = 80021; seed = 1103515245 * seed + 12345; @@ -44,7 +44,7 @@ static UChar randUChar ( void ) } -static ULong randULong ( void ) +static inline ULong randULong ( void ) { Int i; ULong r = 0; @@ -54,7 +54,7 @@ static ULong randULong ( void ) return r; } -static UInt randUInt ( void ) +static inline UInt randUInt ( void ) { Int i; UInt r = 0; @@ -1737,4 +1737,732 @@ static inline void test_PHMINPOSUW ( void ) DO_mandr_r("phminposuw", src, dst); } +/* ------------ ROUNDPD ------------ */ + +static inline void do_ROUNDPD_000 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundpd $0, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundpd $0, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPD_001 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundpd $1, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundpd $1, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPD_010 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundpd $2, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundpd $2, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPD_011 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundpd $3, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundpd $3, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundpd $4, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundpd $4, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ", (%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void test_ROUNDPD_w_immediate_rounding ( void ) +{ + double vals[22]; + Int i = 0; + vals[i++] = 0.0; + vals[i++] = -0.0; + vals[i++] = mkPosInf(); + vals[i++] = mkNegInf(); + vals[i++] = mkPosNan(); + vals[i++] = mkNegNan(); + vals[i++] = -1.3; + vals[i++] = -1.1; + vals[i++] = -0.9; + vals[i++] = -0.7; + vals[i++] = -0.50001; + vals[i++] = -0.49999; + vals[i++] = -0.3; + vals[i++] = -0.1; + vals[i++] = 0.1; + vals[i++] = 0.3; + vals[i++] = 0.49999; + vals[i++] = 0.50001; + vals[i++] = 0.7; + vals[i++] = 0.9; + vals[i++] = 1.1; + vals[i++] = 1.3; + assert(i == 22); + + for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { + __attribute__ ( (aligned (16))) V128 src, dst; + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_000(False/*reg*/, &src, &dst); + printf("r roundpd_000 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_000(True/*mem*/, &src, &dst); + printf("m roundpd_000 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_001(False/*reg*/, &src, &dst); + printf("r roundpd_001 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_001(True/*mem*/, &src, &dst); + printf("m roundpd_001 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_010(False/*reg*/, &src, &dst); + printf("r roundpd_010 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_010(True/*mem*/, &src, &dst); + printf("m roundpd_010 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_011(False/*reg*/, &src, &dst); + printf("r roundpd_011 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_011(True/*mem*/, &src, &dst); + printf("m roundpd_011 "); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + } +} + +static inline void test_ROUNDPD_w_mxcsr_rounding ( void ) +{ + UInt rm; + double vals[22]; + Int i = 0; + vals[i++] = 0.0; + vals[i++] = -0.0; + vals[i++] = mkPosInf(); + vals[i++] = mkNegInf(); + vals[i++] = mkPosNan(); + vals[i++] = mkNegNan(); + vals[i++] = -1.3; + vals[i++] = -1.1; + vals[i++] = -0.9; + vals[i++] = -0.7; + vals[i++] = -0.50001; + vals[i++] = -0.49999; + vals[i++] = -0.3; + vals[i++] = -0.1; + vals[i++] = 0.1; + vals[i++] = 0.3; + vals[i++] = 0.49999; + vals[i++] = 0.50001; + vals[i++] = 0.7; + vals[i++] = 0.9; + vals[i++] = 1.1; + vals[i++] = 1.3; + assert(i == 22); + + rm = get_sse_roundingmode(); + assert(rm == 0); // 0 == RN == default + + for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { + __attribute__ ( (aligned (16))) V128 src, dst; + + for (rm = 0; rm <= 3; rm++) { + set_sse_roundingmode(rm); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_1XX(False/*reg*/, &src, &dst); + printf("r (rm=%u) roundpd_1XX ", rm); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 8); + memcpy(&src[8], &vals[(i+11)%22], 8); + do_ROUNDPD_1XX(True/*mem*/, &src, &dst); + printf("m (rm=%u) roundpd_1XX ", rm); + showV128(&src); + printf(" "); + showV128(&dst); + printf(" "); + print_double_to_double(vals[i], *(double*)(&dst[0])); + printf(" "); + print_double_to_double(vals[(i+11)%22], *(double*)(&dst[8])); + printf("\n"); + } + } + + rm = get_sse_roundingmode(); + assert(rm == 3); + set_sse_roundingmode(0); + rm = get_sse_roundingmode(); + assert(rm == 0); // 0 == RN == default +} + +/* ------------ ROUNDPS ------------ */ + +static inline void do_ROUNDPS_000 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundps $0, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundps $0, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPS_001 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundps $1, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundps $1, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPS_010 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundps $2, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundps $2, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPS_011 ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundps $3, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundps $3, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void do_ROUNDPS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst ) +{ + if (mem) { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "roundps $4, (%0), %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST + ); + } else { + __asm__ __volatile__( + "movupd (%1), %%" XMMREG_DST "\n\t" + "movupd (%0), %%xmm2" "\n\t" + "roundps $4, %%xmm2, %%" XMMREG_DST "\n\t" + "movupd %%" XMMREG_DST ",(%1)" "\n" + : /*OUT*/ + : /*IN*/ "r"(src), "r"(dst) + : /*TRASH*/ XMMREG_DST , "xmm2" + ); + } +} + +static inline void test_ROUNDPS_w_immediate_rounding ( void ) +{ + float vals[22]; + Int i = 0; + vals[i++] = 0.0; + vals[i++] = -0.0; + vals[i++] = mkPosInf(); + vals[i++] = mkNegInf(); + vals[i++] = mkPosNan(); + vals[i++] = mkNegNan(); + vals[i++] = -1.3; + vals[i++] = -1.1; + vals[i++] = -0.9; + vals[i++] = -0.7; + vals[i++] = -0.50001; + vals[i++] = -0.49999; + vals[i++] = -0.3; + vals[i++] = -0.1; + vals[i++] = 0.1; + vals[i++] = 0.3; + vals[i++] = 0.49999; + vals[i++] = 0.50001; + vals[i++] = 0.7; + vals[i++] = 0.9; + vals[i++] = 1.1; + vals[i++] = 1.3; + assert(i == 22); + + for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { + __attribute__ ( (aligned (16))) V128 src, dst; + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_000(False/*reg*/, &src, &dst); + printf("r roundps_000 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_000(True/*mem*/, &src, &dst); + printf("m roundps_000 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_001(False/*reg*/, &src, &dst); + printf("r roundps_001 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_001(True/*mem*/, &src, &dst); + printf("m roundps_001 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_010(False/*reg*/, &src, &dst); + printf("r roundps_010 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_010(True/*mem*/, &src, &dst); + printf("m roundps_010 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_011(False/*reg*/, &src, &dst); + printf("r roundps_011 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_011(True/*mem*/, &src, &dst); + printf("m roundps_011 "); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + } +} + +static inline void test_ROUNDPS_w_mxcsr_rounding ( void ) +{ + UInt rm; + float vals[22]; + Int i = 0; + vals[i++] = 0.0; + vals[i++] = -0.0; + vals[i++] = mkPosInf(); + vals[i++] = mkNegInf(); + vals[i++] = mkPosNan(); + vals[i++] = mkNegNan(); + vals[i++] = -1.3; + vals[i++] = -1.1; + vals[i++] = -0.9; + vals[i++] = -0.7; + vals[i++] = -0.50001; + vals[i++] = -0.49999; + vals[i++] = -0.3; + vals[i++] = -0.1; + vals[i++] = 0.1; + vals[i++] = 0.3; + vals[i++] = 0.49999; + vals[i++] = 0.50001; + vals[i++] = 0.7; + vals[i++] = 0.9; + vals[i++] = 1.1; + vals[i++] = 1.3; + assert(i == 22); + + rm = get_sse_roundingmode(); + assert(rm == 0); // 0 == RN == default + + for (i = 0; i < sizeof(vals)/sizeof(vals[0]); i++) { + V128 src, dst; + + for (rm = 0; rm <= 3; rm++) { + set_sse_roundingmode(rm); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_1XX(False/*reg*/, &src, &dst); + printf("r (rm=%u) roundps_1XX ", rm); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + + randV128(&src); + randV128(&dst); + memcpy(&src[0], &vals[i], 4); + memcpy(&src[4], &vals[(i+5)%22], 4); + memcpy(&src[8], &vals[(i+11)%22], 4); + memcpy(&src[12], &vals[(i+17)%22], 4); + do_ROUNDPS_1XX(True/*mem*/, &src, &dst); + printf("m (rm=%u) roundps_1XX ", rm); + showV128(&src); + printf(" "); + showV128(&dst); + print_floats(vals[i], *(float*)(&dst[0])); + print_floats(vals[(i+5)%22], *(float*)(&dst[4])); + print_floats(vals[(i+11)%22], *(float*)(&dst[8])); + print_floats(vals[(i+17)%22], *(float*)(&dst[12])); + printf("\n"); + } + } + + rm = get_sse_roundingmode(); + assert(rm == 3); + set_sse_roundingmode(0); + rm = get_sse_roundingmode(); + assert(rm == 0); // 0 == RN == default +} + #endif /* __SSE4_COMMON_H */ diff --git a/none/tests/x86/sse4-x86.c b/none/tests/x86/sse4-x86.c index 94c8c478a..364a9c614 100644 --- a/none/tests/x86/sse4-x86.c +++ b/none/tests/x86/sse4-x86.c @@ -265,6 +265,10 @@ int main(void) test_POPCNTL_x86(); test_POPCNTW_x86(); test_PHMINPOSUW(); + test_ROUNDPD_w_immediate_rounding(); + test_ROUNDPS_w_immediate_rounding(); + test_ROUNDPD_w_mxcsr_rounding(); + test_ROUNDPS_w_mxcsr_rounding(); return 0; } diff --git a/none/tests/x86/sse4-x86.stdout.exp b/none/tests/x86/sse4-x86.stdout.exp index 5fb75fc2c..fbd162f0f 100644 --- a/none/tests/x86/sse4-x86.stdout.exp +++ b/none/tests/x86/sse4-x86.stdout.exp @@ -2866,3 +2866,707 @@ r phminposuw 08a6b8d1064a9e3ad001994e59389c1a 94e1f4cffaf12c9a9dc130995c8eed66 0 m phminposuw 08a6b8d1064a9e3ad001994e59389c1a 94e1f4cffaf12c9a9dc130995c8eed66 0000000000000000000000000005064a r phminposuw 55555555555555555555555555555555 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00000000000000000000000000005555 m phminposuw 55555555555555555555555555555555 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 00000000000000000000000000005555 +r roundpd_000 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m roundpd_000 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r roundpd_001 bfdfffd60e94ee390000000000000000 bff00000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -1.000000 +m roundpd_001 bfdfffd60e94ee390000000000000000 bff00000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -1.000000 +r roundpd_010 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m roundpd_010 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r roundpd_011 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m roundpd_011 bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r roundpd_000 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m roundpd_000 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r roundpd_001 bfd33333333333338000000000000000 bff00000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -1.000000 +m roundpd_001 bfd33333333333338000000000000000 bff00000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -1.000000 +r roundpd_010 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m roundpd_010 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r roundpd_011 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m roundpd_011 bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r roundpd_000 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m roundpd_000 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r roundpd_001 bfb999999999999a7ff0000000000000 bff00000000000007ff0000000000000 inf -> inf -0.100000 -> -1.000000 +m roundpd_001 bfb999999999999a7ff0000000000000 bff00000000000007ff0000000000000 inf -> inf -0.100000 -> -1.000000 +r roundpd_010 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m roundpd_010 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r roundpd_011 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m roundpd_011 bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r roundpd_000 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m roundpd_000 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r roundpd_001 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m roundpd_001 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r roundpd_010 3fb999999999999afff0000000000000 3ff0000000000000fff0000000000000 -inf -> -inf 0.100000 -> 1.000000 +m roundpd_010 3fb999999999999afff0000000000000 3ff0000000000000fff0000000000000 -inf -> -inf 0.100000 -> 1.000000 +r roundpd_011 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m roundpd_011 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r roundpd_000 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m roundpd_000 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r roundpd_001 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m roundpd_001 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r roundpd_010 3fd33333333333337ff8000000000000 3ff00000000000007ff8000000000000 nan -> nan 0.300000 -> 1.000000 +m roundpd_010 3fd33333333333337ff8000000000000 3ff00000000000007ff8000000000000 nan -> nan 0.300000 -> 1.000000 +r roundpd_011 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m roundpd_011 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r roundpd_000 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m roundpd_000 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r roundpd_001 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m roundpd_001 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r roundpd_010 3fdfffd60e94ee39fff8000000000000 3ff0000000000000fff8000000000000 -nan -> -nan 0.499990 -> 1.000000 +m roundpd_010 3fdfffd60e94ee39fff8000000000000 3ff0000000000000fff8000000000000 -nan -> -nan 0.499990 -> 1.000000 +r roundpd_011 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m roundpd_011 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r roundpd_000 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +m roundpd_000 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +r roundpd_001 3fe00014f8b588e3bff4cccccccccccd 0000000000000000c000000000000000 -1.300000 -> -2.000000 0.500010 -> 0.000000 +m roundpd_001 3fe00014f8b588e3bff4cccccccccccd 0000000000000000c000000000000000 -1.300000 -> -2.000000 0.500010 -> 0.000000 +r roundpd_010 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +m roundpd_010 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +r roundpd_011 3fe00014f8b588e3bff4cccccccccccd 0000000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 0.000000 +m roundpd_011 3fe00014f8b588e3bff4cccccccccccd 0000000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 0.000000 +r roundpd_000 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +m roundpd_000 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +r roundpd_001 3fe6666666666666bff199999999999a 0000000000000000c000000000000000 -1.100000 -> -2.000000 0.700000 -> 0.000000 +m roundpd_001 3fe6666666666666bff199999999999a 0000000000000000c000000000000000 -1.100000 -> -2.000000 0.700000 -> 0.000000 +r roundpd_010 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +m roundpd_010 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +r roundpd_011 3fe6666666666666bff199999999999a 0000000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 0.000000 +m roundpd_011 3fe6666666666666bff199999999999a 0000000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 0.000000 +r roundpd_000 3feccccccccccccdbfeccccccccccccd 3ff0000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 1.000000 +m roundpd_000 3feccccccccccccdbfeccccccccccccd 3ff0000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 1.000000 +r roundpd_001 3feccccccccccccdbfeccccccccccccd 0000000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 0.000000 +m roundpd_001 3feccccccccccccdbfeccccccccccccd 0000000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 0.000000 +r roundpd_010 3feccccccccccccdbfeccccccccccccd 3ff00000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 1.000000 +m roundpd_010 3feccccccccccccdbfeccccccccccccd 3ff00000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 1.000000 +r roundpd_011 3feccccccccccccdbfeccccccccccccd 00000000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 0.000000 +m roundpd_011 3feccccccccccccdbfeccccccccccccd 00000000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 0.000000 +r roundpd_000 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +m roundpd_000 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +r roundpd_001 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +m roundpd_001 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +r roundpd_010 3ff199999999999abfe6666666666666 40000000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 2.000000 +m roundpd_010 3ff199999999999abfe6666666666666 40000000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 2.000000 +r roundpd_011 3ff199999999999abfe6666666666666 3ff00000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 1.000000 +m roundpd_011 3ff199999999999abfe6666666666666 3ff00000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 1.000000 +r roundpd_000 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +m roundpd_000 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +r roundpd_001 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +m roundpd_001 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +r roundpd_010 3ff4cccccccccccdbfe00014f8b588e3 40000000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 2.000000 +m roundpd_010 3ff4cccccccccccdbfe00014f8b588e3 40000000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 2.000000 +r roundpd_011 3ff4cccccccccccdbfe00014f8b588e3 3ff00000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 1.000000 +m roundpd_011 3ff4cccccccccccdbfe00014f8b588e3 3ff00000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 1.000000 +r roundpd_000 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m roundpd_000 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r roundpd_001 0000000000000000bfdfffd60e94ee39 0000000000000000bff0000000000000 -0.499990 -> -1.000000 0.000000 -> 0.000000 +m roundpd_001 0000000000000000bfdfffd60e94ee39 0000000000000000bff0000000000000 -0.499990 -> -1.000000 0.000000 -> 0.000000 +r roundpd_010 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m roundpd_010 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r roundpd_011 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m roundpd_011 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r roundpd_000 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m roundpd_000 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r roundpd_001 8000000000000000bfd3333333333333 8000000000000000bff0000000000000 -0.300000 -> -1.000000 -0.000000 -> -0.000000 +m roundpd_001 8000000000000000bfd3333333333333 8000000000000000bff0000000000000 -0.300000 -> -1.000000 -0.000000 -> -0.000000 +r roundpd_010 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m roundpd_010 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r roundpd_011 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m roundpd_011 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r roundpd_000 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m roundpd_000 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r roundpd_001 7ff0000000000000bfb999999999999a 7ff0000000000000bff0000000000000 -0.100000 -> -1.000000 inf -> inf +m roundpd_001 7ff0000000000000bfb999999999999a 7ff0000000000000bff0000000000000 -0.100000 -> -1.000000 inf -> inf +r roundpd_010 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m roundpd_010 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r roundpd_011 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m roundpd_011 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r roundpd_000 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m roundpd_000 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r roundpd_001 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m roundpd_001 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r roundpd_010 fff00000000000003fb999999999999a fff00000000000003ff0000000000000 0.100000 -> 1.000000 -inf -> -inf +m roundpd_010 fff00000000000003fb999999999999a fff00000000000003ff0000000000000 0.100000 -> 1.000000 -inf -> -inf +r roundpd_011 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m roundpd_011 fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r roundpd_000 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m roundpd_000 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r roundpd_001 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m roundpd_001 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r roundpd_010 7ff80000000000003fd3333333333333 7ff80000000000003ff0000000000000 0.300000 -> 1.000000 nan -> nan +m roundpd_010 7ff80000000000003fd3333333333333 7ff80000000000003ff0000000000000 0.300000 -> 1.000000 nan -> nan +r roundpd_011 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m roundpd_011 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r roundpd_000 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m roundpd_000 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r roundpd_001 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m roundpd_001 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r roundpd_010 fff80000000000003fdfffd60e94ee39 fff80000000000003ff0000000000000 0.499990 -> 1.000000 -nan -> -nan +m roundpd_010 fff80000000000003fdfffd60e94ee39 fff80000000000003ff0000000000000 0.499990 -> 1.000000 -nan -> -nan +r roundpd_011 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m roundpd_011 fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r roundpd_000 bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +m roundpd_000 bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +r roundpd_001 bff4cccccccccccd3fe00014f8b588e3 c0000000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -2.000000 +m roundpd_001 bff4cccccccccccd3fe00014f8b588e3 c0000000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -2.000000 +r roundpd_010 bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +m roundpd_010 bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +r roundpd_011 bff4cccccccccccd3fe00014f8b588e3 bff00000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -1.000000 +m roundpd_011 bff4cccccccccccd3fe00014f8b588e3 bff00000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -1.000000 +r roundpd_000 bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +m roundpd_000 bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +r roundpd_001 bff199999999999a3fe6666666666666 c0000000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -2.000000 +m roundpd_001 bff199999999999a3fe6666666666666 c0000000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -2.000000 +r roundpd_010 bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +m roundpd_010 bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +r roundpd_011 bff199999999999a3fe6666666666666 bff00000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -1.000000 +m roundpd_011 bff199999999999a3fe6666666666666 bff00000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -1.000000 +r roundpd_000 bfeccccccccccccd3feccccccccccccd bff00000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -1.000000 +m roundpd_000 bfeccccccccccccd3feccccccccccccd bff00000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -1.000000 +r roundpd_001 bfeccccccccccccd3feccccccccccccd bff00000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -1.000000 +m roundpd_001 bfeccccccccccccd3feccccccccccccd bff00000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -1.000000 +r roundpd_010 bfeccccccccccccd3feccccccccccccd 80000000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -0.000000 +m roundpd_010 bfeccccccccccccd3feccccccccccccd 80000000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -0.000000 +r roundpd_011 bfeccccccccccccd3feccccccccccccd 80000000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -0.000000 +m roundpd_011 bfeccccccccccccd3feccccccccccccd 80000000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -0.000000 +r roundpd_000 bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +m roundpd_000 bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +r roundpd_001 bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +m roundpd_001 bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +r roundpd_010 bfe66666666666663ff199999999999a 80000000000000004000000000000000 1.100000 -> 2.000000 -0.700000 -> -0.000000 +m roundpd_010 bfe66666666666663ff199999999999a 80000000000000004000000000000000 1.100000 -> 2.000000 -0.700000 -> -0.000000 +r roundpd_011 bfe66666666666663ff199999999999a 80000000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -0.000000 +m roundpd_011 bfe66666666666663ff199999999999a 80000000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -0.000000 +r roundpd_000 bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +m roundpd_000 bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +r roundpd_001 bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +m roundpd_001 bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +r roundpd_010 bfe00014f8b588e33ff4cccccccccccd 80000000000000004000000000000000 1.300000 -> 2.000000 -0.500010 -> -0.000000 +m roundpd_010 bfe00014f8b588e33ff4cccccccccccd 80000000000000004000000000000000 1.300000 -> 2.000000 -0.500010 -> -0.000000 +r roundpd_011 bfe00014f8b588e33ff4cccccccccccd 80000000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -0.000000 +m roundpd_011 bfe00014f8b588e33ff4cccccccccccd 80000000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -0.000000 +r roundps_000 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +m roundps_000 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +r roundps_001 3f0000a8befffeb0ffc0000000000000 00000000bf800000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-1.000000 0.500010: 0.000000 +m roundps_001 3f0000a8befffeb0ffc0000000000000 00000000bf800000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-1.000000 0.500010: 0.000000 +r roundps_010 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +m roundps_010 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +r roundps_011 3f0000a8befffeb0ffc0000000000000 0000000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 0.000000 +m roundps_011 3f0000a8befffeb0ffc0000000000000 0000000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 0.000000 +r roundps_000 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +m roundps_000 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +r roundps_001 3f333333be99999abfa6666680000000 00000000bf800000c000000080000000 -0.000000:-0.000000 -1.300000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 +m roundps_001 3f333333be99999abfa6666680000000 00000000bf800000c000000080000000 -0.000000:-0.000000 -1.300000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 +r roundps_010 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +m roundps_010 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +r roundps_011 3f333333be99999abfa6666680000000 0000000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 +m roundps_011 3f333333be99999abfa6666680000000 0000000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 +r roundps_000 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +m roundps_000 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +r roundps_001 3f666666bdcccccdbf8ccccd7f800000 00000000bf800000c00000007f800000 inf: inf -1.100000:-2.000000 -0.100000:-1.000000 0.900000: 0.000000 +m roundps_001 3f666666bdcccccdbf8ccccd7f800000 00000000bf800000c00000007f800000 inf: inf -1.100000:-2.000000 -0.100000:-1.000000 0.900000: 0.000000 +r roundps_010 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +m roundps_010 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +r roundps_011 3f666666bdcccccdbf8ccccd7f800000 0000000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 0.000000 +m roundps_011 3f666666bdcccccdbf8ccccd7f800000 0000000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 0.000000 +r roundps_000 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +m roundps_000 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +r roundps_001 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +m roundps_001 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +r roundps_010 3f8ccccd3dcccccdbf666666ff800000 400000003f80000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 +m roundps_010 3f8ccccd3dcccccdbf666666ff800000 400000003f80000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 +r roundps_011 3f8ccccd3dcccccdbf666666ff800000 3f8000000000000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 +m roundps_011 3f8ccccd3dcccccdbf666666ff800000 3f8000000000000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 +r roundps_000 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +m roundps_000 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +r roundps_001 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +m roundps_001 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +r roundps_010 3fa666663e99999abf3333337fc00000 400000003f800000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 1.000000 1.300000: 2.000000 +m roundps_010 3fa666663e99999abf3333337fc00000 400000003f800000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 1.000000 1.300000: 2.000000 +r roundps_011 3fa666663e99999abf3333337fc00000 3f80000000000000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 0.000000 1.300000: 1.000000 +m roundps_011 3fa666663e99999abf3333337fc00000 3f80000000000000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 0.000000 1.300000: 1.000000 +r roundps_000 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +m roundps_000 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +r roundps_001 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +m roundps_001 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +r roundps_010 000000003efffeb0bf0000a8ffc00000 000000003f80000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 1.000000 0.000000: 0.000000 +m roundps_010 000000003efffeb0bf0000a8ffc00000 000000003f80000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 1.000000 0.000000: 0.000000 +r roundps_011 000000003efffeb0bf0000a8ffc00000 000000000000000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 0.000000 0.000000: 0.000000 +m roundps_011 000000003efffeb0bf0000a8ffc00000 000000000000000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 0.000000 0.000000: 0.000000 +r roundps_000 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +m roundps_000 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +r roundps_001 800000003f0000a8befffeb0bfa66666 8000000000000000bf800000c0000000 -1.300000:-2.000000 -0.499990:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 +m roundps_001 800000003f0000a8befffeb0bfa66666 8000000000000000bf800000c0000000 -1.300000:-2.000000 -0.499990:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 +r roundps_010 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +m roundps_010 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +r roundps_011 800000003f0000a8befffeb0bfa66666 800000000000000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 +m roundps_011 800000003f0000a8befffeb0bfa66666 800000000000000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 +r roundps_000 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +m roundps_000 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +r roundps_001 7f8000003f333333be99999abf8ccccd 7f80000000000000bf800000c0000000 -1.100000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 inf: inf +m roundps_001 7f8000003f333333be99999abf8ccccd 7f80000000000000bf800000c0000000 -1.100000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 inf: inf +r roundps_010 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +m roundps_010 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +r roundps_011 7f8000003f333333be99999abf8ccccd 7f8000000000000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 inf: inf +m roundps_011 7f8000003f333333be99999abf8ccccd 7f8000000000000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 inf: inf +r roundps_000 ff8000003f666666bdcccccdbf666666 ff8000003f80000080000000bf800000 -0.900000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +m roundps_000 ff8000003f666666bdcccccdbf666666 ff8000003f80000080000000bf800000 -0.900000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +r roundps_001 ff8000003f666666bdcccccdbf666666 ff80000000000000bf800000bf800000 -0.900000:-1.000000 -0.100000:-1.000000 0.900000: 0.000000 -inf: -inf +m roundps_001 ff8000003f666666bdcccccdbf666666 ff80000000000000bf800000bf800000 -0.900000:-1.000000 -0.100000:-1.000000 0.900000: 0.000000 -inf: -inf +r roundps_010 ff8000003f666666bdcccccdbf666666 ff8000003f8000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +m roundps_010 ff8000003f666666bdcccccdbf666666 ff8000003f8000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +r roundps_011 ff8000003f666666bdcccccdbf666666 ff800000000000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 0.000000 -inf: -inf +m roundps_011 ff8000003f666666bdcccccdbf666666 ff800000000000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 0.000000 -inf: -inf +r roundps_000 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m roundps_000 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r roundps_001 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m roundps_001 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r roundps_010 7fc000003f8ccccd3dcccccdbf333333 7fc00000400000003f80000080000000 -0.700000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 nan: nan +m roundps_010 7fc000003f8ccccd3dcccccdbf333333 7fc00000400000003f80000080000000 -0.700000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 nan: nan +r roundps_011 7fc000003f8ccccd3dcccccdbf333333 7fc000003f8000000000000080000000 -0.700000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m roundps_011 7fc000003f8ccccd3dcccccdbf333333 7fc000003f8000000000000080000000 -0.700000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r roundps_000 ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m roundps_000 ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r roundps_001 ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m roundps_001 ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r roundps_010 ffc000003fa666663e99999abf0000a8 ffc00000400000003f80000080000000 -0.500010:-0.000000 0.300000: 1.000000 1.300000: 2.000000 -nan: -nan +m roundps_010 ffc000003fa666663e99999abf0000a8 ffc00000400000003f80000080000000 -0.500010:-0.000000 0.300000: 1.000000 1.300000: 2.000000 -nan: -nan +r roundps_011 ffc000003fa666663e99999abf0000a8 ffc000003f8000000000000080000000 -0.500010:-0.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m roundps_011 ffc000003fa666663e99999abf0000a8 ffc000003f8000000000000080000000 -0.500010:-0.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r roundps_000 bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +m roundps_000 bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +r roundps_001 bfa66666000000003efffeb0befffeb0 c00000000000000000000000bf800000 -0.499990:-1.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 +m roundps_001 bfa66666000000003efffeb0befffeb0 c00000000000000000000000bf800000 -0.499990:-1.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 +r roundps_010 bfa66666000000003efffeb0befffeb0 bf800000000000003f80000080000000 -0.499990:-0.000000 0.499990: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 +m roundps_010 bfa66666000000003efffeb0befffeb0 bf800000000000003f80000080000000 -0.499990:-0.000000 0.499990: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 +r roundps_011 bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +m roundps_011 bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +r roundps_000 bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m roundps_000 bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r roundps_001 bf8ccccd800000003f0000a8be99999a c00000008000000000000000bf800000 -0.300000:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 +m roundps_001 bf8ccccd800000003f0000a8be99999a c00000008000000000000000bf800000 -0.300000:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 +r roundps_010 bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m roundps_010 bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r roundps_011 bf8ccccd800000003f0000a8be99999a bf800000800000000000000080000000 -0.300000:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m roundps_011 bf8ccccd800000003f0000a8be99999a bf800000800000000000000080000000 -0.300000:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r roundps_000 bf6666667f8000003f333333bdcccccd bf8000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-1.000000 +m roundps_000 bf6666667f8000003f333333bdcccccd bf8000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-1.000000 +r roundps_001 bf6666667f8000003f333333bdcccccd bf8000007f80000000000000bf800000 -0.100000:-1.000000 0.700000: 0.000000 inf: inf -0.900000:-1.000000 +m roundps_001 bf6666667f8000003f333333bdcccccd bf8000007f80000000000000bf800000 -0.100000:-1.000000 0.700000: 0.000000 inf: inf -0.900000:-1.000000 +r roundps_010 bf6666667f8000003f333333bdcccccd 800000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-0.000000 +m roundps_010 bf6666667f8000003f333333bdcccccd 800000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-0.000000 +r roundps_011 bf6666667f8000003f333333bdcccccd 800000007f8000000000000080000000 -0.100000:-0.000000 0.700000: 0.000000 inf: inf -0.900000:-0.000000 +m roundps_011 bf6666667f8000003f333333bdcccccd 800000007f8000000000000080000000 -0.100000:-0.000000 0.700000: 0.000000 inf: inf -0.900000:-0.000000 +r roundps_000 bf333333ff8000003f6666663dcccccd bf800000ff8000003f80000000000000 0.100000: 0.000000 0.900000: 1.000000 -inf: -inf -0.700000:-1.000000 +m roundps_000 bf333333ff8000003f6666663dcccccd bf800000ff8000003f80000000000000 0.100000: 0.000000 0.900000: 1.000000 -inf: -inf -0.700000:-1.000000 +r roundps_001 bf333333ff8000003f6666663dcccccd bf800000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-1.000000 +m roundps_001 bf333333ff8000003f6666663dcccccd bf800000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-1.000000 +r roundps_010 bf333333ff8000003f6666663dcccccd 80000000ff8000003f8000003f800000 0.100000: 1.000000 0.900000: 1.000000 -inf: -inf -0.700000:-0.000000 +m roundps_010 bf333333ff8000003f6666663dcccccd 80000000ff8000003f8000003f800000 0.100000: 1.000000 0.900000: 1.000000 -inf: -inf -0.700000:-0.000000 +r roundps_011 bf333333ff8000003f6666663dcccccd 80000000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-0.000000 +m roundps_011 bf333333ff8000003f6666663dcccccd 80000000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-0.000000 +r roundps_000 bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +m roundps_000 bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +r roundps_001 bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +m roundps_001 bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +r roundps_010 bf0000a87fc000003f8ccccd3e99999a 800000007fc00000400000003f800000 0.300000: 1.000000 1.100000: 2.000000 nan: nan -0.500010:-0.000000 +m roundps_010 bf0000a87fc000003f8ccccd3e99999a 800000007fc00000400000003f800000 0.300000: 1.000000 1.100000: 2.000000 nan: nan -0.500010:-0.000000 +r roundps_011 bf0000a87fc000003f8ccccd3e99999a 800000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-0.000000 +m roundps_011 bf0000a87fc000003f8ccccd3e99999a 800000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-0.000000 +r roundps_000 befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +m roundps_000 befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +r roundps_001 befffeb0ffc000003fa666663efffeb0 bf800000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-1.000000 +m roundps_001 befffeb0ffc000003fa666663efffeb0 bf800000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-1.000000 +r roundps_010 befffeb0ffc000003fa666663efffeb0 80000000ffc00000400000003f800000 0.499990: 1.000000 1.300000: 2.000000 -nan: -nan -0.499990:-0.000000 +m roundps_010 befffeb0ffc000003fa666663efffeb0 80000000ffc00000400000003f800000 0.499990: 1.000000 1.300000: 2.000000 -nan: -nan -0.499990:-0.000000 +r roundps_011 befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +m roundps_011 befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +r roundps_000 be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m roundps_000 be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r roundps_001 be99999abfa66666000000003f0000a8 bf800000c00000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 -0.300000:-1.000000 +m roundps_001 be99999abfa66666000000003f0000a8 bf800000c00000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 -0.300000:-1.000000 +r roundps_010 be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m roundps_010 be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r roundps_011 be99999abfa66666000000003f0000a8 80000000bf8000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m roundps_011 be99999abfa66666000000003f0000a8 80000000bf8000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r roundps_000 bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m roundps_000 bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r roundps_001 bdcccccdbf8ccccd800000003f333333 bf800000c00000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 -0.100000:-1.000000 +m roundps_001 bdcccccdbf8ccccd800000003f333333 bf800000c00000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 -0.100000:-1.000000 +r roundps_010 bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m roundps_010 bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r roundps_011 bdcccccdbf8ccccd800000003f333333 80000000bf8000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m roundps_011 bdcccccdbf8ccccd800000003f333333 80000000bf8000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r roundps_000 3dcccccdbf6666667f8000003f666666 00000000bf8000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +m roundps_000 3dcccccdbf6666667f8000003f666666 00000000bf8000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +r roundps_001 3dcccccdbf6666667f8000003f666666 00000000bf8000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +m roundps_001 3dcccccdbf6666667f8000003f666666 00000000bf8000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +r roundps_010 3dcccccdbf6666667f8000003f666666 3f800000800000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-0.000000 0.100000: 1.000000 +m roundps_010 3dcccccdbf6666667f8000003f666666 3f800000800000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-0.000000 0.100000: 1.000000 +r roundps_011 3dcccccdbf6666667f8000003f666666 00000000800000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-0.000000 0.100000: 0.000000 +m roundps_011 3dcccccdbf6666667f8000003f666666 00000000800000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-0.000000 0.100000: 0.000000 +r roundps_000 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +m roundps_000 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +r roundps_001 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +m roundps_001 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +r roundps_010 3e99999abf333333ff8000003f8ccccd 3f80000080000000ff80000040000000 1.100000: 2.000000 -inf: -inf -0.700000:-0.000000 0.300000: 1.000000 +m roundps_010 3e99999abf333333ff8000003f8ccccd 3f80000080000000ff80000040000000 1.100000: 2.000000 -inf: -inf -0.700000:-0.000000 0.300000: 1.000000 +r roundps_011 3e99999abf333333ff8000003f8ccccd 0000000080000000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-0.000000 0.300000: 0.000000 +m roundps_011 3e99999abf333333ff8000003f8ccccd 0000000080000000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-0.000000 0.300000: 0.000000 +r roundps_000 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +m roundps_000 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +r roundps_001 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +m roundps_001 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +r roundps_010 3efffeb0bf0000a87fc000003fa66666 3f800000800000007fc0000040000000 1.300000: 2.000000 nan: nan -0.500010:-0.000000 0.499990: 1.000000 +m roundps_010 3efffeb0bf0000a87fc000003fa66666 3f800000800000007fc0000040000000 1.300000: 2.000000 nan: nan -0.500010:-0.000000 0.499990: 1.000000 +r roundps_011 3efffeb0bf0000a87fc000003fa66666 00000000800000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-0.000000 0.499990: 0.000000 +m roundps_011 3efffeb0bf0000a87fc000003fa66666 00000000800000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-0.000000 0.499990: 0.000000 +r (rm=0) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m (rm=0) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r (rm=1) roundpd_1XX bfdfffd60e94ee390000000000000000 bff00000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -1.000000 +m (rm=1) roundpd_1XX bfdfffd60e94ee390000000000000000 bff00000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -1.000000 +r (rm=2) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m (rm=2) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r (rm=3) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +m (rm=3) roundpd_1XX bfdfffd60e94ee390000000000000000 80000000000000000000000000000000 0.000000 -> 0.000000 -0.499990 -> -0.000000 +r (rm=0) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m (rm=0) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r (rm=1) roundpd_1XX bfd33333333333338000000000000000 bff00000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -1.000000 +m (rm=1) roundpd_1XX bfd33333333333338000000000000000 bff00000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -1.000000 +r (rm=2) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m (rm=2) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r (rm=3) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +m (rm=3) roundpd_1XX bfd33333333333338000000000000000 80000000000000008000000000000000 -0.000000 -> -0.000000 -0.300000 -> -0.000000 +r (rm=0) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m (rm=0) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r (rm=1) roundpd_1XX bfb999999999999a7ff0000000000000 bff00000000000007ff0000000000000 inf -> inf -0.100000 -> -1.000000 +m (rm=1) roundpd_1XX bfb999999999999a7ff0000000000000 bff00000000000007ff0000000000000 inf -> inf -0.100000 -> -1.000000 +r (rm=2) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m (rm=2) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r (rm=3) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +m (rm=3) roundpd_1XX bfb999999999999a7ff0000000000000 80000000000000007ff0000000000000 inf -> inf -0.100000 -> -0.000000 +r (rm=0) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m (rm=0) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r (rm=1) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m (rm=1) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r (rm=2) roundpd_1XX 3fb999999999999afff0000000000000 3ff0000000000000fff0000000000000 -inf -> -inf 0.100000 -> 1.000000 +m (rm=2) roundpd_1XX 3fb999999999999afff0000000000000 3ff0000000000000fff0000000000000 -inf -> -inf 0.100000 -> 1.000000 +r (rm=3) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +m (rm=3) roundpd_1XX 3fb999999999999afff0000000000000 0000000000000000fff0000000000000 -inf -> -inf 0.100000 -> 0.000000 +r (rm=0) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m (rm=0) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r (rm=1) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m (rm=1) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r (rm=2) roundpd_1XX 3fd33333333333337ff8000000000000 3ff00000000000007ff8000000000000 nan -> nan 0.300000 -> 1.000000 +m (rm=2) roundpd_1XX 3fd33333333333337ff8000000000000 3ff00000000000007ff8000000000000 nan -> nan 0.300000 -> 1.000000 +r (rm=3) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +m (rm=3) roundpd_1XX 3fd33333333333337ff8000000000000 00000000000000007ff8000000000000 nan -> nan 0.300000 -> 0.000000 +r (rm=0) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m (rm=0) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r (rm=1) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m (rm=1) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r (rm=2) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 3ff0000000000000fff8000000000000 -nan -> -nan 0.499990 -> 1.000000 +m (rm=2) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 3ff0000000000000fff8000000000000 -nan -> -nan 0.499990 -> 1.000000 +r (rm=3) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +m (rm=3) roundpd_1XX 3fdfffd60e94ee39fff8000000000000 0000000000000000fff8000000000000 -nan -> -nan 0.499990 -> 0.000000 +r (rm=0) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +m (rm=0) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +r (rm=1) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 0000000000000000c000000000000000 -1.300000 -> -2.000000 0.500010 -> 0.000000 +m (rm=1) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 0000000000000000c000000000000000 -1.300000 -> -2.000000 0.500010 -> 0.000000 +r (rm=2) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +m (rm=2) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 3ff0000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 1.000000 +r (rm=3) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 0000000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 0.000000 +m (rm=3) roundpd_1XX 3fe00014f8b588e3bff4cccccccccccd 0000000000000000bff0000000000000 -1.300000 -> -1.000000 0.500010 -> 0.000000 +r (rm=0) roundpd_1XX 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +m (rm=0) roundpd_1XX 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +r (rm=1) roundpd_1XX 3fe6666666666666bff199999999999a 0000000000000000c000000000000000 -1.100000 -> -2.000000 0.700000 -> 0.000000 +m (rm=1) roundpd_1XX 3fe6666666666666bff199999999999a 0000000000000000c000000000000000 -1.100000 -> -2.000000 0.700000 -> 0.000000 +r (rm=2) roundpd_1XX 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +m (rm=2) roundpd_1XX 3fe6666666666666bff199999999999a 3ff0000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 1.000000 +r (rm=3) roundpd_1XX 3fe6666666666666bff199999999999a 0000000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 0.000000 +m (rm=3) roundpd_1XX 3fe6666666666666bff199999999999a 0000000000000000bff0000000000000 -1.100000 -> -1.000000 0.700000 -> 0.000000 +r (rm=0) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 3ff0000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 1.000000 +m (rm=0) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 3ff0000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 1.000000 +r (rm=1) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 0000000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 0.000000 +m (rm=1) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 0000000000000000bff0000000000000 -0.900000 -> -1.000000 0.900000 -> 0.000000 +r (rm=2) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 3ff00000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 1.000000 +m (rm=2) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 3ff00000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 1.000000 +r (rm=3) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 00000000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 0.000000 +m (rm=3) roundpd_1XX 3feccccccccccccdbfeccccccccccccd 00000000000000008000000000000000 -0.900000 -> -0.000000 0.900000 -> 0.000000 +r (rm=0) roundpd_1XX 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +m (rm=0) roundpd_1XX 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +r (rm=1) roundpd_1XX 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +m (rm=1) roundpd_1XX 3ff199999999999abfe6666666666666 3ff0000000000000bff0000000000000 -0.700000 -> -1.000000 1.100000 -> 1.000000 +r (rm=2) roundpd_1XX 3ff199999999999abfe6666666666666 40000000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 2.000000 +m (rm=2) roundpd_1XX 3ff199999999999abfe6666666666666 40000000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 2.000000 +r (rm=3) roundpd_1XX 3ff199999999999abfe6666666666666 3ff00000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 1.000000 +m (rm=3) roundpd_1XX 3ff199999999999abfe6666666666666 3ff00000000000008000000000000000 -0.700000 -> -0.000000 1.100000 -> 1.000000 +r (rm=0) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +m (rm=0) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +r (rm=1) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +m (rm=1) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff0000000000000bff0000000000000 -0.500010 -> -1.000000 1.300000 -> 1.000000 +r (rm=2) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 40000000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 2.000000 +m (rm=2) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 40000000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 2.000000 +r (rm=3) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff00000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 1.000000 +m (rm=3) roundpd_1XX 3ff4cccccccccccdbfe00014f8b588e3 3ff00000000000008000000000000000 -0.500010 -> -0.000000 1.300000 -> 1.000000 +r (rm=0) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m (rm=0) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r (rm=1) roundpd_1XX 0000000000000000bfdfffd60e94ee39 0000000000000000bff0000000000000 -0.499990 -> -1.000000 0.000000 -> 0.000000 +m (rm=1) roundpd_1XX 0000000000000000bfdfffd60e94ee39 0000000000000000bff0000000000000 -0.499990 -> -1.000000 0.000000 -> 0.000000 +r (rm=2) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m (rm=2) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r (rm=3) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +m (rm=3) roundpd_1XX 0000000000000000bfdfffd60e94ee39 00000000000000008000000000000000 -0.499990 -> -0.000000 0.000000 -> 0.000000 +r (rm=0) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m (rm=0) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r (rm=1) roundpd_1XX 8000000000000000bfd3333333333333 8000000000000000bff0000000000000 -0.300000 -> -1.000000 -0.000000 -> -0.000000 +m (rm=1) roundpd_1XX 8000000000000000bfd3333333333333 8000000000000000bff0000000000000 -0.300000 -> -1.000000 -0.000000 -> -0.000000 +r (rm=2) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m (rm=2) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r (rm=3) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +m (rm=3) roundpd_1XX 8000000000000000bfd3333333333333 80000000000000008000000000000000 -0.300000 -> -0.000000 -0.000000 -> -0.000000 +r (rm=0) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m (rm=0) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r (rm=1) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff0000000000000bff0000000000000 -0.100000 -> -1.000000 inf -> inf +m (rm=1) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff0000000000000bff0000000000000 -0.100000 -> -1.000000 inf -> inf +r (rm=2) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m (rm=2) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r (rm=3) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +m (rm=3) roundpd_1XX 7ff0000000000000bfb999999999999a 7ff00000000000008000000000000000 -0.100000 -> -0.000000 inf -> inf +r (rm=0) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m (rm=0) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r (rm=1) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m (rm=1) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r (rm=2) roundpd_1XX fff00000000000003fb999999999999a fff00000000000003ff0000000000000 0.100000 -> 1.000000 -inf -> -inf +m (rm=2) roundpd_1XX fff00000000000003fb999999999999a fff00000000000003ff0000000000000 0.100000 -> 1.000000 -inf -> -inf +r (rm=3) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +m (rm=3) roundpd_1XX fff00000000000003fb999999999999a fff00000000000000000000000000000 0.100000 -> 0.000000 -inf -> -inf +r (rm=0) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m (rm=0) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r (rm=1) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m (rm=1) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r (rm=2) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000003ff0000000000000 0.300000 -> 1.000000 nan -> nan +m (rm=2) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000003ff0000000000000 0.300000 -> 1.000000 nan -> nan +r (rm=3) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +m (rm=3) roundpd_1XX 7ff80000000000003fd3333333333333 7ff80000000000000000000000000000 0.300000 -> 0.000000 nan -> nan +r (rm=0) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m (rm=0) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r (rm=1) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m (rm=1) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r (rm=2) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000003ff0000000000000 0.499990 -> 1.000000 -nan -> -nan +m (rm=2) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000003ff0000000000000 0.499990 -> 1.000000 -nan -> -nan +r (rm=3) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +m (rm=3) roundpd_1XX fff80000000000003fdfffd60e94ee39 fff80000000000000000000000000000 0.499990 -> 0.000000 -nan -> -nan +r (rm=0) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +m (rm=0) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +r (rm=1) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 c0000000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -2.000000 +m (rm=1) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 c0000000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -2.000000 +r (rm=2) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +m (rm=2) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000003ff0000000000000 0.500010 -> 1.000000 -1.300000 -> -1.000000 +r (rm=3) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -1.000000 +m (rm=3) roundpd_1XX bff4cccccccccccd3fe00014f8b588e3 bff00000000000000000000000000000 0.500010 -> 0.000000 -1.300000 -> -1.000000 +r (rm=0) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +m (rm=0) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +r (rm=1) roundpd_1XX bff199999999999a3fe6666666666666 c0000000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -2.000000 +m (rm=1) roundpd_1XX bff199999999999a3fe6666666666666 c0000000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -2.000000 +r (rm=2) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +m (rm=2) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000003ff0000000000000 0.700000 -> 1.000000 -1.100000 -> -1.000000 +r (rm=3) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -1.000000 +m (rm=3) roundpd_1XX bff199999999999a3fe6666666666666 bff00000000000000000000000000000 0.700000 -> 0.000000 -1.100000 -> -1.000000 +r (rm=0) roundpd_1XX bfeccccccccccccd3feccccccccccccd bff00000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -1.000000 +m (rm=0) roundpd_1XX bfeccccccccccccd3feccccccccccccd bff00000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -1.000000 +r (rm=1) roundpd_1XX bfeccccccccccccd3feccccccccccccd bff00000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -1.000000 +m (rm=1) roundpd_1XX bfeccccccccccccd3feccccccccccccd bff00000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -1.000000 +r (rm=2) roundpd_1XX bfeccccccccccccd3feccccccccccccd 80000000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -0.000000 +m (rm=2) roundpd_1XX bfeccccccccccccd3feccccccccccccd 80000000000000003ff0000000000000 0.900000 -> 1.000000 -0.900000 -> -0.000000 +r (rm=3) roundpd_1XX bfeccccccccccccd3feccccccccccccd 80000000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -0.000000 +m (rm=3) roundpd_1XX bfeccccccccccccd3feccccccccccccd 80000000000000000000000000000000 0.900000 -> 0.000000 -0.900000 -> -0.000000 +r (rm=0) roundpd_1XX bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +m (rm=0) roundpd_1XX bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +r (rm=1) roundpd_1XX bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +m (rm=1) roundpd_1XX bfe66666666666663ff199999999999a bff00000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -1.000000 +r (rm=2) roundpd_1XX bfe66666666666663ff199999999999a 80000000000000004000000000000000 1.100000 -> 2.000000 -0.700000 -> -0.000000 +m (rm=2) roundpd_1XX bfe66666666666663ff199999999999a 80000000000000004000000000000000 1.100000 -> 2.000000 -0.700000 -> -0.000000 +r (rm=3) roundpd_1XX bfe66666666666663ff199999999999a 80000000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -0.000000 +m (rm=3) roundpd_1XX bfe66666666666663ff199999999999a 80000000000000003ff0000000000000 1.100000 -> 1.000000 -0.700000 -> -0.000000 +r (rm=0) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +m (rm=0) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +r (rm=1) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +m (rm=1) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd bff00000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -1.000000 +r (rm=2) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd 80000000000000004000000000000000 1.300000 -> 2.000000 -0.500010 -> -0.000000 +m (rm=2) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd 80000000000000004000000000000000 1.300000 -> 2.000000 -0.500010 -> -0.000000 +r (rm=3) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd 80000000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -0.000000 +m (rm=3) roundpd_1XX bfe00014f8b588e33ff4cccccccccccd 80000000000000003ff0000000000000 1.300000 -> 1.000000 -0.500010 -> -0.000000 +r (rm=0) roundps_1XX 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +m (rm=0) roundps_1XX 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +r (rm=1) roundps_1XX 3f0000a8befffeb0ffc0000000000000 00000000bf800000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-1.000000 0.500010: 0.000000 +m (rm=1) roundps_1XX 3f0000a8befffeb0ffc0000000000000 00000000bf800000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-1.000000 0.500010: 0.000000 +r (rm=2) roundps_1XX 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +m (rm=2) roundps_1XX 3f0000a8befffeb0ffc0000000000000 3f80000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 1.000000 +r (rm=3) roundps_1XX 3f0000a8befffeb0ffc0000000000000 0000000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 0.000000 +m (rm=3) roundps_1XX 3f0000a8befffeb0ffc0000000000000 0000000080000000ffc0000000000000 0.000000: 0.000000 -nan: -nan -0.499990:-0.000000 0.500010: 0.000000 +r (rm=0) roundps_1XX 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +m (rm=0) roundps_1XX 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +r (rm=1) roundps_1XX 3f333333be99999abfa6666680000000 00000000bf800000c000000080000000 -0.000000:-0.000000 -1.300000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 +m (rm=1) roundps_1XX 3f333333be99999abfa6666680000000 00000000bf800000c000000080000000 -0.000000:-0.000000 -1.300000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 +r (rm=2) roundps_1XX 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +m (rm=2) roundps_1XX 3f333333be99999abfa6666680000000 3f80000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 +r (rm=3) roundps_1XX 3f333333be99999abfa6666680000000 0000000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 +m (rm=3) roundps_1XX 3f333333be99999abfa6666680000000 0000000080000000bf80000080000000 -0.000000:-0.000000 -1.300000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 +r (rm=0) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +m (rm=0) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +r (rm=1) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 00000000bf800000c00000007f800000 inf: inf -1.100000:-2.000000 -0.100000:-1.000000 0.900000: 0.000000 +m (rm=1) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 00000000bf800000c00000007f800000 inf: inf -1.100000:-2.000000 -0.100000:-1.000000 0.900000: 0.000000 +r (rm=2) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +m (rm=2) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 3f80000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 +r (rm=3) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 0000000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 0.000000 +m (rm=3) roundps_1XX 3f666666bdcccccdbf8ccccd7f800000 0000000080000000bf8000007f800000 inf: inf -1.100000:-1.000000 -0.100000:-0.000000 0.900000: 0.000000 +r (rm=0) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +m (rm=0) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +r (rm=1) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +m (rm=1) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f80000000000000bf800000ff800000 -inf: -inf -0.900000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 +r (rm=2) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 400000003f80000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 +m (rm=2) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 400000003f80000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 +r (rm=3) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f8000000000000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 +m (rm=3) roundps_1XX 3f8ccccd3dcccccdbf666666ff800000 3f8000000000000080000000ff800000 -inf: -inf -0.900000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 +r (rm=0) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +m (rm=0) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +r (rm=1) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +m (rm=1) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000bf8000007fc00000 nan: nan -0.700000:-1.000000 0.300000: 0.000000 1.300000: 1.000000 +r (rm=2) roundps_1XX 3fa666663e99999abf3333337fc00000 400000003f800000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 1.000000 1.300000: 2.000000 +m (rm=2) roundps_1XX 3fa666663e99999abf3333337fc00000 400000003f800000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 1.000000 1.300000: 2.000000 +r (rm=3) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 0.000000 1.300000: 1.000000 +m (rm=3) roundps_1XX 3fa666663e99999abf3333337fc00000 3f80000000000000800000007fc00000 nan: nan -0.700000:-0.000000 0.300000: 0.000000 1.300000: 1.000000 +r (rm=0) roundps_1XX 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +m (rm=0) roundps_1XX 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +r (rm=1) roundps_1XX 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +m (rm=1) roundps_1XX 000000003efffeb0bf0000a8ffc00000 0000000000000000bf800000ffc00000 -nan: -nan -0.500010:-1.000000 0.499990: 0.000000 0.000000: 0.000000 +r (rm=2) roundps_1XX 000000003efffeb0bf0000a8ffc00000 000000003f80000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 1.000000 0.000000: 0.000000 +m (rm=2) roundps_1XX 000000003efffeb0bf0000a8ffc00000 000000003f80000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 1.000000 0.000000: 0.000000 +r (rm=3) roundps_1XX 000000003efffeb0bf0000a8ffc00000 000000000000000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 0.000000 0.000000: 0.000000 +m (rm=3) roundps_1XX 000000003efffeb0bf0000a8ffc00000 000000000000000080000000ffc00000 -nan: -nan -0.500010:-0.000000 0.499990: 0.000000 0.000000: 0.000000 +r (rm=0) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +m (rm=0) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +r (rm=1) roundps_1XX 800000003f0000a8befffeb0bfa66666 8000000000000000bf800000c0000000 -1.300000:-2.000000 -0.499990:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 +m (rm=1) roundps_1XX 800000003f0000a8befffeb0bfa66666 8000000000000000bf800000c0000000 -1.300000:-2.000000 -0.499990:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 +r (rm=2) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +m (rm=2) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000003f80000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 +r (rm=3) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000000000000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 +m (rm=3) roundps_1XX 800000003f0000a8befffeb0bfa66666 800000000000000080000000bf800000 -1.300000:-1.000000 -0.499990:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 +r (rm=0) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +m (rm=0) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +r (rm=1) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f80000000000000bf800000c0000000 -1.100000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 inf: inf +m (rm=1) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f80000000000000bf800000c0000000 -1.100000:-2.000000 -0.300000:-1.000000 0.700000: 0.000000 inf: inf +r (rm=2) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +m (rm=2) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000003f80000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 1.000000 inf: inf +r (rm=3) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000000000000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 inf: inf +m (rm=3) roundps_1XX 7f8000003f333333be99999abf8ccccd 7f8000000000000080000000bf800000 -1.100000:-1.000000 -0.300000:-0.000000 0.700000: 0.000000 inf: inf +r (rm=0) roundps_1XX ff8000003f666666bdcccccdbf666666 ff8000003f80000080000000bf800000 -0.900000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +m (rm=0) roundps_1XX ff8000003f666666bdcccccdbf666666 ff8000003f80000080000000bf800000 -0.900000:-1.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +r (rm=1) roundps_1XX ff8000003f666666bdcccccdbf666666 ff80000000000000bf800000bf800000 -0.900000:-1.000000 -0.100000:-1.000000 0.900000: 0.000000 -inf: -inf +m (rm=1) roundps_1XX ff8000003f666666bdcccccdbf666666 ff80000000000000bf800000bf800000 -0.900000:-1.000000 -0.100000:-1.000000 0.900000: 0.000000 -inf: -inf +r (rm=2) roundps_1XX ff8000003f666666bdcccccdbf666666 ff8000003f8000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +m (rm=2) roundps_1XX ff8000003f666666bdcccccdbf666666 ff8000003f8000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 1.000000 -inf: -inf +r (rm=3) roundps_1XX ff8000003f666666bdcccccdbf666666 ff800000000000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 0.000000 -inf: -inf +m (rm=3) roundps_1XX ff8000003f666666bdcccccdbf666666 ff800000000000008000000080000000 -0.900000:-0.000000 -0.100000:-0.000000 0.900000: 0.000000 -inf: -inf +r (rm=0) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m (rm=0) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r (rm=1) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m (rm=1) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f80000000000000bf800000 -0.700000:-1.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r (rm=2) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc00000400000003f80000080000000 -0.700000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 nan: nan +m (rm=2) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc00000400000003f80000080000000 -0.700000:-0.000000 0.100000: 1.000000 1.100000: 2.000000 nan: nan +r (rm=3) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f8000000000000080000000 -0.700000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +m (rm=3) roundps_1XX 7fc000003f8ccccd3dcccccdbf333333 7fc000003f8000000000000080000000 -0.700000:-0.000000 0.100000: 0.000000 1.100000: 1.000000 nan: nan +r (rm=0) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m (rm=0) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r (rm=1) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m (rm=1) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f80000000000000bf800000 -0.500010:-1.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r (rm=2) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc00000400000003f80000080000000 -0.500010:-0.000000 0.300000: 1.000000 1.300000: 2.000000 -nan: -nan +m (rm=2) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc00000400000003f80000080000000 -0.500010:-0.000000 0.300000: 1.000000 1.300000: 2.000000 -nan: -nan +r (rm=3) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f8000000000000080000000 -0.500010:-0.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +m (rm=3) roundps_1XX ffc000003fa666663e99999abf0000a8 ffc000003f8000000000000080000000 -0.500010:-0.000000 0.300000: 0.000000 1.300000: 1.000000 -nan: -nan +r (rm=0) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +m (rm=0) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +r (rm=1) roundps_1XX bfa66666000000003efffeb0befffeb0 c00000000000000000000000bf800000 -0.499990:-1.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 +m (rm=1) roundps_1XX bfa66666000000003efffeb0befffeb0 c00000000000000000000000bf800000 -0.499990:-1.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 +r (rm=2) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000003f80000080000000 -0.499990:-0.000000 0.499990: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 +m (rm=2) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000003f80000080000000 -0.499990:-0.000000 0.499990: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 +r (rm=3) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +m (rm=3) roundps_1XX bfa66666000000003efffeb0befffeb0 bf800000000000000000000080000000 -0.499990:-0.000000 0.499990: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 +r (rm=0) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m (rm=0) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r (rm=1) roundps_1XX bf8ccccd800000003f0000a8be99999a c00000008000000000000000bf800000 -0.300000:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 +m (rm=1) roundps_1XX bf8ccccd800000003f0000a8be99999a c00000008000000000000000bf800000 -0.300000:-1.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 +r (rm=2) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m (rm=2) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000003f80000080000000 -0.300000:-0.000000 0.500010: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r (rm=3) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000000000000080000000 -0.300000:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 +m (rm=3) roundps_1XX bf8ccccd800000003f0000a8be99999a bf800000800000000000000080000000 -0.300000:-0.000000 0.500010: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 +r (rm=0) roundps_1XX bf6666667f8000003f333333bdcccccd bf8000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-1.000000 +m (rm=0) roundps_1XX bf6666667f8000003f333333bdcccccd bf8000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-1.000000 +r (rm=1) roundps_1XX bf6666667f8000003f333333bdcccccd bf8000007f80000000000000bf800000 -0.100000:-1.000000 0.700000: 0.000000 inf: inf -0.900000:-1.000000 +m (rm=1) roundps_1XX bf6666667f8000003f333333bdcccccd bf8000007f80000000000000bf800000 -0.100000:-1.000000 0.700000: 0.000000 inf: inf -0.900000:-1.000000 +r (rm=2) roundps_1XX bf6666667f8000003f333333bdcccccd 800000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-0.000000 +m (rm=2) roundps_1XX bf6666667f8000003f333333bdcccccd 800000007f8000003f80000080000000 -0.100000:-0.000000 0.700000: 1.000000 inf: inf -0.900000:-0.000000 +r (rm=3) roundps_1XX bf6666667f8000003f333333bdcccccd 800000007f8000000000000080000000 -0.100000:-0.000000 0.700000: 0.000000 inf: inf -0.900000:-0.000000 +m (rm=3) roundps_1XX bf6666667f8000003f333333bdcccccd 800000007f8000000000000080000000 -0.100000:-0.000000 0.700000: 0.000000 inf: inf -0.900000:-0.000000 +r (rm=0) roundps_1XX bf333333ff8000003f6666663dcccccd bf800000ff8000003f80000000000000 0.100000: 0.000000 0.900000: 1.000000 -inf: -inf -0.700000:-1.000000 +m (rm=0) roundps_1XX bf333333ff8000003f6666663dcccccd bf800000ff8000003f80000000000000 0.100000: 0.000000 0.900000: 1.000000 -inf: -inf -0.700000:-1.000000 +r (rm=1) roundps_1XX bf333333ff8000003f6666663dcccccd bf800000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-1.000000 +m (rm=1) roundps_1XX bf333333ff8000003f6666663dcccccd bf800000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-1.000000 +r (rm=2) roundps_1XX bf333333ff8000003f6666663dcccccd 80000000ff8000003f8000003f800000 0.100000: 1.000000 0.900000: 1.000000 -inf: -inf -0.700000:-0.000000 +m (rm=2) roundps_1XX bf333333ff8000003f6666663dcccccd 80000000ff8000003f8000003f800000 0.100000: 1.000000 0.900000: 1.000000 -inf: -inf -0.700000:-0.000000 +r (rm=3) roundps_1XX bf333333ff8000003f6666663dcccccd 80000000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-0.000000 +m (rm=3) roundps_1XX bf333333ff8000003f6666663dcccccd 80000000ff8000000000000000000000 0.100000: 0.000000 0.900000: 0.000000 -inf: -inf -0.700000:-0.000000 +r (rm=0) roundps_1XX bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +m (rm=0) roundps_1XX bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +r (rm=1) roundps_1XX bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +m (rm=1) roundps_1XX bf0000a87fc000003f8ccccd3e99999a bf8000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-1.000000 +r (rm=2) roundps_1XX bf0000a87fc000003f8ccccd3e99999a 800000007fc00000400000003f800000 0.300000: 1.000000 1.100000: 2.000000 nan: nan -0.500010:-0.000000 +m (rm=2) roundps_1XX bf0000a87fc000003f8ccccd3e99999a 800000007fc00000400000003f800000 0.300000: 1.000000 1.100000: 2.000000 nan: nan -0.500010:-0.000000 +r (rm=3) roundps_1XX bf0000a87fc000003f8ccccd3e99999a 800000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-0.000000 +m (rm=3) roundps_1XX bf0000a87fc000003f8ccccd3e99999a 800000007fc000003f80000000000000 0.300000: 0.000000 1.100000: 1.000000 nan: nan -0.500010:-0.000000 +r (rm=0) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +m (rm=0) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +r (rm=1) roundps_1XX befffeb0ffc000003fa666663efffeb0 bf800000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-1.000000 +m (rm=1) roundps_1XX befffeb0ffc000003fa666663efffeb0 bf800000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-1.000000 +r (rm=2) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc00000400000003f800000 0.499990: 1.000000 1.300000: 2.000000 -nan: -nan -0.499990:-0.000000 +m (rm=2) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc00000400000003f800000 0.499990: 1.000000 1.300000: 2.000000 -nan: -nan -0.499990:-0.000000 +r (rm=3) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +m (rm=3) roundps_1XX befffeb0ffc000003fa666663efffeb0 80000000ffc000003f80000000000000 0.499990: 0.000000 1.300000: 1.000000 -nan: -nan -0.499990:-0.000000 +r (rm=0) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m (rm=0) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r (rm=1) roundps_1XX be99999abfa66666000000003f0000a8 bf800000c00000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 -0.300000:-1.000000 +m (rm=1) roundps_1XX be99999abfa66666000000003f0000a8 bf800000c00000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-2.000000 -0.300000:-1.000000 +r (rm=2) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m (rm=2) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf800000000000003f800000 0.500010: 1.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r (rm=3) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf8000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +m (rm=3) roundps_1XX be99999abfa66666000000003f0000a8 80000000bf8000000000000000000000 0.500010: 0.000000 0.000000: 0.000000 -1.300000:-1.000000 -0.300000:-0.000000 +r (rm=0) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m (rm=0) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r (rm=1) roundps_1XX bdcccccdbf8ccccd800000003f333333 bf800000c00000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 -0.100000:-1.000000 +m (rm=1) roundps_1XX bdcccccdbf8ccccd800000003f333333 bf800000c00000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-2.000000 -0.100000:-1.000000 +r (rm=2) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m (rm=2) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf800000800000003f800000 0.700000: 1.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r (rm=3) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf8000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +m (rm=3) roundps_1XX bdcccccdbf8ccccd800000003f333333 80000000bf8000008000000000000000 0.700000: 0.000000 -0.000000:-0.000000 -1.100000:-1.000000 -0.100000:-0.000000 +r (rm=0) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000bf8000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +m (rm=0) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000bf8000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +r (rm=1) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000bf8000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +m (rm=1) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000bf8000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-1.000000 0.100000: 0.000000 +r (rm=2) roundps_1XX 3dcccccdbf6666667f8000003f666666 3f800000800000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-0.000000 0.100000: 1.000000 +m (rm=2) roundps_1XX 3dcccccdbf6666667f8000003f666666 3f800000800000007f8000003f800000 0.900000: 1.000000 inf: inf -0.900000:-0.000000 0.100000: 1.000000 +r (rm=3) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000800000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-0.000000 0.100000: 0.000000 +m (rm=3) roundps_1XX 3dcccccdbf6666667f8000003f666666 00000000800000007f80000000000000 0.900000: 0.000000 inf: inf -0.900000:-0.000000 0.100000: 0.000000 +r (rm=0) roundps_1XX 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +m (rm=0) roundps_1XX 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +r (rm=1) roundps_1XX 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +m (rm=1) roundps_1XX 3e99999abf333333ff8000003f8ccccd 00000000bf800000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-1.000000 0.300000: 0.000000 +r (rm=2) roundps_1XX 3e99999abf333333ff8000003f8ccccd 3f80000080000000ff80000040000000 1.100000: 2.000000 -inf: -inf -0.700000:-0.000000 0.300000: 1.000000 +m (rm=2) roundps_1XX 3e99999abf333333ff8000003f8ccccd 3f80000080000000ff80000040000000 1.100000: 2.000000 -inf: -inf -0.700000:-0.000000 0.300000: 1.000000 +r (rm=3) roundps_1XX 3e99999abf333333ff8000003f8ccccd 0000000080000000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-0.000000 0.300000: 0.000000 +m (rm=3) roundps_1XX 3e99999abf333333ff8000003f8ccccd 0000000080000000ff8000003f800000 1.100000: 1.000000 -inf: -inf -0.700000:-0.000000 0.300000: 0.000000 +r (rm=0) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +m (rm=0) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +r (rm=1) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +m (rm=1) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000bf8000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-1.000000 0.499990: 0.000000 +r (rm=2) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 3f800000800000007fc0000040000000 1.300000: 2.000000 nan: nan -0.500010:-0.000000 0.499990: 1.000000 +m (rm=2) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 3f800000800000007fc0000040000000 1.300000: 2.000000 nan: nan -0.500010:-0.000000 0.499990: 1.000000 +r (rm=3) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000800000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-0.000000 0.499990: 0.000000 +m (rm=3) roundps_1XX 3efffeb0bf0000a87fc000003fa66666 00000000800000007fc000003f800000 1.300000: 1.000000 nan: nan -0.500010:-0.000000 0.499990: 0.000000