Parcourir la source

Fix SWI as a pseudo instruction.
Add VFPv2/3 instruction entries for Thumb2.

git-svn-id: branches/laksen/armiw@29356 -

Jeppe Johansen il y a 10 ans
Parent
commit
49346b3041
4 fichiers modifiés avec 326 ajouts et 33 suppressions
  1. 12 8
      compiler/arm/aasmcpu.pas
  2. 46 9
      compiler/arm/armins.dat
  3. 1 1
      compiler/arm/armnop.inc
  4. 267 15
      compiler/arm/armtab.inc

+ 12 - 8
compiler/arm/aasmcpu.pas

@@ -1550,6 +1550,10 @@ implementation
                             taicpu(curtai).ops:=2;
                           end;
                       end;
+                    A_SWI:
+                      begin
+                        taicpu(curtai).opcode:=A_SVC;
+                      end;
                   end;
                 end;
             end;
@@ -2317,7 +2321,7 @@ implementation
           // stm,ldm
           #$26,#$69,#$8C,
           // vldm/vstm
-          #$44
+          #$44,#$94
         ]) then
         begin
           Matches:=0;
@@ -3583,7 +3587,7 @@ implementation
                     end;
                 end;
             end;
-          #$40: // VMOV
+          #$40,#$90: // VMOV
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -3706,7 +3710,7 @@ implementation
                   end;
               end;
             end;
-          #$41: // VMRS/VMSR
+          #$41,#$91: // VMRS/VMSR
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -3750,7 +3754,7 @@ implementation
                   bytes:=bytes or (getsupreg(oper[1]^.reg) shl 12);
                 end;
             end;
-          #$42: // VMUL
+          #$42,#$92: // VMUL
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -3800,7 +3804,7 @@ implementation
               bytes:=bytes or (N shl 7);
               bytes:=bytes or (M shl 5);
             end;
-          #$43: // VCVT
+          #$43,#$93: // VCVT
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -3962,7 +3966,7 @@ implementation
                   bytes:=bytes or ((rn and $1E) shr 1);
                 end;
             end;
-          #$44: // VLDM/VSTM/VPUSH/VPOP
+          #$44,#$94: // VLDM/VSTM/VPUSH/VPOP
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -4079,7 +4083,7 @@ implementation
                     end;
                 end;
             end;
-          #$45: // VLDR/VSTR
+          #$45,#$95: // VLDR/VSTR
             begin
               { set instruction code }
               bytes:=bytes or (ord(insentry^.code[1]) shl 24);
@@ -5040,7 +5044,7 @@ implementation
         end;
 
         { Todo: Decide whether the code above should take care of writing data in an order that makes senes }
-        if (insentry^.code[0] in [#$80..#$90]) and (bytelen=4) then
+        if (insentry^.code[0] in [#$80..#$95]) and (bytelen=4) then
           bytes:=((bytes shr 16) and $FFFF) or ((bytes and $FFFF) shl 16);
 
         { we're finished, write code }

+ 46 - 9
compiler/arm/armins.dat

@@ -401,14 +401,21 @@ reg32,reg32,shifterop  \xA\x1\xE0                       ARM32,ARMv4
 reg32,immshifter       \xB\x1\xE0                       ARM32,ARMv4
 
 [VMOVcc]
+vreg,vreg         \x90\xEE\xB0\xA\x40            THUMB32,VFPv2
 vreg,vreg         \x40\xE\xB0\xA\x40            ARM32,VFPv2
 
+reg32,vreg        \x90\xEE\x10\xA\x10            THUMB32,VFPv2
+vreg,reg32        \x90\xEE\x00\xA\x10            THUMB32,VFPv2
 reg32,vreg        \x40\xE\x10\xA\x10            ARM32,VFPv2
 vreg,reg32        \x40\xE\x00\xA\x10            ARM32,VFPv2
 
+reg32,reg32,vreg,vreg \x90\xEC\x50\xA\x10        THUMB32,VFPv2
+vreg,vreg,reg32,reg32 \x90\xEC\x40\xA\x10        THUMB32,VFPv2
 reg32,reg32,vreg,vreg \x40\xC\x50\xA\x10        ARM32,VFPv2
 vreg,vreg,reg32,reg32 \x40\xC\x40\xA\x10        ARM32,VFPv2
 
+reg32,reg32,vreg      \x90\xEC\x50\xB\x10        THUMB32,VFPv2
+vreg,reg32,reg32      \x90\xEC\x40\xB\x10        THUMB32,VFPv2
 reg32,reg32,vreg      \x40\xC\x50\xB\x10        ARM32,VFPv2
 vreg,reg32,reg32      \x40\xC\x40\xB\x10        ARM32,VFPv2
 
@@ -552,8 +559,7 @@ reg32,reg32,reg32           \x4\x0\x40                     ARM32,ARMv4
 reg32,reg32,reg32,shifterop \x6\x0\x40                     ARM32,ARMv4
 
 [SWIcc]
-imm                         \x2\x0F                        ARM32,ARMv4
-immshifter                  \x2\x0F                        ARM32,ARMv4
+; Old alias for SVC
 
 [SWPcc]
 reg32,reg32,memam2          \x27\x10\x09                   ARM32,ARMv4
@@ -655,23 +661,31 @@ reg32,reg32,reg32,reg32    \x80\xFB\x30\x0\x10                 THUMB32,ARMv6T2
 reg32,reg32,reg32,reg32    \x15\x1\x20\xC                      ARM32,ARMv5TE
 
 [VLDMcc]
+memam4,reglist		      \x94\xEC\x10\xA		         THUMB32,VFPv2
+reg32,reglist		      \x94\xEC\x10\xA		         THUMB32,VFPv2
 memam4,reglist		      \x44\xC\x10\xA		         ARM32,VFPv2
 reg32,reglist		      \x44\xC\x10\xA		         ARM32,VFPv2
 
 [VSTMcc]
+memam4,reglist		      \x94\xEC\x00\xA		         THUMB32,VFPv2
+reg32,reglist		      \x94\xEC\x00\xA		         THUMB32,VFPv2
 memam4,reglist		      \x44\xC\x00\xA		         ARM32,VFPv2
 reg32,reglist		      \x44\xC\x00\xA		         ARM32,VFPv2
 
 [VPOP]
+reglist		            \x94\xEC\xBD\xA		         THUMB32,VFPv2
 reglist		            \x44\xC\xBD\xA		         ARM32,VFPv2
 
 [VPUSH]
+reglist		            \x94\xED\x2D\xA		         THUMB32,VFPv2
 reglist		            \x44\xD\x2D\xA		         ARM32,VFPv2
 
 [VLDRcc]
+vreg,memam2             \x95\xED\x10\xA             THUMB32,VFPv2
 vreg,memam2             \x45\xD\x10\xA             ARM32,VFPv2
 
 [VSTRcc]
+vreg,memam2             \x95\xED\x0\xA              THUMB32,VFPv2
 vreg,memam2             \x45\xD\x0\xA              ARM32,VFPv2
 
 [SMULBBcc]
@@ -1431,52 +1445,71 @@ reglo,memam2            \x68\xB9                   THUMB,ARMv6T2
 
 ; VFP
 [VABScc]
+vreg,vreg               \x92\xEE\xB0\xA\xC0         THUMB32,VFPv2
 vreg,vreg               \x42\xE\xB0\xA\xC0         ARM32,VFPv2
 
 [VADDcc]
+vreg,vreg,vreg          \x92\xEE\x30\xA\x0          THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x30\xA\x0          ARM32,VFPv2
 
 [VCMPcc]
+vreg,vreg               \x92\xEE\xB4\xA\x40         THUMB32,VFPv2
+vreg,immshifter         \x92\xEE\xB5\xA\x40         THUMB32,VFPv2
 vreg,vreg               \x42\xE\xB4\xA\x40         ARM32,VFPv2
 vreg,immshifter         \x42\xE\xB5\xA\x40         ARM32,VFPv2
 
 [VCMPEcc]
+vreg,vreg               \x92\xEE\xB4\xA\xC0         THUMB32,VFPv2
+vreg,immshifter         \x92\xEE\xB5\xA\xC0         THUMB32,VFPv2
 vreg,vreg               \x42\xE\xB4\xA\xC0         ARM32,VFPv2
 vreg,immshifter         \x42\xE\xB5\xA\xC0         ARM32,VFPv2
 
 [VCVTcc]
+vreg,vreg               \x93\xEE\xB8\xA\xC0         THUMB32,VFPv2
+vreg,vreg,immshifter    \x93\xEE\xBA\xA\x40         THUMB32,VFPv3
 vreg,vreg               \x43\xE\xB8\xA\xC0         ARM32,VFPv2
 vreg,vreg,immshifter    \x43\xE\xBA\xA\x40         ARM32,VFPv3
 
 [VCVTRcc]
+vreg,vreg               \x93\xEE\xB8\xA\x40         THUMB32,VFPv2
 vreg,vreg               \x43\xE\xB8\xA\x40         ARM32,VFPv2
 
 [VDIVcc]
+vreg,vreg,vreg          \x92\xEE\x80\xA\x0          THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x80\xA\x0          ARM32,VFPv2
 
 [VMRScc]
+reg32,regf              \x91\xEE\xF0\xA\x10         THUMB32,VFPv2
+regf,regf               \x91\xEE\xF0\xA\x10         THUMB32,VFPv2
 reg32,regf              \x41\xE\xF0\xA\x10         ARM32,VFPv2
 regf,regf               \x41\xE\xF0\xA\x10         ARM32,VFPv2
 
 [VMSRcc]
+regf,reg32              \x91\xEE\xE0\xA\x10         THUMB32,VFPv2
 regf,reg32              \x41\xE\xE0\xA\x10         ARM32,VFPv2
 
 [VMLAcc]
+vreg,vreg,vreg          \x92\xEE\x0\xA\x00          THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x0\xA\x00          ARM32,VFPv2
 
 [VMLScc]
+vreg,vreg,vreg          \x92\xEE\x0\xA\x40          THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x0\xA\x40          ARM32,VFPv2
 
 [VMULcc]
+vreg,vreg,vreg          \x92\xEE\x20\xA\x0          THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x20\xA\x0          ARM32,VFPv2
 
 [VNMLAcc]
+vreg,vreg,vreg          \x92\xEE\x10\xA\x40         THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x10\xA\x40         ARM32,VFPv2
 
 [VNMLScc]
+vreg,vreg,vreg          \x92\xEE\x10\xA\x00         THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x10\xA\x00         ARM32,VFPv2
 
 [VNMULcc]
+vreg,vreg,vreg          \x92\xEE\x20\xA\x40         THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x20\xA\x40         ARM32,VFPv2
 
 [VFMA]
@@ -1485,38 +1518,42 @@ vreg,vreg,vreg          \x42\xE\x20\xA\x40         ARM32,VFPv2
 [VFNMS]
 
 [VNEGcc]
+vreg,vreg               \x92\xEE\xB1\xA\x40         THUMB32,VFPv2
 vreg,vreg               \x42\xE\xB1\xA\x40         ARM32,VFPv2
 
 [VSQRT]
+vreg,vreg               \x92\xEE\xB1\xA\xC0         THUMB32,VFPv2
 vreg,vreg               \x42\xE\xB1\xA\xC0         ARM32,VFPv2
 
 [VSUB]
+vreg,vreg,vreg          \x92\xEE\x30\xA\x40         THUMB32,VFPv2
 vreg,vreg,vreg          \x42\xE\x30\xA\x40         ARM32,VFPv2
 
-[DMB]
+[DMBcc]
 immshifter        \x80\xF3\xBF\x8F\x50             THUMB32,ARMv7
 immshifter        \x2E\xF5\x7F\xF0\x50             ARM32,ARMv7
 
-[ISB]
+[ISBcc]
 immshifter        \x80\xF3\xBF\x8F\x60             THUMB32,ARMv7
 immshifter        \x2E\xF5\x7F\xF0\x60             ARM32,ARMv7
 
-[DSB]
+[DSBcc]
 immshifter        \x80\xF3\xBF\x8F\x40             THUMB32,ARMv7
 immshifter        \x2E\xF5\x7F\xF0\x40             ARM32,ARMv7
 
-[SMC]
+[SMCcc]
 immshifter        \x2E\x01\x60\x00\x70             ARM32,ARMv7
 imm32             \x2E\x01\x60\x00\x70             ARM32,ARMv7
 
 ; Thumb armv6-m (gcc)
-[NEG]
+[NEGcc]
 
-[SVC]
+[SVCcc]
 immshifter         \x61\xDF\x0                     THUMB,ARMv4T
+imm32              \x61\xDF\x0                     THUMB,ARMv4T
 
-imm32              \x2\x0F                         ARM32,ARMv4
 immshifter         \x2\x0F                         ARM32,ARMv4
+imm32              \x2\x0F                         ARM32,ARMv4
 
 [BXJcc]
 reg32              \x80\xF3\xC0\x8F\x0             THUMB32,ARMv6T2

+ 1 - 1
compiler/arm/armnop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from armins.dat }
-710;
+746;

+ 267 - 15
compiler/arm/armtab.inc

@@ -1295,6 +1295,13 @@
     code    : #11#1#224;
     flags   : if_arm32 or if_armv4
   ),
+  (
+    opcode  : A_VMOV;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #144#238#176#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMOV;
     ops     : 2;
@@ -1302,6 +1309,20 @@
     code    : #64#14#176#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMOV;
+    ops     : 2;
+    optypes : (ot_reg32,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #144#238#16#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VMOV;
+    ops     : 2;
+    optypes : (ot_vreg,ot_reg32,ot_none,ot_none,ot_none,ot_none);
+    code    : #144#238#0#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMOV;
     ops     : 2;
@@ -1316,6 +1337,20 @@
     code    : #64#14#0#10#16;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMOV;
+    ops     : 4;
+    optypes : (ot_reg32,ot_reg32,ot_vreg,ot_vreg,ot_none,ot_none);
+    code    : #144#236#80#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VMOV;
+    ops     : 4;
+    optypes : (ot_vreg,ot_vreg,ot_reg32,ot_reg32,ot_none,ot_none);
+    code    : #144#236#64#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMOV;
     ops     : 4;
@@ -1330,6 +1365,20 @@
     code    : #64#12#64#10#16;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMOV;
+    ops     : 3;
+    optypes : (ot_reg32,ot_reg32,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #144#236#80#11#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VMOV;
+    ops     : 3;
+    optypes : (ot_vreg,ot_reg32,ot_reg32,ot_none,ot_none,ot_none);
+    code    : #144#236#64#11#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMOV;
     ops     : 3;
@@ -1995,20 +2044,6 @@
     code    : #6#0#64;
     flags   : if_arm32 or if_armv4
   ),
-  (
-    opcode  : A_SWI;
-    ops     : 1;
-    optypes : (ot_immediate,ot_none,ot_none,ot_none,ot_none,ot_none);
-    code    : #2#15;
-    flags   : if_arm32 or if_armv4
-  ),
-  (
-    opcode  : A_SWI;
-    ops     : 1;
-    optypes : (ot_immediateshifter,ot_none,ot_none,ot_none,ot_none,ot_none);
-    code    : #2#15;
-    flags   : if_arm32 or if_armv4
-  ),
   (
     opcode  : A_SWP;
     ops     : 3;
@@ -2338,6 +2373,20 @@
     code    : #21#1#32#12;
     flags   : if_arm32 or if_armv5te
   ),
+  (
+    opcode  : A_VLDM;
+    ops     : 2;
+    optypes : (ot_memoryam4,ot_reglist,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#236#16#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VLDM;
+    ops     : 2;
+    optypes : (ot_reg32,ot_reglist,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#236#16#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VLDM;
     ops     : 2;
@@ -2352,6 +2401,20 @@
     code    : #68#12#16#10;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VSTM;
+    ops     : 2;
+    optypes : (ot_memoryam4,ot_reglist,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#236#0#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VSTM;
+    ops     : 2;
+    optypes : (ot_reg32,ot_reglist,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#236#0#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VSTM;
     ops     : 2;
@@ -2366,6 +2429,13 @@
     code    : #68#12#0#10;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VPOP;
+    ops     : 1;
+    optypes : (ot_reglist,ot_none,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#236#189#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VPOP;
     ops     : 1;
@@ -2373,6 +2443,13 @@
     code    : #68#12#189#10;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VPUSH;
+    ops     : 1;
+    optypes : (ot_reglist,ot_none,ot_none,ot_none,ot_none,ot_none);
+    code    : #148#237#45#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VPUSH;
     ops     : 1;
@@ -2380,6 +2457,13 @@
     code    : #68#13#45#10;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VLDR;
+    ops     : 2;
+    optypes : (ot_vreg,ot_memoryam2,ot_none,ot_none,ot_none,ot_none);
+    code    : #149#237#16#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VLDR;
     ops     : 2;
@@ -2387,6 +2471,13 @@
     code    : #69#13#16#10;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VSTR;
+    ops     : 2;
+    optypes : (ot_vreg,ot_memoryam2,ot_none,ot_none,ot_none,ot_none);
+    code    : #149#237#0#10;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VSTR;
     ops     : 2;
@@ -4711,6 +4802,13 @@
     code    : #104#185;
     flags   : if_thumb or if_armv6t2
   ),
+  (
+    opcode  : A_VABS;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#176#10#192;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VABS;
     ops     : 2;
@@ -4718,6 +4816,13 @@
     code    : #66#14#176#10#192;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VADD;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#48#10#0;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VADD;
     ops     : 3;
@@ -4725,6 +4830,20 @@
     code    : #66#14#48#10#0;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VCMP;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#180#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VCMP;
+    ops     : 2;
+    optypes : (ot_vreg,ot_immediateshifter,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#181#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VCMP;
     ops     : 2;
@@ -4739,6 +4858,20 @@
     code    : #66#14#181#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VCMPE;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#180#10#192;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VCMPE;
+    ops     : 2;
+    optypes : (ot_vreg,ot_immediateshifter,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#181#10#192;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VCMPE;
     ops     : 2;
@@ -4753,6 +4886,20 @@
     code    : #66#14#181#10#192;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VCVT;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #147#238#184#10#192;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VCVT;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_immediateshifter,ot_none,ot_none,ot_none);
+    code    : #147#238#186#10#64;
+    flags   : if_thumb32 or if_vfpv3
+  ),
   (
     opcode  : A_VCVT;
     ops     : 2;
@@ -4767,6 +4914,13 @@
     code    : #67#14#186#10#64;
     flags   : if_arm32 or if_vfpv3
   ),
+  (
+    opcode  : A_VCVTR;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #147#238#184#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VCVTR;
     ops     : 2;
@@ -4774,6 +4928,13 @@
     code    : #67#14#184#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VDIV;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#128#10#0;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VDIV;
     ops     : 3;
@@ -4781,6 +4942,20 @@
     code    : #66#14#128#10#0;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMRS;
+    ops     : 2;
+    optypes : (ot_reg32,ot_regf,ot_none,ot_none,ot_none,ot_none);
+    code    : #145#238#240#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
+  (
+    opcode  : A_VMRS;
+    ops     : 2;
+    optypes : (ot_regf,ot_regf,ot_none,ot_none,ot_none,ot_none);
+    code    : #145#238#240#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMRS;
     ops     : 2;
@@ -4795,6 +4970,13 @@
     code    : #65#14#240#10#16;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMSR;
+    ops     : 2;
+    optypes : (ot_regf,ot_reg32,ot_none,ot_none,ot_none,ot_none);
+    code    : #145#238#224#10#16;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMSR;
     ops     : 2;
@@ -4802,6 +4984,13 @@
     code    : #65#14#224#10#16;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMLA;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#0#10#0;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMLA;
     ops     : 3;
@@ -4809,6 +4998,13 @@
     code    : #66#14#0#10#0;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMLS;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#0#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMLS;
     ops     : 3;
@@ -4816,6 +5012,13 @@
     code    : #66#14#0#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VMUL;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#32#10#0;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VMUL;
     ops     : 3;
@@ -4823,6 +5026,13 @@
     code    : #66#14#32#10#0;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VNMLA;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#16#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VNMLA;
     ops     : 3;
@@ -4830,6 +5040,13 @@
     code    : #66#14#16#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VNMLS;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#16#10#0;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VNMLS;
     ops     : 3;
@@ -4837,6 +5054,13 @@
     code    : #66#14#16#10#0;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VNMUL;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#32#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VNMUL;
     ops     : 3;
@@ -4844,6 +5068,13 @@
     code    : #66#14#32#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VNEG;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#177#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VNEG;
     ops     : 2;
@@ -4851,6 +5082,13 @@
     code    : #66#14#177#10#64;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VSQRT;
+    ops     : 2;
+    optypes : (ot_vreg,ot_vreg,ot_none,ot_none,ot_none,ot_none);
+    code    : #146#238#177#10#192;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VSQRT;
     ops     : 2;
@@ -4858,6 +5096,13 @@
     code    : #66#14#177#10#192;
     flags   : if_arm32 or if_vfpv2
   ),
+  (
+    opcode  : A_VSUB;
+    ops     : 3;
+    optypes : (ot_vreg,ot_vreg,ot_vreg,ot_none,ot_none,ot_none);
+    code    : #146#238#48#10#64;
+    flags   : if_thumb32 or if_vfpv2
+  ),
   (
     opcode  : A_VSUB;
     ops     : 3;
@@ -4932,13 +5177,20 @@
     opcode  : A_SVC;
     ops     : 1;
     optypes : (ot_immediate or ot_bits32,ot_none,ot_none,ot_none,ot_none,ot_none);
+    code    : #97#223#0;
+    flags   : if_thumb or if_armv4t
+  ),
+  (
+    opcode  : A_SVC;
+    ops     : 1;
+    optypes : (ot_immediateshifter,ot_none,ot_none,ot_none,ot_none,ot_none);
     code    : #2#15;
     flags   : if_arm32 or if_armv4
   ),
   (
     opcode  : A_SVC;
     ops     : 1;
-    optypes : (ot_immediateshifter,ot_none,ot_none,ot_none,ot_none,ot_none);
+    optypes : (ot_immediate or ot_bits32,ot_none,ot_none,ot_none,ot_none,ot_none);
     code    : #2#15;
     flags   : if_arm32 or if_armv4
   ),