* config/tc-xtensa.c (xtensa_extui_opcode): New.
authorBob Wilson <bob.wilson@acm.org>
Wed, 25 Jul 2007 17:33:27 +0000 (17:33 +0000)
committerBob Wilson <bob.wilson@acm.org>
Wed, 25 Jul 2007 17:33:27 +0000 (17:33 +0000)
        (xg_expand_assembly_insn): Check for invalid extui operands.
        (md_begin): Initialize xtensa_extui_opcode.

gas/ChangeLog
gas/config/tc-xtensa.c

index 72439ba122a565aba70d50138973199527a72a31..a4e2bb7282cefae86ae7390166a25fed1f39fd04 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-25  Sterling Augustine  <sterling@tensilica.com>
+
+       * config/tc-xtensa.c (xtensa_extui_opcode): New.
+       (xg_expand_assembly_insn): Check for invalid extui operands.
+       (md_begin): Initialize xtensa_extui_opcode.
+
 2007-07-24  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-mep.h (skip_whitespace): Remove definition.
index d4eb7f4a979f6ec3ed44678633cffab739827bbf..aef5fc9702c3d8f5442ea9e9df73bfd42186a238 100644 (file)
@@ -553,6 +553,7 @@ static xtensa_opcode xtensa_callx8_opcode;
 static xtensa_opcode xtensa_callx12_opcode;
 static xtensa_opcode xtensa_const16_opcode;
 static xtensa_opcode xtensa_entry_opcode;
+static xtensa_opcode xtensa_extui_opcode;
 static xtensa_opcode xtensa_movi_opcode;
 static xtensa_opcode xtensa_movi_n_opcode;
 static xtensa_opcode xtensa_isync_opcode;
@@ -3888,6 +3889,20 @@ xg_expand_assembly_insn (IStack *istack, TInsn *orig_insn)
   if (tinsn_has_invalid_symbolic_operands (orig_insn))
     return TRUE;
 
+  /* Special case for extui opcode which has constraints not handled
+     by the ordinary operand encoding checks.  The number of operands
+     and related syntax issues have already been checked.  */
+  if (orig_insn->opcode == xtensa_extui_opcode)
+    {
+      int shiftimm = orig_insn->tok[2].X_add_number;
+      int maskimm = orig_insn->tok[3].X_add_number;
+      if (shiftimm + maskimm > 32)
+       {
+         as_bad (_("immediate operands sum to greater than 32"));
+         return TRUE;
+       }
+    }
+
   /* If the instruction will definitely need to be relaxed, it is better
      to expand it now for better scheduling.  Decide whether to expand
      now....  */
@@ -5012,6 +5027,7 @@ md_begin (void)
   xtensa_callx12_opcode = xtensa_opcode_lookup (isa, "callx12");
   xtensa_const16_opcode = xtensa_opcode_lookup (isa, "const16");
   xtensa_entry_opcode = xtensa_opcode_lookup (isa, "entry");
+  xtensa_extui_opcode = xtensa_opcode_lookup (isa, "extui");
   xtensa_movi_opcode = xtensa_opcode_lookup (isa, "movi");
   xtensa_movi_n_opcode = xtensa_opcode_lookup (isa, "movi.n");
   xtensa_isync_opcode = xtensa_opcode_lookup (isa, "isync");