Fix .force_thumb
authorNick Clifton <nickc@redhat.com>
Mon, 29 Nov 1999 15:29:34 +0000 (15:29 +0000)
committerNick Clifton <nickc@redhat.com>
Mon, 29 Nov 1999 15:29:34 +0000 (15:29 +0000)
gas/ChangeLog
gas/config/tc-arm.c

index f08fd68..384aae8 100644 (file)
@@ -1,3 +1,10 @@
+1999-11-29  Nick Clifton  <nickc@cygnus.com>
+
+       * config/tc-arm.c (thumb_mode): Turn into a tristate variable.
+       (s_force_thumb): Set thumb_mode to 2.
+       (md_assemble): Do not complain about thumb instructions on a
+       non-thumb target if thumb_mode is set to 2.
+
 1999-11-28  Michael Meissner  <meissner@cygnus.com>
 
        * config/tc-alpha.c (toplevel): Include struc-symbol.h.
index fa61988..c6e2416 100644 (file)
@@ -139,10 +139,11 @@ CONST char FLT_CHARS[] = "rRsSfFdDxXeEpP";
 symbolS * GOT_symbol;          /* Pre-defined "_GLOBAL_OFFSET_TABLE_" */
 #endif
 
-CONST int md_reloc_size = 8;           /* Size of relocation record */
-
-static int thumb_mode = 0;      /* non-zero if assembling thumb instructions */
+CONST int md_reloc_size = 8;   /* Size of relocation record */
 
+static int thumb_mode = 0;      /* 0: assemble for ARM, 1: assemble for Thumb,
+                                  2: assemble for Thumb even though target cpu
+                                  does not support thumb instructions */
 typedef struct arm_fix
 {
   int thumb_mode;
@@ -1260,7 +1261,7 @@ s_force_thumb (ignore)
      
   if (! thumb_mode)
     {
-      thumb_mode = 1;
+      thumb_mode = 2;
       
       record_alignment (now_seg, 1);
     }
@@ -6068,7 +6069,7 @@ md_assemble (str)
       if (opcode)
        {
          /* Check that this instruction is supported for this CPU.  */
-         if ((opcode->variants & cpu_variant) == 0)
+         if (thumb_mode == 1 && (opcode->variants & cpu_variant) == 0)
             {
                as_bad (_("selected processor does not support this opcode"));
                return;