From 49346b3041a8519c1e96e13d6fdd0b32f243dc78 Mon Sep 17 00:00:00 2001 From: Jeppe Johansen Date: Mon, 29 Dec 2014 11:34:34 +0000 Subject: [PATCH] Fix SWI as a pseudo instruction. Add VFPv2/3 instruction entries for Thumb2. git-svn-id: branches/laksen/armiw@29356 - --- compiler/arm/aasmcpu.pas | 20 +-- compiler/arm/armins.dat | 55 ++++++-- compiler/arm/armnop.inc | 2 +- compiler/arm/armtab.inc | 282 ++++++++++++++++++++++++++++++++++++--- 4 files changed, 326 insertions(+), 33 deletions(-) diff --git a/compiler/arm/aasmcpu.pas b/compiler/arm/aasmcpu.pas index 01cea455db..5a95c7e459 100644 --- a/compiler/arm/aasmcpu.pas +++ b/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 } diff --git a/compiler/arm/armins.dat b/compiler/arm/armins.dat index 41ec7e8f24..847e041520 100644 --- a/compiler/arm/armins.dat +++ b/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 diff --git a/compiler/arm/armnop.inc b/compiler/arm/armnop.inc index 9e2f2bebdf..10e24f7b56 100644 --- a/compiler/arm/armnop.inc +++ b/compiler/arm/armnop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from armins.dat } -710; +746; diff --git a/compiler/arm/armtab.inc b/compiler/arm/armtab.inc index 9d88263aaa..fb9d67ebba 100644 --- a/compiler/arm/armtab.inc +++ b/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 ),