Updated to revision 11471.
authorSanjeev BA <as2902.b@samsung.com>
Thu, 21 Oct 2010 04:59:14 +0000 (13:59 +0900)
committerSanjeev BA <as2902.b@samsung.com>
Thu, 21 Oct 2010 04:59:14 +0000 (13:59 +0900)
23 files changed:
Makefile.all.am
NEWS
VEX/priv/guest_arm_toIR.c
VEX/priv/host_arm_isel.c
VEX/priv/host_generic_simd64.c
VEX/priv/host_generic_simd64.h
VEX/priv/ir_defs.c
VEX/pub/libvex_ir.h
configure.in
coregrind/m_aspacemgr/aspacemgr-linux.c
coregrind/m_debuginfo/priv_d3basics.h
coregrind/m_debuginfo/readdwarf3.c
coregrind/m_debuginfo/readelf.c
docs/xml/vg-entities.xml
drd/docs/drd-manual.xml
drd/scripts/ppc-cross/kernel-config/2.6.22/.svn/entries
drd/tests/Makefile.am
exp-dhat/docs/.svn/entries
include/valgrind.h
memcheck/mc_translate.c
memcheck/memcheck.h
none/tests/arm/v6media.c
none/tests/arm/v6media.stdout.exp

index dc2c4d8..789e2a7 100644 (file)
@@ -154,7 +154,7 @@ AM_CCASFLAGS_PPC64_LINUX  = $(AM_CPPFLAGS_PPC64_LINUX) @FLAG_M64@ -g
 AM_FLAG_M3264_ARM_LINUX   = @FLAG_M32@
 AM_CFLAGS_ARM_LINUX       = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY@ \
                                $(AM_CFLAGS_BASE) -marm
-AM_CCASFLAGS_ARM_LINUX    = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ -g
+AM_CCASFLAGS_ARM_LINUX    = $(AM_CPPFLAGS_ARM_LINUX) @FLAG_M32@ -marm -g
 
 AM_FLAG_M3264_PPC32_AIX5  = @FLAG_MAIX32@
 AM_CFLAGS_PPC32_AIX5      = @FLAG_MAIX32@ -mcpu=powerpc $(AM_CFLAGS_BASE)
diff --git a/NEWS b/NEWS
index 47d7919..ccc83bc 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 
-Release 3.6.0 (18 October 2010)
+Release 3.6.0 (21 October 2010)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3.6.0 is a feature release with many significant improvements and the
 usual collection of bug fixes.
@@ -25,7 +25,7 @@ Here are some highlights.  Details are shown further down:
 
 * A new experimental heap profiler, DHAT.
 
-* A huge number of bug fixes.
+* A huge number of bug fixes and small enhancements.
 
                     -------------------------
 
@@ -57,7 +57,7 @@ many other changes, and a list of fixed bugs.
   64-bit mode.  In 32-bit mode, support is only available up to and
   including SSSE3.  Some exceptions: SSE4.2 AES instructions are not
   supported in 64-bit mode, and 32-bit mode does in fact support the
-  bare minimum SSE4 instructions to needed to run programs on MacOSX
+  bare minimum SSE4 instructions to needed to run programs on Mac OS X
   10.6 on 32-bit targets.
 
 * Support for IBM POWER6 cpus has been improved.  The Power ISA up to
@@ -89,7 +89,7 @@ many other changes, and a list of fixed bugs.
   should not be considered authoritative.  The results are still
   useful for giving a general idea about a program's locality.
 
-- Massif has a new option, --pages-as-heap, which is disabled by
+* Massif has a new option, --pages-as-heap, which is disabled by
   default.  When enabled, instead of tracking allocations at the level
   of heap blocks (as allocated with malloc/new/new[]), it instead
   tracks memory allocations at the level of memory pages (as mapped by
@@ -111,7 +111,7 @@ many other changes, and a list of fixed bugs.
   pointer implementation.
 
 * Helgrind's annotation set has also been drastically improved, so as
-  to provide to users, a general set of annotations to describe locks,
+  to provide to users a general set of annotations to describe locks,
   semaphores, barriers and condition variables.  Annotations to
   describe thread-safe reference counted heap objects have also been
   added.
@@ -134,18 +134,19 @@ many other changes, and a list of fixed bugs.
   approximately a factor of 5 as compared with 3.5.0.
 
 * Ability to show directory names for source files in error messages.
-  This is combined with a flexible mechanism
-  for specifying which parts of the paths should be shown.  
-  This is enabled by the new flag --fullpath-after.
+  This is combined with a flexible mechanism for specifying which
+  parts of the paths should be shown.  This is enabled by the new flag
+  --fullpath-after.
 
 * A new flag, --require-text-symbol, which will stop the run if a
   specified symbol is not found it a given shared object when it is
-  loaded into the process.  This makes some advanced working with
-  function intercepting and wrapping safer and more reliable.
+  loaded into the process.  This makes advanced working with function
+  intercepting and wrapping safer and more reliable.
 
-* Improved support for the Valkyrie GUI, version 1.6.0.  GUI output
-  and control of Valgrind is now available for the tools Memcheck,
-  Helgrind and Ptrcheck.
+* Improved support for the Valkyrie GUI, version 2.0.0.  GUI output
+  and control of Valgrind is now available for the tools Memcheck and
+  Helgrind.  XML output from Valgrind is available for Memcheck,
+  Helgrind and exp-Ptrcheck.
 
 * More reliable stack unwinding on amd64-linux, particularly in the
   presence of function wrappers, and with gcc-4.5 compiled code.
@@ -190,7 +191,9 @@ many other changes, and a list of fixed bugs.
   250101  huge "free" memory usage due to m_mallocfree.c
           "superblocks fragmentation"
   251569  vex amd64->IR: 0xF 0x1 0xF9 0x8B 0x4C 0x24 (RDTSCP)
-  252600  [PATCH] Allow lhs to be a pointer for shl/shr 
+  252091  Callgrind on ARM does not detect function returns correctly
+  252600  [PATCH] Allow lhs to be a pointer for shl/shr
+  254420  memory pool tracking broken
   n-i-bz  support for adding symbols for JIT generated code
 
 
@@ -303,8 +306,15 @@ where XXXXXX is the bug number as listed below.
 251362  valgrind: ARM: attach to debugger either fails or provokes
         kernel oops 
 251674  Unhandled syscall 294
+251818  == 254550
 
-(3.6.0: 18 October 2010, vex rXXXX, valgrind rXXXXX).
+254257  Add support for debugfiles found by build-id
+254550  [PATCH] Implement DW_ATE_UTF (DWARF4)
+254646  Wrapped functions cause stack misalignment on OS X
+        (and possibly Linux)
+254556  ARM: valgrinding anything fails with SIGSEGV for 0xFFFF0FA0
+
+(3.6.0: 21 October 2010, vex rXXXX, valgrind rXXXXX).
 
 
 
index 277a90d..c1f9211 100644 (file)
@@ -1667,6 +1667,24 @@ static void armSignedSatQ( IRTemp regT,    /* value to clamp - Ity_I32 */
 }
 
 
+/* Compute a value 0 :: I32 or 1 :: I32, indicating whether signed
+   overflow occurred for 32-bit addition.  Needs both args and the
+   result.  HD p27. */
+static
+IRExpr* signed_overflow_after_Add32 ( IRExpr* resE,
+                                      IRTemp argL, IRTemp argR )
+{
+   IRTemp res = newTemp(Ity_I32);
+   assign(res, resE);
+   return
+      binop( Iop_Shr32, 
+             binop( Iop_And32,
+                    binop( Iop_Xor32, mkexpr(res), mkexpr(argL) ),
+                    binop( Iop_Xor32, mkexpr(res), mkexpr(argR) )), 
+             mkU8(31) );
+}
+
+
 /*------------------------------------------------------------*/
 /*--- Larger helpers                                       ---*/
 /*------------------------------------------------------------*/
@@ -9651,27 +9669,31 @@ static Bool decode_V6MEDIA_instruction (
    }
 
    /* --------------- smuad, smuadx<c><Rd>,<Rn>,<Rm> --------------- */
+   /* --------------- smsad, smsadx<c><Rd>,<Rn>,<Rm> --------------- */
    {
      UInt regD = 99, regN = 99, regM = 99, bitM = 99;
-     Bool gate = False;
+     Bool gate = False, isAD = False;
 
      if (isT) {
-        if (INSNT0(15,4) == 0xFB2 && (INSNT1(15,0) & 0xF0E0) == 0xF000) {
+        if ((INSNT0(15,4) == 0xFB2 || INSNT0(15,4) == 0xFB4)
+            && (INSNT1(15,0) & 0xF0E0) == 0xF000) {
            regN = INSNT0(3,0);
            regD = INSNT1(11,8);
            regM = INSNT1(3,0);
            bitM = INSNT1(4,4);
+           isAD = INSNT0(15,4) == 0xFB2;
            if (!isBadRegT(regD) && !isBadRegT(regN) && !isBadRegT(regM))
               gate = True;
         }
      } else {
         if (INSNA(27,20) == BITS8(0,1,1,1,0,0,0,0) &&
             INSNA(15,12) == BITS4(1,1,1,1)         &&
-            (INSNA(7,4) & BITS4(1,1,0,1)) == BITS4(0,0,0,1) ) {
+            (INSNA(7,4) & BITS4(1,0,0,1)) == BITS4(0,0,0,1) ) {
            regD = INSNA(19,16);
            regN = INSNA(3,0);
            regM = INSNA(11,8);
            bitM = INSNA(5,5);
+           isAD = INSNA(6,6) == 0;
            if (regD != 15 && regN != 15 && regM != 15)
               gate = True;
         }
@@ -9701,22 +9723,24 @@ static Bool decode_V6MEDIA_instruction (
                                    binop(Iop_Sar32, mkexpr(irt_regN), mkU8(16)), 
                                    binop(Iop_Sar32, mkexpr(irt_regM), mkU8(16))) );
         IRExpr* ire_result 
-           = binop( Iop_Add32, mkexpr(irt_prod_lo), mkexpr(irt_prod_hi) );
+           = binop( isAD ? Iop_Add32 : Iop_Sub32,
+                    mkexpr(irt_prod_lo), mkexpr(irt_prod_hi) );
 
         if (isT)
            putIRegT( regD, ire_result, condT );
         else
            putIRegA( regD, ire_result, condT, Ijk_Boring );
 
-        or_into_QFLAG32( binop( Iop_Shr32, 
-                                binop( Iop_And32,
-                                       binop( Iop_Xor32, ire_result, 
-                                              mkexpr(irt_prod_hi) ),
-                                       binop( Iop_Xor32, ire_result, 
-                                              mkexpr(irt_prod_lo) ) ), 
-                                mkU8(31)), condT );
+        if (isAD) {
+           or_into_QFLAG32(
+              signed_overflow_after_Add32( ire_result,
+                                           irt_prod_lo, irt_prod_hi ),
+              condT
+           );
+        }
 
-        DIP("smuad%s%s r%u, r%u, r%u\n",
+        DIP("smu%cd%s%s r%u, r%u, r%u\n",
+            isAD ? 'a' : 's',
             bitM ? "x" : "", nCC(conq), regD, regN, regM);
         return True;
      }
@@ -9724,29 +9748,33 @@ static Bool decode_V6MEDIA_instruction (
    }
 
    /* --------------- smlad{X}<c> <Rd>,<Rn>,<Rm>,<Ra> -------------- */
+   /* --------------- smlsd{X}<c> <Rd>,<Rn>,<Rm>,<Ra> -------------- */
    {
      UInt regD = 99, regN = 99, regM = 99, regA = 99, bitM = 99;
-     Bool gate = False;
+     Bool gate = False, isAD = False;
 
      if (isT) {
-        if (INSNT0(15,4) == 0xFB2 && INSNT1(7,5) == BITS3(0,0,0)) {
+       if ((INSNT0(15,4) == 0xFB2 || INSNT0(15,4) == 0xFB4)
+           && INSNT1(7,5) == BITS3(0,0,0)) {
            regN = INSNT0(3,0);
            regD = INSNT1(11,8);
            regM = INSNT1(3,0);
            regA = INSNT1(15,12);
            bitM = INSNT1(4,4);
+           isAD = INSNT0(15,4) == 0xFB2;
            if (!isBadRegT(regD) && !isBadRegT(regN) && !isBadRegT(regM)
                && !isBadRegT(regA))
               gate = True;
         }
      } else {
         if (INSNA(27,20) == BITS8(0,1,1,1,0,0,0,0) &&
-            (INSNA(7,4) & BITS4(1,1,0,1)) == BITS4(0,0,0,1)) {
+            (INSNA(7,4) & BITS4(1,0,0,1)) == BITS4(0,0,0,1)) {
            regD = INSNA(19,16);
            regA = INSNA(15,12);
            regN = INSNA(3,0);
            regM = INSNA(11,8);
            bitM = INSNA(5,5);
+           isAD = INSNA(6,6) == 0;
            if (regD != 15 && regN != 15 && regM != 15 && regA != 15)
               gate = True;
         }
@@ -9779,7 +9807,7 @@ static Bool decode_V6MEDIA_instruction (
                 binop( Iop_Mul32, 
                        binop( Iop_Sar32, mkexpr(irt_regN), mkU8(16) ), 
                        binop( Iop_Sar32, mkexpr(irt_regM), mkU8(16) ) ) );
-        assign( irt_sum, binop( Iop_Add32, 
+        assign( irt_sum, binop( isAD ? Iop_Add32 : Iop_Sub32, 
                                 mkexpr(irt_prod_lo), mkexpr(irt_prod_hi) ) );
 
         IRExpr* ire_result = binop(Iop_Add32, mkexpr(irt_sum), mkexpr(irt_regA));
@@ -9789,22 +9817,21 @@ static Bool decode_V6MEDIA_instruction (
         else
            putIRegA( regD, ire_result, condT, Ijk_Boring );
 
-        or_into_QFLAG32( binop( Iop_Shr32, 
-                                binop( Iop_And32,
-                                       binop( Iop_Xor32, mkexpr(irt_sum), 
-                                              mkexpr(irt_prod_lo) ),
-                                       binop( Iop_Xor32, mkexpr(irt_sum), 
-                                              mkexpr(irt_prod_hi) ) ), 
-                                mkU8(31)), condT );
-        or_into_QFLAG32( binop( Iop_Shr32, 
-                                binop( Iop_And32,
-                                       binop( Iop_Xor32, ire_result, 
-                                              mkexpr(irt_sum) ),
-                                       binop( Iop_Xor32, ire_result, 
-                                              mkexpr(irt_regA) ) ), 
-                                mkU8(31)), condT );
-
-        DIP("smlad%s%s r%u, r%u, r%u, r%u\n",
+        if (isAD) {
+           or_into_QFLAG32(
+              signed_overflow_after_Add32( mkexpr(irt_sum),
+                                           irt_prod_lo, irt_prod_hi ),
+              condT
+           );
+        }
+
+        or_into_QFLAG32(
+           signed_overflow_after_Add32( ire_result, irt_sum, irt_regA ),
+           condT
+        );
+
+        DIP("sml%cd%s%s r%u, r%u, r%u, r%u\n",
+            isAD ? 'a' : 's',
             bitM ? "x" : "", nCC(conq), regD, regN, regM, regA);
         return True;
      }
@@ -9868,14 +9895,10 @@ static Bool decode_V6MEDIA_instruction (
         else
            putIRegA( regD, ire_result, condT, Ijk_Boring );
 
-        or_into_QFLAG32( binop( Iop_Shr32, 
-                                binop( Iop_And32,
-                                       binop(Iop_Xor32, 
-                                             ire_result, mkexpr(irt_prod)),
-                                       binop(Iop_Xor32, 
-                                             ire_result, mkexpr(irt_regA)) ), 
-                                mkU8(31)), 
-                         condT );
+        or_into_QFLAG32(
+           signed_overflow_after_Add32( ire_result, irt_prod, irt_regA ),
+           condT
+        );
 
         DIP( "smla%c%c%s r%u, r%u, r%u, r%u\n", 
              bitN ? 't' : 'b', bitM ? 't' : 'b', 
@@ -9943,14 +9966,10 @@ static Bool decode_V6MEDIA_instruction (
         else
            putIRegA( regD, ire_result, condT, Ijk_Boring );
 
-        or_into_QFLAG32( binop( Iop_Shr32, 
-                                binop( Iop_And32,
-                                       binop(Iop_Xor32, 
-                                             ire_result, mkexpr(prod32)),
-                                       binop(Iop_Xor32, 
-                                             ire_result, mkexpr(irt_regA)) ), 
-                                mkU8(31)), 
-                         condT );
+        or_into_QFLAG32(
+           signed_overflow_after_Add32( ire_result, prod32, irt_regA ),
+           condT
+        );
 
         DIP( "smlaw%c%s r%u, r%u, r%u, r%u\n", 
              bitM ? 't' : 'b', 
@@ -10111,6 +10130,59 @@ static Bool decode_V6MEDIA_instruction (
      /* fall through */
    }
 
+   /* --------------- usad8  Rd,Rn,Rm    ---------------- */
+   /* --------------- usada8 Rd,Rn,Rm,Ra ---------------- */
+   {
+     UInt rD = 99, rN = 99, rM = 99, rA = 99;
+     Bool gate = False;
+
+     if (isT) {
+       if (INSNT0(15,4) == 0xFB7 && INSNT1(7,4) == BITS4(0,0,0,0)) {
+           rN = INSNT0(3,0);
+           rA = INSNT1(15,12);
+           rD = INSNT1(11,8);
+           rM = INSNT1(3,0);
+           if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM) && rA != 13)
+              gate = True;
+        }
+     } else {
+        if (INSNA(27,20) == BITS8(0,1,1,1,1,0,0,0) &&
+            INSNA(7,4)   == BITS4(0,0,0,1) ) {
+           rD = INSNA(19,16);
+           rA = INSNA(15,12);
+           rM = INSNA(11,8);
+           rN = INSNA(3,0);
+           if (rD != 15 && rN != 15 && rM != 15 /* but rA can be 15 */)
+              gate = True;
+        }
+     }
+     /* We allow rA == 15, to denote the usad8 (no accumulator) case. */
+
+     if (gate) {
+        IRExpr* rNe = isT ? getIRegT(rN) : getIRegA(rN);
+        IRExpr* rMe = isT ? getIRegT(rM) : getIRegA(rM);
+        IRExpr* rAe = rA == 15 ? mkU32(0)
+                               : (isT ? getIRegT(rA) : getIRegA(rA)); 
+        IRExpr* res = binop(Iop_Add32,
+                            binop(Iop_Sad8Ux4, rNe, rMe),
+                            rAe);
+        if (isT)
+           putIRegT( rD, res, condT );
+        else
+           putIRegA( rD, res, condT, Ijk_Boring );
+
+        if (rA == 15) {
+           DIP( "usad8%s r%u, r%u, r%u\n", 
+                nCC(conq), rD, rN, rM );
+        } else {
+           DIP( "usada8%s r%u, r%u, r%u, r%u\n", 
+                nCC(conq), rD, rN, rM, rA );
+        }
+        return True;
+     }
+     /* fall through */
+   }
+
    /* ---------- Doesn't match anything. ---------- */
    return False;
 
index 7472938..4bba9a3 100644 (file)
@@ -1347,6 +1347,8 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
             fn = &h_generic_calc_QSub8Sx4; break;
          case Iop_QSub8Ux4:
             fn = &h_generic_calc_QSub8Ux4; break;
+         case Iop_Sad8Ux4:
+            fn = &h_generic_calc_Sad8Ux4; break;
          default:
             break;
       }
index e685ad6..03d6d2f 100644 (file)
@@ -439,6 +439,12 @@ static inline Char hsub8S ( Char xx, Char yy )
    return (Char)r;
 }
 
+static inline UInt absdiff8U ( UChar xx, UChar yy )
+{
+   UInt xxu = (UChar)xx;
+   UInt yyu = (UChar)yy;
+   return xxu >= yyu  ? xxu - yyu  : yyu - xxu;
+}
 
 /* ----------------------------------------------------- */
 /* Start of the externally visible functions.  These simply
@@ -1317,6 +1323,15 @@ UInt h_generic_calc_CmpNEZ8x4 ( UInt xx )
           );
 }
 
+UInt h_generic_calc_Sad8Ux4 ( UInt xx, UInt yy )
+{
+   return absdiff8U( sel8x4_3(xx), sel8x4_3(yy) )
+          + absdiff8U( sel8x4_2(xx), sel8x4_2(yy) )
+          + absdiff8U( sel8x4_1(xx), sel8x4_1(yy) )
+          + absdiff8U( sel8x4_0(xx), sel8x4_0(yy) );
+}
+
+
 /*---------------------------------------------------------------*/
 /*--- end                               host_generic_simd64.c ---*/
 /*---------------------------------------------------------------*/
index c29fbf6..e854fc7 100644 (file)
@@ -149,6 +149,8 @@ extern UInt h_generic_calc_QAdd8Sx4 ( UInt, UInt );
 extern UInt h_generic_calc_QSub8Ux4 ( UInt, UInt );
 extern UInt h_generic_calc_QSub8Sx4 ( UInt, UInt );
 
+extern UInt h_generic_calc_Sad8Ux4  ( UInt, UInt );
+
 extern UInt h_generic_calc_CmpNEZ16x2 ( UInt );
 extern UInt h_generic_calc_CmpNEZ8x4  ( UInt );
 
index eabf831..f78db10 100644 (file)
@@ -305,6 +305,7 @@ void ppIROp ( IROp op )
       case Iop_HAdd8Sx4: vex_printf("HAdd8Sx4"); return;
       case Iop_HSub8Ux4: vex_printf("HSub8Ux4"); return;
       case Iop_HSub8Sx4: vex_printf("HSub8Sx4"); return;
+      case Iop_Sad8Ux4:  vex_printf("Sad8Ux4"); return;
 
       case Iop_CmpNEZ16x2: vex_printf("CmpNEZ16x2"); return;
       case Iop_CmpNEZ8x4:  vex_printf("CmpNEZ8x4"); return;
@@ -1944,6 +1945,7 @@ void typeOfPrimop ( IROp op,
       case Iop_QSub8Sx4: case Iop_QSub8Ux4:
       case Iop_HAdd8Ux4: case Iop_HAdd8Sx4:
       case Iop_HSub8Ux4: case Iop_HSub8Sx4:
+      case Iop_Sad8Ux4:
          BINARY(Ity_I32,Ity_I32, Ity_I32);
 
       case Iop_Add64: case Iop_Sub64: case Iop_Mul64:
index b3d78b6..95042aa 100644 (file)
@@ -699,6 +699,9 @@ typedef
       Iop_HAdd8Ux4, Iop_HAdd8Sx4,
       Iop_HSub8Ux4, Iop_HSub8Sx4,
 
+      /* 8x4 sum of absolute unsigned differences. */
+      Iop_Sad8Ux4,
+
       /* MISC (vector integer cmp != 0) */
       Iop_CmpNEZ16x2, Iop_CmpNEZ8x4,
 
index 6fcfe44..89a0c37 100644 (file)
@@ -1669,7 +1669,7 @@ AM_CONDITIONAL(BUILD_MPIWRAP_SEC, test x$ac_have_mpi2_sec = xyes)
 #----------------------------------------------------------------------------
 # Other library checks
 #----------------------------------------------------------------------------
-# There now follow some tests for QtCore, Boost, and OpenMP.  These
+# There now follow some tests for Boost, and OpenMP.  These
 # tests are present because Drd has some regression tests that use
 # these packages.  All regression test programs all compiled only
 # for the primary target.  And so it is important that the configure
@@ -1685,119 +1685,6 @@ AM_CONDITIONAL(BUILD_MPIWRAP_SEC, test x$ac_have_mpi2_sec = xyes)
 # NEEDED BY THE REGRESSION TEST PROGRAMS.
 
 
-# The test below verifies whether the QtCore package been installed.
-# This test works as follows:
-# - If pkg-config was not installed at the time autogen.sh was run,
-#   the definition of the PKG_CHECK_EXISTS() macro will not be found by
-#   autogen.sh. Augogen.sh will generate a configure script that prints
-#   a warning about pkg-config and proceeds as if Qt4 has not been installed.
-# - If pkg-config was installed at the time autogen.sh was run,
-#   the generated configure script will try to detect the presence of the
-#   Qt4 QtCore library by looking up compile and linker flags in the file
-#   called QtCore.pc.
-# - pkg-config settings can be overridden via the configure variables
-#   QTCORE_CFLAGS and QTCORE_LIBS (added by the pkg-config m4 macro's to the
-#   configure script -- see also ./configure --help).
-# - The QTCORE_CFLAGS and QTCORE_LIBS configure variables can be used even if
-#   the pkg-config executable is not present on the system on which the
-#   configure script is run.
-
-ifdef(
-  [PKG_CHECK_EXISTS],
-  [PKG_CHECK_EXISTS(
-    [QtCore],
-    [
-      PKG_CHECK_MODULES([QTCORE], [QtCore])
-      # Paranoia: don't trust the result reported by pkg-config, but when
-      # pkg-config reports that QtCore has been found, verify whether linking
-      # programs with QtCore succeeds.
-      AC_LANG(C++)
-      safe_CXXFLAGS="${CXXFLAGS}"
-      CXXFLAGS="${QTCORE_CFLAGS} ${QTCORE_LIBS} $mflag_primary"
-      AC_TRY_LINK(
-        [#include <QMutex>],
-        [QMutex Mutex;],
-        [ac_have_qtcore=yes],
-        [
-          AC_MSG_WARN([Although pkg-config detected Qt4, linking Qt4 programs fails. Skipping Qt4.])
-          ac_have_qtcore=no
-        ]
-        )
-      CXXFLAGS="${safe_CXXFLAGS}"
-    ],
-    [
-      ac_have_qtcore=no
-    ]
-    )
-  ],
-  AC_MSG_WARN([pkg-config has not been installed or is too old.])
-  AC_MSG_WARN([Detection of Qt4 will be skipped.])
-  [ac_have_qtcore=no]
-)
-
-AM_CONDITIONAL([HAVE_QTCORE], [test x$ac_have_qtcore = xyes])
-
-
-# Test for QMutex::tryLock(int), which has been introduced in Qt 4.3.
-# See also http://doc.trolltech.com/4.3/qmutex.html.
-if test x$ac_have_qtcore = xyes; then
-  AC_MSG_CHECKING([for Qt4 QMutex::tryLock(int)])
-  AC_LANG(C++)
-  safe_CXXFLAGS="${CXXFLAGS}"
-  CXXFLAGS="${QTCORE_CFLAGS} $mflag_primary"
-  AC_TRY_COMPILE([
-    #include <QtCore/QMutex>
-  ],
-  [
-    QMutex M;
-    M.tryLock(1);
-    M.unlock();
-    return 0;
-  ],
-  [
-    AC_MSG_RESULT([yes])
-    AC_DEFINE([HAVE_QTCORE_QMUTEX_TRYLOCK_INT], [1], [Define to 1 if the installed version of Qt4 provides QMutex::tryLock(int).])
-  ],
-  [
-    AC_MSG_RESULT([no])
-  ])
-  CXXFLAGS="${safe_CXXFLAGS}"
-  AC_LANG(C)
-fi
-
-
-# Test for QAtomicInt, which has been introduced in Qt 4.4.
-# See also http://doc.trolltech.com/4.4/qatomicint.html.
-if test x$ac_have_qtcore = xyes; then
-  AC_MSG_CHECKING([for Qt4 QAtomicInt])
-  AC_LANG(C++)
-  safe_CXXFLAGS="${CXXFLAGS}"
-  CXXFLAGS="${QTCORE_CFLAGS} $mflag_primary"
-  AC_TRY_COMPILE([
-    #include <QtCore/QAtomicInt>
-  ],
-  [
-    QAtomicInt I;
-    I.testAndSetOrdered(0, 1);
-    return 0;
-  ],
-  [
-    ac_have_qtcore_qatomicint=yes
-    AC_MSG_RESULT([yes])
-    AC_DEFINE([HAVE_QTCORE_QATOMICINT], [1], [Define to 1 if the installed version of Qt4 provides QAtomicInt.])
-  ],
-  [
-    ac_have_qtcore_qatomicint=no
-    AC_MSG_RESULT([no])
-  ])
-  CXXFLAGS="${safe_CXXFLAGS}"
-  AC_LANG(C)
-fi
-
-AM_CONDITIONAL([HAVE_QTCORE_QATOMICINT], [test x$ac_have_qtcore_qatomicint = xyes])
-
-
-
 # Check whether the boost library 1.35 or later has been installed.
 # The Boost.Threads library has undergone a major rewrite in version 1.35.0.
 
index d69f38e..8ed8b84 100644 (file)
@@ -341,10 +341,17 @@ static void parse_procselfmaps (
 /* ----- Hacks to do with the "commpage" on arm-linux ----- */
 /* Not that I have anything against the commpage per se.  It's just
    that it's not listed in /proc/self/maps, which is a royal PITA --
-   we have to fake it up, in parse_procselfmaps. */
+   we have to fake it up, in parse_procselfmaps.
+
+   But note also bug 254556 comment #2: this is now fixed in newer
+   kernels -- it is listed as a "[vectors]" entry.  Presumably the
+   fake entry made here duplicates the [vectors] entry, and so, if at
+   some point in the future, we can stop supporting buggy kernels,
+   then this kludge can be removed entirely, since the procmap parser
+   below will read that entry in the normal way. */
 #if defined(VGP_arm_linux)
 #  define ARM_LINUX_FAKE_COMMPAGE_START 0xFFFF0000
-#  define ARM_LINUX_FAKE_COMMPAGE_END1  0xFFFFF000
+#  define ARM_LINUX_FAKE_COMMPAGE_END1  0xFFFF1000
 #endif
 
 
index 75fcb46..b6703e9 100644 (file)
@@ -372,6 +372,8 @@ typedef enum
     DW_ATE_signed_fixed = 0xd,
     DW_ATE_unsigned_fixed = 0xe,
     DW_ATE_decimal_float = 0xf,
+    /* DWARF 4.  */
+    DW_ATE_UTF = 0x10,
     /* HP extensions.  */
     DW_ATE_HP_float80            = 0x80, /* Floating-point (80 bit).  */
     DW_ATE_HP_complex_float80    = 0x81, /* Complex floating-point (80 bit).  */
index b2fb1a7..fa046ca 100644 (file)
@@ -2149,6 +2149,7 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents,
          if (attr == DW_AT_encoding && ctsSzB > 0) {
             switch (cts) {
                case DW_ATE_unsigned: case DW_ATE_unsigned_char:
+               case DW_ATE_UTF: /* since DWARF4, e.g. char16_t from C++ */
                case DW_ATE_boolean:/* FIXME - is this correct? */
                   typeE.Te.TyBase.enc = 'U'; break;
                case DW_ATE_signed: case DW_ATE_signed_char:
index 12b347a..7cf8ceb 100644 (file)
@@ -70,7 +70,9 @@
 #  define  ElfXX_Ehdr     Elf32_Ehdr
 #  define  ElfXX_Shdr     Elf32_Shdr
 #  define  ElfXX_Phdr     Elf32_Phdr
+#  define  ElfXX_Nhdr     Elf32_Nhdr
 #  define  ElfXX_Sym      Elf32_Sym
+#  define  ElfXX_Off      Elf32_Off
 #  define  ElfXX_Word     Elf32_Word
 #  define  ElfXX_Addr     Elf32_Addr
 #  define  ElfXX_Dyn      Elf32_Dyn
@@ -81,7 +83,9 @@
 #  define  ElfXX_Ehdr     Elf64_Ehdr
 #  define  ElfXX_Shdr     Elf64_Shdr
 #  define  ElfXX_Phdr     Elf64_Phdr
+#  define  ElfXX_Nhdr     Elf64_Nhdr
 #  define  ElfXX_Sym      Elf64_Sym
+#  define  ElfXX_Off      Elf64_Off
 #  define  ElfXX_Word     Elf64_Word
 #  define  ElfXX_Addr     Elf64_Addr
 #  define  ElfXX_Dyn      Elf64_Dyn
@@ -852,6 +856,56 @@ void read_elf_symtab__ppc64_linux(
 
 
 /*
+ * Look for a build-id in an ELF image. The build-id specification
+ * can be found here:
+ *
+ * http://fedoraproject.org/wiki/RolandMcGrath/BuildID
+ */
+static
+Char *find_buildid(Addr image, UWord n_image)
+{
+   Char* buildid = NULL;
+   ElfXX_Ehdr* ehdr = (ElfXX_Ehdr*)image;
+
+#ifdef NT_GNU_BUILD_ID
+   if (n_image >= sizeof(ElfXX_Ehdr) &&
+       ML_(is_elf_object_file)(ehdr, n_image)) {
+      Word i;
+
+      for (i = 0; i < ehdr->e_phnum; i++) {
+         ElfXX_Phdr* phdr = (ElfXX_Phdr*)(image + ehdr->e_phoff + i * ehdr->e_phentsize);
+
+         if (phdr->p_type == PT_NOTE) {
+            ElfXX_Off offset =  phdr->p_offset;
+
+            while (offset < phdr->p_offset + phdr->p_filesz) {
+               ElfXX_Nhdr* note = (ElfXX_Nhdr*)(image + offset);
+               Char* name = (Char *)note + sizeof(ElfXX_Nhdr);
+               UChar *desc = (UChar *)name + ((note->n_namesz + 3) & ~3);
+               Word j;
+
+               if (VG_(strcmp)(name, ELF_NOTE_GNU) == 0 &&
+                   note->n_type == NT_GNU_BUILD_ID) {
+                  buildid = ML_(dinfo_zalloc)("di.fbi.1", note->n_descsz * 2 + 1);
+                  
+                  for (j = 0; j < note->n_descsz; j++) {
+                     VG_(sprintf)(buildid + VG_(strlen)(buildid), "%02x", desc[j]);
+                  }
+               }
+
+               offset = offset + sizeof(ElfXX_Nhdr)
+                               + ((note->n_namesz + 3) & ~3)
+                               + ((note->n_descsz + 3) & ~3);
+            }            
+         }
+      }    
+   }
+#endif
+
+   return buildid;
+}
+
+/*
  * This routine for calculating the CRC for a separate debug file
  * is GPLed code borrowed from GNU binutils.
  */
@@ -926,7 +980,7 @@ calc_gnu_debuglink_crc32(UInt crc, const UChar *buf, Int len)
  * not match the value from the main object file.
  */
 static
-Addr open_debug_file( Char* name, UInt crc, /*OUT*/UWord* size )
+Addr open_debug_file( Char* name, Char* buildid, UInt crc, /*OUT*/UWord* size )
 {
    SysRes fd, sres;
    struct vg_stat stat_buf;
@@ -943,7 +997,7 @@ Addr open_debug_file( Char* name, UInt crc, /*OUT*/UWord* size )
 
    if (VG_(clo_verbosity) > 1)
       VG_(message)(Vg_DebugMsg, "  Considering %s ..\n", name);
-
+   
    *size = stat_buf.size;
    
    sres = VG_(am_mmap_file_float_valgrind)
@@ -954,18 +1008,35 @@ Addr open_debug_file( Char* name, UInt crc, /*OUT*/UWord* size )
    if (sr_isError(sres))
       return 0;
 
-   calccrc = calc_gnu_debuglink_crc32(0, (UChar*)sr_Res(sres), *size);
-   if (calccrc != crc) {
-      SysRes res = VG_(am_munmap_valgrind)(sr_Res(sres), *size);
-      vg_assert(!sr_isError(res));
+   if (buildid) {
+      Char* debug_buildid = find_buildid(sr_Res(sres), *size);
+      if (debug_buildid == NULL || VG_(strcmp)(buildid, debug_buildid) != 0) {
+         SysRes res = VG_(am_munmap_valgrind)(sr_Res(sres), *size);
+         vg_assert(!sr_isError(res));
+         if (VG_(clo_verbosity) > 1)
+            VG_(message)(Vg_DebugMsg, 
+               "  .. build-id mismatch (found %s wanted %s)\n", debug_buildid, buildid);
+         ML_(dinfo_free)(debug_buildid);
+         return 0;
+      }
+      ML_(dinfo_free)(debug_buildid);
+
       if (VG_(clo_verbosity) > 1)
-         VG_(message)(Vg_DebugMsg, 
-            "  .. CRC mismatch (computed %08x wanted %08x)\n", calccrc, crc);
-      return 0;
-   }
+         VG_(message)(Vg_DebugMsg, "  .. build-id is valid\n");
+   } else {
+      calccrc = calc_gnu_debuglink_crc32(0, (UChar*)sr_Res(sres), *size);
+      if (calccrc != crc) {
+         SysRes res = VG_(am_munmap_valgrind)(sr_Res(sres), *size);
+         vg_assert(!sr_isError(res));
+         if (VG_(clo_verbosity) > 1)
+            VG_(message)(Vg_DebugMsg, 
+               "  .. CRC mismatch (computed %08x wanted %08x)\n", calccrc, crc);
+         return 0;
+      }
 
-   if (VG_(clo_verbosity) > 1)
-      VG_(message)(Vg_DebugMsg, "  .. CRC is valid\n");
+      if (VG_(clo_verbosity) > 1)
+         VG_(message)(Vg_DebugMsg, "  .. CRC is valid\n");
+   }
    
    return sr_Res(sres);
 }
@@ -975,29 +1046,49 @@ Addr open_debug_file( Char* name, UInt crc, /*OUT*/UWord* size )
  */
 static
 Addr find_debug_file( struct _DebugInfo* di,
-                      Char* objpath, Char* debugname, 
-                      UInt crc, /*OUT*/UWord* size )
+                      Char* objpath, Char* buildid,
+                      Char* debugname, UInt crc,
+                      /*OUT*/UWord* size )
 {
-   Char *objdir = ML_(dinfo_strdup)("di.fdf.1", objpath);
-   Char *objdirptr;
-   Char *debugpath;
+   Char *debugpath = NULL;
    Addr addr = 0;
-  
-   if ((objdirptr = VG_(strrchr)(objdir, '/')) != NULL)
-      *objdirptr = '\0';
 
-   debugpath = ML_(dinfo_zalloc)(
-                  "di.fdf.2",
-                  VG_(strlen)(objdir) + VG_(strlen)(debugname) + 32);
-   
-   VG_(sprintf)(debugpath, "%s/%s", objdir, debugname);
+   if (buildid != NULL) {
+      debugpath = ML_(dinfo_zalloc)(
+                     "di.fdf.1",
+                     VG_(strlen)(buildid) + 33);
+
+      VG_(sprintf)(debugpath, "/usr/lib/debug/.build-id/%c%c/%s.debug",
+                   buildid[0], buildid[1], buildid + 2);
+
+      if ((addr = open_debug_file(debugpath, buildid, 0, size)) == 0) {
+         ML_(dinfo_free)(debugpath);
+         debugpath = NULL;
+      }
+   }
+
+   if (addr == 0 && debugname != NULL) {
+      Char *objdir = ML_(dinfo_strdup)("di.fdf.2", objpath);
+      Char *objdirptr;
+
+      if ((objdirptr = VG_(strrchr)(objdir, '/')) != NULL)
+         *objdirptr = '\0';
+
+      debugpath = ML_(dinfo_zalloc)(
+                     "di.fdf.3",
+                     VG_(strlen)(objdir) + VG_(strlen)(debugname) + 32);
 
-   if ((addr = open_debug_file(debugpath, crc, size)) == 0) {
-      VG_(sprintf)(debugpath, "%s/.debug/%s", objdir, debugname);
-      if ((addr = open_debug_file(debugpath, crc, size)) == 0) {
-         VG_(sprintf)(debugpath, "/usr/lib/debug%s/%s", objdir, debugname);
-         addr = open_debug_file(debugpath, crc, size);
+      VG_(sprintf)(debugpath, "%s/%s", objdir, debugname);
+
+      if ((addr = open_debug_file(debugpath, NULL, crc, size)) == 0) {
+         VG_(sprintf)(debugpath, "%s/.debug/%s", objdir, debugname);
+         if ((addr = open_debug_file(debugpath, NULL, crc, size)) == 0) {
+            VG_(sprintf)(debugpath, "/usr/lib/debug%s/%s", objdir, debugname);
+            addr = open_debug_file(debugpath, NULL, crc, size);
+         }
       }
+
+      ML_(dinfo_free)(objdir);
    }
 
    if (addr) {
@@ -1006,8 +1097,7 @@ Addr find_debug_file( struct _DebugInfo* di,
    }
 
    ML_(dinfo_free)(debugpath);
-   ML_(dinfo_free)(objdir);
-   
+
    return addr;
 }
 
@@ -1100,6 +1190,9 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
    Addr     rw_svma_limit = 0;
    PtrdiffT rw_bias = 0;
 
+   /* Build ID */
+   Char* buildid = NULL;
+
    vg_assert(di);
    vg_assert(di->have_rx_map == True);
    vg_assert(di->have_rw_map == True);
@@ -1849,20 +1942,31 @@ Bool ML_(read_elf_debug_info) ( struct _DebugInfo* di )
 
 #        undef FIND
       }
-         
-      /* Did we find a debuglink section? */
-      if (debuglink_img != NULL) {
-         UInt crc_offset = VG_ROUNDUP(VG_(strlen)(debuglink_img)+1, 4);
-         UInt crc;
 
-         vg_assert(crc_offset + sizeof(UInt) <= debuglink_sz);
+      /* Look for a build-id */
+      buildid = find_buildid(oimage, n_oimage);
 
-         /* Extract the CRC from the debuglink section */
-         crc = *(UInt *)(debuglink_img + crc_offset);
+      /* Look for a debug image */
+      if (buildid != NULL || debuglink_img != NULL) {
+         /* Do have a debuglink section? */
+         if (debuglink_img != NULL) {
+            UInt crc_offset = VG_ROUNDUP(VG_(strlen)(debuglink_img)+1, 4);
+            UInt crc;
+
+            vg_assert(crc_offset + sizeof(UInt) <= debuglink_sz);
+
+            /* Extract the CRC from the debuglink section */
+            crc = *(UInt *)(debuglink_img + crc_offset);
+
+            /* See if we can find a matching debug file */
+            dimage = find_debug_file( di, di->filename, buildid,
+                                      debuglink_img, crc, &n_dimage );
+         } else {
+            /* See if we can find a matching debug file */
+            dimage = find_debug_file( di, di->filename, buildid, NULL, 0, &n_dimage );
+         }
 
-         /* See if we can find a matching debug file */
-         dimage = find_debug_file( di, di->filename, debuglink_img,
-                                   crc, &n_dimage );
+         ML_(dinfo_free)(buildid);
 
          if (dimage != 0 
              && n_dimage >= sizeof(ElfXX_Ehdr)
index 19a68e9..52c1d0e 100644 (file)
@@ -7,7 +7,7 @@
 <!-- valgrind release + version stuff -->
 <!ENTITY rel-type    "Release">
 <!ENTITY rel-version "3.6.0">
-<!ENTITY rel-date    "18 October 2010">
+<!ENTITY rel-date    "21 October 2010">
 
 <!-- where the docs are installed -->
 <!ENTITY vg-docs-path  "$INSTALL/share/doc/valgrind/html/index.html">
index b1e77ca..6d70b26 100644 (file)
@@ -1212,34 +1212,6 @@ Reference Manual</ulink> for more information.
 </sect2>
 
 
-<sect2 id="drd-manual.qt" xreflabel="Qt">
-<title>Debugging Qt Programs</title>
-
-<para>
-The Qt library is the GUI library used by the KDE project.  Currently
-there are two versions of the Qt library in use: Qt3 by KDE 3 and Qt4
-by KDE 4. If possible, use Qt4 instead of Qt3. Qt3 is no longer
-supported, and there are known problems with multithreading support in
-Qt3. As an example, using QString objects in more than one thread will
-trigger race reports (this has been confirmed by Trolltech -- see also
-Trolltech task <ulink
-url="http://trolltech.com/developer/task-tracker/index_html">#206152</ulink>).
-</para>
-
-<para>
-Qt4 applications are supported by DRD, but only if the
-<literal>libqt4-debuginfo</literal> package has been installed. Some
-of the synchronization and threading primitives in Qt4 bypass the
-POSIX threads library, and DRD can only intercept these if symbol
-information for the Qt4 library is available. DRD won't tell you if it
-has not been able to load the Qt4 debug information, but a huge number
-of data races will be reported on data protected via
-<literal>QMutex</literal> objects.
-</para>
-
-</sect2>
-
-
 <sect2 id="drd-manual.boost.thread" xreflabel="Boost.Thread">
 <title>Debugging Boost.Thread Programs</title>
 
index 4f119e8..b80c9a0 100644 (file)
@@ -1,7 +1,7 @@
 10
 
 dir
-11447
+11471
 svn://svn.valgrind.org/valgrind/trunk/drd/scripts/ppc-cross/kernel-config/2.6.22
 svn://svn.valgrind.org/valgrind
 
index 31c0163..818c2b3 100644 (file)
@@ -331,14 +331,6 @@ if HAVE_PTHREAD_SPINLOCK
 check_PROGRAMS += pth_spinlock
 endif
 
-if HAVE_QTCORE
-check_PROGRAMS += qt4_mutex qt4_rwlock qt4_semaphore
-endif
-
-if HAVE_QTCORE_QATOMICINT
-check_PROGRAMS += qt4_atomic
-endif
-
 
 AM_CFLAGS   += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter
 AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter
@@ -392,23 +384,3 @@ endif
 if HAVE_PTHREAD_BARRIER
 matinv_LDADD                = $(LDADD) -lm
 endif
-
-if HAVE_QTCORE
-qt4_mutex_SOURCES           = qt4_mutex.cpp
-qt4_mutex_CXXFLAGS          = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_mutex_LDADD             = $(LDADD) $(QTCORE_LIBS)
-
-qt4_rwlock_SOURCES          = qt4_rwlock.cpp
-qt4_rwlock_CXXFLAGS         = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_rwlock_LDADD            = $(LDADD) $(QTCORE_LIBS)
-
-qt4_semaphore_SOURCES       = qt4_semaphore.cpp
-qt4_semaphore_CXXFLAGS      = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_semaphore_LDADD         = $(LDADD) $(QTCORE_LIBS)
-endif
-
-if HAVE_QTCORE_QATOMICINT
-qt4_atomic_SOURCES          = qt4_atomic.cpp
-qt4_atomic_CXXFLAGS         = $(AM_CXXFLAGS) $(QTCORE_CFLAGS)
-qt4_atomic_LDADD            = $(LDADD) $(QTCORE_LIBS)
-endif
index 3033e56..8b5bc84 100644 (file)
@@ -1,7 +1,7 @@
 10
 
 dir
-11447
+11471
 svn://svn.valgrind.org/valgrind/trunk/exp-dhat/docs
 svn://svn.valgrind.org/valgrind
 
index cee3922..0bae0aa 100644 (file)
@@ -812,10 +812,11 @@ typedef
       _argvec[0] = (unsigned long)_orig.nraddr;                   \
       _argvec[1] = (unsigned long)(arg1);                         \
       __asm__ volatile(                                           \
+         "subl $12, %%esp\n\t"                                    \
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $4, %%esp\n"                                       \
+         "addl $16, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -832,11 +833,12 @@ typedef
       _argvec[1] = (unsigned long)(arg1);                         \
       _argvec[2] = (unsigned long)(arg2);                         \
       __asm__ volatile(                                           \
+         "subl $8, %%esp\n\t"                                     \
          "pushl 8(%%eax)\n\t"                                     \
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $8, %%esp\n"                                       \
+         "addl $16, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -854,12 +856,13 @@ typedef
       _argvec[2] = (unsigned long)(arg2);                         \
       _argvec[3] = (unsigned long)(arg3);                         \
       __asm__ volatile(                                           \
+         "subl $4, %%esp\n\t"                                     \
          "pushl 12(%%eax)\n\t"                                    \
          "pushl 8(%%eax)\n\t"                                     \
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $12, %%esp\n"                                      \
+         "addl $16, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -904,6 +907,7 @@ typedef
       _argvec[4] = (unsigned long)(arg4);                         \
       _argvec[5] = (unsigned long)(arg5);                         \
       __asm__ volatile(                                           \
+         "subl $12, %%esp\n\t"                                    \
          "pushl 20(%%eax)\n\t"                                    \
          "pushl 16(%%eax)\n\t"                                    \
          "pushl 12(%%eax)\n\t"                                    \
@@ -911,7 +915,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $20, %%esp\n"                                      \
+         "addl $32, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -932,6 +936,7 @@ typedef
       _argvec[5] = (unsigned long)(arg5);                         \
       _argvec[6] = (unsigned long)(arg6);                         \
       __asm__ volatile(                                           \
+         "subl $8, %%esp\n\t"                                     \
          "pushl 24(%%eax)\n\t"                                    \
          "pushl 20(%%eax)\n\t"                                    \
          "pushl 16(%%eax)\n\t"                                    \
@@ -940,7 +945,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $24, %%esp\n"                                      \
+         "addl $32, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -963,6 +968,7 @@ typedef
       _argvec[6] = (unsigned long)(arg6);                         \
       _argvec[7] = (unsigned long)(arg7);                         \
       __asm__ volatile(                                           \
+         "subl $4, %%esp\n\t"                                     \
          "pushl 28(%%eax)\n\t"                                    \
          "pushl 24(%%eax)\n\t"                                    \
          "pushl 20(%%eax)\n\t"                                    \
@@ -972,7 +978,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $28, %%esp\n"                                      \
+         "addl $32, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -1031,6 +1037,7 @@ typedef
       _argvec[8] = (unsigned long)(arg8);                         \
       _argvec[9] = (unsigned long)(arg9);                         \
       __asm__ volatile(                                           \
+         "subl $12, %%esp\n\t"                                    \
          "pushl 36(%%eax)\n\t"                                    \
          "pushl 32(%%eax)\n\t"                                    \
          "pushl 28(%%eax)\n\t"                                    \
@@ -1042,7 +1049,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $36, %%esp\n"                                      \
+         "addl $48, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -1068,6 +1075,7 @@ typedef
       _argvec[9] = (unsigned long)(arg9);                         \
       _argvec[10] = (unsigned long)(arg10);                       \
       __asm__ volatile(                                           \
+         "subl $8, %%esp\n\t"                                     \
          "pushl 40(%%eax)\n\t"                                    \
          "pushl 36(%%eax)\n\t"                                    \
          "pushl 32(%%eax)\n\t"                                    \
@@ -1080,7 +1088,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $40, %%esp\n"                                      \
+         "addl $48, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -1108,6 +1116,7 @@ typedef
       _argvec[10] = (unsigned long)(arg10);                       \
       _argvec[11] = (unsigned long)(arg11);                       \
       __asm__ volatile(                                           \
+         "subl $4, %%esp\n\t"                                     \
          "pushl 44(%%eax)\n\t"                                    \
          "pushl 40(%%eax)\n\t"                                    \
          "pushl 36(%%eax)\n\t"                                    \
@@ -1121,7 +1130,7 @@ typedef
          "pushl 4(%%eax)\n\t"                                     \
          "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
          VALGRIND_CALL_NOREDIR_EAX                                \
-         "addl $44, %%esp\n"                                      \
+         "addl $48, %%esp\n"                                      \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0])                            \
          : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
@@ -1478,7 +1487,7 @@ typedef
       _argvec[7] = (unsigned long)(arg7);                         \
       __asm__ volatile(                                           \
          VALGRIND_CFI_PROLOGUE                                    \
-         "subq $128,%%rsp\n\t"                                    \
+         "subq $136,%%rsp\n\t"                                    \
          "pushq 56(%%rax)\n\t"                                    \
          "movq 48(%%rax), %%r9\n\t"                               \
          "movq 40(%%rax), %%r8\n\t"                               \
@@ -1489,7 +1498,7 @@ typedef
          "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
          VALGRIND_CALL_NOREDIR_RAX                                \
          "addq $8, %%rsp\n"                                       \
-         "addq $128,%%rsp\n\t"                                    \
+         "addq $136,%%rsp\n\t"                                    \
          VALGRIND_CFI_EPILOGUE                                    \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER            \
@@ -1554,7 +1563,7 @@ typedef
       _argvec[9] = (unsigned long)(arg9);                         \
       __asm__ volatile(                                           \
          VALGRIND_CFI_PROLOGUE                                    \
-         "subq $128,%%rsp\n\t"                                    \
+         "subq $136,%%rsp\n\t"                                    \
          "pushq 72(%%rax)\n\t"                                    \
          "pushq 64(%%rax)\n\t"                                    \
          "pushq 56(%%rax)\n\t"                                    \
@@ -1567,7 +1576,7 @@ typedef
          "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
          VALGRIND_CALL_NOREDIR_RAX                                \
          "addq $24, %%rsp\n"                                      \
-         "addq $128,%%rsp\n\t"                                    \
+         "addq $136,%%rsp\n\t"                                    \
          VALGRIND_CFI_EPILOGUE                                    \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER            \
@@ -1638,7 +1647,7 @@ typedef
       _argvec[11] = (unsigned long)(arg11);                       \
       __asm__ volatile(                                           \
          VALGRIND_CFI_PROLOGUE                                    \
-         "subq $128,%%rsp\n\t"                                    \
+         "subq $136,%%rsp\n\t"                                    \
          "pushq 88(%%rax)\n\t"                                    \
          "pushq 80(%%rax)\n\t"                                    \
          "pushq 72(%%rax)\n\t"                                    \
@@ -1653,7 +1662,7 @@ typedef
          "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
          VALGRIND_CALL_NOREDIR_RAX                                \
          "addq $40, %%rsp\n"                                      \
-         "addq $128,%%rsp\n\t"                                    \
+         "addq $136,%%rsp\n\t"                                    \
          VALGRIND_CFI_EPILOGUE                                    \
          : /*out*/   "=a" (_res)                                  \
          : /*in*/    "a" (&_argvec[0]) __FRAME_POINTER            \
index 131f48f..50f2d49 100644 (file)
@@ -2920,6 +2920,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
          return assignNew('V', mce, Ity_I16, binop(Iop_8HLto16, vHi8, vLo8));
       }
 
+      case Iop_Sad8Ux4: /* maybe we could do better?  ftm, do mkLazy2. */
       case Iop_DivS32:
       case Iop_DivU32:
          return mkLazy2(mce, Ity_I32, vatom1, vatom2);
index bf95491..85e2bff 100644 (file)
@@ -252,10 +252,11 @@ typedef
    The metadata is not copied in cases 0, 2 or 3 so it should be
    impossible to segfault your system by using this call.
 */
-#define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes)                     \
-    VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                               \
-                                    VG_USERREQ__GET_VBITS,           \
-                                    (char*)(zza), (char*)(zzvbits),  \
+#define VALGRIND_GET_VBITS(zza,zzvbits,zznbytes)                \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                          \
+                                    VG_USERREQ__GET_VBITS,      \
+                                    (const char*)(zza),         \
+                                    (char*)(zzvbits),           \
                                     (zznbytes), 0, 0)
 
 /* Set the validity data for addresses [zza..zza+zznbytes-1], copying it
@@ -267,10 +268,11 @@ typedef
    The metadata is not copied in cases 0, 2 or 3 so it should be
    impossible to segfault your system by using this call.
 */
-#define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes)                     \
-    VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                               \
-                                    VG_USERREQ__SET_VBITS,           \
-                                    (char*)(zza), (char*)(zzvbits),  \
+#define VALGRIND_SET_VBITS(zza,zzvbits,zznbytes)                \
+    VALGRIND_DO_CLIENT_REQUEST_EXPR(0,                          \
+                                    VG_USERREQ__SET_VBITS,      \
+                                    (const char*)(zza),         \
+                                    (const char*)(zzvbits),     \
                                     (zznbytes), 0, 0 )
 
 #endif
index 3036c0e..af2ae8b 100644 (file)
@@ -1,6 +1,8 @@
 
 /* How to compile:
-   gcc -marm -O -g -Wall -mcpu=cortex-a8 -o test_arm_v6int v6int.c
+   gcc -g -Wall -mcpu=cortex-a8 -o v6mediaA -marm none/tests/arm/v6media.c
+   or
+   gcc -g -Wall -mcpu=cortex-a8 -o v6mediaT -mthumb none/tests/arm/v6media.c
 */
 
 #include <stdio.h>
@@ -1836,6 +1838,8 @@ TESTINST3("smuadx r0, r1, r2", 0xf808434e, 0xefeab836, r0, r1, r2, 0);
 
   printf("----------------- SMLAD ----------------- \n");
   TESTINST4("smlad  r0, r1, r2, r3", 
+                  0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smlad  r0, r1, r2, r3", 
                   0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
   TESTINST4("smlad  r0, r1, r2, r3", 
                   0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
@@ -1950,6 +1954,28 @@ TESTINST4("smlad  r0, r1, r2, r3",
 TESTINST4("smlad  r0, r1, r2, r3", 
           0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
 
+  printf("----------------- SMLADX ----------------- \n");
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
+  TESTINST4("smladx  r0, r1, r2, r3", 
+                  0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
+TESTINST4("smladx  r0, r1, r2, r3", 
+          0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
+TESTINST4("smladx  r0, r1, r2, r3", 
+          0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
+TESTINST4("smladx  r0, r1, r2, r3", 
+          0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
+
   printf("------------ SMLABB, SMLATT, SMLATB, SMLABT ------------\n");
   /* smlabb rD, rN, rM, rA */
   TESTINST4("smlabb r0, r1, r2, r3", 
@@ -3611,6 +3637,445 @@ TESTINST4("smlawt  r0, r1, r2, r3",
 TESTINST4("smlawt  r0, r1, r2, r3", 
           0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
 
+
+  printf("----------------- SMLSD ----------------- \n");
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
+  TESTINST4("smlsd  r0, r1, r2, r3", 
+                  0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
+TESTINST4("smlsd  r0, r1, r2, r3", 
+          0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
+
+  printf("----------------- SMLSDX ----------------- \n");
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
+  TESTINST4("smlsdx  r0, r1, r2, r3", 
+                  0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
+TESTINST4("smlsdx  r0, r1, r2, r3", 
+          0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
+TESTINST4("smlsdx  r0, r1, r2, r3", 
+          0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
+TESTINST4("smlsdx  r0, r1, r2, r3", 
+          0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
+
+
+  printf("----------------- SMUSD ----------------- \n");
+  TESTINST3("smusd r0, r1, r2", 0x80008000, 0x80008000, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0x7fff7fff, 0x00000000, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0x7fff7fff, 0x00010001, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0x80008000, 0xffffffff, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0x00640064, 0x00030003, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0xffffffff, 0xfffc0001, r0, r1, r2, 0);
+  TESTINST3("smusd r0, r1, r2", 0xfff70fff, 0x00030003, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xd83b849b, 0xca5e5605, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x0cdafabe, 0x50865114, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x2738f0ff, 0x6a228b19, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xfaceab39, 0x2973c051, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xa3e6f759, 0x557c7ba2, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x72f33509, 0x9b41bfb1, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xa5ec1aa8, 0x2b62ba5a, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x6ebd04d9, 0x55ea3e4e, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x2eaea305, 0xe79fd570, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x22b65db1, 0xcdb7ed11, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x776c41c7, 0x2eb68500, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xe50dd77c, 0xd6f9a698, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x0be36f70, 0xeda5110c, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xebbff82b, 0xd759eb72, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x50c28082, 0xd9c4b1f4, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x17962e8f, 0xa29eb320, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xc57243b7, 0xcf1e4487, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x7eb226ac, 0xf20fb90f, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xbce0f026, 0xbb151055, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xa5757252, 0x957440d2, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xf4a477c1, 0x728b7771, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x76723a21, 0xf13c20f3, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x74d01105, 0x86398371, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xc1273e2c, 0x03d0fb78, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xdd9b7653, 0xd0d49b7c, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xdde62fd1, 0x76354a58, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xc3fb4a96, 0x9fa45fb7, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xa1a10f56, 0x7572bdec, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x4b7d4fd9, 0xfea59eb6, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x9d0ddffc, 0xf2669090, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x4f82d17c, 0xbc1ff573, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x08215ca2, 0x345f67e6, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xf23595d0, 0x3f39d77e, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xf244c158, 0xfb2db55b, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x256bfdd6, 0x13aebedf, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xc02a0c05, 0x5b013000, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xee2fa46e, 0xed95b542, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x97a7da20, 0x60bb5ee8, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xa231d5e6, 0xd9000a64, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x10e1968a, 0x624f9467, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x0e089270, 0xa8c64d94, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x9e8e0185, 0x6b4f637a, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x3096f12e, 0x11f5f4b9, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xffc134df, 0x0b02eb0c, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
+TESTINST3("smusd r0, r1, r2", 0xf808434e, 0xefeab836, r0, r1, r2, 0);
+  printf("----------------- SMUSDX ---------------- \n");
+  TESTINST3("smusdx r0, r1, r2", 0x80008000, 0x80008000, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0x7fff7fff, 0x00000000, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0x7fff7fff, 0x00010001, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0x80008000, 0xffffffff, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0x00640064, 0x00030003, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0xffffffff, 0xfffc0001, r0, r1, r2, 0);
+  TESTINST3("smusdx r0, r1, r2", 0xfff70fff, 0x00030003, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xd83b849b, 0xca5e5605, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x0cdafabe, 0x50865114, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x2738f0ff, 0x6a228b19, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xfaceab39, 0x2973c051, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xa3e6f759, 0x557c7ba2, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x72f33509, 0x9b41bfb1, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xa5ec1aa8, 0x2b62ba5a, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x6ebd04d9, 0x55ea3e4e, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x2eaea305, 0xe79fd570, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x22b65db1, 0xcdb7ed11, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x776c41c7, 0x2eb68500, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xe50dd77c, 0xd6f9a698, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x0be36f70, 0xeda5110c, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xebbff82b, 0xd759eb72, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x50c28082, 0xd9c4b1f4, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x17962e8f, 0xa29eb320, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xc57243b7, 0xcf1e4487, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x7eb226ac, 0xf20fb90f, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xbce0f026, 0xbb151055, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xa5757252, 0x957440d2, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xf4a477c1, 0x728b7771, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x76723a21, 0xf13c20f3, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x74d01105, 0x86398371, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xc1273e2c, 0x03d0fb78, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xdd9b7653, 0xd0d49b7c, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xdde62fd1, 0x76354a58, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xc3fb4a96, 0x9fa45fb7, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xa1a10f56, 0x7572bdec, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x4b7d4fd9, 0xfea59eb6, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x9d0ddffc, 0xf2669090, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x4f82d17c, 0xbc1ff573, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x08215ca2, 0x345f67e6, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xf23595d0, 0x3f39d77e, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xf244c158, 0xfb2db55b, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x256bfdd6, 0x13aebedf, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xc02a0c05, 0x5b013000, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xee2fa46e, 0xed95b542, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x97a7da20, 0x60bb5ee8, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xa231d5e6, 0xd9000a64, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x10e1968a, 0x624f9467, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x0e089270, 0xa8c64d94, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x9e8e0185, 0x6b4f637a, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x3096f12e, 0x11f5f4b9, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xffc134df, 0x0b02eb0c, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
+TESTINST3("smusdx r0, r1, r2", 0xf808434e, 0xefeab836, r0, r1, r2, 0);
+
+  printf("----------------- USAD8 ---------------- \n");
+  TESTINST3("usad8 r0, r1, r2", 0x80008000, 0x80008000, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0x7fff7fff, 0x00000000, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0x7fff7fff, 0x00010001, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0x80008000, 0xffffffff, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0x00640064, 0x00030003, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0xffffffff, 0xfffc0001, r0, r1, r2, 0);
+  TESTINST3("usad8 r0, r1, r2", 0xfff70fff, 0x00030003, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xd83b849b, 0xca5e5605, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x0cdafabe, 0x50865114, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x2738f0ff, 0x6a228b19, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xfaceab39, 0x2973c051, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xa3e6f759, 0x557c7ba2, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x72f33509, 0x9b41bfb1, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xa5ec1aa8, 0x2b62ba5a, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x6ebd04d9, 0x55ea3e4e, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x2eaea305, 0xe79fd570, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x22b65db1, 0xcdb7ed11, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x776c41c7, 0x2eb68500, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xe50dd77c, 0xd6f9a698, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x0be36f70, 0xeda5110c, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xebbff82b, 0xd759eb72, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x50c28082, 0xd9c4b1f4, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x17962e8f, 0xa29eb320, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xc57243b7, 0xcf1e4487, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x7eb226ac, 0xf20fb90f, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xbce0f026, 0xbb151055, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xa5757252, 0x957440d2, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xf4a477c1, 0x728b7771, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x76723a21, 0xf13c20f3, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x74d01105, 0x86398371, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xc1273e2c, 0x03d0fb78, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xdd9b7653, 0xd0d49b7c, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xdde62fd1, 0x76354a58, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xc3fb4a96, 0x9fa45fb7, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xa1a10f56, 0x7572bdec, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x4b7d4fd9, 0xfea59eb6, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x9d0ddffc, 0xf2669090, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x4f82d17c, 0xbc1ff573, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x08215ca2, 0x345f67e6, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xf23595d0, 0x3f39d77e, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xf244c158, 0xfb2db55b, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x256bfdd6, 0x13aebedf, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xc02a0c05, 0x5b013000, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xee2fa46e, 0xed95b542, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x97a7da20, 0x60bb5ee8, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xa231d5e6, 0xd9000a64, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x10e1968a, 0x624f9467, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x0e089270, 0xa8c64d94, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x9e8e0185, 0x6b4f637a, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x3096f12e, 0x11f5f4b9, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xffc134df, 0x0b02eb0c, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
+TESTINST3("usad8 r0, r1, r2", 0xf808434e, 0xefeab836, r0, r1, r2, 0);
+
+  printf("----------------- USADA8 ----------------- \n");
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
+  TESTINST4("usada8  r0, r1, r2, r3", 
+                  0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
+TESTINST4("usada8  r0, r1, r2, r3", 
+          0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
+
+
+
+
 /*
 TESTINST3("theinsn", 0xf7b0b13e, 0x5e4b1cbf, r0, r1, r2, 0);
 TESTINST3("theinsn", 0x44de5ca9, 0x464a21cc, r0, r1, r2, 0);
index 41c0d17..2e8e9d8 100644 (file)
@@ -1551,6 +1551,7 @@ smuadx r0, r1, r2 :: rd 0x11f523ba rm 0x4b0c2337, rn 0xffa63d6c, carryin 0, cpsr
 smuadx r0, r1, r2 :: rd 0x04e080e7 rm 0xf91d5f56, rn 0x088bc0f9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smuadx r0, r1, r2 :: rd 0xfe0168fc rm 0xf808434e, rn 0xefeab836, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 ----------------- SMLAD ----------------- 
+smlad  r0, r1, r2, r3 :: rd 0x80000000 rm 0x80008000, rn 0x80008000 rs 0x00000000, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
 smlad  r0, r1, r2, r3 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlad  r0, r1, r2, r3 :: rd 0x0000ffff rm 0x7fff7fff, rn 0x00010001 rs 0x00000001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlad  r0, r1, r2, r3 :: rd 0x0001001f rm 0x80008000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
@@ -1608,6 +1609,17 @@ smlad  r0, r1, r2, r3 :: rd 0x183c60b5 rm 0x868e7c7d, rn 0x5f77532e rs 0x1d133d3
 smlad  r0, r1, r2, r3 :: rd 0x00b7b139 rm 0x4e5e0760, rn 0x8f6d3264 rs 0x21ba2fb3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlad  r0, r1, r2, r3 :: rd 0xc79bbb47 rm 0xde99ac2f, rn 0x0be36f70 rs 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlad  r0, r1, r2, r3 :: rd 0x0f5e5bec rm 0xc57243b7, rn 0xcf1e4487 rs 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- SMLADX ----------------- 
+smladx  r0, r1, r2, r3 :: rd 0x80000000 rm 0x80008000, rn 0x80008000 rs 0x00000000, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x0000ffff rm 0x7fff7fff, rn 0x00010001 rs 0x00000001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x0001001f rm 0x80008000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x00000278 rm 0x00640064, rn 0x00030003 rs 0x00000020, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x00000102 rm 0xffffffff, rn 0xfffc0001 rs 0x000000ff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x000030e2 rm 0xfff70fff, rn 0x00030003 rs 0x00000100, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x5639ee73 rm 0xb8035b5b, rn 0xce0ce1ed rs 0x5f986e68, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0xc5eafef5 rm 0x35232047, rn 0x146275d8 rs 0xaae3433f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smladx  r0, r1, r2, r3 :: rd 0x39ba1d8c rm 0xe7aa57b4, rn 0x1584bd74 rs 0x2c07a5b4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 ------------ SMLABB, SMLATT, SMLATB, SMLABT ------------
 smlabb r0, r1, r2, r3 :: rd 0x00000000 rm 0x00030000, rn 0x00040000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlabb r0, r1, r2, r3 :: rd 0x00008001 rm 0x00030001, rn 0x00040002 rs 0x00007fff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
@@ -2856,3 +2868,306 @@ smlawt  r0, r1, r2, r3 :: rd 0xefc9a9ab rm 0x868e7c7d, rn 0x5f77532e rs 0x1d133d
 smlawt  r0, r1, r2, r3 :: rd 0xff440c7a rm 0x4e5e0760, rn 0x8f6d3264 rs 0x21ba2fb3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlawt  r0, r1, r2, r3 :: rd 0xec180db5 rm 0xde99ac2f, rn 0x0be36f70 rs 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
 smlawt  r0, r1, r2, r3 :: rd 0xfd3dfd7c rm 0xc57243b7, rn 0xcf1e4487 rs 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- SMLSD ----------------- 
+smlsd  r0, r1, r2, r3 :: rd 0x00000000 rm 0x80008000, rn 0x80008000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x00000001 rm 0x7fff7fff, rn 0x00010001 rs 0x00000001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x0000001f rm 0x80008000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x00000020 rm 0x00640064, rn 0x00030003 rs 0x00000020, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x000000fa rm 0xffffffff, rn 0xfffc0001 rs 0x000000ff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x00003118 rm 0xfff70fff, rn 0x00030003 rs 0x00000100, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x46d0f283 rm 0xb8035b5b, rn 0xce0ce1ed rs 0x5f986e68, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xb583dec1 rm 0x35232047, rn 0x146275d8 rs 0xaae3433f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x1746e19c rm 0xe7aa57b4, rn 0x1584bd74 rs 0x2c07a5b4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x7f1b45a7 rm 0x32fa0095, rn 0x36f26261 rs 0x89d2ef86, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xd61f013c rm 0x8ed8287c, rn 0x02c90120 rs 0xd4b64d54, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x11c2a9f9 rm 0xc53aaba9, rn 0x29300837 rs 0x0b02c58a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xa8dcd3bd rm 0x216158cb, rn 0x57a50a01 rs 0xb0d20777, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x69f4e270 rm 0x3e2e1bd7, rn 0x3cd6cd94 rs 0x7e376198, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xddca6d45 rm 0xd5fe2dc4, rn 0xdd914bf7 rs 0xd5dc5407, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x255d66d5 rm 0xf87b961e, rn 0x1d66879f rs 0xf2b64835, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x9751e12e rm 0xd65db979, rn 0xc61b323b rs 0xae930a1a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x4883e0ce rm 0x5ef1f1a8, rn 0xbf73f0a5 rs 0x2fb714c9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x9b2f1a97 rm 0x1ffe53d9, rn 0x815bb75b rs 0xa3268abe, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x00aca055 rm 0xed2cbf78, rn 0xc6ffabb6 rs 0xef9e9fd9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x54ad18e6 rm 0xeaa652c7, rn 0x137741f4 rs 0x3dba1164, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xc11e2ae7 rm 0x3ada0280, rn 0x71fbde8b rs 0xdba5bd25, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xa68e4e94 rm 0xda4ba05b, rn 0x90f9833d rs 0x884c0ad8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xcf06b4a9 rm 0xc00b821a, rn 0x7fa1d5a6 rs 0x9a4ff1b8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x70734c96 rm 0xe1bb8606, rn 0x58293969 rs 0x81616d13, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x7924b596 rm 0x51f31d95, rn 0xa3cfd624 rs 0x6077fb1f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x457e8494 rm 0x0849a0c2, rn 0x0872f25a rs 0x40b094e2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x9f7ce5ab rm 0x17913309, rn 0xf1e03d7e rs 0x91edc21d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x7e9142d7 rm 0x5388b5cd, rn 0x86582032 rs 0x6034078d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xc9c16b56 rm 0x181c436b, rn 0x5de41558 rs 0xccfa1c7e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x343d44bb rm 0x23ba1b46, rn 0x4437983c rs 0x48d06549, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x829f63d9 rm 0xa9085781, rn 0xc6b4ac58 rs 0xb2aead21, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x7e0be811 rm 0xc2bdf597, rn 0xdde1e6a4 rs 0x852e3a72, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xe8f8702a rm 0x157b0dea, rn 0xf0d5ff94 rs 0xe7b87e39, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x276c3d40 rm 0x3edad6b6, rn 0x82aceb7a rs 0x0557c6fc, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x687bc74a rm 0x6cc9bfa8, rn 0x7f808c15 rs 0x81874a02, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x2ae3c38f rm 0x6b1422c7, rn 0x33921b00 rs 0x3ccad3f7, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x9844bab5 rm 0xd7ce1909, rn 0x3e435701 rs 0x85fbf196, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xd5393721 rm 0xb4e16b6e, rn 0x6e13680a rs 0x89436f88, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x74f6b265 rm 0x44858efc, rn 0x9002bc30 rs 0x390d2c2f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x63f13945 rm 0xbea121ab, rn 0x953ff6ec rs 0x80657c40, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xeb097592 rm 0x6ffed89f, rn 0x3e8c49b7 rs 0x11bd07d1, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xcc3b7535 rm 0x7795635d, rn 0x5e6e32dd rs 0xe4999bf2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x266bc158 rm 0xec0c2f30, rn 0x5736ed46 rs 0x231348c0, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x84bbcf7f rm 0x4f9ddd1b, rn 0x95bca5d8 rs 0x5765b203, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x59a38672 rm 0xc1553709, rn 0x0112b30a rs 0x69ec0212, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x86f70dbf rm 0x74bd0223, rn 0x03fa9bb5 rs 0x899d9192, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x765b06dc rm 0xf52e9fbf, rn 0xb4c510a7 rs 0x7fcbe5a9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xed67a008 rm 0x64a365ef, rn 0x2dd01366 rs 0xf7b0b13e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x37540ed9 rm 0x5e4b1cbf, rn 0x44de5ca9 rs 0x464a21cc, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x1f9219fb rm 0x299da970, rn 0xe8108f1b rs 0xf5818cfb, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x82e3c60f rm 0xcd90d604, rn 0xaa5e9444 rs 0x8217b7df, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x94d58fbc rm 0xe60743c3, rn 0x7acb4de3 rs 0x73c29060, carryin 0, cpsr 0x08000000     Q ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x72cfe4b1 rm 0x868e7c7d, rn 0x5f77532e rs 0x1d133d3d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0x45a3f12d rm 0x4e5e0760, rn 0x8f6d3264 rs 0x21ba2fb3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xcab5d1f1 rm 0xde99ac2f, rn 0x0be36f70 rs 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsd  r0, r1, r2, r3 :: rd 0xf901b934 rm 0xc57243b7, rn 0xcf1e4487 rs 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- SMLSDX ----------------- 
+smlsdx  r0, r1, r2, r3 :: rd 0x00000000 rm 0x80008000, rn 0x80008000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x00000001 rm 0x7fff7fff, rn 0x00010001 rs 0x00000001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x0000001f rm 0x80008000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x00000020 rm 0x00640064, rn 0x00030003 rs 0x00000020, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x00000104 rm 0xffffffff, rn 0xfffc0001 rs 0x000000ff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x00003118 rm 0xfff70fff, rn 0x00030003 rs 0x00000100, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x454ff2e5 rm 0xb8035b5b, rn 0xce0ce1ed rs 0x5f986e68, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x94ff55e5 rm 0x35232047, rn 0x146275d8 rs 0xaae3433f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smlsdx  r0, r1, r2, r3 :: rd 0x2d13277c rm 0xe7aa57b4, rn 0x1584bd74 rs 0x2c07a5b4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- SMUSD ----------------- 
+smusd r0, r1, r2 :: rd 0x00000000 rm 0x80008000, rn 0x80008000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00010001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x00000000 rm 0x80008000, rn 0xffffffff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x00000000 rm 0x00640064, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfffffffb rm 0xffffffff, rn 0xfffc0001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x00003018 rm 0xfff70fff, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xce34b55d rm 0xd83b849b, rn 0xca5e5605, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfa4adabc rm 0x0cdafabe, rn 0x50865114, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xf6979877 rm 0x2738f0ff, rn 0x6a228b19, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x15ee447f rm 0xfaceab39, rn 0x2973c051, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x1a9387ea rm 0xa3e6f759, rn 0x557c7ba2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x1fea1186 rm 0x72f33509, rn 0x9b41bfb1, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x080346b8 rm 0xa5ec1aa8, rn 0x2b62ba5a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xdc040e5c rm 0x6ebd04d9, rn 0x55ea3e4e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x13e77b1e rm 0x2eaea305, rn 0xe79fd570, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xffe387a7 rm 0x22b65db1, rn 0xcdb7ed11, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xca9b1438 rm 0x776c41c7, rn 0x2eb68500, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x09d4b1fb rm 0xe50dd77c, rn 0xd6f9a698, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x0845d8f1 rm 0x0be36f70, rn 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfd699dbf rm 0xebbff82b, rn 0xd759eb72, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x32ee1760 rm 0x50c28082, rn 0xd9c4b1f4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfa9f544c rm 0x17962e8f, rn 0xa29eb320, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x06f20025 rm 0xc57243b7, rn 0xcf1e4487, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfc2edfa6 rm 0x7eb226ac, rn 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xeceafe3e rm 0xbce0f026, rn 0xbb151055, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xf7433540 rm 0xa5757252, rn 0x957440d2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x3cf4b625 rm 0xf4a477c1, rn 0x728b7771, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x0e50389b rm 0x76723a21, rn 0xf13c20f3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x2f492fe5 rm 0x74d01105, rn 0x86398371, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xffd5e3f0 rm 0xc1273e2c, rn 0x03d0fb78, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xcb341cd8 rm 0xdd9b7653, rn 0xd0d49b7c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x1da1e53a rm 0xdde62fd1, rn 0x76354a58, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x054b896e rm 0xc3fb4a96, rn 0x9fa45fb7, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x27561296 rm 0xa1a10f56, rn 0x7572bdec, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xe20e04b5 rm 0x4b7d4fd9, rn 0xfea59eb6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x08ade092 rm 0x9d0ddffc, rn 0xf2669090, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x16ffadf6 rm 0x4f82d17c, rn 0xbc1ff573, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x23eeaf4d rm 0x08215ca2, rn 0x345f67e6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x14357393 rm 0xf23595d0, rn 0x3f39d77e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x1202b054 rm 0xf244c158, rn 0xfb2db55b, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfdac91b0 rm 0x256bfdd6, rn 0x13aebedf, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x18f241d6 rm 0xc02a0c05, rn 0x5b013000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x19740601 rm 0xee2fa46e, rn 0xed95b542, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x19630603 rm 0x97a7da20, rn 0x60bb5ee8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xf00000d8 rm 0xa231d5e6, rn 0xd9000a64, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x25d80217 rm 0x10e1968a, rn 0x624f9467, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xe3943e90 rm 0x0e089270, rn 0xa8c64d94, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x296fe090 rm 0x9e8e0185, rn 0x6b4f637a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfd3eacb0 rm 0x3096f12e, rn 0x11f5f4b9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfbaee4f2 rm 0xffc134df, rn 0x0b02eb0c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xfcd34768 rm 0xe444dc25, rn 0xd5eef620, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x3271444a rm 0x06ea9b2a, rn 0xa2108661, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xee903517 rm 0x448f3a5f, rn 0x17aecf57, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0x088d586c rm 0x4b0c2337, rn 0xffa63d6c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xe8c20fe7 rm 0xf91d5f56, rn 0x088bc0f9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusd r0, r1, r2 :: rd 0xeca01324 rm 0xf808434e, rn 0xefeab836, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- SMUSDX ---------------- 
+smusdx r0, r1, r2 :: rd 0x00000000 rm 0x80008000, rn 0x80008000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00000000 rm 0x7fff7fff, rn 0x00010001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00000000 rm 0x80008000, rn 0xffffffff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00000000 rm 0x00640064, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00000005 rm 0xffffffff, rn 0xfffc0001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x00003018 rm 0xfff70fff, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x2736f3c3 rm 0xd83b849b, rn 0xca5e5605, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xfa46a46c rm 0x0cdafabe, rn 0x50865114, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0bb05b66 rm 0x2738f0ff, rn 0x6a228b19, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xf0fb306d rm 0xfaceab39, rn 0x2973c051, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x29972290 rm 0xa3e6f759, rn 0x557c7ba2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x08012346 rm 0x72f33509, rn 0x9b41bfb1, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xec029f58 rm 0xa5ec1aa8, rn 0x2b62ba5a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xe6acf7c4 rm 0x6ebd04d9, rn 0x55ea3e4e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x109d90fb rm 0x2eaea305, rn 0xe79fd570, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xf029ea71 rm 0x22b65db1, rn 0xcdb7ed11, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x4561697a rm 0x776c41c7, rn 0x2eb68500, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xfd14d1e4 rm 0xe50dd77c, rn 0xd6f9a698, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xf737e18c rm 0x0be36f70, rn 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xff9e13e5 rm 0xebbff82b, rn 0xd759eb72, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x2ba97aa0 rm 0x50c28082, rn 0xd9c4b1f4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xf6196582 rm 0x17962e8f, rn 0xa29eb320, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x02be8154 rm 0xc57243b7, rn 0xcf1e4487, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x2100cda6 rm 0x7eb226ac, rn 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x088cbebe rm 0xbce0f026, rn 0xbb151055, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xe7588d2e rm 0xa5757252, rn 0x957440d2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x3ae1bf67 rm 0xf4a477c1, rn 0x728b7771, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xed670286 rm 0x76723a21, rn 0xf13c20f3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x30bd684d rm 0x74d01105, rn 0x86398371, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xffd04078 rm 0xc1273e2c, rn 0x03d0fb78, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xdcb13ca8 rm 0xdd9b7653, rn 0xd0d49b7c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x1ffb7935 rm 0xdde62fd1, rn 0x76354a58, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xfa5db4ab rm 0xc3fb4a96, rn 0x9fa45fb7, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xeead44e0 rm 0xa1a10f56, rn 0x7572bdec, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x1c43f3ff rm 0x4b7d4fd9, rn 0xfea59eb6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xd6a0cf18 rm 0x9d0ddffc, rn 0xf2669090, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0f9c4c9e rm 0x4f82d17c, rn 0xbc1ff573, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0fa6b378 rm 0x08215ca2, rn 0x345f67e6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xe397d23a rm 0xf23595d0, rn 0x3f39d77e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xfd2d124c rm 0xf244c158, rn 0xfb2db55b, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x095a673f rm 0x256bfdd6, rn 0x13aebedf, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x103df305 rm 0xc02a0c05, rn 0x5b013000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0162e6e8 rm 0xee2fa46e, rn 0xed95b542, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x185f9408 rm 0x97a7da20, rn 0x60bb5ee8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0a38b0dc rm 0xa231d5e6, rn 0xd9000a64, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xde986a0f rm 0x10e1968a, rn 0x624f9467, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x21143e00 rm 0x0e089270, rn 0xa8c64d94, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x2680955f rm 0x9e8e0185, rn 0x6b4f637a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0119caa0 rm 0x3096f12e, rn 0x11f5f4b9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x0240d6b2 rm 0xffc134df, rn 0x0b02eb0c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x04d292e6 rm 0xe444dc25, rn 0xd5eef620, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x28492bf6 rm 0x06ea9b2a, rn 0xa2108661, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x126e47f9 rm 0x448f3a5f, rn 0x17aecf57, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xedf2199a rm 0x4b0c2337, rn 0xffa63d6c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0x017c667d rm 0xf91d5f56, rn 0x088bc0f9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+smusdx r0, r1, r2 :: rd 0xf989459c rm 0xf808434e, rn 0xefeab836, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- USAD8 ---------------- 
+usad8 r0, r1, r2 :: rd 0x00000000 rm 0x80008000, rn 0x80008000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000002fc rm 0x7fff7fff, rn 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000002fa rm 0x7fff7fff, rn 0x00010001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000002fc rm 0x80008000, rn 0xffffffff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000c2 rm 0x00640064, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000200 rm 0xffffffff, rn 0xfffc0001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000002fe rm 0xfff70fff, rn 0x00030003, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000f5 rm 0xd83b849b, rn 0xca5e5605, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001eb rm 0x0cdafabe, rn 0x50865114, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001a4 rm 0x2738f0ff, rn 0x6a228b19, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000159 rm 0xfaceab39, rn 0x2973c051, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000017d rm 0xa3e6f759, rn 0x557c7ba2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000020d rm 0x72f33509, rn 0x9b41bfb1, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001f2 rm 0xa5ec1aa8, rn 0x2b62ba5a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000010b rm 0x6ebd04d9, rn 0x55ea3e4e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000165 rm 0x2eaea305, rn 0xe79fd570, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001dc rm 0x22b65db1, rn 0xcdb7ed11, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000019e rm 0x776c41c7, rn 0x2eb68500, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000148 rm 0xe50dd77c, rn 0xd6f9a698, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001e2 rm 0x0be36f70, rn 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000ce rm 0xebbff82b, rn 0xd759eb72, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000012e rm 0x50c28082, rn 0xd9c4b1f4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000187 rm 0x17962e8f, rn 0xa29eb320, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000008f rm 0xc57243b7, rn 0xcf1e4487, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000247 rm 0x7eb226ac, rn 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001db rm 0xbce0f026, rn 0xbb151055, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000c3 rm 0xa5757252, rn 0x957440d2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000eb rm 0xf4a477c1, rn 0x728b7771, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000019d rm 0x76723a21, rn 0xf13c20f3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000187 rm 0x74d01105, rn 0x86398371, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000270 rm 0xc1273e2c, rn 0x03d0fb78, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000094 rm 0xdd9b7653, rn 0xd0d49b7c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001ac rm 0xdde62fd1, rn 0x76354a58, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000b1 rm 0xc3fb4a96, rn 0x9fa45fb7, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000019f rm 0xa1a10f56, rn 0x7572bdec, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000014d rm 0x4b7d4fd9, rn 0xfea59eb6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000169 rm 0x9d0ddffc, rn 0xf2669090, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000fd rm 0x4f82d17c, rn 0xbc1ff573, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000b9 rm 0x08215ca2, rn 0x345f67e6, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000014b rm 0xf23595d0, rn 0x3f39d77e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000002f rm 0xf244c158, rn 0xfb2db55b, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000009d rm 0x256bfdd6, rn 0x13aebedf, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000b7 rm 0xc02a0c05, rn 0x5b013000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000a4 rm 0xee2fa46e, rn 0xed95b542, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000018f rm 0x97a7da20, rn 0x60bb5ee8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001b5 rm 0xa231d5e6, rn 0xd9000a64, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000109 rm 0x10e1968a, rn 0x624f9467, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001c1 rm 0x0e089270, rn 0xa8c64d94, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000df rm 0x9e8e0185, rn 0x6b4f637a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000010c rm 0x3096f12e, rn 0x11f5f4b9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000033d rm 0xffc134df, rn 0x0b02eb0c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000d8 rm 0xe444dc25, rn 0xd5eef620, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000001c2 rm 0x06ea9b2a, rn 0xa2108661, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x000000e9 rm 0x448f3a5f, rn 0x17aecf57, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x0000019d rm 0x4b0c2337, rn 0xffa63d6c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000263 rm 0xf91d5f56, rn 0x088bc0f9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usad8 r0, r1, r2 :: rd 0x00000178 rm 0xf808434e, rn 0xefeab836, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+----------------- USADA8 ----------------- 
+usada8  r0, r1, r2, r3 :: rd 0x00000000 rm 0x80008000, rn 0x80008000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x000002fc rm 0x7fff7fff, rn 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x000002fb rm 0x7fff7fff, rn 0x00010001 rs 0x00000001, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x0000031b rm 0x80008000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x000000e2 rm 0x00640064, rn 0x00030003 rs 0x00000020, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x000002ff rm 0xffffffff, rn 0xfffc0001 rs 0x000000ff, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x000003fe rm 0xfff70fff, rn 0x00030003 rs 0x00000100, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x5f986f9f rm 0xb8035b5b, rn 0xce0ce1ed rs 0x5f986e68, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xaae34485 rm 0x35232047, rn 0x146275d8 rs 0xaae3433f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x2c07a752 rm 0xe7aa57b4, rn 0x1584bd74 rs 0x2c07a5b4, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x89d2f028 rm 0x32fa0095, rn 0x36f26261 rs 0x89d2ef86, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xd4b64e72 rm 0x8ed8287c, rn 0x02c90120 rs 0xd4b64d54, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x0b02c745 rm 0xc53aaba9, rn 0x29300837 rs 0x0b02c58a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xb0d20909 rm 0x216158cb, rn 0x57a50a01 rs 0xb0d20777, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x7e376337 rm 0x3e2e1bd7, rn 0x3cd6cd94 rs 0x7e376198, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xd5dc54cd rm 0xd5fe2dc4, rn 0xdd914bf7 rs 0xd5dc5407, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xf2b649b5 rm 0xf87b961e, rn 0x1d66879f rs 0xf2b64835, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xae930b31 rm 0xd65db979, rn 0xc61b323b rs 0xae930a1a, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x2fb715ac rm 0x5ef1f1a8, rn 0xbf73f0a5 rs 0x2fb714c9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xa3268ca5 rm 0x1ffe53d9, rn 0x815bb75b rs 0xa3268abe, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xef9ea125 rm 0xed2cbf78, rn 0xc6ffabb6 rs 0xef9e9fd9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x3dba12a8 rm 0xeaa652c7, rn 0x137741f4 rs 0x3dba1164, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xdba5be64 rm 0x3ada0280, rn 0x71fbde8b rs 0xdba5bd25, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x884c0c0b rm 0xda4ba05b, rn 0x90f9833d rs 0x884c0ad8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x9a4ff36e rm 0xc00b821a, rn 0x7fa1d5a6 rs 0x9a4ff1b8, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x81616ede rm 0xe1bb8606, rn 0x58293969 rs 0x81616d13, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x6077fcbf rm 0x51f31d95, rn 0xa3cfd624 rs 0x6077fb1f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x40b095c5 rm 0x0849a0c2, rn 0x0872f25a rs 0x40b094e2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x91edc3c5 rm 0x17913309, rn 0xf1e03d7e rs 0x91edc21d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x60340920 rm 0x5388b5cd, rn 0x86582032 rs 0x6034078d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xccfa1dcc rm 0x181c436b, rn 0x5de41558 rs 0xccfa1c7e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x48d06674 rm 0x23ba1b46, rn 0x4437983c rs 0x48d06549, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xb2aeae68 rm 0xa9085781, rn 0xc6b4ac58 rs 0xb2aead21, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x852e3acd rm 0xc2bdf597, rn 0xdde1e6a4 rs 0x852e3a72, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xe7b880b6 rm 0x157b0dea, rn 0xf0d5ff94 rs 0xe7b87e39, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x0557c7bf rm 0x3edad6b6, rn 0x82aceb7a rs 0x0557c6fc, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x81874b24 rm 0x6cc9bfa8, rn 0x7f808c15 rs 0x81874a02, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x3ccad57b rm 0x6b1422c7, rn 0x33921b00 rs 0x3ccad3f7, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x85fbf300 rm 0xd7ce1909, rn 0x3e435701 rs 0x85fbf196, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x89437103 rm 0xb4e16b6e, rn 0x6e13680a rs 0x89436f88, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x390d2df8 rm 0x44858efc, rn 0x9002bc30 rs 0x390d2c2f, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x80657de1 rm 0xbea121ab, rn 0x953ff6ec rs 0x80657c40, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x11bd091b rm 0x6ffed89f, rn 0x3e8c49b7 rs 0x11bd07d1, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xe4999ce3 rm 0x7795635d, rn 0x5e6e32dd rs 0xe4999bf2, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x23134a53 rm 0xec0c2f30, rn 0x5736ed46 rs 0x231348c0, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x5765b35d rm 0x4f9ddd1b, rn 0x95bca5d8 rs 0x5765b203, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x69ec0392 rm 0xc1553709, rn 0x0112b30a rs 0x69ec0212, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x899d936b rm 0x74bd0223, rn 0x03fa9bb5 rs 0x899d9192, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x7fcbe728 rm 0xf52e9fbf, rn 0xb4c510a7 rs 0x7fcbe5a9, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xf7b0b27d rm 0x64a365ef, rn 0x2dd01366 rs 0xf7b0b13e, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x464a22cf rm 0x5e4b1cbf, rn 0x44de5ca9 rs 0x464a21cc, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xf5818eb6 rm 0x299da970, rn 0xe8108f1b rs 0xf5818cfb, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x8217b8b6 rm 0xcd90d604, rn 0xaa5e9444 rs 0x8217b7df, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x73c291ba rm 0xe60743c3, rn 0x7acb4de3 rs 0x73c29060, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x1d133df3 rm 0x868e7c7d, rn 0x5f77532e rs 0x1d133d3d, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0x21ba3032 rm 0x4e5e0760, rn 0x8f6d3264 rs 0x21ba2fb3, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xeda512a7 rm 0xde99ac2f, rn 0x0be36f70 rs 0xeda5110c, carryin 0, cpsr 0x00000000       ge[3:0]=0000
+usada8  r0, r1, r2, r3 :: rd 0xf20fb99e rm 0xc57243b7, rn 0xcf1e4487 rs 0xf20fb90f, carryin 0, cpsr 0x00000000       ge[3:0]=0000