]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Complete x86 ROUNDSS, ROUNDSD support and add testcases
authorMark Wielaard <mark@klomp.org>
Sat, 2 May 2026 17:03:20 +0000 (19:03 +0200)
committerMark Wielaard <mark@klomp.org>
Wed, 6 May 2026 14:19:04 +0000 (16:19 +0200)
x86 already supported SSE 4.1 ROUNDSS and ROUNDSD instructions like
amd64. But was missing two small fixes.

commit 20277ab2a575ffb50eb4efd58b6a554ffc2927e1 (vex svn r2074)
Handle non-immediate-rounding-mode versions of ROUND{P,S}{S,D}.

commit 779b619c76900dd8d1aa16bb0c693918006019ee (vex svn r2211)
Ignore the precision flag in the ROUND{SS,SD,PS,PD} rounding mode.

Add these and adapt the ROUNDSS and ROUNDSD testcases so they work on
both amd64 and x86. Move get_mxcsr, set_mxcsr, get_sse_roundingmode
and set_sse_roundingmode from sse4-64.c to sse4-common.h (and add x86
variants). Move ROUNDSD and ROUNDSS test function and make them use
XMMREG_DST instead of xmm11 (which isn't available on x86).

Add testcase output for test_ROUNDSD_w_immediate_rounding(),
test_ROUNDSS_w_immediate_rounding(), test_ROUNDSD_w_mxcsr_rounding()
and test_ROUNDSS_w_mxcsr_rounding() to sse4-x86.stdout.exp.

https://bugs.kde.org/show_bug.cgi?id=518220

VEX/priv/guest_x86_toIR.c
none/tests/amd64/sse4-64.c
none/tests/sse4-common.h
none/tests/x86/sse4-x86.c
none/tests/x86/sse4-x86.stdout.exp

index 35677385d1fb121be4839a543b7a4b3d4675132f..3f207b231254ab96875586aea4941c304244aff5 100644 (file)
@@ -13408,10 +13408,7 @@ DisResult disInstr_X86_WRK (
    }
 
    /* 66 0F 3A 0B /r ib = ROUNDSD imm8, xmm2/m64, xmm1
-      (Partial implementation only -- only deal with cases where
-      the rounding mode is specified directly by the immediate byte.)
       66 0F 3A 0A /r ib = ROUNDSS imm8, xmm2/m32, xmm1
-      (Limitations ditto)
    */
    if (sz == 2 
        && insn[0] == 0x0F && insn[1] == 0x3A
@@ -13429,7 +13426,7 @@ DisResult disInstr_X86_WRK (
                  isD ? getXMMRegLane64F( eregOfRM(modrm), 0 )
                      : getXMMRegLane32F( eregOfRM(modrm), 0 ) );
          imm = insn[3+1];
-         if (imm & ~3) goto decode_failure;
+         if (imm & ~15) goto decode_failure;
          delta += 3+1+1;
          DIP( "rounds%c $%d,%s,%s\n",
               isD ? 'd' : 's',
@@ -13439,7 +13436,7 @@ DisResult disInstr_X86_WRK (
          addr = disAMode( &alen, sorb, delta+3, dis_buf );
          assign( src, loadLE( isD ? Ity_F64 : Ity_F32, mkexpr(addr) ));
          imm = insn[3+alen];
-         if (imm & ~3) goto decode_failure;
+         if (imm & ~15) goto decode_failure;
          delta += 3+alen+1;
          DIP( "roundsd $%d,%s,%s\n",
               imm, dis_buf, nameXMMReg( gregOfRM(modrm) ) );
@@ -13450,7 +13447,9 @@ DisResult disInstr_X86_WRK (
          we can use that value directly in the IR as a rounding
          mode. */
       assign(res, binop(isD ? Iop_RoundF64toInt : Iop_RoundF32toInt,
-                  mkU32(imm & 3), mkexpr(src)) );
+                        (imm & 4) ? get_sse_roundingmode()
+                                  : mkU32(imm & 3),
+                        mkexpr(src)) );
 
       if (isD)
          putXMMRegLane64F( gregOfRM(modrm), 0, mkexpr(res) );
index 65f610a07ed88500831656b30a64049e37eaca61..5aae5f755f5ebbb3616e48e2e829865316f0ca00 100644 (file)
 
 #include "../sse4-common.h"
 
-__attribute__((noinline))
-UInt get_mxcsr ( void )
-{
-   ULong w64;
-   __asm__ __volatile__(
-      "subq    $8, %%rsp"    "\n\t"
-      "stmxcsr (%%rsp)"      "\n\t"
-      "movq    (%%rsp), %0"  "\n"
-      "addq    $8, %%rsp"
-      : /*OUT*/"=r"(w64) : /*IN*/ : "memory","cc"
-   );
-   if (0) printf("get %08x\n", (UInt)w64);
-   return (UInt)w64;
-}
-
-__attribute__((noinline))
-void set_mxcsr ( UInt w32 )
-{
-   if (0) printf("set %08x\n", w32);
-   ULong w64 = (ULong)w32;
-   __asm__ __volatile__(
-      "subq    $8, %%rsp"    "\n\t"
-      "movq    %0, (%%rsp)"  "\n\t"
-      "ldmxcsr (%%rsp)"      "\n\t"
-      "addq    $8, %%rsp"
-      : /*OUT*/ : /*IN*/"r"(w64) : "memory",/*"mxcsr",*/"cc"
-   );
-}
-
-UInt get_sse_roundingmode ( void )
-{
-   UInt w = get_mxcsr();
-   return (w >> 13) & 3;
-}
-
-void set_sse_roundingmode ( UInt m )
-{
-   UInt w;
-   assert(0 == (m & ~3));
-   w = get_mxcsr();
-   w &= ~(3 << 13);
-   w |= (m << 13);
-   set_mxcsr(w);
-}
-
 /* Architecture-specific macros for amd64 (use %r11) */
 
 
@@ -1490,637 +1445,6 @@ void test_PCMPGTQ ( void )
    }
 }
 
-/* ------------ ROUNDSD ------------ */
-
-void do_ROUNDSD_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundsd $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"
-         "roundsd $0, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSD_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundsd $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"
-         "roundsd $1, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSD_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundsd $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"
-         "roundsd $2, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSD_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundsd $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"
-         "roundsd $3, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundsd $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"
-         "roundsd $4, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void test_ROUNDSD_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);
-      do_ROUNDSD_000(False/*reg*/, &src, &dst);
-      printf("r roundsd_000  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_000(True/*mem*/, &src, &dst);
-      printf("m roundsd_000  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_001(False/*reg*/, &src, &dst);
-      printf("r roundsd_001  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_001(True/*mem*/, &src, &dst);
-      printf("m roundsd_001  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_010(False/*reg*/, &src, &dst);
-      printf("r roundsd_010  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_010(True/*mem*/, &src, &dst);
-      printf("m roundsd_010  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_011(False/*reg*/, &src, &dst);
-      printf("r roundsd_011  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 8);
-      do_ROUNDSD_011(True/*mem*/, &src, &dst);
-      printf("m roundsd_011  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-      printf("\n");
-   }
-}
-
-void test_ROUNDSD_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);
-         do_ROUNDSD_1XX(False/*reg*/, &src, &dst);
-         printf("r (rm=%u) roundsd_1XX  ", rm);
-         showV128(&src);
-         printf(" ");
-         showV128(&dst);
-         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-         printf("\n");
-
-         randV128(&src);
-         randV128(&dst);
-         memcpy(&src[0], &vals[i], 8);
-         do_ROUNDSD_1XX(True/*mem*/, &src, &dst);
-         printf("m (rm=%u) roundsd_1XX  ", rm);
-         showV128(&src);
-         printf(" ");
-         showV128(&dst);
-         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
-         printf("\n");
-      }
-   }
-
-   rm = get_sse_roundingmode();
-   assert(rm == 3);
-   set_sse_roundingmode(0);
-   rm = get_sse_roundingmode();
-   assert(rm == 0); // 0 == RN == default
-}
-
-
-/* ------------ ROUNDSS ------------ */
-
-void do_ROUNDSS_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundss $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"
-         "roundss $0, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSS_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundss $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"
-         "roundss $1, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSS_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundss $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"
-         "roundss $2, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSS_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundss $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"
-         "roundss $3, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void do_ROUNDSS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
-{
-   if (mem) {
-      __asm__ __volatile__(
-         "movupd  (%1), %%xmm11"       "\n\t"
-         "roundss $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"
-         "roundss $4, %%xmm2, %%xmm11"   "\n\t"
-         "movupd  %%xmm11, (%1)"         "\n"
-         : /*OUT*/
-         : /*IN*/ "r"(src), "r"(dst)
-         : /*TRASH*/ "xmm11","xmm2"
-      );
-   }
-}
-
-void test_ROUNDSS_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);
-      do_ROUNDSS_000(False/*reg*/, &src, &dst);
-      printf("r roundss_000  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_000(True/*mem*/, &src, &dst);
-      printf("m roundss_000  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_001(False/*reg*/, &src, &dst);
-      printf("r roundss_001  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_001(True/*mem*/, &src, &dst);
-      printf("m roundss_001  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_010(False/*reg*/, &src, &dst);
-      printf("r roundss_010  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_010(True/*mem*/, &src, &dst);
-      printf("m roundss_010  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_011(False/*reg*/, &src, &dst);
-      printf("r roundss_011  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-
-      randV128(&src);
-      randV128(&dst);
-      memcpy(&src[0], &vals[i], 4);
-      do_ROUNDSS_011(True/*mem*/, &src, &dst);
-      printf("m roundss_011  ");
-      showV128(&src);
-      printf(" ");
-      showV128(&dst);
-      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-      printf("\n");
-   }
-}
-
-void test_ROUNDSS_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);
-         do_ROUNDSS_1XX(False/*reg*/, &src, &dst);
-         printf("r (rm=%u) roundss_1XX  ", rm);
-         showV128(&src);
-         printf(" ");
-         showV128(&dst);
-         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-         printf("\n");
-
-         randV128(&src);
-         randV128(&dst);
-         memcpy(&src[0], &vals[i], 4);
-         do_ROUNDSS_1XX(True/*mem*/, &src, &dst);
-         printf("m (rm=%u) roundss_1XX  ", rm);
-         showV128(&src);
-         printf(" ");
-         showV128(&dst);
-         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
-         printf("\n");
-      }
-   }
-
-   rm = get_sse_roundingmode();
-   assert(rm == 3);
-   set_sse_roundingmode(0);
-   rm = get_sse_roundingmode();
-   assert(rm == 0); // 0 == RN == default
-}
-
 /* ------------ ROUNDPD ------------ */
 
 void do_ROUNDPD_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
index aabbfeb4c7f1721dbef6b94115ceee9f2d67c0b0..8b87316f7d29bcea8b203b25e5abdf7fabdd61fe 100644 (file)
@@ -157,6 +157,77 @@ static inline double mkNegInf ( void ) { return -mkPosInf(); }
 static inline double mkPosNan ( void ) { return 0.0 / 0.0; }
 static inline double mkNegNan ( void ) { return -mkPosNan(); }
 
+#ifdef __x86_64__
+static inline UInt get_mxcsr ( void )
+{
+   ULong w64;
+   __asm__ __volatile__(
+      "subq    $8, %%rsp"    "\n\t"
+      "stmxcsr (%%rsp)"      "\n\t"
+      "movq    (%%rsp), %0"  "\n"
+      "addq    $8, %%rsp"
+      : /*OUT*/"=r"(w64) : /*IN*/ : "memory","cc"
+   );
+   if (0) printf("get %08x\n", (UInt)w64);
+   return (UInt)w64;
+}
+
+static inline void set_mxcsr ( UInt w32 )
+{
+   if (0) printf("set %08x\n", w32);
+   ULong w64 = (ULong)w32;
+   __asm__ __volatile__(
+      "subq    $8, %%rsp"    "\n\t"
+      "movq    %0, (%%rsp)"  "\n\t"
+      "ldmxcsr (%%rsp)"      "\n\t"
+      "addq    $8, %%rsp"
+      : /*OUT*/ : /*IN*/"r"(w64) : "memory",/*"mxcsr",*/"cc"
+   );
+}
+#else
+static inline UInt get_mxcsr ( void )
+{
+   UInt w32;
+   __asm__ __volatile__(
+      "sub     $8, %%esp"    "\n\t"
+      "stmxcsr (%%esp)"      "\n\t"
+      "movl    (%%esp), %0"  "\n"
+      "add     $8, %%esp"
+      : /*OUT*/"=r"(w32) : /*IN*/ : "memory","cc"
+   );
+   if (0) printf("get %08x\n", w32);
+   return w32;
+}
+
+static inline void set_mxcsr ( UInt w32 )
+{
+   if (0) printf("set %08x\n", w32);
+    __asm__ __volatile__(
+      "sub     $8, %%esp"    "\n\t"
+      "movl    %0, (%%esp)"  "\n\t"
+      "ldmxcsr (%%esp)"      "\n\t"
+      "add     $8, %%esp"
+      : /*OUT*/ : /*IN*/"r"(w32) : "memory",/*"mxcsr",*/"cc"
+   );
+}
+#endif
+
+static inline UInt get_sse_roundingmode ( void )
+{
+   UInt w = get_mxcsr();
+   return (w >> 13) & 3;
+}
+
+static inline void set_sse_roundingmode ( UInt m )
+{
+   UInt w;
+   assert(0 == (m & ~3));
+   w = get_mxcsr();
+   w &= ~(3 << 13);
+   w |= (m << 13);
+   set_mxcsr(w);
+}
+
 /* Macros for testing XMM register to register and memory to register operations */
 
 /* Use xmm7 for 32-bit x86 and xxm11 for amd64
@@ -908,4 +979,635 @@ static inline void test_MOVNTDQA ( void )
    }
 }
 
+/* ------------ ROUNDSD ------------ */
+
+static inline void do_ROUNDSD_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundsd $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"
+         "roundsd $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_ROUNDSD_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundsd $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"
+         "roundsd $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_ROUNDSD_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundsd $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"
+         "roundsd $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_ROUNDSD_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundsd $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"
+         "roundsd $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_ROUNDSD_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundsd $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"
+         "roundsd $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_ROUNDSD_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);
+      do_ROUNDSD_000(False/*reg*/, &src, &dst);
+      printf("r roundsd_000  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_000(True/*mem*/, &src, &dst);
+      printf("m roundsd_000  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_001(False/*reg*/, &src, &dst);
+      printf("r roundsd_001  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_001(True/*mem*/, &src, &dst);
+      printf("m roundsd_001  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_010(False/*reg*/, &src, &dst);
+      printf("r roundsd_010  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_010(True/*mem*/, &src, &dst);
+      printf("m roundsd_010  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_011(False/*reg*/, &src, &dst);
+      printf("r roundsd_011  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 8);
+      do_ROUNDSD_011(True/*mem*/, &src, &dst);
+      printf("m roundsd_011  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+      printf("\n");
+   }
+}
+
+static inline void test_ROUNDSD_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);
+         do_ROUNDSD_1XX(False/*reg*/, &src, &dst);
+         printf("r (rm=%u) roundsd_1XX  ", rm);
+         showV128(&src);
+         printf(" ");
+         showV128(&dst);
+         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+         printf("\n");
+
+         randV128(&src);
+         randV128(&dst);
+         memcpy(&src[0], &vals[i], 8);
+         do_ROUNDSD_1XX(True/*mem*/, &src, &dst);
+         printf("m (rm=%u) roundsd_1XX  ", rm);
+         showV128(&src);
+         printf(" ");
+         showV128(&dst);
+         printf("  %10f %10f", vals[i], *(double*)(&dst[0]));
+         printf("\n");
+      }
+   }
+
+   rm = get_sse_roundingmode();
+   assert(rm == 3);
+   set_sse_roundingmode(0);
+   rm = get_sse_roundingmode();
+   assert(rm == 0); // 0 == RN == default
+}
+
+
+/* ------------ ROUNDSS ------------ */
+
+static inline void do_ROUNDSS_000 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST      "\n\t"
+         "roundss $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"
+         "roundss $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_ROUNDSS_001 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST       "\n\t"
+         "roundss $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"
+         "roundss $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_ROUNDSS_010 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundss $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"
+         "roundss $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_ROUNDSS_011 ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundss $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"
+         "roundss $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_ROUNDSS_1XX ( Bool mem, V128* src, /*OUT*/V128* dst )
+{
+   if (mem) {
+      __asm__ __volatile__(
+         "movupd  (%1), %%" XMMREG_DST     "\n\t"
+         "roundss $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"
+         "roundss $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_ROUNDSS_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);
+      do_ROUNDSS_000(False/*reg*/, &src, &dst);
+      printf("r roundss_000  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_000(True/*mem*/, &src, &dst);
+      printf("m roundss_000  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_001(False/*reg*/, &src, &dst);
+      printf("r roundss_001  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_001(True/*mem*/, &src, &dst);
+      printf("m roundss_001  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_010(False/*reg*/, &src, &dst);
+      printf("r roundss_010  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_010(True/*mem*/, &src, &dst);
+      printf("m roundss_010  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_011(False/*reg*/, &src, &dst);
+      printf("r roundss_011  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+
+      randV128(&src);
+      randV128(&dst);
+      memcpy(&src[0], &vals[i], 4);
+      do_ROUNDSS_011(True/*mem*/, &src, &dst);
+      printf("m roundss_011  ");
+      showV128(&src);
+      printf(" ");
+      showV128(&dst);
+      printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+      printf("\n");
+   }
+}
+
+static inline void test_ROUNDSS_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);
+         do_ROUNDSS_1XX(False/*reg*/, &src, &dst);
+         printf("r (rm=%u) roundss_1XX  ", rm);
+         showV128(&src);
+         printf(" ");
+         showV128(&dst);
+         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+         printf("\n");
+
+         randV128(&src);
+         randV128(&dst);
+         memcpy(&src[0], &vals[i], 4);
+         do_ROUNDSS_1XX(True/*mem*/, &src, &dst);
+         printf("m (rm=%u) roundss_1XX  ", rm);
+         showV128(&src);
+         printf(" ");
+         showV128(&dst);
+         printf("  %10f %10f", (double)vals[i], (double)*(float*)(&dst[0]));
+         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 */
index 9996d63e9e98c38deef7ece0782ea25c600e64dc..62821bda54e26f31962bbca6c6fd11eb89197204 100644 (file)
@@ -166,6 +166,10 @@ int main(void)
    test_PCMPEQQ();
    test_MPSADBW();
    test_MOVNTDQA();
+   test_ROUNDSD_w_immediate_rounding();
+   test_ROUNDSS_w_immediate_rounding();
+   test_ROUNDSD_w_mxcsr_rounding();
+   test_ROUNDSS_w_mxcsr_rounding();
 
    return 0;
 }
index cf91b133619f05535d50658da57f21ec7c9fb4f4..ce3f8966a565a0ce677bed9bac15740981c0dd70 100644 (file)
@@ -2052,3 +2052,707 @@ m   movntdqa f6d81f33742433f2cc7dd6bb9c2cca19 53ca44aebd31b5254262bdc16b771596 f
 m   movntdqa b0e63d866320c355ed98b4a9e8d6e4c1 09e4bb78a8121467db27fc0066bc7f4f b0e63d866320c355ed98b4a9e8d6e4c1
 m   movntdqa 39df4ba2b0883fa0f57ab3b51afb0c56 fb4f5f827e66bca6095bd91417c2934b 39df4ba2b0883fa0f57ab3b51afb0c56
 m   movntdqa eb0e45f4f7eae27ec0f14ecb50a5fc04 84562c36ddb9ea8ea8c8d0e79a950eb5 eb0e45f4f7eae27ec0f14ecb50a5fc04
+r roundsd_000  23c025e6d5d2e99c0000000000000000 02471f026197d9cd0000000000000000    0.000000   0.000000
+m roundsd_000  3d42e9e6e5cb90a60000000000000000 cf6c3250a58dc60d0000000000000000    0.000000   0.000000
+r roundsd_001  95de8b5fc46113470000000000000000 4912638e4626edfa0000000000000000    0.000000   0.000000
+m roundsd_001  87e109bc0d20ad2c0000000000000000 cb85ad27dfef8a410000000000000000    0.000000   0.000000
+r roundsd_010  6f975f6b5d959b000000000000000000 b0100d870c73d98e0000000000000000    0.000000   0.000000
+m roundsd_010  a94b87d74f4b19700000000000000000 56017d1a6a3e158c0000000000000000    0.000000   0.000000
+r roundsd_011  914b7f6c80ce63280000000000000000 17a2fb4c94dd7be80000000000000000    0.000000   0.000000
+m roundsd_011  83e142978babb4d30000000000000000 5040828927db464e0000000000000000    0.000000   0.000000
+r roundsd_000  db5accc20d6d491e8000000000000000 5e270e3ebfc4b3698000000000000000   -0.000000  -0.000000
+m roundsd_000  f502195aa1a15db48000000000000000 9ba39cd5f625fee58000000000000000   -0.000000  -0.000000
+r roundsd_001  2c2526cce3d22e428000000000000000 640027bc6b8963708000000000000000   -0.000000  -0.000000
+m roundsd_001  de0fee83708cf6738000000000000000 168aaa5db77c1eb38000000000000000   -0.000000  -0.000000
+r roundsd_010  660b6deae45bf2f58000000000000000 0b8c2426798b6a5d8000000000000000   -0.000000  -0.000000
+m roundsd_010  20669f6fdacc5d718000000000000000 a0538e824a4184188000000000000000   -0.000000  -0.000000
+r roundsd_011  676d807dee6a75968000000000000000 312ce5ddc92aa7908000000000000000   -0.000000  -0.000000
+m roundsd_011  996a0d80bdc2740e8000000000000000 1a6126a38fd311738000000000000000   -0.000000  -0.000000
+r roundsd_000  11aa41e4e25f96857ff0000000000000 b83e4c403ac7fc6a7ff0000000000000         inf        inf
+m roundsd_000  2a781815facd19a87ff0000000000000 651153206692a4247ff0000000000000         inf        inf
+r roundsd_001  42228e7fa19937237ff0000000000000 7e2538b0aec1474b7ff0000000000000         inf        inf
+m roundsd_001  b3f2a08f714e2da17ff0000000000000 5fc5f55aaedf1f8b7ff0000000000000         inf        inf
+r roundsd_010  db3648af097836cf7ff0000000000000 643e888b037969927ff0000000000000         inf        inf
+m roundsd_010  1438844d02a38f597ff0000000000000 e9dcecb0491961097ff0000000000000         inf        inf
+r roundsd_011  bc4550d3fa5c74ea7ff0000000000000 4aeb1e341b4e429f7ff0000000000000         inf        inf
+m roundsd_011  2da9a6af8d2f212e7ff0000000000000 e3b7188215a149fe7ff0000000000000         inf        inf
+r roundsd_000  c5af844c56a6d2d3fff0000000000000 0f8bd808d4a0b2d2fff0000000000000        -inf       -inf
+m roundsd_000  dea5e516f24fc282fff0000000000000 2cb55931f3d6b9c8fff0000000000000        -inf       -inf
+r roundsd_001  d5d5c579fcb62eeafff0000000000000 957f97690fcf998cfff0000000000000        -inf       -inf
+m roundsd_001  078c20e1106551b5fff0000000000000 a6368e1cc3188fcafff0000000000000        -inf       -inf
+r roundsd_010  ce16f2bacbea6990fff0000000000000 bb263bb7ac3dd62dfff0000000000000        -inf       -inf
+m roundsd_010  87bf3870c9d1b026fff0000000000000 2f9b99a465c8ac61fff0000000000000        -inf       -inf
+r roundsd_011  8ed3ed6fa5a46224fff0000000000000 60e0a4508b474b13fff0000000000000        -inf       -inf
+m roundsd_011  409d0d24fbf1bd35fff0000000000000 a9435828b945f0effff0000000000000        -inf       -inf
+r roundsd_000  f76b95fa6844fb06fff8000000000000 650eb2968b4fd6a0fff8000000000000        -nan       -nan
+m roundsd_000  10877f5c87275943fff8000000000000 f28eac089ff03bd3fff8000000000000        -nan       -nan
+r roundsd_001  e73ec9b8f5291397fff8000000000000 aa0f44e98eb45934fff8000000000000        -nan       -nan
+m roundsd_001  d8dc6e794dd364affff8000000000000 ebdd75a5f6276c6efff8000000000000        -nan       -nan
+r roundsd_010  3fad6a0b2cb38936fff8000000000000 0f443ca873d6b22dfff8000000000000        -nan       -nan
+m roundsd_010  78fcbada2d54bed9fff8000000000000 7490935e9f4d651ffff8000000000000        -nan       -nan
+r roundsd_011  df175852ed423e44fff8000000000000 740c78331916c2eefff8000000000000        -nan       -nan
+m roundsd_011  d04842df070a4722fff8000000000000 6d05e6937bbf0446fff8000000000000        -nan       -nan
+r roundsd_000  a7dc73ed183713207ff8000000000000 b9c7d9eb61d469d47ff8000000000000         nan        nan
+m roundsd_000  bf1fe8e9bb56dee97ff8000000000000 b59e4ea568df2b447ff8000000000000         nan        nan
+r roundsd_001  765d9b3d8cf2e62a7ff8000000000000 bed6402f2b6e86417ff8000000000000         nan        nan
+m roundsd_001  27e28a572897658e7ff8000000000000 2ebbabf3470db8787ff8000000000000         nan        nan
+r roundsd_010  2ef9b0a22bd197c37ff8000000000000 62988b5f5746fb947ff8000000000000         nan        nan
+m roundsd_010  e7f00989302dba727ff8000000000000 b6badcdef8a78c427ff8000000000000         nan        nan
+r roundsd_011  ad11927ad336084a7ff8000000000000 876d9bdcc5bca72e7ff8000000000000         nan        nan
+m roundsd_011  dea946e0b179bef57ff8000000000000 2ffdc2c55b0f87037ff8000000000000         nan        nan
+r roundsd_000  d50420276581181fbff4cccccccccccd 0bb64f05552e696ebff0000000000000   -1.300000  -1.000000
+m roundsd_000  ed6e1ebb8cda5175bff4cccccccccccd 77e43d084fa5891abff0000000000000   -1.300000  -1.000000
+r roundsd_001  84323c09c110a7a3bff4cccccccccccd cfd2893ae6ff22b4c000000000000000   -1.300000  -2.000000
+m roundsd_001  f49e747ba1b05354bff4cccccccccccd 6fce2e08b6c871e8c000000000000000   -1.300000  -2.000000
+r roundsd_010  9bfcc47ec7469435bff4cccccccccccd b32227dc5a8cb261bff0000000000000   -1.300000  -1.000000
+m roundsd_010  d399277fd05ca4f2bff4cccccccccccd f71b72246ed821ccbff0000000000000   -1.300000  -1.000000
+r roundsd_011  fac199e95780c036bff4cccccccccccd 97050b4a8f37f9d4bff0000000000000   -1.300000  -1.000000
+m roundsd_011  6ac01727f93e24adbff4cccccccccccd ef2cecbc58357726bff0000000000000   -1.300000  -1.000000
+r roundsd_000  81e19ba751200b05bff199999999999a 5bdb13e5665fd76ebff0000000000000   -1.100000  -1.000000
+m roundsd_000  997223d4fcb4b3e7bff199999999999a 37607b3155405557bff0000000000000   -1.100000  -1.000000
+r roundsd_001  0fbdaa1a95855502bff199999999999a de05200cbf652c8ec000000000000000   -1.100000  -2.000000
+m roundsd_001  3f0f2ce5b8203000bff199999999999a ae17ffe2435999bec000000000000000   -1.100000  -2.000000
+r roundsd_010  86b5a6a102107e8ebff199999999999a 02e2121f7aa8d894bff0000000000000   -1.100000  -1.000000
+m roundsd_010  3ef813ba0fe17c57bff199999999999a 36b2573003de24bcbff0000000000000   -1.100000  -1.000000
+r roundsd_011  c4276f9d7a206608bff199999999999a a5d2c97f7788bae1bff0000000000000   -1.100000  -1.000000
+m roundsd_011  748db6b4df58784cbff199999999999a ad90647a7432d6afbff0000000000000   -1.100000  -1.000000
+r roundsd_000  aa75e46ddb16edd0bfeccccccccccccd a936258b9666b4d4bff0000000000000   -0.900000  -1.000000
+m roundsd_000  c32cf63309e40240bfeccccccccccccd f411072078b28ffabff0000000000000   -0.900000  -1.000000
+r roundsd_001  19fee7710650f247bfeccccccccccccd ec6d05a4b6a1a4cdbff0000000000000   -0.900000  -1.000000
+m roundsd_001  0937b3956de6fb92bfeccccccccccccd eb961e83edc02ffabff0000000000000   -0.900000  -1.000000
+r roundsd_010  ef23560adb3157ccbfeccccccccccccd 4fd84b29b99a6b2d8000000000000000   -0.900000  -0.000000
+m roundsd_010  270ecc3cebbd43a2bfeccccccccccccd 727e8a02b5bb95118000000000000000   -0.900000  -0.000000
+r roundsd_011  0d4312973a16fac0bfeccccccccccccd b2d6d57a7db0e9538000000000000000   -0.900000  -0.000000
+m roundsd_011  fd0f238763c9b9d1bfeccccccccccccd 692a2afdae04a39e8000000000000000   -0.900000  -0.000000
+r roundsd_000  52bffb790361bc82bfe6666666666666 f4c785f8e443fea0bff0000000000000   -0.700000  -1.000000
+m roundsd_000  6a9d96d7b56b3f7ebfe6666666666666 b0f9e0d5b9fa3702bff0000000000000   -0.700000  -1.000000
+r roundsd_001  a0f5f10f15717d72bfe6666666666666 f70c3901ccb48a72bff0000000000000   -0.700000  -1.000000
+m roundsd_001  5015078bc002b309bfe6666666666666 264b8be9b6fd329cbff0000000000000   -0.700000  -1.000000
+r roundsd_010  d648d4b952a71df1bfe6666666666666 9a04d2f816626c2c8000000000000000   -0.700000  -0.000000
+m roundsd_010  8dd9540466eef7d3bfe6666666666666 ad810a9a856e74cd8000000000000000   -0.700000  -0.000000
+r roundsd_011  d31583d898627c5ebfe6666666666666 bc0f303ba1ad862b8000000000000000   -0.700000  -0.000000
+m roundsd_011  03485ea08590e93cbfe6666666666666 23fa3e4706acddf48000000000000000   -0.700000  -0.000000
+r roundsd_000  78bee0cbc8037a19bfe00014f8b588e3 3e8e322a4ff6b6d1bff0000000000000   -0.500010  -1.000000
+m roundsd_000  90c305c2fe476aa2bfe00014f8b588e3 6917085019174d71bff0000000000000   -0.500010  -1.000000
+r roundsd_001  a6a3c9f2c2e8f683bfe00014f8b588e3 00e0ba25ff9cdd7ebff0000000000000   -0.500010  -1.000000
+m roundsd_001  15a929c7b1735a67bfe00014f8b588e3 5f3646169d10a4a4bff0000000000000   -0.500010  -1.000000
+r roundsd_010  3b2220ae6674d2fbbfe00014f8b588e3 e266a78d90ffdc918000000000000000   -0.500010  -0.000000
+m roundsd_010  725aaa117e7599ebbfe00014f8b588e3 e5bad9f874f6c1ee8000000000000000   -0.500010  -0.000000
+r roundsd_011  189dc35e9404ece2bfe00014f8b588e3 c47fd8c1e480916a8000000000000000   -0.500010  -0.000000
+m roundsd_011  8737670045ac078cbfe00014f8b588e3 db00a0567c2a86af8000000000000000   -0.500010  -0.000000
+r roundsd_000  1c7493622cfa2597bfdfffd60e94ee39 868b2e22d97fdd698000000000000000   -0.499990  -0.000000
+m roundsd_000  349f42f2e67983acbfdfffd60e94ee39 216a7d91960bd1458000000000000000   -0.499990  -0.000000
+r roundsd_001  2906701b0eb55d7abfdfffd60e94ee39 08eb890f505a9fefbff0000000000000   -0.499990  -1.000000
+m roundsd_001  58f31949403befabbfdfffd60e94ee39 96584f08a2f98312bff0000000000000   -0.499990  -1.000000
+r roundsd_010  1eb33ae9199674ecbfdfffd60e94ee39 29fec9e82973b95b8000000000000000   -0.499990  -0.000000
+m roundsd_010  d592cd65355229e8bfdfffd60e94ee39 1c28f51c80557c768000000000000000   -0.499990  -0.000000
+r roundsd_011  dadbd02a2efc4a4cbfdfffd60e94ee39 cb24ce0e442a090e8000000000000000   -0.499990  -0.000000
+m roundsd_011  89dc3ea5a31f12c3bfdfffd60e94ee39 913d502c107e9cd08000000000000000   -0.499990  -0.000000
+r roundsd_000  3edf14402e48bffabfd3333333333333 ccbe78e080dd71678000000000000000   -0.300000  -0.000000
+m roundsd_000  55324c696b018a9dbfd3333333333333 d6f4419831d4c3808000000000000000   -0.300000  -0.000000
+r roundsd_001  2a1fe48bf7d8b257bfd3333333333333 0d2ba7bfbfefcfc7bff0000000000000   -0.300000  -1.000000
+m roundsd_001  19f3d7116d5971d5bfd3333333333333 cbafa6c1c5b8d1e7bff0000000000000   -0.300000  -1.000000
+r roundsd_010  7ef922696a0f05c2bfd3333333333333 6ecc3a09dfbd048c8000000000000000   -0.300000  -0.000000
+m roundsd_010  b57fbffe8986a7cbbfd3333333333333 50cd6006aa89a5648000000000000000   -0.300000  -0.000000
+r roundsd_011  1acfac3d674a969cbfd3333333333333 cfff1221c2a9f0188000000000000000   -0.300000  -0.000000
+m roundsd_011  0937e4909fe80ce0bfd3333333333333 45af4ec7c2a821578000000000000000   -0.300000  -0.000000
+r roundsd_000  de016364cdeb4644bfb999999999999a 10271064461273cb8000000000000000   -0.100000  -0.000000
+m roundsd_000  f57a25258fdf8073bfb999999999999a 8ab45265eb7423218000000000000000   -0.100000  -0.000000
+r roundsd_001  aaee27407e51f51abfb999999999999a 10a112344c596d04bff0000000000000   -0.100000  -1.000000
+m roundsd_001  59a8632038cce2e4bfb999999999999a ff3c4b3f064d8c21bff0000000000000   -0.100000  -1.000000
+r roundsd_010  5df6d73059dd837ebfb999999999999a b1cff9f1b4ddbe238000000000000000   -0.100000  -0.000000
+m roundsd_010  14227fde7c0f1494bfb999999999999a 83a818b6f3943cb78000000000000000   -0.100000  -0.000000
+r roundsd_011  d97955953deed0d2bfb999999999999a d111a5f95efe45898000000000000000   -0.100000  -0.000000
+m roundsd_011  084857c13907f4e2bfb999999999999a f7579b2891a813448000000000000000   -0.100000  -0.000000
+r roundsd_000  fcd880ce0be4bb733fb999999999999a 51c6f6af2a1de3950000000000000000    0.100000   0.000000
+m roundsd_000  1378cc285014632f3fb999999999999a 3ca9b2f8c2eaf1270000000000000000    0.100000   0.000000
+r roundsd_001  a773373ba32026c33fb999999999999a 124ecb70f79979a70000000000000000    0.100000   0.000000
+m roundsd_001  1614be74a19641da3fb999999999999a 30ff3e8365b8b6c10000000000000000    0.100000   0.000000
+r roundsd_010  baa85b3de501ef213fb999999999999a f209069ea7d3e5203ff0000000000000    0.100000   1.000000
+m roundsd_010  f17c0c040cee6e433fb999999999999a b4b81f2b597541713ff0000000000000    0.100000   1.000000
+r roundsd_011  15dacc33b1e8f8ee3fb999999999999a d2588598182a085f0000000000000000    0.100000   0.000000
+m roundsd_011  840e9838717bc9cb3fb999999999999a a73535507f7e74970000000000000000    0.100000   0.000000
+r roundsd_000  98666b7ee7341f883fd3333333333333 919b29bf2bfec2c50000000000000000    0.300000   0.000000
+m roundsd_000  ae2d4071b09e34d13fd3333333333333 ebd55f51b7352d940000000000000000    0.300000   0.000000
+r roundsd_001  23ae157d674545523fd3333333333333 1130d272c0b0f3b10000000000000000    0.300000   0.000000
+m roundsd_001  5136e60ea8b68eb63fd3333333333333 5ff87f8ee1fa4dc70000000000000000    0.300000   0.000000
+r roundsd_010  9511ad90107c4aa93fd3333333333333 30796011b79f7a833ff0000000000000    0.300000   1.000000
+m roundsd_010  4c8b686f3a23b6d93fd3333333333333 e2ff7367dd2bb5903ff0000000000000    0.300000   1.000000
+r roundsd_011  d0f01218c3380ef03fd3333333333333 d0d6b3fdf02b399c0000000000000000    0.300000   0.000000
+m roundsd_011  7e8ba7f547468d9a3fd3333333333333 56491d3d8b2a43500000000000000000    0.300000   0.000000
+r roundsd_000  b2aa237461d970843fdfffd60e94ee39 cfa6ab954bb50e5b0000000000000000    0.499990   0.000000
+m roundsd_000  c89783ffad7ef35a3fdfffd60e94ee39 99375b70cb57d7660000000000000000    0.499990   0.000000
+r roundsd_001  1c9fc204c8c052c73fdfffd60e94ee39 0e492839a79cda200000000000000000    0.499990   0.000000
+m roundsd_001  0a0edcee4d2cc8783fdfffd60e94ee39 8c280e5e7c1153330000000000000000    0.499990   0.000000
+r roundsd_010  ee30cd29d94c92183fdfffd60e94ee39 6d1f094ae6417d4c3ff0000000000000    0.499990   1.000000
+m roundsd_010  2450922107afec543fdfffd60e94ee39 0f7c166980b896163ff0000000000000    0.499990   1.000000
+r roundsd_011  08bc254274de12d83fdfffd60e94ee39 cc893028e602d73e0000000000000000    0.499990   0.000000
+m roundsd_011  f6be84f8bb673f4f3fdfffd60e94ee39 029353f1b5ac7f6f0000000000000000    0.499990   0.000000
+r roundsd_000  4aa3aaaf78d5b0653fe00014f8b588e3 0be77b318842c8563ff0000000000000    0.500010   1.000000
+m roundsd_000  60b794d448b4a0c83fe00014f8b588e3 44cea455fc4eef9f3ff0000000000000    0.500010   1.000000
+r roundsd_001  94463cd1c7914d223fe00014f8b588e3 0a97cbc7ac5e30f50000000000000000    0.500010   0.000000
+m roundsd_001  419ca01490f7f11f3fe00014f8b588e3 b78debf535fec7050000000000000000    0.500010   0.000000
+r roundsd_010  c504bb084073c96c3fe00014f8b588e3 a8fb004a32b8ef7b3ff0000000000000    0.500010   1.000000
+m roundsd_010  7bcc8918719010b53fe00014f8b588e3 392f0631401ae5023ff0000000000000    0.500010   1.000000
+r roundsd_011  bf3e07b2c2da04a63fe00014f8b588e3 c773fa18fab0e4460000000000000000    0.500010   0.000000
+m roundsd_011  eca72f41cddddee93fe00014f8b588e3 ac14d76afd052af40000000000000000    0.500010   0.000000
+r roundsd_000  6053ff312e26dd2d3fe6666666666666 455d9993e4a5f1b83ff0000000000000    0.700000   1.000000
+m roundsd_000  768d72ee82413c1c3fe6666666666666 ee9c3c004c1c753e3ff0000000000000    0.700000   1.000000
+r roundsd_001  89a385e564b836633fe6666666666666 031cbc1bd0f7f4310000000000000000    0.700000   0.000000
+m roundsd_001  f7df3280711908ad3fe6666666666666 e02816510cc1a83d0000000000000000    0.700000   0.000000
+r roundsd_010  1a8f772c44efeda73fe6666666666666 e10d450f9d06ce0f3ff0000000000000    0.700000   1.000000
+m roundsd_010  50fd4f567ac722fc3fe6666666666666 621745bf1e53a2533ff0000000000000    0.700000   1.000000
+r roundsd_011  f376b669ae2ce35a3fe6666666666666 bf9212cf2c335fb50000000000000000    0.700000   0.000000
+m roundsd_011  6146a9d07daa6c6a3fe6666666666666 54caa9aa633342e00000000000000000    0.700000   0.000000
+r roundsd_000  f4b822f982cef9da3feccccccccccccd 7d0a04bc5edd87803ff0000000000000    0.900000   1.000000
+m roundsd_000  091a1f4f5923c5563feccccccccccccd 95a02171b9c06a423ff0000000000000    0.900000   1.000000
+r roundsd_001  fdb69b3e9f350d8a3feccccccccccccd fad6fc35116526d20000000000000000    0.900000   0.000000
+m roundsd_001  2ad99232f0910c213feccccccccccccd 07f98f74015af8db0000000000000000    0.900000   0.000000
+r roundsd_010  edcf0197e7c200c73feccccccccccccd 1855d89a262a1b0a3ff0000000000000    0.900000   1.000000
+m roundsd_010  a2e4e3d92054232a3feccccccccccccd 8836d1131b62cd0b3ff0000000000000    0.900000   1.000000
+r roundsd_011  a664346538d4b1f33feccccccccccccd b5e8784c7c8c48890000000000000000    0.900000   0.000000
+m roundsd_011  539af0a5cbcde8d13feccccccccccccd fab6c9afe737c9310000000000000000    0.900000   0.000000
+r roundsd_000  06d4130774cb026e3ff199999999999a b2edbeaaf5ec8bae3ff0000000000000    1.100000   1.000000
+m roundsd_000  1b5c9af6cf5b3c773ff199999999999a 3bda55a84439ccad3ff0000000000000    1.100000   1.000000
+r roundsd_001  ee7f7fdd7908d2973ff199999999999a f0c7891470a9c6d93ff0000000000000    1.100000   1.000000
+m roundsd_001  db89c02a0d5fff7b3ff199999999999a 2c00565c14c9b5e03ff0000000000000    1.100000   1.000000
+r roundsd_010  3ec6594828ea00ce3ff199999999999a 4dd3b8ebcc24d76b4000000000000000    1.100000   2.000000
+m roundsd_010  738244a36537113d3ff199999999999a ad8bac2d354666294000000000000000    1.100000   2.000000
+r roundsd_011  d6087fa761d26d733ff199999999999a a9732d8eebbc9fc33ff0000000000000    1.100000   1.000000
+m roundsd_011  c3a505c0b746521e3ff199999999999a 9ed8377b8811bde83ff0000000000000    1.100000   1.000000
+r roundsd_000  96a5d25b031ff9e73ff4cccccccccccd e606c65eabd1fe423ff0000000000000    1.300000   1.000000
+m roundsd_000  ab54e2e2e2e9a17d3ff4cccccccccccd df49d6a4ee899c7e3ff0000000000000    1.300000   1.000000
+r roundsd_001  5efe32c3f031858a3ff4cccccccccccd e3ed64baedc4d3473ff0000000000000    1.300000   1.000000
+m roundsd_001  0aefbd68c882e0ba3ff4cccccccccccd 4f3e6b0b450ee14a3ff0000000000000    1.300000   1.000000
+r roundsd_010  0d727f3f0669eeba3ff4cccccccccccd 7f87e70291f400324000000000000000    1.300000   2.000000
+m roundsd_010  c2d574b34771ed363ff4cccccccccccd d015d40d6e016dac4000000000000000    1.300000   2.000000
+r roundsd_011  84629830272617d93ff4cccccccccccd 9c342f9777c164643ff0000000000000    1.300000   1.000000
+m roundsd_011  b166e8214114a9503ff4cccccccccccd 4030f30c48c120053ff0000000000000    1.300000   1.000000
+r roundss_000  a42d5ff531c8df470f89573700000000 18551cd87e8cde3ca5964fc700000000    0.000000   0.000000
+m roundss_000  b803f91594cef4691ed025b600000000 80efa667b5aedab48540169000000000    0.000000   0.000000
+r roundss_001  4b33b2ee05b02563c54f424300000000 d4498d2688b44f1aa9c7aa1c00000000    0.000000   0.000000
+m roundss_001  b70b87ec21fcaee0ded12dca00000000 70b1ce7f93297a1aeff8895900000000    0.000000   0.000000
+r roundss_010  5ad5737c833dcb8d47245f3700000000 b07164e0739a975f319f2e3100000000    0.000000   0.000000
+m roundss_010  8ede7208c800b715da12557600000000 f0d64bb3c491e2964c87159200000000    0.000000   0.000000
+r roundss_011  b17280fe8bd0af2574688c7300000000 8c2c7f66219d966a1d7eba6700000000    0.000000   0.000000
+m roundss_011  1ddd99c96939ef69f2f27f1a00000000 e0bffd642647f0887e4e9a9b00000000    0.000000   0.000000
+r roundss_000  306bbad4fdc8b28c2e7caa5880000000 48dac018701d2c9c4cc5301c80000000   -0.000000  -0.000000
+m roundss_000  4467de8de308363b05d28a1780000000 20cbc3f09aaa865164adf8d580000000   -0.000000  -0.000000
+r roundss_001  b61e015fb885b42253bf994580000000 c4dc0557417a3954a0d36eb380000000   -0.000000  -0.000000
+m roundss_001  e3dd1fb618cc6becf41055cc80000000 8f5a7fba001a8250dd020fa080000000   -0.000000  -0.000000
+r roundss_010  25ee34ff9e689545c592399a80000000 df912f8374159df2f708558980000000   -0.000000  -0.000000
+m roundss_010  d99d3da4e6e56fdba00fc29a80000000 0fcd0f1f38f8c5e5caafbe5b80000000   -0.000000  -0.000000
+r roundss_011  5b3835128dd0355762546ab880000000 7a591efbe94e37d632c5c50080000000   -0.000000  -0.000000
+m roundss_011  080a18b62fb42368e72cafe080000000 7e83558122a32f710b14e76680000000   -0.000000  -0.000000
+r roundss_000  3a5ee3fa671d74b80b650cfe7f800000 7695b11f8084e96131699e777f800000         inf        inf
+m roundss_000  4e81904cd19865f4aac9fdff7f800000 bddc2f3f9e7ca053809068217f800000         inf        inf
+r roundss_001  a0bf1d170ab031c7a026fecd7f800000 b1a4ca4f181791f3d454c04f7f800000         inf        inf
+m roundss_001  8c6485c6adf116dec9468c557f800000 ac397eba8be1f8ec098322ed7f800000         inf        inf
+r roundss_010  6ebcc4c757e84ee401f622847f800000 0ce747ec936710ebfbe70be77f800000         inf        inf
+m roundss_010  a213d785a320168623013c457f800000 2bf92251cb35169b864df5297f800000         inf        inf
+r roundss_011  84b4b96d2e26a96f0d3556837f800000 67bd0a55cfd546a986815ea07f800000         inf        inf
+m roundss_011  70ed65e99385444d9a5ced2c7f800000 1a7dfb643cd5dcc0d64fc1367f800000         inf        inf
+r roundss_000  c208da666ec923c9a6447b2bff800000 a286f1ebadc1138d54839bd8ff800000        -inf       -inf
+m roundss_000  d55211505c7e82920db77e6cff800000 5924e954bf2328bcdbe96673ff800000        -inf       -inf
+r roundss_001  07170714f9319c52aa8271dbff800000 9ca3dd0d0d8957f8464ca0f2ff800000        -inf       -inf
+m roundss_001  b3a2b91de06daeb55b71d164ff800000 c74ecb80347fdbee7379c440ff800000        -inf       -inf
+r roundss_010  354122d6adbff468fb4f18f4ff800000 3773ae1bcf8ff14a3d3c4e4bff800000        -inf       -inf
+m roundss_010  e93e3eadfdb2aa1765eac475ff800000 465c83497b47d5b77f61bafeff800000        -inf       -inf
+r roundss_011  2ae60a0d6cd20b6d770c50d4ff800000 51564476d333c3e117b48545ff800000        -inf       -inf
+m roundss_011  5685816295ab54170b8338feff800000 b4adef0e74ddf675df012a0cff800000        -inf       -inf
+r roundss_000  c8679e1814cac1c1ff19f9deffc00000 cbad7f7df9d3ab1fb513253fffc00000        -nan       -nan
+m roundss_000  dbd8609b86ba8d162d9b0d5fffc00000 f2a2f02ffea11e8b73b8f2cbffc00000        -nan       -nan
+r roundss_001  ed24c0578608f5c373d4f26fffc00000 86d73e9120d28a64f7ba0e9affc00000        -nan       -nan
+m roundss_001  5896bbb9b13f3573ab9223f9ffc00000 e19a660dfbf22d561be6f39affc00000        -nan       -nan
+r roundss_010  7a7b4e2ba2eb89d3b39f1de9ffc00000 603563102a8d410ebd081fb5ffc00000        -nan       -nan
+m roundss_010  ad1f741bf6992c8e65c95a2bffc00000 5ff5310749300238b7eb0dd9ffc00000        -nan       -nan
+r roundss_011  4fce29f348d45b519eda58acffc00000 3926cc5df566ae80e65d3af1ffc00000        -nan       -nan
+m roundss_011  bad46a21352852c83b9f9256ffc00000 4c13317dcabb7f91272820e9ffc00000        -nan       -nan
+r roundss_000  4c7d311058224c9e16e484167fc00000 f30a5bd562bcb117541a3dac7fc00000         nan        nan
+m roundss_000  5f147c2c4d4d86800c74abd97fc00000 8a5546d05cf482bf4afd0c297fc00000         nan        nan
+r roundss_001  50e746e1b1353c1af91d81897fc00000 6d42eeda52f02c35e59e09497fc00000         nan        nan
+m roundss_001  7b408c9b2067aa17b9a984147fc00000 f81b4f5fe03bec2401c8b1f97fc00000         nan        nan
+r roundss_010  3d6c48c6356e0b2329e52f657fc00000 862d66cca261fe397b497f257fc00000         nan        nan
+m roundss_010  f0b778ce8cd69cec239dff687fc00000 75c32e8b36ee9d202debefba7fc00000         nan        nan
+r roundss_011  f16c1720c22c991b849d6e097fc00000 202ba309356f0684f47c7da27fc00000         nan        nan
+m roundss_011  9cd9212673fb3d5f28b1fa347fc00000 e2b0c1b33d707512acc6a5cb7fc00000         nan        nan
+r roundss_000  4d48924e39cfc662eba41ed5bfa66666 199d84f3ea7b26753196e420bf800000   -1.300000  -1.000000
+m roundss_000  61076702b3356dd0a94456d8bfa66666 203fe937d71e545a5fb8b48cbf800000   -1.300000  -1.000000
+r roundss_001  32609bb07bb871573e5b1e29bfa66666 52e2ebeaa1e43c6c12f793fdc0000000   -1.300000  -2.000000
+m roundss_001  1da02ac32de40ca086b6f3b5bfa66666 0dd28678e35a1a582621fd5ec0000000   -1.300000  -2.000000
+r roundss_010  7e1210a766467c5a5d215066bfa66666 ab5bb74d390b29ca76006c9bbf800000   -1.300000  -1.000000
+m roundss_010  b10449c8c169fa2f9e68b12abfa66666 8ac878d54083a66de0615ea0bf800000   -1.300000  -1.000000
+r roundss_011  12c1d292dadac5cb275692ecbfa66666 0467c77c934fcdee3f104d5abf800000   -1.300000  -1.000000
+m roundss_011  fd94a6714f2317dcd3b96f98bfa66666 76829faecffadaf96fd9b8b3bf800000   -1.300000  -1.000000
+r roundss_000  cdcac1d1b9d32d0b7e5bc51abf8ccccd 3d66fcd8901008394c881899bf800000   -1.100000  -1.000000
+m roundss_000  e0af201fb673430704090f5ebf8ccccd b35fdb64701e945ab1e9eaf6bf800000   -1.100000  -1.000000
+r roundss_001  918fbdc5e291947a408fc950bf8ccccd 36b936c00eafba0a7cc7abb8c0000000   -1.100000  -2.000000
+m roundss_001  3cb59631d8b85d1010b970dcbf8ccccd 20bf0b56034fb5f388efd6c9c0000000   -1.100000  -2.000000
+r roundss_010  3d6fa6ce3475da764f537eeebf8ccccd cebf5594ee8bc3c1b02de717bf800000   -1.100000  -1.000000
+m roundss_010  ef07e90793524658d8287172bf8ccccd 9c0311e568ee1d21d24d5b8dbf800000   -1.100000  -1.000000
+r roundss_011  b0cb5c4a91dedf618906c455bf8ccccd e6d839b5100402bfc81bac17bf800000   -1.100000  -1.000000
+m roundss_011  db05f902c9a2df3e3cb7f382bf8ccccd 098acb707f5aac46706358a1bf800000   -1.100000  -1.000000
+r roundss_000  cb02be9bd72c829bcf087be4bf666666 5f65c282537b5863a5f0da18bf800000   -0.900000  -1.000000
+m roundss_000  de0da681580706231cc5d669bf666666 45b41a5728f342c14290ae66bf800000   -0.900000  -1.000000
+r roundss_001  6f74ad21e7c0a58301ba82fcbf666666 17c5d05b994fa60d240d5178bf800000   -0.900000  -1.000000
+m roundss_001  d981d0e521e29c6658b2fa89bf666666 31e2defb421abff328343e3bbf800000   -0.900000  -1.000000
+r roundss_010  7a820a3aa1f92679ff7bbbfcbf666666 ef5942a1c0e0ca1e28d1f19980000000   -0.900000  -0.000000
+m roundss_010  acc1578d04928167d0df3f41bf666666 ad74f7bbaf2e023b02afe68080000000   -0.900000  -0.000000
+r roundss_011  cd8bb349e538e7dda8ab0444bf666666 c77ffab3aa8fa5f5909c99db80000000   -0.900000  -0.000000
+m roundss_011  372b1ad9e177948764ab85f1bf666666 99c845f74d90edf9af62879680000000   -0.900000  -0.000000
+r roundss_000  47ef89ab93dcc610deab3e35bf333333 7f9ad6f235bc17f33bcf2b9dbf800000   -0.700000  -1.000000
+m roundss_000  5a22fb2a97f2b725f377acfabf333333 d440a810fd9f5e8e11ad01dcbf800000   -0.700000  -1.000000
+r roundss_001  ca0f6cc28a45a4727fda492ebf333333 f607b7bd42c5ff760bc9853fbf800000   -0.700000  -1.000000
+m roundss_001  f403d8df0862c9a25fa293bcbf333333 403cff659fbb365906ee33b2bf800000   -0.700000  -1.000000
+r roundss_010  354a3cedacd461616d99058fbf333333 0e287d74b10c3fe1deea882180000000   -0.700000  -0.000000
+m roundss_010  e73092581227a95d868c1b95bf333333 bb1a2c57134556ba6f87ff7980000000   -0.700000  -0.000000
+r roundss_011  6701d88dd7e8dd3f864752b9bf333333 a55d087862f1b691959314a480000000   -0.700000  -0.000000
+m roundss_011  11080af697a238b6499525e7bf333333 273c0d45399c9b122cd8439080000000   -0.700000  -0.000000
+r roundss_000  41932201ece1f76cab44100bbf0000a8 9c05382834d243e810230928bf800000   -0.500010  -1.000000
+m roundss_000  53ec1d197532560d881e8f12bf0000a8 6202838ff120e8c01d40e157bf800000   -0.500010  -1.000000
+r roundss_001  a360f8a9cb209147bcf11ee6bf0000a8 d380ece50912c7462ffa470bbf800000   -0.500010  -1.000000
+m roundss_001  8e3bae1f8d37e3c323873a75bf0000a8 4dcb6e961a321c25221fb72fbf800000   -0.500010  -1.000000
+r roundss_010  6ec93ce65404893099ad5ea9bf0000a8 2b2e060ec00e220ad279adaf80000000   -0.500010  -0.000000
+m roundss_010  9f559c6abf12bf38fa2e0670bf0000a8 c8f7aeb9953117a01bd5a67880000000   -0.500010  -0.000000
+r roundss_011  7f2dcc1767eec18721d8aeb4bf0000a8 8170640338283494d9001d7480000000   -0.500010  -0.000000
+m roundss_011  699bc759eb22cacbec75d263bf0000a8 b3e72358437eb891e7c38e9080000000   -0.500010  -0.000000
+r roundss_000  b9ec899de43c17ad36d3ef68befffeb0 b8a6e72552bfdd4423ed75b980000000   -0.499990  -0.000000
+m roundss_000  cb6c0e4df0c8e3dcdbbc80afbefffeb0 eefaadd40278e05968494fd980000000   -0.499990  -0.000000
+r roundss_001  fb6753d7ab516c02b6fd0124befffeb0 af2e6fd3ee34fd7b92a297debf800000   -0.499990  -1.000000
+m roundss_001  a52952a5b063eccba562eeb3befffeb0 58902b8cb37f70577cc5c8b3bf800000   -0.499990  -1.000000
+r roundss_010  24fd09259b8aa0e483b6c449befffeb0 456adc6dece67498047f614380000000   -0.499990  -0.000000
+m roundss_010  d63174c20953c3f92bc7fed0befffeb0 d30a7fe136f446eb0499db7c80000000   -0.499990  -0.000000
+r roundss_011  160f8de8964a92b57b5f1836befffeb0 5cba0e542c3521fc5ae2b44980000000   -0.499990  -0.000000
+m roundss_011  40e45202dcf949c54d4c8e65befffeb0 3dc787326b364376e125679680000000   -0.499990  -0.000000
+r roundss_000  affcbe7f7aee24d57f58dd4bbe99999a d27de5e78e82e606742d705080000000   -0.300000  -0.000000
+m roundss_000  c1a3cdc80ab45f90eb507fd3be99999a 772724df31a64658f1c84b6180000000   -0.300000  -0.000000
+r roundss_001  d0247b4a28d835a36ffff2e8be99999a 88134186f12ca11732c074b6bf800000   -0.300000  -1.000000
+m roundss_001  3acdc57171e5e3b9e533b178be99999a 618b36496aa231ef14e2683cbf800000   -0.300000  -1.000000
+r roundss_010  59e8a5aa8067a47f2bb6396ebe99999a 5edc01923794338d74faa2dd80000000   -0.300000  -0.000000
+m roundss_010  8bc2195ff2ebb5a01b5604b6be99999a db529dcff48de39d2cd39e8780000000   -0.300000  -0.000000
+r roundss_011  2aa71dfe62fc52c992dd903dbe99999a 3439076a3e197cca193bd92580000000   -0.300000  -0.000000
+m roundss_011  94e3abf26c26b7a66d1858edbe99999a c5dd39d1b0c43bc118fccda380000000   -0.300000  -0.000000
+r roundss_000  23c1c1a6aef520e286d3d8b3bdcccccd ea8a316fe71b5c2e03e4f8ed80000000   -0.100000  -0.000000
+m roundss_000  348f5988c1f6c82abad98c7cbdcccccd ff8beab07fa91abcb7bdd5ef80000000   -0.100000  -0.000000
+r roundss_001  2497720343b5ec2ae5f8f133bdcccccd 5f2d600012fbb3181054e095bf800000   -0.100000  -1.000000
+m roundss_001  4d260583d0bcc78de4fa82c3bdcccccd 68bc8fcb3f9c61edeb7496cbbf800000   -0.100000  -1.000000
+r roundss_010  0c880f75039997ff91acbb1abdcccccd 7584747d9f1860e822eb717d80000000   -0.100000  -0.000000
+m roundss_010  be098d4378d8962ec9da1823bdcccccd e2d10a83d1fbeeb59283ef9880000000   -0.100000  -0.000000
+r roundss_011  bdf57a5acc0300c3685016cabdcccccd 0aef4d476ed245ff170a8b0680000000   -0.100000  -0.000000
+m roundss_011  6698d2279aa9136d4ada30fbbdcccccd 4b2939371428a2738d4ac2b580000000   -0.100000  -0.000000
+r roundss_000  153d92147f5309d64b43e1a23dcccccd 00cccbbd5f8a40bcd0100e9000000000    0.100000   0.000000
+m roundss_000  2631b48f178f1faa4759a8ab3dcccccd 8425fd47ea835d87bc28ed8200000000    0.100000   0.000000
+r roundss_001  f5c03603fce891971ae6fe033dcccccd 357ecd40529f337f2d5dda7900000000    0.100000   0.000000
+m roundss_001  de3613dbcdea9a46a0b761943dcccccd 6d233614316bfe51ff7d516000000000    0.100000   0.000000
+r roundss_010  3ddf478523227766b5984b4c3dcccccd 8a62352f2672fca90e52cf233f800000    0.100000   1.000000
+m roundss_010  6e07cf6c9d1b64a135553a153dcccccd e686c4fdcb40673235a9ceaf3f800000    0.100000   1.000000
+r roundss_011  cdf9a5fdd4619ca3fbbaaadd3dcccccd dfdae1eabc617c99524fccee00000000    0.100000   0.000000
+m roundss_011  b602c7a266815d1ae592158f3dcccccd cfab87629662768a400d44cd00000000    0.100000   0.000000
+r roundss_000  856f30c8ef06e0afceaaf9173e99999a 1345b2d1f5cf93b0dbb2b33900000000    0.300000   0.000000
+m roundss_000  968adddb0a7d641192ced1613e99999a 08f45fa473320db7fe09931c00000000    0.300000   0.000000
+r roundss_001  459fc848547124ea0cca19593e99999a 08048945af19204d87dd626400000000    0.300000   0.000000
+m roundss_001  eefcef7a686e5be61a6a4deb3e99999a 70c12b2242100a1b51fb9bfc00000000    0.300000   0.000000
+r roundss_010  ecec4ddce20045b2977aea033e99999a 9d7644a6cba105d03730bacf3f800000    0.300000   1.000000
+m roundss_010  9dbadedc5fb420fa5ec66b8e3e99999a e970cd3de35a4e1617453bcb3f800000    0.300000   1.000000
+r roundss_011  5cb39fe57b1526694d194c763e99999a b1fcc35228c7219acc099bdb00000000    0.300000   0.000000
+m roundss_011  84238a63d0b094ac3e4009a93e99999a 516423533673b907314755ec00000000    0.300000   0.000000
+r roundss_000  73569dc2fd10a66f0f071e113efffeb0 25f4e8aca8ea530a24cae5e800000000    0.499990   0.000000
+m roundss_000  8498d36e9cc1975d9a3a089c3efffeb0 89fa0ec71bb82b4e7f60c7bc00000000    0.499990   0.000000
+r roundss_001  123429d34950a423bda542353efffeb0 d9c192112a6a7c8020d3785400000000    0.499990   0.000000
+m roundss_001  7b78995ea148096c521348c83efffeb0 71946ef6718b834ce1f0729d00000000    0.499990   0.000000
+r roundss_010  19ae21793f3502e5375296413efffeb0 adc0a0e38da77c5d9f8333813f800000    0.499990   1.000000
+m roundss_010  4a23bc92c0a3ca39462ca98c3efffeb0 e99123421a4ba360375837ee3f800000    0.499990   1.000000
+r roundss_011  68236613bf1f9e155c6efc953efffeb0 8153f481b3023300833af8cf00000000    0.499990   0.000000
+m roundss_011  d1fa1c6ad835ba2556e40b493efffeb0 d1520d0bf45969ea60f6f31000000000    0.499990   0.000000
+r roundss_000  dff4d802a96f59140e5a52923f0000a8 35d96c4c7ada81c9ab59a59d3f800000    0.500010   1.000000
+m roundss_000  ef5c9847cb5bb98f619c4d5e3f0000a8 09360cb0e014b74b3e2d89623f800000    0.500010   1.000000
+r roundss_001  5e7f57a5dc8513422b7579973f0000a8 a9b3e9a3c3904619f63f1c4b00000000    0.500010   0.000000
+m roundss_001  86aa11887877a6d849b3512b3f0000a8 719d0091bedc6be2af5ad84400000000    0.500010   0.000000
+r roundss_010  c427c35c3abfacfd952051053f0000a8 bc404be66e836250454c3b393f800000    0.500010   1.000000
+m roundss_010  7443688dbee9625eec89f5103f0000a8 e8e8c80e6e12660f94e0c0173f800000    0.500010   1.000000
+r roundss_011  f349fc88a17f04a72ababa3a3f0000a8 50e072765b13b4cc78e1e3c800000000    0.500010   0.000000
+m roundss_011  9b877bb77e0fce842b7e1a6e3f0000a8 4f764588d0158833cd1c203a00000000    0.500010   0.000000
+r roundss_000  c947e188f225fba0cba393993f333333 43f43eb269a11eef6f5df4583f800000    0.700000   1.000000
+m roundss_000  d9d62b65994cc8a7e6f3a0a53f333333 87a7575fc345b1ad3a70d90e3f800000    0.700000   1.000000
+r roundss_001  278154bc0d107047583cbe7f3f333333 76db8efa7a8c7e190a204d4700000000    0.700000   0.000000
+m roundss_001  0f9158f8edfd3129fd4867143f333333 6edcdff12903c0debb3bccf100000000    0.700000   0.000000
+r roundss_010  ed553385d2a045fcb1e4194e3f333333 c9f644af6c35b5a9298bd0f83f800000    0.700000   1.000000
+m roundss_010  1d18e1cf5b84e96a50db4f1b3f333333 e575baa0e0ae972530ded7463f800000    0.700000   1.000000
+r roundss_011  fb255f422135581fb5fb86663f333333 1ca43e3121fba3ffacfe5cc800000000    0.700000   0.000000
+m roundss_011  e3caa84ac240cfc8be0f381a3f333333 cbd0cbcccaa715e279b7db6a00000000    0.700000   0.000000
+r roundss_000  3151b853da308a1146e2e3253f666666 4f455ede773e287b72d7d0193f800000    0.900000   1.000000
+m roundss_000  41078bca0492c5a6294102723f666666 024ff1d4c54d19767529b7bf3f800000    0.900000   1.000000
+r roundss_001  6f381e19ddf1bb3242f811ed3f666666 413a82184f5f247e5d780d4a00000000    0.900000   0.000000
+m roundss_001  162f6cae00d9a9616fd38c833f666666 69510c18b200844005914da500000000    0.900000   0.000000
+r roundss_010  943a71f409d6cbe08b9ef01e3f666666 d4e28b3f89bd76674b41f3bc3f800000    0.900000   1.000000
+m roundss_010  44a3295695755d5b7124b8ab3f666666 df37fbf8712136a00a527c7a3f800000    0.900000   1.000000
+r roundss_011  81b790423f419a7dff3260173f666666 e69d59b105b800971d9062cd00000000    0.900000   0.000000
+m roundss_011  a9c2a323a4c7bff31095644c3f666666 45609fd5e10f0ff762c923a100000000    0.900000   0.000000
+r roundss_000  17105d65609208697f1740383f8ccccd 59cccbd0a3b1a06db3c73ae03f800000    1.100000   1.000000
+m roundss_000  26edba740e2eb08a2a8571c63f8ccccd 7c2dd90fe42aefa4ee5824773f800000    1.100000   1.000000
+r roundss_001  34a5b6bd4a28f403ebaa72e23f8ccccd 0bcec3fc42073749ed465b523f800000    1.100000   1.000000
+m roundss_001  9c834eaab10a107f9f54bf773f8ccccd 62fd870459d3b6088d5e5d5e3f800000    1.100000   1.000000
+r roundss_010  b9d47da8de6340ab234dd4743f8ccccd dd041f94c41ba68cab6ca58640000000    1.100000   2.000000
+m roundss_010  e9e53f246ebcbf3251632ec23f8ccccd d8308a161f694382213cafb540000000    1.100000   2.000000
+r roundss_011  86ff9089fca3cac10660484e3f8ccccd afcdc1f8074ccb95cd99f7d93f800000    1.100000   1.000000
+m roundss_011  ed716c4224a49d041f119e043f8ccccd be27c1a5174d78728950fadd3f800000    1.100000   1.000000
+r roundss_000  7b86d0bd834973a67642acd13fa66666 60898789ecfa86c5322e33ad3f800000    1.300000   1.000000
+m roundss_000  8a89b765b5208954e8beee9f3fa66666 f3400e1021de3339a4fd1e353f800000    1.300000   1.000000
+r roundss_001  77c81da655b51bba5253e15c3fa66666 d29952a65385b97bbb8a37613f800000    1.300000   1.000000
+m roundss_001  9f8dfeec009265838ecb00f23fa66666 59de50b71e7c553654a0fa1d3f800000    1.300000   1.000000
+r roundss_010  5c2557a35145a25b79f3c74f3fa66666 e45c02af1c4e4317490de45640000000    1.300000   2.000000
+m roundss_010  0bdc2237e45a0fefef97b25e3fa66666 ce5f66faeb88beca779c70f640000000    1.300000   2.000000
+r roundss_011  08fe5d15565be8ebcc833e0b3fa66666 7532770527b503faba181aeb3f800000    1.300000   1.000000
+m roundss_011  b0d603a742d668fbec83e5423fa66666 3423313a6b614e53ee4e5e1f3f800000    1.300000   1.000000
+r (rm=0) roundsd_1XX  5db2115b4557cdca0000000000000000 667c91075419db830000000000000000    0.000000   0.000000
+m (rm=0) roundsd_1XX  6cdc819cfa6850040000000000000000 698a92d77d68e5340000000000000000    0.000000   0.000000
+r (rm=1) roundsd_1XX  39a151d5fe9830570000000000000000 9799301582daa9120000000000000000    0.000000   0.000000
+m (rm=1) roundsd_1XX  204d7c74ed70a76c0000000000000000 4ef5672f00fb63ca0000000000000000    0.000000   0.000000
+r (rm=2) roundsd_1XX  7d2cfee4617ef2f20000000000000000 e8ea339093584e080000000000000000    0.000000   0.000000
+m (rm=2) roundsd_1XX  ac89d491f84d4d930000000000000000 c3c391a4d67da7770000000000000000    0.000000   0.000000
+r (rm=3) roundsd_1XX  09b2f9e74e69f4fb0000000000000000 39ce7bd765f4aac40000000000000000    0.000000   0.000000
+m (rm=3) roundsd_1XX  f0f16952fe5f22d70000000000000000 a855ef96dd4b939b0000000000000000    0.000000   0.000000
+r (rm=0) roundsd_1XX  bd93203fa5ba14d38000000000000000 6aa5e94bd90e9da78000000000000000   -0.000000  -0.000000
+m (rm=0) roundsd_1XX  cce41a18de07069b8000000000000000 dc0a6363f6c705948000000000000000   -0.000000  -0.000000
+r (rm=1) roundsd_1XX  7830544b46d033d98000000000000000 5bd05b4bcf0407108000000000000000   -0.000000  -0.000000
+m (rm=1) roundsd_1XX  1fc3c84278a4d83c8000000000000000 4142cc6e0151dec48000000000000000   -0.000000  -0.000000
+r (rm=2) roundsd_1XX  1ce8746b100c316e8000000000000000 ebaeb2372738c75f8000000000000000   -0.000000  -0.000000
+m (rm=2) roundsd_1XX  cbec5431ab96791c8000000000000000 b55e0914de47fe8b8000000000000000   -0.000000  -0.000000
+r (rm=3) roundsd_1XX  871c6200e4cdeef18000000000000000 fc9fce70c10abff58000000000000000   -0.000000  -0.000000
+m (rm=3) roundsd_1XX  aec29c43583eca9a8000000000000000 1abdfbb76d0b45488000000000000000   -0.000000  -0.000000
+r (rm=0) roundsd_1XX  9b2bfd69a37449c37ff0000000000000 6c048e557dd8cd317ff0000000000000         inf        inf
+m (rm=0) roundsd_1XX  a9a281db5ffba9177ff0000000000000 4ec083b68efd935b7ff0000000000000         inf        inf
+r (rm=1) roundsd_1XX  367524062b5f24427ff0000000000000 1c3cd4473b05d3737ff0000000000000         inf        inf
+m (rm=1) roundsd_1XX  9ceee356a12df7f27ff0000000000000 32c57f72207cc8257ff0000000000000         inf        inf
+r (rm=2) roundsd_1XX  395bb8385df15dd17ff0000000000000 eca87fa5daeeaf1c7ff0000000000000         inf        inf
+m (rm=2) roundsd_1XX  6706a116fb35948b7ff0000000000000 a62fd04a04e8c3047ff0000000000000         inf        inf
+r (rm=3) roundsd_1XX  843c995e1987d6cd7ff0000000000000 bca76ecf3bf5428b7ff0000000000000         inf        inf
+m (rm=3) roundsd_1XX  ea499d7b50735f437ff0000000000000 8a5b559f1ba1665b7ff0000000000000         inf        inf
+r (rm=0) roundsd_1XX  f778a7d83e836d98fff0000000000000 6c9982253f796c20fff0000000000000        -inf       -inf
+m (rm=0) roundsd_1XX  0517b5e37f453a79fff0000000000000 beabf0cf43088f88fff0000000000000        -inf       -inf
+r (rm=1) roundsd_1XX  7170c207ae440391fff0000000000000 dbdf9b08c4db0c3cfff0000000000000        -inf       -inf
+m (rm=1) roundsd_1XX  98d0cbb0670d038efff0000000000000 217f803d5d7d1febfff0000000000000        -inf       -inf
+r (rm=2) roundsd_1XX  d483ca4b472b7819fff0000000000000 ebd899d8ab7a043ffff0000000000000        -inf       -inf
+m (rm=2) roundsd_1XX  82d5bd42ea2a9ce0fff0000000000000 9535e446495ef6e4fff0000000000000        -inf       -inf
+r (rm=3) roundsd_1XX  fe129f02eb97ac8ffff0000000000000 7ae45cf4d3b63387fff0000000000000        -inf       -inf
+m (rm=3) roundsd_1XX  a4856cf8e6fde3d2fff0000000000000 f82ffe4ce70ef4d4fff0000000000000        -inf       -inf
+r (rm=0) roundsd_1XX  d17c208e78e97e54fff8000000000000 6a64c4bc1ef07876fff8000000000000        -nan       -nan
+m (rm=0) roundsd_1XX  df41b8323ce5b9c1fff8000000000000 2bcdacae16eaf91afff8000000000000        -nan       -nan
+r (rm=1) roundsd_1XX  2b212f4fcf7fd0c6fff8000000000000 99b7b1906b87b46cfff8000000000000        -nan       -nan
+m (rm=1) roundsd_1XX  11688150cc43fe0ffff8000000000000 0e6ecfcdb854e517fff8000000000000        -nan       -nan
+r (rm=2) roundsd_1XX  ed62aaa3d0bc8048fff8000000000000 e83e02d199dcc7c7fff8000000000000        -nan       -nan
+m (rm=2) roundsd_1XX  1b5aa7b37676921cfff8000000000000 81724708abab982afff8000000000000        -nan       -nan
+r (rm=3) roundsd_1XX  f79e72ed5bfd7037fff8000000000000 375799de8a4e91eafff8000000000000        -nan       -nan
+m (rm=3) roundsd_1XX  dd7809bb1ade5546fff8000000000000 643af4c0d050f1b3fff8000000000000        -nan       -nan
+r (rm=0) roundsd_1XX  2835678a50a47ef57ff8000000000000 656554181c3df2327ff8000000000000         nan        nan
+m (rm=0) roundsd_1XX  362189c698dc26f07ff8000000000000 9725b55308a2d1137ff8000000000000         nan        nan
+r (rm=1) roundsd_1XX  628869dc8e108be17ff8000000000000 54c514de300aca017ff8000000000000         nan        nan
+m (rm=1) roundsd_1XX  08b60537cfcfe7777ff8000000000000 f9936c23310119a97ff8000000000000         nan        nan
+r (rm=2) roundsd_1XX  84f65842f7a2775c7ff8000000000000 e3d9b990a614f9b67ff8000000000000         nan        nan
+m (rm=2) roundsd_1XX  31965e6ba117763d7ff8000000000000 6ce5f7902ccea7d57ff8000000000000         nan        nan
+r (rm=3) roundsd_1XX  6de0141d69b921c57ff8000000000000 f101238f5ebb5eb27ff8000000000000         nan        nan
+m (rm=3) roundsd_1XX  932174c4ec15b4a17ff8000000000000 ce7a38f9d8685cf87ff8000000000000         nan        nan
+r (rm=0) roundsd_1XX  fea57cccc6b66b7dbff4cccccccccccd 5f9c323a3760db54bff0000000000000   -1.300000  -1.000000
+m (rm=0) roundsd_1XX  0cb827a191288204bff4cccccccccccd 00b20dbe172f1771bff0000000000000   -1.300000  -1.000000
+r (rm=1) roundsd_1XX  18a572afecf734e2bff4cccccccccccd 0d0ac5f213624efcc000000000000000   -1.300000  -2.000000
+m (rm=1) roundsd_1XX  7dba576370b0bec5bff4cccccccccccd e2ee5740c884baa1c000000000000000   -1.300000  -2.000000
+r (rm=2) roundsd_1XX  9941d427bcdf5b57bff4cccccccccccd dbabbe15d021980bbff0000000000000   -1.300000  -1.000000
+m (rm=2) roundsd_1XX  c687e469690e4844bff4cccccccccccd 548df6decac624e7bff0000000000000   -1.300000  -1.000000
+r (rm=3) roundsd_1XX  62d8839316cbc139bff4cccccccccccd a9e0fb0650fe99e0bff0000000000000   -1.300000  -1.000000
+m (rm=3) roundsd_1XX  c780ad135ca102e2bff4cccccccccccd 36f0caf8fe5634a3bff0000000000000   -1.300000  -1.000000
+r (rm=0) roundsd_1XX  52ca5f54d91d47eabff199999999999a 57095d22715931dcbff0000000000000   -1.100000  -1.000000
+m (rm=0) roundsd_1XX  600494c229cacbfebff199999999999a 6876b2ef4493cb36bff0000000000000   -1.100000  -1.000000
+r (rm=1) roundsd_1XX  4b7848c9e734cbc9bff199999999999a c584c4cb1490405ec000000000000000   -1.100000  -2.000000
+m (rm=1) roundsd_1XX  707377d5afe882f8bff199999999999a c97f90227cddcaffc000000000000000   -1.100000  -2.000000
+r (rm=2) roundsd_1XX  2c421e521e712e37bff199999999999a d2b310611905a5c6bff0000000000000   -1.100000  -1.000000
+m (rm=2) roundsd_1XX  d92e37acd05b0931bff199999999999a 3b6c42f286950f5fbff0000000000000   -1.100000  -1.000000
+r (rm=3) roundsd_1XX  d486c05060334f93bff199999999999a 60f6214260184275bff0000000000000   -1.100000  -1.000000
+m (rm=3) roundsd_1XX  7995b5a86a843e09bff199999999999a 9c9caabe421a7bb4bff0000000000000   -1.100000  -1.000000
+r (rm=0) roundsd_1XX  24a610228bdb103ebfeccccccccccccd 4dacd7d0c927f5cabff0000000000000   -0.900000  -1.000000
+m (rm=0) roundsd_1XX  3106cf285ec202debfeccccccccccccd cd70a6e690ccee61bff0000000000000   -0.900000  -1.000000
+r (rm=1) roundsd_1XX  fc01ec2880c75096bfeccccccccccccd 7a35126b3395a025bff0000000000000   -0.900000  -1.000000
+m (rm=1) roundsd_1XX  e2e3658d8c763512bfeccccccccccccd af4717cb4f0c47c3bff0000000000000   -0.900000  -1.000000
+r (rm=2) roundsd_1XX  3df836c31f59eefebfeccccccccccccd c7f1b17280bf21e78000000000000000   -0.900000  -0.000000
+m (rm=2) roundsd_1XX  6a8c5936d4ffb705bfeccccccccccccd 1f81ddcc6139683c8000000000000000   -0.900000  -0.000000
+r (rm=3) roundsd_1XX  c4eacc5248f1cbd3bfeccccccccccccd 144196458e07596f8000000000000000   -0.900000  -0.000000
+m (rm=3) roundsd_1XX  a95f8a8316bd6715bfeccccccccccccd 007ed849a4b42f2c8000000000000000   -0.900000  -0.000000
+r (rm=0) roundsd_1XX  74388f35dbeec777bfe6666666666666 41859f453ecc281ebff0000000000000   -0.700000  -1.000000
+m (rm=0) roundsd_1XX  81bfd7d5321027a4bfe6666666666666 319fe7a3f9dc7ef1bff0000000000000   -0.700000  -1.000000
+r (rm=1) roundsd_1XX  2c405fcdb7b0c249bfe6666666666666 2d1badd1706f6d52bff0000000000000   -0.700000  -1.000000
+m (rm=1) roundsd_1XX  d109228b0759d612bfe6666666666666 9244ec39401133edbff0000000000000   -0.700000  -1.000000
+r (rm=2) roundsd_1XX  cb651c7abe989caabfe6666666666666 ba65a049044f0a6e8000000000000000   -0.700000  -0.000000
+m (rm=2) roundsd_1XX  789f490577f853bebfe6666666666666 02ccc56c59b42f808000000000000000   -0.700000  -0.000000
+r (rm=3) roundsd_1XX  3304a59ace0535f9bfe6666666666666 c6c3580edaccddcf8000000000000000   -0.700000  -0.000000
+m (rm=3) roundsd_1XX  58e02da4604c7f08bfe6666666666666 6297549b242452098000000000000000   -0.700000  -0.000000
+r (rm=0) roundsd_1XX  427fdc8fc8576d97bfe00014f8b588e3 3393b57fd247c8d7bff0000000000000   -0.500010  -1.000000
+m (rm=0) roundsd_1XX  4f2daec7a3b53a51bfe00014f8b588e3 9305772680c27ce8bff0000000000000   -0.500010  -1.000000
+r (rm=1) roundsd_1XX  d9369fb98def23e2bfe00014f8b588e3 df3896fccb1fa9e6bff0000000000000   -0.500010  -1.000000
+m (rm=1) roundsd_1XX  3ee5accf209364f8bfe00014f8b588e3 73770f6e4fec8c7dbff0000000000000   -0.500010  -1.000000
+r (rm=2) roundsd_1XX  d887cf76fb2c393dbfe00014f8b588e3 ab0fdde6a7b5615b8000000000000000   -0.500010  -0.000000
+m (rm=2) roundsd_1XX  0568061bb747dd5dbfe00014f8b588e3 e34cfcd26f0564298000000000000000   -0.500010  -0.000000
+r (rm=3) roundsd_1XX  1fd44d29f26f8d05bfe00014f8b588e3 777a689d4468d0968000000000000000   -0.500010  -0.000000
+m (rm=3) roundsd_1XX  84179e0b483085e1bfe00014f8b588e3 c2e51eb2c26ae24c8000000000000000   -0.500010  -0.000000
+r (rm=0) roundsd_1XX  8e7df72f5417009cbfdfffd60e94ee39 22d8187f8398d6f78000000000000000   -0.499990  -0.000000
+m (rm=0) roundsd_1XX  9b515300b3af3be3bfdfffd60e94ee39 f2a1546f267de8448000000000000000   -0.499990  -0.000000
+r (rm=1) roundsd_1XX  05e1aeea00847261bfdfffd60e94ee39 8e8aceee45a653dfbff0000000000000   -0.499990  -1.000000
+m (rm=1) roundsd_1XX  29770459d723e1c3bfdfffd60e94ee39 52e080687c9d5474bff0000000000000   -0.499990  -1.000000
+r (rm=2) roundsd_1XX  636051b9d517c3b5bfdfffd60e94ee39 9aef684968f127ae8000000000000000   -0.499990  -0.000000
+m (rm=2) roundsd_1XX  10e8927696ec55e2bfdfffd60e94ee39 c10380fea42b07398000000000000000   -0.499990  -0.000000
+r (rm=3) roundsd_1XX  8a5ac2fdb52fd3f7bfdfffd60e94ee39 2568c6f1ccd931c28000000000000000   -0.499990  -0.000000
+m (rm=3) roundsd_1XX  2e04ddb8ce6b79a0bfdfffd60e94ee39 216936907d86e1f58000000000000000   -0.499990  -0.000000
+r (rm=0) roundsd_1XX  5830e0157e2c8288bfd3333333333333 1053ca4553bf527d8000000000000000   -0.300000  -0.000000
+m (rm=0) roundsd_1XX  642cc57f60ff2b5bbfd3333333333333 5073807ee90fc2078000000000000000   -0.300000  -0.000000
+r (rm=1) roundsd_1XX  ae428a61116fafc6bfd3333333333333 3b1353a6dc026b3fbff0000000000000   -0.300000  -1.000000
+m (rm=1) roundsd_1XX  92bf2a292c094c75bfd3333333333333 2f7f3f29c72589d0bff0000000000000   -0.300000  -1.000000
+r (rm=2) roundsd_1XX  6ceea1424e573c14bfd3333333333333 8605407346035a668000000000000000   -0.300000  -0.000000
+m (rm=2) roundsd_1XX  981dec1812e8bc4ebfd3333333333333 9ef053f0f62818af8000000000000000   -0.300000  -0.000000
+r (rm=3) roundsd_1XX  72960517154507cfbfd3333333333333 d18b730c722000558000000000000000   -0.300000  -0.000000
+m (rm=3) roundsd_1XX  56a7eaabf2fc5a44bfd3333333333333 7d239c3357784d048000000000000000   -0.300000  -0.000000
+r (rm=0) roundsd_1XX  a09a97414698f159bfb999999999999a fc04cad241bc3d698000000000000000   -0.100000  -0.000000
+m (rm=0) roundsd_1XX  acbc0643aca508b9bfb999999999999a ab7af953ca760a308000000000000000   -0.100000  -0.000000
+r (rm=1) roundsd_1XX  d659341fc0b0da11bfb999999999999a e7d126249134f104bff0000000000000   -0.100000  -1.000000
+m (rm=1) roundsd_1XX  7abc1e3f1f44a40dbfb999999999999a 0a554caf30822d92bff0000000000000   -0.100000  -1.000000
+r (rm=2) roundsd_1XX  f333bf1165eea258bfb999999999999a 7151676243eafb858000000000000000   -0.100000  -0.000000
+m (rm=2) roundsd_1XX  9f0813002d39109fbfb999999999999a 781273a866fa978a8000000000000000   -0.100000  -0.000000
+r (rm=3) roundsd_1XX  d989177813b1298dbfb999999999999a 7ce46ded373e3d4d8000000000000000   -0.100000  -0.000000
+m (rm=3) roundsd_1XX  fc00c6e4b4e22acfbfb999999999999a d713509d4f4028798000000000000000   -0.100000  -0.000000
+r (rm=0) roundsd_1XX  66b91bb3ab594f113fb999999999999a e6eb18244c8f95bb0000000000000000    0.100000   0.000000
+m (rm=0) roundsd_1XX  7202154e95a2d3fe3fb999999999999a 05b8c1eecab4c0be0000000000000000    0.100000   0.000000
+r (rm=1) roundsd_1XX  7b26ad220e47f3423fb999999999999a 90c54767643de42f0000000000000000    0.100000   0.000000
+m (rm=1) roundsd_1XX  df70e09bb0d6eb8b3fb999999999999a e360a7fcb6b53fba0000000000000000    0.100000   0.000000
+r (rm=2) roundsd_1XX  f82dab261adaf7833fb999999999999a 5ad3dc175da80b0a3ff0000000000000    0.100000   1.000000
+m (rm=2) roundsd_1XX  24aa092de5e052d63fb999999999999a 516be226f5a384cc3ff0000000000000    0.100000   1.000000
+r (rm=3) roundsd_1XX  bd31f61eaf7339313fb999999999999a 2474b5931931e8ab0000000000000000    0.100000   0.000000
+m (rm=3) roundsd_1XX  210e6f64141fe8403fb999999999999a 2f3a52cc65df71540000000000000000    0.100000   0.000000
+r (rm=0) roundsd_1XX  aa8f6e6aaf719aae3fd3333333333333 ce08b43c76375b730000000000000000    0.300000   0.000000
+m (rm=0) roundsd_1XX  b5fff19e1df48c283fd3333333333333 5c2cd74fe7c8e4b30000000000000000    0.300000   0.000000
+r (rm=1) roundsd_1XX  9fa9f36bf934fa593fd3333333333333 37f0b771551b46c10000000000000000    0.300000   0.000000
+m (rm=1) roundsd_1XX  c2da713ddfbe20ee3fd3333333333333 baa1500e5bbebe480000000000000000    0.300000   0.000000
+r (rm=2) roundsd_1XX  7bde65816c1d39933fd3333333333333 418b9f92963c88f53ff0000000000000    0.300000   1.000000
+m (rm=2) roundsd_1XX  2601cda13cdd82f33fd3333333333333 28fa9f6aa122df733ff0000000000000    0.300000   1.000000
+r (rm=3) roundsd_1XX  208fa40aea8b37bb3fd3333333333333 ca394c0019fa00700000000000000000    0.300000   0.000000
+m (rm=3) roundsd_1XX  c3d3e62912b293973fd3333333333333 8596a2c2995327950000000000000000    0.300000   0.000000
+r (rm=0) roundsd_1XX  6c1b8f6851ded3323fdfffd60e94ee39 b35b9d1abdb690910000000000000000    0.499990   0.000000
+m (rm=0) roundsd_1XX  77b19c35429c33383fdfffd60e94ee39 b2d53a7623b1760e0000000000000000    0.499990   0.000000
+r (rm=1) roundsd_1XX  40e208fb8277ef563fdfffd60e94ee39 dd50744164cf16b80000000000000000    0.499990   0.000000
+m (rm=1) roundsd_1XX  23facf25acfc42383fdfffd60e94ee39 8f1847e71e9dac3c0000000000000000    0.499990   0.000000
+r (rm=2) roundsd_1XX  7c45ed215db5698a3fdfffd60e94ee39 2679afd4eda673463ff0000000000000    0.499990   1.000000
+m (rm=2) roundsd_1XX  a70e5e5a3030a0f73fdfffd60e94ee39 fcbea9746b76a8813ff0000000000000    0.499990   1.000000
+r (rm=3) roundsd_1XX  00a31f3dc2f9232b3fdfffd60e94ee39 6f353033379a879a0000000000000000    0.499990   0.000000
+m (rm=3) roundsd_1XX  e34e2b34ae9b2dd33fdfffd60e94ee39 d928407deb9d4c3c0000000000000000    0.499990   0.000000
+r (rm=0) roundsd_1XX  ac5c7eac91a2fb9b3fe00014f8b588e3 97e4d5be230b32153ff0000000000000    0.500010   1.000000
+m (rm=0) roundsd_1XX  b7191411069ac92e3fe00014f8b588e3 06b5ec637c7176ce3ff0000000000000    0.500010   1.000000
+r (rm=1) roundsd_1XX  60d1ead0a910d2393fe00014f8b588e3 80e77fd6915a54150000000000000000    0.500010   0.000000
+m (rm=1) roundsd_1XX  02d0fb54178f53683fe00014f8b588e3 62c58c85ff5207960000000000000000    0.500010   0.000000
+r (rm=2) roundsd_1XX  fb614308eca488663fe00014f8b588e3 089d0edb61e6ccfd3ff0000000000000    0.500010   1.000000
+m (rm=2) roundsd_1XX  a6d2be5ac3daace03fe00014f8b588e3 cfb9024454a1dff53ff0000000000000    0.500010   1.000000
+r (rm=3) roundsd_1XX  5f6d68b538bdfd813fe00014f8b588e3 1166622b730f7c2a0000000000000000    0.500010   0.000000
+m (rm=3) roundsd_1XX  817f3e85e8d9b5f63fe00014f8b588e3 2bf02cfe5bbdde4a0000000000000000    0.500010   0.000000
+r (rm=0) roundsd_1XX  6a543b366ebb10eb3fe6666666666666 79a35b29a73642fe3ff0000000000000    0.700000   1.000000
+m (rm=0) roundsd_1XX  74375b3467ee4c0b3fe6666666666666 57cbeb16f306e4f53ff0000000000000    0.700000   1.000000
+r (rm=1) roundsd_1XX  fd769aeb6effa3023fe6666666666666 21b3d932dcba00d90000000000000000    0.700000   0.000000
+m (rm=1) roundsd_1XX  605bf5c82079527e3fe6666666666666 33a91fe9feddd1560000000000000000    0.700000   0.000000
+r (rm=2) roundsd_1XX  f834673518e894293fe6666666666666 e9f7bba8f4fc941a3ff0000000000000    0.700000   1.000000
+m (rm=2) roundsd_1XX  234beca0f3d9a7af3fe6666666666666 9feaa8da5aa184ce3ff0000000000000    0.700000   1.000000
+r (rm=3) roundsd_1XX  3bed80734cd7c5bd3fe6666666666666 b1cee2eacd5bdf210000000000000000    0.700000   0.000000
+m (rm=3) roundsd_1XX  9d661f1cc06e2aff3fe6666666666666 7bee6646e8b3dfbd0000000000000000    0.700000   0.000000
+r (rm=0) roundsd_1XX  a601c606ea2b14203feccccccccccccd 59982f594837c14e3ff0000000000000    0.900000   1.000000
+m (rm=0) roundsd_1XX  b00c709d6799bdcd3feccccccccccccd a716398f8972c0813ff0000000000000    0.900000   1.000000
+r (rm=1) roundsd_1XX  18d1194dd24462b13feccccccccccccd c1b6805445f019020000000000000000    0.900000   0.000000
+m (rm=1) roundsd_1XX  3b9dbd82c7b93e793feccccccccccccd 02c200141b3e087c0000000000000000    0.900000   0.000000
+r (rm=2) roundsd_1XX  73bc59a8e3838fd13feccccccccccccd c887b63ba4e7c99c3ff0000000000000    0.900000   1.000000
+m (rm=2) roundsd_1XX  1d7ae72bc22e8f643feccccccccccccd 6e509d357f78970e3ff0000000000000    0.900000   1.000000
+r (rm=3) roundsd_1XX  95236578ff477bdf3feccccccccccccd 506bb16f457cb07d0000000000000000    0.900000   0.000000
+m (rm=3) roundsd_1XX  3802cef936598eed3feccccccccccccd c923ee53947f4d960000000000000000    0.900000   0.000000
+r (rm=0) roundsd_1XX  60651f1c04f0053c3ff199999999999a 37c3504f080ead043ff0000000000000    1.100000   1.000000
+m (rm=0) roundsd_1XX  6a96524b04991c753ff199999999999a f498d4ce3cb40a743ff0000000000000    1.100000   1.000000
+r (rm=1) roundsd_1XX  b2e265f4d3df0f463ff199999999999a 5eee753bcdfda1923ff0000000000000    1.100000   1.000000
+m (rm=1) roundsd_1XX  949553820c4e195b3ff199999999999a cf112f045675ae093ff0000000000000    1.100000   1.000000
+r (rm=2) roundsd_1XX  6cfb19614c73775f3ff199999999999a a54dff9473a96c854000000000000000    1.100000   2.000000
+m (rm=2) roundsd_1XX  9660b1fd2ed965ff3ff199999999999a 3aeddf57c12519b44000000000000000    1.100000   2.000000
+r (rm=3) roundsd_1XX  6e0f19c24f0d1ee73ff199999999999a ec3fcdbadb73ee3f3ff0000000000000    1.100000   1.000000
+m (rm=3) roundsd_1XX  50554c1c4a9ae0c23ff199999999999a 158dc4275e212ad53ff0000000000000    1.100000   1.000000
+r (rm=0) roundsd_1XX  987e4677bc0ce53d3ff4cccccccccccd 1324c00be6bb07203ff0000000000000    1.300000   1.000000
+m (rm=0) roundsd_1XX  a2d6034040ef69033ff4cccccccccccd 4050bed30dcbc2cd3ff0000000000000    1.300000   1.000000
+r (rm=1) roundsd_1XX  c9a980e172d0aac13ff4cccccccccccd f95db8e972df97873ff0000000000000    1.300000   1.000000
+m (rm=1) roundsd_1XX  6b43b7c8ef3ae2233ff4cccccccccccd 9b96acbbae82c2fb3ff0000000000000    1.300000   1.000000
+r (rm=2) roundsd_1XX  e3efa66053ba4ed43ff4cccccccccccd 804995b460417ed44000000000000000    1.300000   2.000000
+m (rm=2) roundsd_1XX  8dfb491439db29813ff4cccccccccccd 05c0703f21a708bf4000000000000000    1.300000   2.000000
+r (rm=3) roundsd_1XX  c4b19a523d29b0d53ff4cccccccccccd 864837ca8f419b683ff0000000000000    1.300000   1.000000
+m (rm=3) roundsd_1XX  e65e9785fc301f7d3ff4cccccccccccd 5f2de8c04699757a3ff0000000000000    1.300000   1.000000
+r (rm=0) roundss_1XX  4e4e3b19117db2247f546bff00000000 ecbb7e8de13dd0a271969b9000000000    0.000000   0.000000
+m (rm=0) roundss_1XX  57cd827a199ba578e424469f00000000 8a3df59efdb9e88be508aeba00000000    0.000000   0.000000
+r (rm=1) roundss_1XX  5f266815af1733225facf1cd00000000 93014a5d3598fbe21ed80f2700000000    0.000000   0.000000
+m (rm=1) roundss_1XX  c0a7ea54707c98d1ceb7e87500000000 6451773725664353f9d23bc400000000    0.000000   0.000000
+r (rm=2) roundss_1XX  d89a02a4f756122e0b13a78300000000 597a7a996aaffd8950c2ad7e00000000    0.000000   0.000000
+m (rm=2) roundss_1XX  014cae72e132dbe8f38aabe300000000 cec94eeda00065310174e14000000000    0.000000   0.000000
+r (rm=3) roundss_1XX  9909ea29c99b30a963e96f8100000000 1e87f0a162e4b6f6e6b353f600000000    0.000000   0.000000
+m (rm=3) roundss_1XX  fa1db0344c1d4d1e35fc6f4a00000000 a7035a204ce72d85dc4d808b00000000    0.000000   0.000000
+r (rm=0) roundss_1XX  82d4fe0105456ef2468f272880000000 c4888ad6fb96068abf0ce3ed80000000   -0.000000  -0.000000
+m (rm=0) roundss_1XX  8b79cefb919eced2736d130980000000 d1617b2f0a7c7cb06cbdf80780000000   -0.000000  -0.000000
+r (rm=1) roundss_1XX  72591e8e8bb4aa699664b0d780000000 2adb29971626cda4bd2c3bc680000000   -0.000000  -0.000000
+m (rm=1) roundss_1XX  94c1ea268f143d648c3e798080000000 2b42907aba1f33118f25291480000000   -0.000000  -0.000000
+r (rm=2) roundss_1XX  4bfb2c2f3a49c56f31c8eaef80000000 2fe2ad4493f3eaa4be733cde80000000   -0.000000  -0.000000
+m (rm=2) roundss_1XX  f453e21628df7c3561ce7f1080000000 94077b613c2e300826e4f21180000000   -0.000000  -0.000000
+r (rm=3) roundss_1XX  eb170745f4639e63f81cb5cf80000000 b5fdf63e525d3feba342c69780000000   -0.000000  -0.000000
+m (rm=3) roundss_1XX  8c9297293a6069a4d27e061880000000 ed0f1a45700b54f6115a355e80000000   -0.000000  -0.000000
+r (rm=0) roundss_1XX  340f8e2f976217a5cbc0f0d77f800000 9a8be4e432c5aad84cf8b9507f800000         inf        inf
+m (rm=0) roundss_1XX  3ddbe9c2a6f6e512bfadeff87f800000 17bb4e8635167e3a30e8d05b7f800000         inf        inf
+r (rm=1) roundss_1XX  0442a34d04a70f968a127d677f800000 bfec5696158a0ccb99f6f56a7f800000         inf        inf
+m (rm=1) roundss_1XX  e590b83e4c01d0de08bb18117f800000 f06af7826dae903563eda4697f800000         inf        inf
+r (rm=2) roundss_1XX  3c1124001b91659515743ae07f800000 04802eb5d90d46256a9a5a447f800000         inf        inf
+m (rm=2) roundss_1XX  6511e4ff0ce20a688d0961c27f800000 597cf59bf63369468aca91e77f800000         inf        inf
+r (rm=3) roundss_1XX  bcdbf2a7bc81fa034c4609a27f800000 49a84aa060ad36459f47c73f7f800000         inf        inf
+m (rm=3) roundss_1XX  9dbd4c64c6f872112ef6ac6b7f800000 32522831b206e8cd84de77367f800000         inf        inf
+r (rm=0) roundss_1XX  6301eda3c6d6ae3f0ee7c80bff800000 6ec48bb888cabd8b175a1eb9ff800000        -inf       -inf
+m (rm=0) roundss_1XX  6cf4d2ce5aa4ea38cae3d86dff800000 5a4b70a27f86ef2b338936b5ff800000        -inf       -inf
+r (rm=1) roundss_1XX  13e2f5531bf061a93db7587dff800000 5332d25c32c5ba58b4353d15ff800000        -inf       -inf
+m (rm=1) roundss_1XX  b416549ca745513e432fc428ff800000 b3c7ac513e135cbf752caec4ff800000        -inf       -inf
+r (rm=2) roundss_1XX  abdeea179a30f3a2b7169958ff800000 d754fdec3efd0f0c543805b0ff800000        -inf       -inf
+m (rm=2) roundss_1XX  5384b32f8f3b8682773a52faff800000 1b27be9bcf0e10ea2b26bec4ff800000        -inf       -inf
+r (rm=3) roundss_1XX  0a55ac5022f544895d656bfbff800000 db8aecc98cd29a05d8c156ecff800000        -inf       -inf
+m (rm=3) roundss_1XX  2b9dcfe6f0e76a6447646045ff800000 74ca84e211d6eb0a36d74814ff800000        -inf       -inf
+r (rm=0) roundss_1XX  11a81a5d949f34be0f03adc6ffc00000 40338152fca53da520331028ffc00000        -nan       -nan
+m (rm=0) roundss_1XX  1ac28821aba8dd45930ecf69ffc00000 9c10df85e6cbcd8274a02a15ffc00000        -nan       -nan
+r (rm=1) roundss_1XX  a137169ed08fa2a2ad51411affc00000 e4af9be86dd5d64c0ceb13c5ffc00000        -nan       -nan
+m (rm=1) roundss_1XX  0152be40a0dfbf843b987fc5ffc00000 745aafe52d4e95afc5e04526ffc00000        -nan       -nan
+r (rm=2) roundss_1XX  98607e74b624709417ae0556ffc00000 a85e19eac1c246587c4b3e22ffc00000        -nan       -nan
+m (rm=2) roundss_1XX  c0ad51a4afebf0811f6050b9ffc00000 dc07d461c5be25f30bf879a7ffc00000        -nan       -nan
+r (rm=3) roundss_1XX  d785333e26bf7cf52d7adbdaffc00000 6ca1ddb8d6cd6d2c4fb273a0ffc00000        -nan       -nan
+m (rm=3) roundss_1XX  373421adb82c509d1ec822a5ffc00000 b4782e5a8f7c5bae2547a6f8ffc00000        -nan       -nan
+r (rm=0) roundss_1XX  3d06155c00bfa724ce16a1077fc00000 10d7c5b28d562b256781909d7fc00000         nan        nan
+m (rm=0) roundss_1XX  46460db99b03be371a30d4ea7fc00000 db0c9d2e6be7193ef22dac7a7fc00000         nan        nan
+r (rm=1) roundss_1XX  ac42042f2484d181dce1383c7fc00000 7361b239c6bb60a5a217767c7fc00000         nan        nan
+m (rm=1) roundss_1XX  cc44f62a37cf1caff1f748e77fc00000 332300403a5f3d05540b6b8d7fc00000         nan        nan
+r (rm=2) roundss_1XX  0399e017716fda6d353c80d97fc00000 779e84ad615eec0be2d4069a7fc00000         nan        nan
+m (rm=2) roundss_1XX  ab8dbd606ef04866847d5cfd7fc00000 9a1e39edd945a8632940c3907fc00000         nan        nan
+r (rm=3) roundss_1XX  216b8972c8dfa247ba86593f7fc00000 faef1b6d3e9faeb805191e597fc00000         nan        nan
+m (rm=3) roundss_1XX  c18140ba1ec724bbb323f18b7fc00000 f25c26972bf83ab7522c93e37fc00000         nan        nan
+r (rm=0) roundss_1XX  e719dea20a34096f4b1fa2cdbfa66666 ddb257d93ddc870bec459f18bf800000   -1.300000  -1.000000
+m (rm=0) roundss_1XX  ef81609828b38e0f5e48e7f2bfa66666 193ea89d0fd8d361af30bce6bf800000   -1.300000  -1.000000
+r (rm=1) roundss_1XX  3603c00715cfee46c8683de4bfa66666 014a17513d78586477b96838c0000000   -1.300000  -2.000000
+m (rm=1) roundss_1XX  16ecfd5a6c1467c1654c1e90bfa66666 f0229f60644652c220ab1ffac0000000   -1.300000  -2.000000
+r (rm=2) roundss_1XX  ec8710ffca0f332b11c008e3bfa66666 44143d3620d0ff2486d35b18bf800000   -1.300000  -1.000000
+m (rm=2) roundss_1XX  1422f661ca4b8e31a89076c8bfa66666 576beb3f0ca1993884fe9a7ebf800000   -1.300000  -1.000000
+r (rm=3) roundss_1XX  e908aced0955b67f0687e52abfa66666 8672a7e7c4465daaf8f65719bf800000   -1.300000  -1.000000
+m (rm=3) roundss_1XX  c9842d0d22b7e5c00773cff7bfa66666 2e766c9be54a8626bd880ed3bf800000   -1.300000  -1.000000
+r (rm=0) roundss_1XX  0fe3752eb1ff58a1861eb21abf8ccccd a9c336c50a395257af7f3b99bf800000   -1.100000  -1.000000
+m (rm=0) roundss_1XX  177180bc53b94bcd6155097fbf8ccccd 55a502d2d0a0fbeaa9a95a58bf800000   -1.100000  -1.000000
+r (rm=1) roundss_1XX  3d7a4b24a470f9f173e45012bf8ccccd 8c68cb2fd20abe8a89d0e8fbc0000000   -1.100000  -2.000000
+m (rm=1) roundss_1XX  dd49d1d13fb09fb9989703bfbf8ccccd ab588d47ad03d6e42ac2606dc0000000   -1.100000  -2.000000
+r (rm=2) roundss_1XX  532c0e2ec10579d0ab3a9f73bf8ccccd 0ec04485fc1880a367493e9cbf800000   -1.100000  -1.000000
+m (rm=2) roundss_1XX  fa6dfea9c4fcc3e38a989f18bf8ccccd 12edec575cd4f8741e32ff73bf800000   -1.100000  -1.000000
+r (rm=3) roundss_1XX  305a9dade721b89d0f7f7f9bbf8ccccd 112c822868c37a032a491ddebf800000   -1.100000  -1.000000
+m (rm=3) roundss_1XX  503de8a6c4fe95ab18b9bbe9bf8ccccd 68c60064bd7241fb665916c9bf800000   -1.100000  -1.000000
+r (rm=0) roundss_1XX  b563da00f72196b87f13cfedbf666666 730a6477f66c8a09b0306520bf800000   -0.900000  -1.000000
+m (rm=0) roundss_1XX  bd176f271d15f67222593892bf666666 8e43a9cdb03e91d8e29887d0bf800000   -0.900000  -1.000000
+r (rm=1) roundss_1XX  c2a7a387d167f282db5771c6bf666666 15bcccd386729115da5ef6c3bf800000   -0.900000  -1.000000
+m (rm=1) roundss_1XX  225d738db0a2c69788d8f674bf666666 64c3c8f31496c86c724e30e7bf800000   -0.900000  -1.000000
+r (rm=2) roundss_1XX  3787daa35552ae5a03aa4388bf666666 d7a2989af7366f888734b02680000000   -0.900000  -0.000000
+m (rm=2) roundss_1XX  5f6fd4375d04e57a2a97d5eebf666666 caa63a35caddc516f6dcf26e80000000   -0.900000  -0.000000
+r (rm=3) roundss_1XX  f4625db36342a8a1d76c2693bf666666 991baa2f2a1704c1991172aa80000000   -0.900000  -0.000000
+m (rm=3) roundss_1XX  54ab7185049b337ce7f5b461bf666666 a04de2f3b3706a364da1adc680000000   -0.900000  -0.000000
+r (rm=0) roundss_1XX  d9980d18db98c1b637fefb45bf333333 3b87e0ef00753021ee561eaebf800000   -0.700000  -1.000000
+m (rm=0) roundss_1XX  e1742cd884c78ffca152752cbf333333 c6179f8eadb1952d59fd414ebf800000   -0.700000  -1.000000
+r (rm=1) roundss_1XX  c68aca319cb4d9f902bfa000bf333333 9d471b3c57b1d30768629292bf800000   -0.700000  -1.000000
+m (rm=1) roundss_1XX  e527e38fbfe9db5a360ff7afbf333333 1b64516599ff275af8518d66bf800000   -0.700000  -1.000000
+r (rm=2) roundss_1XX  9a97735e88f4d0cb190ff624bf333333 9eba3b76102acdd3e595afb680000000   -0.700000  -0.000000
+m (rm=2) roundss_1XX  4226770a9361f5f7878c194bbf333333 8195d7d957bb001d0bfc736f80000000   -0.700000  -0.000000
+r (rm=3) roundss_1XX  3720ea007dba868b5c4fdc10bf333333 1f4020fb0a40fde54650557b80000000   -0.700000  -0.000000
+m (rm=3) roundss_1XX  d6d0c8aae28ebe327427bc5fbf333333 d6091249c74400d7725ed1c880000000   -0.700000  -0.000000
+r (rm=0) roundss_1XX  7b840e765d66da99acdf3424bf0000a8 013aaa2e2754459e6bf26441bf800000   -0.500010  -1.000000
+m (rm=0) roundss_1XX  8286b6ce8ad0166cde42c04bbf0000a8 fb20e315c8fb07e70dd889d1bf800000   -0.500010  -1.000000
+r (rm=1) roundss_1XX  4723be200657ae56e61dddc1bf0000a8 2207b86c46c5835e34dcbc66bf800000   -0.500010  -1.000000
+m (rm=1) roundss_1XX  26a721d76c87dd04a23c0570bf0000a8 d03b289e3c3ff5aebcc979ebbf800000   -0.500010  -1.000000
+r (rm=2) roundss_1XX  7b5edb5f59ede021ed6bb645bf0000a8 63082c1746f49884816d3c4c80000000   -0.500010  -0.000000
+m (rm=2) roundss_1XX  a293e9246814f35aa3766b2dbf0000a8 35b9c2430170a98b5f92827580000000   -0.500010  -0.000000
+r (rm=3) roundss_1XX  f79446923688525ba029a013bf0000a8 a49ce48e093f64703205c65380000000   -0.500010  -0.000000
+m (rm=3) roundss_1XX  d6abed155ed638cfc04fd2e3bf0000a8 0afb9064f8ee05ded69284d080000000   -0.500010  -0.000000
+r (rm=0) roundss_1XX  9b25dd197c89e263dfb67c89befffeb0 c523c2326d09c782260438da80000000   -0.499990  -0.000000
+m (rm=0) roundss_1XX  a24e0f0b2d2e8cc2d8281af1befffeb0 2f607462021ae70800295f5b80000000   -0.499990  -0.000000
+r (rm=1) roundss_1XX  477280550d50719989722807befffeb0 a5fea46253afa11b3fcb7441bf800000   -0.499990  -1.000000
+m (rm=1) roundss_1XX  e6dd2d65b77bce94cd6022b7befffeb0 83484d9cfd543068beb8f376bf800000   -0.499990  -1.000000
+r (rm=2) roundss_1XX  dada11a6c73bdf5e7fbd85edbefffeb0 268c6b7e9b93d19b5bba58e880000000   -0.499990  -0.000000
+m (rm=2) roundss_1XX  81b72983da1ddfa47d57cb96befffeb0 e814fa73cafac05ff19e1f8280000000   -0.499990  -0.000000
+r (rm=3) roundss_1XX  36be6f6a8cac0c11a1f8729cbefffeb0 262df7e7251539605b30c53080000000   -0.499990  -0.000000
+m (rm=3) roundss_1XX  543ce1c67875a052c96df6edbefffeb0 3c235c46486e774b773bc5de80000000   -0.499990  -0.000000
+r (rm=0) roundss_1XX  397d79033a03d712d082d173be99999a 864227fcd094b7cc1f8d9b7980000000   -0.300000  -0.000000
+m (rm=0) roundss_1XX  40cd368d6fe2effe9103811cbe99999a 60d654755910358f31f0c3eb80000000   -0.300000  -0.000000
+r (rm=1) roundss_1XX  c47711d1b29f22c2e9bc81d3be99999a 262add1d7e702d3f8731b921bf800000   -0.300000  -1.000000
+m (rm=1) roundss_1XX  23c90739a0c5ad09b5794d84be99999a 358cc061dc3fda88fe1cfa08bf800000   -0.300000  -1.000000
+r (rm=2) roundss_1XX  b70d1532d4e0cb80cf05611bbe99999a e746f8ab0d097917737d018a80000000   -0.300000  -0.000000
+m (rm=2) roundss_1XX  de903629eb7cbad3152d3a84be99999a 98a58169b05b4598c0204a9580000000   -0.300000  -0.000000
+r (rm=3) roundss_1XX  f29e66898026b4ad61be52abbe99999a a6f557065fc07cb7c3d0521480000000   -0.300000  -0.000000
+m (rm=3) roundss_1XX  5183a2bd306af5bb9081277cbe99999a 6c8176edb6c5581f565b93f380000000   -0.300000  -0.000000
+r (rm=0) roundss_1XX  558ae43396d2bba87f4535e4bdcccccd 4697db8c52f4167c568b8b1e80000000   -0.100000  -0.000000
+m (rm=0) roundss_1XX  5b012a564eec402108d5f6cdbdcccccd 9081814ecedcf17b9f2db58180000000   -0.100000  -0.000000
+r (rm=1) roundss_1XX  c0326f92f544c1d108fce825bdcccccd a68d649fc70626c80d0d8d08bf800000   -0.100000  -1.000000
+m (rm=1) roundss_1XX  de6ab053276479655b8885d7bdcccccd e40581ebd800f10e7df7909fbf800000   -0.100000  -1.000000
+r (rm=2) roundss_1XX  12f5e7057fdaa689dd434ccebdcccccd a536d29e9e558efac9b6383280000000   -0.100000  -0.000000
+m (rm=2) roundss_1XX  b81f1215993282e86afab6f8bdcccccd 476c5525b4923838ce1803ae80000000   -0.100000  -0.000000
+r (rm=3) roundss_1XX  2d342ced12f64a2fdf794040bdcccccd 25f205eab7412d7368e76cfd80000000   -0.100000  -0.000000
+m (rm=3) roundss_1XX  cb8031fa86b43909168c6792bdcccccd 9a16de5b42f1a65873f0f00d80000000   -0.100000  -0.000000
+r (rm=0) roundss_1XX  ef4e1da990f88c23ecfea6db3dcccccd 0422dde2f22be292cbff09c900000000    0.100000   0.000000
+m (rm=0) roundss_1XX  f5ebed65cc4d7f293d9d79053dcccccd be63fded627d1bce4ce0351c00000000    0.100000   0.000000
+r (rm=1) roundss_1XX  39a39c99d73f4ec6e5335dfd3dcccccd 23253ae72e728eb7d25feff400000000    0.100000   0.000000
+m (rm=1) roundss_1XX  17c226b34c5a34a7bf8dccb03dcccccd 91b4903cf39777fa3947b33c00000000    0.100000   0.000000
+r (rm=2) roundss_1XX  eb94871ec82b6e77a97744083dcccccd 625cfb584d7711435d66fee03f800000    0.100000   1.000000
+m (rm=2) roundss_1XX  1165bb46e63d38e37ebd40f33dcccccd f46878a7d79e993d19864acd3f800000    0.100000   1.000000
+r (rm=3) roundss_1XX  e580bf97431ccd971a2a3c5b3dcccccd a12601952d994b954b7415ed00000000    0.100000   0.000000
+m (rm=3) roundss_1XX  c3328e7d7a556b3e598cb52e3dcccccd c6e0948eecf363f7cefcda2d00000000    0.100000   0.000000
+r (rm=0) roundss_1XX  07c8246527734c8517ad25573e99999a c0e32dffaf381c0e7ee9167a00000000    0.300000   0.000000
+m (rm=0) roundss_1XX  0d8c7eb9e703ac172f5a0ac23e99999a e97bc65213f5b386370943be00000000    0.300000   0.000000
+r (rm=1) roundss_1XX  31ca96e75690c9a17f5fe05b3e99999a 9ef45df5b3b5640dd426dfe700000000    0.300000   0.000000
+m (rm=1) roundss_1XX  ced06a590fa6ddcfe288210e3e99999a 3c99ed522c046a4d330e65e000000000    0.300000   0.000000
+r (rm=2) roundss_1XX  42e9f57daed1254c33a14ac83e99999a 1db872d7196f03f22f8b51943f800000    0.300000   1.000000
+m (rm=2) roundss_1XX  e86033bed09edcc55075d8733e99999a 9e9be8ef178169a9a36a1ff13f800000    0.300000   1.000000
+r (rm=3) roundss_1XX  1c82218811983fe514d246fd3e99999a 1b8f4c06c1c6d81e6d774ce200000000    0.300000   0.000000
+m (rm=3) roundss_1XX  399bb9470c4c8a595a8210503e99999a f1e09988b4cb8efc677d535300000000    0.300000   0.000000
+r (rm=0) roundss_1XX  9df7f9675d45f9cc0052b35a3efffeb0 7adacbe18b1bc5f06f4ab03100000000    0.499990   0.000000
+m (rm=0) roundss_1XX  a2e2dc54a10fc7ebe00eaa063efffeb0 13c9de7de242b9a55fa8df6600000000    0.499990   0.000000
+r (rm=1) roundss_1XX  a6a75f7a73373262d882703f3efffeb0 18f8cec856cda8c815645ddf00000000    0.499990   0.000000
+m (rm=1) roundss_1XX  04947c45704773dcc27984f33efffeb0 e5b4982f8347cc056b4aa48900000000    0.499990   0.000000
+r (rm=2) roundss_1XX  17f3312233cec9067bc15f0d3efffeb0 d64a371c043d62073e26324e3f800000    0.499990   1.000000
+m (rm=2) roundss_1XX  3d11797b59556e8ce0247e793efffeb0 4704a7fd7539a67b6bc4831c3f800000    0.499990   1.000000
+r (rm=3) roundss_1XX  d03a50be7d6a9f19cb6f5e243efffeb0 942fe43c73cad30cccef11de00000000    0.499990   0.000000
+m (rm=3) roundss_1XX  2dbab2563c99985a196e7af83efffeb0 1916eb479a7926673e755a8000000000    0.499990   0.000000
+r (rm=0) roundss_1XX  b1dd9cae316c95faa7ed4ee23f0000a8 3107b68984d4db389e20d8ee3f800000    0.500010   1.000000
+m (rm=0) roundss_1XX  b6ee0934f871d1a64fb757cf3f0000a8 3a4c436ed0662d2ac6bd09143f800000    0.500010   1.000000
+r (rm=1) roundss_1XX  993af5532e348909ee9a0faa3f0000a8 8f328d6218bb5ae9931869de00000000    0.500010   0.000000
+m (rm=1) roundss_1XX  b70e5c776f3ff8d06060f45e3f0000a8 8c0691d1f8609c23e1fd723800000000    0.500010   0.000000
+r (rm=2) roundss_1XX  6ab43b0d56205ba781d781d93f0000a8 8d1249270de02f828c37a20e3f800000    0.500010   1.000000
+m (rm=2) roundss_1XX  0f798c7f7f63ef392dc933063f0000a8 eda2b3d1f2c851b27094744d3f800000    0.500010   1.000000
+r (rm=3) roundss_1XX  02a84d3a8792ed33410284d13f0000a8 0a04ca3943a33c6069de64df00000000    0.500010   0.000000
+m (rm=3) roundss_1XX  a08f7aab0a3b94409750f2263f0000a8 3f828bcd9dfd2d3853e2eeb200000000    0.500010   0.000000
+r (rm=0) roundss_1XX  43780d3ca2ea1e0d0c7ef8f13f333333 e76af0f79c635fe50a6c8fb13f800000    0.700000   1.000000
+m (rm=0) roundss_1XX  48b0045bee29c8467c57121e3f333333 6006f725db600f146a48c1c83f800000    0.700000   1.000000
+r (rm=1) roundss_1XX  0b8459738887cd96c3a8bc9a3f333333 04a39bc2f78079714f4202e200000000    0.700000   0.000000
+m (rm=1) roundss_1XX  e83d0aef0c8d6baabc3d734f3f333333 318dd83a8b4fd9a79525ceed00000000    0.700000   0.000000
+r (rm=2) roundss_1XX  3b2a133d17c9dc2d45e2b22b3f333333 410faaf9335a6b6318bf9fd43f800000    0.700000   1.000000
+m (rm=2) roundss_1XX  60966ec844c65dcc3963f5183f333333 92770e6b8c2d6a50b4daf3843f800000    0.700000   1.000000
+r (rm=3) roundss_1XX  b3cc19fd2f102933748cb8043f333333 7e0ffffc3152131b454345e700000000    0.700000   0.000000
+m (rm=3) roundss_1XX  901a0f4676347d0dd22878da3f333333 63257918bf57a16fa7c611ea00000000    0.700000   0.000000
+r (rm=0) roundss_1XX  53ca4c10b2bd95072f05af863f666666 9b03782bd2c751f9b52ed37a3f800000    0.900000   1.000000
+m (rm=0) roundss_1XX  5829ccc78138adcc66eddbf43f666666 83f6f8a2042f60654d4908813f800000    0.900000   1.000000
+r (rm=1) roundss_1XX  fa838cd87f2f000955ad77103f666666 7849f6e7f41a075e4ae12aed00000000    0.900000   0.000000
+m (rm=1) roundss_1XX  972387ae4731cc6ad71100c63f666666 d44a6d683c14859187c4b7a900000000    0.900000   0.000000
+r (rm=2) roundss_1XX  8a57b9b475c74a9ac7e4f0023f666666 f443599078aa14a9e2bc2aa03f800000    0.900000   1.000000
+m (rm=2) roundss_1XX  2f691e58a67fb94603f4c5b13f666666 3582b6cb4467f153369600c03f800000    0.900000   1.000000
+r (rm=3) roundss_1XX  e1a6b20576e45319660bfabd3f666666 f15181843ed8573b5e1eb3f400000000    0.900000   0.000000
+m (rm=3) roundss_1XX  fe5a7227808355c0cbf60b143f666666 85fdb529ff87840c381fc12900000000    0.900000   0.000000
+r (rm=0) roundss_1XX  e1d1592a60e7fbe6108175a03f8ccccd 4dd24e262502b2739e67a5493f800000    1.100000   1.000000
+m (rm=0) roundss_1XX  e557637ab39c80380f78b24f3f8ccccd a51b48e54cd51e1c6ec0dc413f800000    1.100000   1.000000
+r (rm=1) roundss_1XX  68388c83142e2162a6a7400c3f8ccccd e9269fd30f8a03b282f7e0fd3f800000    1.100000   1.000000
+m (rm=1) roundss_1XX  c4bfd1b2202a1a0fafda9ac33f8ccccd 753d505c0ab09ee1b8d82f6a3f800000    1.100000   1.000000
+r (rm=2) roundss_1XX  57392c71721ca7ec07dc3d603f8ccccd a5ad56eddad02b56ea2f447340000000    1.100000   2.000000
+m (rm=2) roundss_1XX  7bf39b2ea78e03a58b7aa3cf3f8ccccd d5c2adf11b78e6bdf5c89b0340000000    1.100000   2.000000
+r (rm=3) roundss_1XX  8e361a535a0e6be515814afc3f8ccccd 61c851d368330ac1b66eb0083f800000    1.100000   1.000000
+m (rm=3) roundss_1XX  ea51a34e28271b5982bbadd43f8ccccd a50b3f015d8dd40f07ef006d3f800000    1.100000   1.000000
+r (rm=0) roundss_1XX  ed8f348aac664eacaff448413fa66666 fdd771e697138053c515061e3f800000    1.300000   1.000000
+m (rm=0) roundss_1XX  f13bc7738256418b76fa98313fa66666 c577e5eeb1504a38ccad3e073f800000    1.300000   1.000000
+r (rm=1) roundss_1XX  53a35b75478330a1b498178e3fa66666 5838978548d16d6bf98324143f800000    1.300000   1.000000
+m (rm=1) roundss_1XX  7011e9fc977a579b459943463fa66666 14668117f7212697266334313f800000    1.300000   1.000000
+r (rm=2) roundss_1XX  a2d26e740dc6f12505ca97443fa66666 544da1105bccb1693018eb4b40000000    1.300000   2.000000
+m (rm=2) roundss_1XX  4632e74945f33bead1f790733fa66666 7439f1dc0f5e498df370c44c40000000    1.300000   2.000000
+r (rm=3) roundss_1XX  b87d4fe8dc8e719783eca8c13fa66666 cf766fe8b0642bae4b353b213f800000    1.300000   1.000000
+m (rm=3) roundss_1XX  54fea2bb6e22ced7f8755d1a3fa66666 c34f179ed96993791434ccb73f800000    1.300000   1.000000