From: Florian Krohm Date: Thu, 27 Dec 2012 20:01:13 +0000 (+0000) Subject: New IROps: Iop_ExtractSigD64 and Iop_ExtractSigD128. These are needed to X-Git-Tag: svn/VALGRIND_3_9_0^2~165 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8aaa6d739b106f1fccadcaab8d92632c5d970371;p=thirdparty%2Fvalgrind.git New IROps: Iop_ExtractSigD64 and Iop_ExtractSigD128. These are needed to implement s390's "extract significance" insns. git-svn-id: svn://svn.valgrind.org/vex/trunk@2621 --- diff --git a/VEX/priv/ir_defs.c b/VEX/priv/ir_defs.c index 35a9ee9a00..010ced6b4d 100644 --- a/VEX/priv/ir_defs.c +++ b/VEX/priv/ir_defs.c @@ -983,6 +983,8 @@ void ppIROp ( IROp op ) case Iop_QuantizeD128: vex_printf("Iop_QuantizeD128"); return; case Iop_ExtractExpD64: vex_printf("Iop_ExtractExpD64"); return; case Iop_ExtractExpD128: vex_printf("Iop_ExtractExpD128"); return; + case Iop_ExtractSigD64: vex_printf("Iop_ExtractSigD64"); return; + case Iop_ExtractSigD128: vex_printf("Iop_ExtractSigD128"); return; case Iop_InsertExpD64: vex_printf("Iop_InsertExpD64"); return; case Iop_InsertExpD128: vex_printf("Iop_InsertExpD128"); return; case Iop_CmpD64: vex_printf("CmpD64"); return; @@ -2747,12 +2749,18 @@ void typeOfPrimop ( IROp op, case Iop_ExtractExpD64: UNARY(Ity_D64, Ity_D64); + case Iop_ExtractSigD64: + UNARY(Ity_D64, Ity_I64); + case Iop_InsertExpD64: BINARY(Ity_D64,Ity_D64, Ity_D64); case Iop_ExtractExpD128: UNARY(Ity_D128, Ity_D64); + case Iop_ExtractSigD128: + UNARY(Ity_D128, Ity_I64); + case Iop_InsertExpD128: BINARY(Ity_D64,Ity_D128, Ity_D128); diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h index 8280e53c71..fd12ee29a1 100644 --- a/VEX/pub/libvex_ir.h +++ b/VEX/pub/libvex_ir.h @@ -1114,6 +1114,15 @@ typedef /* D128 -> I64 */ Iop_ExtractExpD128, + /* D64 -> I64 + * The number of significand digits of the D64 operand is extracted. + * The number is stored as a 64-bit signed binary integer. + */ + Iop_ExtractSigD64, + + /* D128 -> I64 */ + Iop_ExtractSigD128, + /* I64 x I64 -> D64 * The exponent is specified by the first I64 operand the signed * significand is given by the second I64 value. The result is a D64