* config/tc-d30v.c (do_assemble): Accept a new parameter requesting
authorRichard Henderson <rth@redhat.com>
Wed, 6 May 1998 18:56:08 +0000 (18:56 +0000)
committerRichard Henderson <rth@redhat.com>
Wed, 6 May 1998 18:56:08 +0000 (18:56 +0000)
a short format insn.
(md_assemble): Set it for explicitly packed insns.

PR 14601

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

index b3c8c6107675e44716070566db25a09384ed9417..dacc394682531928c9fa4ac8978dc964745fb396 100644 (file)
@@ -1,3 +1,14 @@
+Wed May  6 11:51:51 1998  Richard Henderson  <rth@cygnus.com>
+
+       * config/tc-d30v.c (do_assemble): Accept a new parameter requesting
+       a short format insn.
+       (md_assemble): Set it for explicitly packed insns.
+
+Tue May  5 13:23:13 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * config/obj-coff.c (c_symbol_merge): Do not take address of
+       native fields when performing the memcpy.
+
 Tue May  5 13:10:41 1998  Gavin Koch  <gavin@cygnus.com>
 
        * config/tc-mips.c (macro,macro2): Implement 
index 848144d7db87768024c43da4983771c2a1873472..6d5496fa1bf22678a98eeb7d6940f8357d4c4ab3 100644 (file)
@@ -102,7 +102,8 @@ static void write_long PARAMS ((struct d30v_insn *opcode, long long insn, Fixups
 static void write_1_short PARAMS ((struct d30v_insn *opcode, long long insn, Fixups *fx));
 static int write_2_short PARAMS ((struct d30v_insn *opcode1, long long insn1, 
                   struct d30v_insn *opcode2, long long insn2, exec_type_enum exec_type, Fixups *fx));
-static long long do_assemble PARAMS ((char *str, struct d30v_insn *opcode));
+static long long do_assemble PARAMS ((char *str, struct d30v_insn *opcode,
+                                     int shortp));
 static int parallel_ok PARAMS ((struct d30v_insn *opcode1, unsigned long insn1, 
                                struct d30v_insn *opcode2, unsigned long insn2,
                                exec_type_enum exec_type));
@@ -224,10 +225,10 @@ void
 md_show_usage (stream)
   FILE *stream;
 {
-  fprintf(stream, (_"\nD30V options:\n\
+  fprintf(stream, (_("\nD30V options:\n\
 -O                      Make adjacent short instructions parallel if possible.\n\
 -n                      Warn about all NOPs inserted by the assembler.\n\
--N                     Warn about NOPs inserted after word multiplies.\n"));
+-N                     Warn about NOPs inserted after word multiplies.\n")));
 } 
 
 int
@@ -1089,7 +1090,7 @@ md_assemble (str)
          d30v_cleanup();
          
          /* assemble first instruction and save it */
-         prev_insn = do_assemble (str, &prev_opcode);
+         prev_insn = do_assemble (str, &prev_opcode, 1);
          if (prev_insn == -1)
            as_fatal (_("cannot assemble instruction "));
          if (prev_opcode.form->form >= LONG)
@@ -1099,10 +1100,11 @@ md_assemble (str)
        }
     }
 
-  insn = do_assemble (str, &opcode);
+  insn = do_assemble (str, &opcode,
+                     (extype != EXEC_UNKNOWN || etype != EXEC_UNKNOWN));
   if (insn == -1)
     {
-      if (extype)
+      if (extype != EXEC_UNKNOWN)
        {
          etype = extype;
          return;
@@ -1110,10 +1112,10 @@ md_assemble (str)
       as_fatal (_("cannot assemble instruction "));
     }
 
-  if (etype)
+  if (etype != EXEC_UNKNOWN)
     {
       extype = etype;
-      etype = 0;
+      etype = EXEC_UNKNOWN;
     }
 
   /* Word multiply instructions must not be followed by either a load or a
@@ -1191,14 +1193,15 @@ md_assemble (str)
 /* it returns -1 (an invalid opcode) on error */
 
 static long long
-do_assemble (str, opcode) 
+do_assemble (str, opcode, shortp
      char *str;
      struct d30v_insn *opcode;
+     int shortp;
 {
   unsigned char *op_start, *save;
   unsigned char *op_end;
   char name[20];
-  int cmp_hack, nlen = 0, fsize = 0;
+  int cmp_hack, nlen = 0, fsize = (shortp ? FORCE_SHORT : 0);
   expressionS myops[6];
   long long insn;