]> oss.titaniummirror.com Git - msp430-binutils.git/blobdiff - include/opcode/arm.h
Merge commit 'upstream/2.20'
[msp430-binutils.git] / include / opcode / arm.h
index 24a89cfcb1d13c4419b4338c663b54d2e27c2170..a639a8b041e61aab0a371bcb6b3a51975fa433c0 100644 (file)
@@ -44,6 +44,9 @@
 #define ARM_EXT_V7A     0x00100000     /* Arm V7A.                */
 #define ARM_EXT_V7R     0x00200000     /* Arm V7R.                */
 #define ARM_EXT_V7M     0x00400000     /* Arm V7M.                */
+#define ARM_EXT_V6M     0x00800000     /* ARM V6M.                 */
+#define ARM_EXT_BARRIER         0x01000000     /* DSB/DMB/ISB.             */
+#define ARM_EXT_THUMB_MSR 0x02000000   /* Thumb MSR/MRS.           */
 
 /* Co-processor space extensions.  */
 #define ARM_CEXT_XSCALE   0x00000001   /* Allow MIA etc.          */
@@ -61,6 +64,8 @@
 #define FPU_VFP_EXT_V2  0x02000000     /* ARM10E VFPr1.              */
 #define FPU_VFP_EXT_V3  0x01000000     /* VFPv3 insns.               */
 #define FPU_NEON_EXT_V1         0x00800000     /* Neon (SIMD) insns.         */
+#define FPU_VFP_EXT_D32  0x00400000    /* Registers D16-D31.         */
+#define FPU_NEON_FP16   0x00200000     /* Half-precision extensions. */
 
 /* Architectures are the sum of the base and extensions.  The ARM ARM (rev E)
    defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
 #define ARM_AEXT_V6K    (ARM_AEXT_V6    | ARM_EXT_V6K)
 #define ARM_AEXT_V6Z    (ARM_AEXT_V6    | ARM_EXT_V6Z)
 #define ARM_AEXT_V6ZK   (ARM_AEXT_V6    | ARM_EXT_V6K | ARM_EXT_V6Z)
-#define ARM_AEXT_V6T2   (ARM_AEXT_V6    | ARM_EXT_V6T2 | ARM_EXT_V6_NOTM)
+#define ARM_AEXT_V6T2   (ARM_AEXT_V6 \
+    | ARM_EXT_V6T2 | ARM_EXT_V6_NOTM | ARM_EXT_THUMB_MSR)
 #define ARM_AEXT_V6KT2  (ARM_AEXT_V6T2 | ARM_EXT_V6K)
 #define ARM_AEXT_V6ZT2  (ARM_AEXT_V6T2 | ARM_EXT_V6Z)
 #define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_V6Z)
-#define ARM_AEXT_V7_ARM        (ARM_AEXT_V6ZKT2 | ARM_EXT_V7)
+#define ARM_AEXT_V7_ARM        (ARM_AEXT_V6ZKT2 | ARM_EXT_V7 | ARM_EXT_BARRIER)
 #define ARM_AEXT_V7A   (ARM_AEXT_V7_ARM | ARM_EXT_V7A)
 #define ARM_AEXT_V7R   (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV)
 #define ARM_AEXT_NOTM \
   (ARM_AEXT_V4 | ARM_EXT_V5ExP | ARM_EXT_V5J | ARM_EXT_V6_NOTM)
+#define ARM_AEXT_V6M \
+  ((ARM_AEXT_V6K | ARM_EXT_BARRIER | ARM_EXT_V6M | ARM_EXT_THUMB_MSR) \
+   & ~(ARM_AEXT_NOTM))
 #define ARM_AEXT_V7M \
-  ((ARM_AEXT_V7_ARM | ARM_EXT_V7M | ARM_EXT_DIV) & ~(ARM_AEXT_NOTM))
+  ((ARM_AEXT_V7_ARM | ARM_EXT_V6M | ARM_EXT_V7M | ARM_EXT_DIV) \
+   & ~(ARM_AEXT_NOTM))
 #define ARM_AEXT_V7 (ARM_AEXT_V7A & ARM_AEXT_V7R & ARM_AEXT_V7M)
 
 /* Processors with specific extensions in the co-processor space.  */
 #define FPU_VFP_V1xD   (FPU_VFP_EXT_V1xD | FPU_ENDIAN_PURE)
 #define FPU_VFP_V1     (FPU_VFP_V1xD | FPU_VFP_EXT_V1)
 #define FPU_VFP_V2     (FPU_VFP_V1 | FPU_VFP_EXT_V2)
-#define FPU_VFP_V3     (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_V3D16  (FPU_VFP_V2 | FPU_VFP_EXT_V3)
+#define FPU_VFP_V3     (FPU_VFP_V3D16 | FPU_VFP_EXT_D32)
 #define FPU_VFP_HARD   (FPU_VFP_EXT_V1xD | FPU_VFP_EXT_V1 | FPU_VFP_EXT_V2 \
-                         | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1)
+                         | FPU_VFP_EXT_V3 | FPU_NEON_EXT_V1 | FPU_VFP_EXT_D32)
 #define FPU_FPA                (FPU_FPA_EXT_V1 | FPU_FPA_EXT_V2)
 
 /* Deprecated */
 #define FPU_ARCH_VFP_V1xD ARM_FEATURE (0, FPU_VFP_V1xD)
 #define FPU_ARCH_VFP_V1          ARM_FEATURE (0, FPU_VFP_V1)
 #define FPU_ARCH_VFP_V2          ARM_FEATURE (0, FPU_VFP_V2)
+#define FPU_ARCH_VFP_V3D16     ARM_FEATURE (0, FPU_VFP_V3D16)
 #define FPU_ARCH_VFP_V3          ARM_FEATURE (0, FPU_VFP_V3)
 #define FPU_ARCH_NEON_V1  ARM_FEATURE (0, FPU_NEON_EXT_V1)
 #define FPU_ARCH_VFP_V3_PLUS_NEON_V1 \
   ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1)
+#define FPU_ARCH_NEON_FP16 \
+  ARM_FEATURE (0, FPU_VFP_V3 | FPU_NEON_EXT_V1 | FPU_NEON_FP16)
 #define FPU_ARCH_VFP_HARD ARM_FEATURE (0, FPU_VFP_HARD)
 
 #define FPU_ARCH_ENDIAN_PURE ARM_FEATURE (0, FPU_ENDIAN_PURE)
 #define ARM_ARCH_V6KT2 ARM_FEATURE (ARM_AEXT_V6KT2, 0)
 #define ARM_ARCH_V6ZT2 ARM_FEATURE (ARM_AEXT_V6ZT2, 0)
 #define ARM_ARCH_V6ZKT2        ARM_FEATURE (ARM_AEXT_V6ZKT2, 0)
+#define ARM_ARCH_V6M   ARM_FEATURE (ARM_AEXT_V6M, 0)
 #define ARM_ARCH_V7    ARM_FEATURE (ARM_AEXT_V7, 0)
 #define ARM_ARCH_V7A   ARM_FEATURE (ARM_AEXT_V7A, 0)
 #define ARM_ARCH_V7R   ARM_FEATURE (ARM_AEXT_V7R, 0)