diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2011-04-11 14:32:15 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2011-04-11 14:33:08 +0100 |
commit | 3a537db9e69a68e3ac040e3e4867d482eb9daa24 (patch) | |
tree | dc7043a5baf85119fae5bd1b1eb4cccaa21245c0 /arm.risu | |
parent | 709a348e6d4bce152acc0228c11b674948561abc (diff) |
arm.risu: Add patterns for Neon "3 regs different lengths" insns
Diffstat (limited to 'arm.risu')
-rw-r--r-- | arm.risu | 41 |
1 files changed, 23 insertions, 18 deletions
@@ -103,16 +103,6 @@ SSAT A1 cond:4 0110101 satimm:5 rd:4 imm:5 sh 0 1 rn:4 SSAT16 A1 cond:4 01101010 satimm:4 rd:4 1111 0011 rn:4 USAT16 A1 cond:4 01101110 satimm:4 rd:4 1111 0011 rn:4 -# VMLAL, VMLSL, VQDMLAL, VQDMLSL, VMULL, VQDMULL -# NB that enc A1 is actually VMLA/VMLS only, A2 is VMLAL/VMLSL only -VMLAL A2 1111 001 u 1 d sz:2 vn:4 vd:3 0 10 op 0 n 0 m 0 vm:4 { $sz != 3; } -# VQDMLAL and VQDMLSL (not scalar form) -VQDLAL A1 1111 0010 1 d sz:2 vn:4 vd:3 0 10 op 1 n 0 m 0 vm:4 { ($sz != 3) && ($sz != 0); } -# VMULL (excludes the polynomial case!) -VMULL A2 1111 001 u 1 d sz:2 vn:4 vd:3 0 11 0 0 n 0 m 0 vm:4 { ($sz != 3) && ($sz != 0); } -# VQDMULL (not scalar form) -VQDMULL A1 1111 0010 1 d sz:2 vn:4 vd:3 0 1101 n 0 m 0 vm:4 { ($sz != 3) && ($sz != 0); } - # Scalar forms, VMLAL, VMLSL, VQDMLAL, VQDMLSL, VMULL, VQDMULL # VMLAL/VMLSL scalar VMLAL_scalar A2 1111 001 u 1 d sz:2 vn:4 vd:3 0 0 op 1 0 n 1 m 0 vm:4 { ($sz != 3) && ($sz != 0); } @@ -123,14 +113,6 @@ VMULL_scalar A2 1111 001 u 1 d sz:2 vn:4 vd:3 0 1010 n 1 m 0 vm:4 { ($sz != 3) & # VQDMULL scalar VQDMULL_scalar A2 1111 0010 1 d sz:2 vn:4 vd:3 0 1011 n 1 m 0 vm:4 { ($sz != 3) && ($sz != 0); } -# Polynomial multiply -# A1: op == 1 (need size == 0 for not UNDEF); q = 0 case -VMULL_poly_a A1 1111 001 1 0 d 00 vn:4 vd:4 1001 n 0 m 1 vm:4 -# q = 1 case -VMULL_poly_b A1 1111 001 1 0 d 00 vn:3 0 vd:3 0 1001 n 1 m 1 vm:3 0 -# A2: op == 1 (need U == 0, size == 0 for not UNDEF) -VMULL_poly A2 1111 001 0 1 d 00 vn:4 vd:3 0 11 1 0 n 0 m 0 vm:4 - # Neon saturating add/sub # VQADD VQSUB # Q=1 case: @@ -721,3 +703,26 @@ VQRSHRN A1 1111 001 u 1 d imm:6 vd:4 100 op 0 1 m 1 vm:4 { ($imm & 0x38) != 0; # includes VMOVL where the shift amount is zero VSHLL A1 1111 001 u 1 d imm:6 vd:4 1010 0 0 m 1 vm:4 { ($imm & 0x38) != 0; } VCVT A1 1111 001 u 1 d imm:6 vd:4 111 op 0 q m 1 vm:4 { ($imm & 0x38) != 0; } + +########### Neon 3 regs different lengths ################# +# Instructions from the Neon "3 regs different lengths" +# space (table A7-10 in DDI0406B) +# UNDEF cases included. +# sz = 11 is in vext/vtbl/vtbx/vdup/2reg-misc space. +########################################################### +VADDL A1 1111 001 u 1 d sz:2 vn:4 vd:4 000 0 n 0 m 0 vm:4 { $sz != 3; } +VADDW A1 1111 001 u 1 d sz:2 vn:4 vd:4 000 1 n 0 m 0 vm:4 { $sz != 3; } +VSUBL A1 1111 001 u 1 d sz:2 vn:4 vd:4 001 0 n 0 m 0 vm:4 { $sz != 3; } +VSUBW A1 1111 001 u 1 d sz:2 vn:4 vd:4 001 1 n 0 m 0 vm:4 { $sz != 3; } +VADDHN A1 1111 0010 1 d sz:2 vn:4 vd:4 0100 n 0 m 0 vm:4 { $sz != 3; } +VRADDHN A1 1111 0011 1 d sz:2 vn:4 vd:4 0100 n 0 m 0 vm:4 { $sz != 3; } +VABAL A2 1111 001 u 1 d sz:2 vn:4 vd:4 0101 n 0 m 0 vm:4 { $sz != 3; } +VSUBHN A1 1111 0010 1 d sz:2 vn:4 vd:4 0110 n 0 m 0 vm:4 { $sz != 3; } +VRSUBHN A1 1111 0011 1 d sz:2 vn:4 vd:4 0110 n 0 m 0 vm:4 { $sz != 3; } +VABDL A2 1111 001 u 1 d sz:2 vn:4 vd:4 0111 n 0 m 0 vm:4 { $sz != 3; } +VMLAL A2 1111 001 u 1 d sz:2 vn:4 vd:4 10 0 0 n 0 m 0 vm:4 { $sz != 3; } +VMLSL A2 1111 001 u 1 d sz:2 vn:4 vd:4 10 1 0 n 0 m 0 vm:4 { $sz != 3; } +VQDMLAL A1 1111 0010 1 d sz:2 vn:4 vd:4 10 0 1 n 0 m 0 vm:4 { $sz != 3; } +VQDMLSL A1 1111 0010 1 d sz:2 vn:4 vd:4 10 1 1 n 0 m 0 vm:4 { $sz != 3; } +VMULL A2 1111 001 u 1 d sz:2 vn:4 vd:4 11 op 0 n 0 m 0 vm:4 { $sz != 3; } +VQDMULL A1 1111 0010 1 d sz:2 vn:4 vd:4 1101 n 0 m 0 vm:4 { $sz != 3; } |