]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add 12 IROps for converting betwen DFP values and signed/unsigned integers.
authorFlorian Krohm <florian@eich-krohm.de>
Sat, 12 Jan 2013 22:02:07 +0000 (22:02 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Sat, 12 Jan 2013 22:02:07 +0000 (22:02 +0000)
Patch by Maran Pakkirisamy (maranp@linux.vnet.ibm.com).
Part of fixing BZ 307113.

git-svn-id: svn://svn.valgrind.org/vex/trunk@2631

VEX/priv/ir_defs.c
VEX/pub/libvex_ir.h

index 010ced6b4d1e8b81031869a0f544d3eda16ad363..8b9ea4e253f4dcdc567a1d456fb49afc5050f645 100644 (file)
@@ -965,12 +965,24 @@ void ppIROp ( IROp op )
       case Iop_DivD64:  vex_printf("DivD64");   return;
       case Iop_ShlD64:  vex_printf("ShlD64"); return;
       case Iop_ShrD64:  vex_printf("ShrD64"); return;
+      case Iop_D64toI32S:  vex_printf("D64toI32S");  return;
+      case Iop_D64toI32U:  vex_printf("D64toI32U");  return;
       case Iop_D64toI64S:  vex_printf("D64toI64S");  return;
+      case Iop_D64toI64U:  vex_printf("D64toI64U");  return;
+      case Iop_I32StoD64:  vex_printf("I32StoD64");  return;
+      case Iop_I32UtoD64:  vex_printf("I32UtoD64");  return;
       case Iop_I64StoD64:  vex_printf("I64StoD64");  return;
+      case Iop_I64UtoD64:  vex_printf("I64UtoD64");  return;
+      case Iop_I32StoD128: vex_printf("I32StoD128"); return;
+      case Iop_I32UtoD128: vex_printf("I32UtoD128"); return;
       case Iop_I64StoD128: vex_printf("I64StoD128"); return;
+      case Iop_I64UtoD128: vex_printf("I64UtoD128"); return;
       case Iop_D64toD128:  vex_printf("D64toD128");  return;
       case Iop_D128toD64:  vex_printf("D128toD64");  return;
+      case Iop_D128toI32S: vex_printf("D128toI32S"); return;
+      case Iop_D128toI32U: vex_printf("D128toI32U"); return;
       case Iop_D128toI64S: vex_printf("D128toI64S"); return;
+      case Iop_D128toI64U: vex_printf("D128toI64U"); return;
       case Iop_AddD128: vex_printf("AddD128");  return;
       case Iop_SubD128: vex_printf("SubD128");  return;
       case Iop_MulD128: vex_printf("MulD128");  return;
@@ -2779,9 +2791,16 @@ void typeOfPrimop ( IROp op,
       case Iop_RoundD128toInt:
          BINARY(ity_RMode,Ity_D128, Ity_D128);
 
+      case Iop_I32StoD128:
+      case Iop_I32UtoD128:
+         UNARY(Ity_I32, Ity_D128);
+
       case Iop_I64StoD128:    /* I64 bit pattern stored in Float register */
          UNARY(Ity_D64, Ity_D128);
 
+      case Iop_I64UtoD128:
+         UNARY(Ity_I64, Ity_D128);
+
       case Iop_DPBtoBCD:
       case Iop_BCDtoDPB:
          UNARY(Ity_I64, Ity_I64);
@@ -2793,6 +2812,13 @@ void typeOfPrimop ( IROp op,
       case Iop_D128toI64S:
          BINARY(ity_RMode, Ity_D128, Ity_D64);
 
+      case Iop_D128toI64U:
+         BINARY(ity_RMode, Ity_D128, Ity_I64);
+
+      case Iop_D128toI32S:
+      case Iop_D128toI32U:
+         BINARY(ity_RMode, Ity_D128, Ity_I32);
+
       case Iop_D64HLtoD128:
          BINARY(Ity_D64, Ity_D64, Ity_D128);
 
@@ -2803,12 +2829,26 @@ void typeOfPrimop ( IROp op,
       case Iop_D64toD32:
          BINARY(ity_RMode, Ity_D64, Ity_D32);
 
+      case Iop_D64toI32S:
+      case Iop_D64toI32U:
+         BINARY(ity_RMode, Ity_D64, Ity_I32);
+
       case Iop_D64toI64S:
          BINARY(ity_RMode, Ity_D64, Ity_D64);
 
+      case Iop_D64toI64U:
+         BINARY(ity_RMode, Ity_D64, Ity_I64);
+
+      case Iop_I32StoD64:
+      case Iop_I32UtoD64:
+         UNARY(Ity_I32, Ity_D64);
+
       case Iop_I64StoD64:  /* I64 bit pattern stored in Float register */
          BINARY(ity_RMode, Ity_D64, Ity_D64);
 
+      case Iop_I64UtoD64:
+         BINARY(ity_RMode, Ity_I64, Ity_D64);
+
       case Iop_CmpD64:
       case Iop_CmpExpD64:
          BINARY(Ity_D64,Ity_D64, Ity_I32);
index fd12ee29a1bb65b8b08e50f2dd7ea4c4b4c15a64..1a34ca311d6c5a58fa787d320252097eb795e86b 100644 (file)
@@ -1039,24 +1039,60 @@ typedef
       /*   D64 -> D128 */
       Iop_D64toD128, 
 
+      /*   I32S -> D128 */
+      Iop_I32StoD128,
+
+      /*   I32U -> D128 */
+      Iop_I32UtoD128,
+
       /*   I64S -> D128 */
       Iop_I64StoD128, 
 
+      /*   I64U -> D128 */
+      Iop_I64UtoD128,
+
       /*   IRRoundingModeDFP(I32) x D64 -> D32 */
       Iop_D64toD32,
 
       /*   IRRoundingModeDFP(I32) x D128 -> D64 */
       Iop_D128toD64,
 
+      /*   I32S -> D64 */
+      Iop_I32StoD64,
+
+      /*   I32U -> D64 */
+      Iop_I32UtoD64,
+
       /*   IRRoundingModeDFP(I32) x I64 -> D64 */
       Iop_I64StoD64,
 
+      /*   IRRoundingModeDFP(I32) x I64 -> D64 */
+      Iop_I64UtoD64,
+
+      /*   IRRoundingModeDFP(I32) x D64 -> I32 */
+      Iop_D64toI32S,
+
+      /*   IRRoundingModeDFP(I32) x D64 -> I32 */
+      Iop_D64toI32U,
+
       /*   IRRoundingModeDFP(I32) x D64 -> I64 */
       Iop_D64toI64S,
 
+      /*   IRRoundingModeDFP(I32) x D64 -> I64 */
+      Iop_D64toI64U,
+
+      /*   IRRoundingModeDFP(I32) x D128 -> I32 */
+      Iop_D128toI32S,
+
+      /*   IRRoundingModeDFP(I32) x D128 -> I32 */
+      Iop_D128toI32U,
+
       /*   IRRoundingModeDFP(I32) x D128 -> I64 */
       Iop_D128toI64S,
 
+      /*   IRRoundingModeDFP(I32) x D128 -> I64 */
+      Iop_D128toI64U,
+
       /* ROUNDING INSTRUCTIONS
        * IRRoundingMode(I32) x D64 -> D64
        * The D64 operand, if a finite number, is rounded to an integer value.