Handle Iop_Neg{8,16,32}.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3601 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c
index ff00ce9..e8508cf 100644
--- a/memcheck/mc_translate.c
+++ b/memcheck/mc_translate.c
@@ -1884,6 +1884,17 @@
       case Iop_Not1:
          return vatom;
 
+      /* Neg* really fall under the Add/Sub banner, and as such you
+         might think would qualify for the 'expensive add/sub'
+         treatment.  However, in this case since the implied literal
+         is zero (0 - arg), we just do the cheap thing anyway. */
+      case Iop_Neg8:
+         return mkLeft8(mce, vatom);
+      case Iop_Neg16:
+         return mkLeft16(mce, vatom);
+      case Iop_Neg32:
+         return mkLeft32(mce, vatom);
+
       default:
          ppIROp(op);
          VG_(tool_panic)("memcheck:expr2vbits_Unop");