(UNIQUE_LABEL_PREFIX): New macro.
authorDoug Evans <dje@google.com>
Tue, 24 Feb 1998 22:08:40 +0000 (22:08 +0000)
committerDoug Evans <dje@google.com>
Tue, 24 Feb 1998 22:08:40 +0000 (22:08 +0000)
(unique_label): Use it.
(assemble_gif): Emit start label before mach label.
(s_endgif): Update.

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

index 208a2829008aec88c9a66312dfccdf2171120c88..232cdc4b519b5e4cccd3021edfc80d90f326600b 100644 (file)
@@ -6,6 +6,10 @@ Tue Feb 24 11:01:25 1998  Doug Evans  <devans@canuck.cygnus.com>
        (create_colon_label): New argument `sto'.  All callers updated.
        (record_mach): New argument `force_next_p'.  All callers updated.
        (cpu_sto): New function.
+       (UNIQUE_LABEL_PREFIX): New macro.
+       (unique_label): Use it.
+       (assemble_gif): Emit start label before mach label.
+       (s_endgif): Update.
 
 Mon Feb 23 15:55:12 1998  Doug Evans  <devans@canuck.cygnus.com>
 
index d58c8d820b0d8ef3242854766744144db6c8e785..fa5dacc3554fb8db06eee4e59d3e51bdd9b11ad2 100644 (file)
@@ -42,6 +42,8 @@
 #define LOCAL_LABEL_PREFIX ".L"
 /* Label prefix for end markers used in autocounts.  */
 #define END_LABEL_PREFIX ".L.end."
+/* Label to use for unique labels.  */
+#define UNIQUE_LABEL_PREFIX ".L.dvptmp."
 
 static long parse_float PARAMS ((char **, const char **));
 static symbolS * create_label PARAMS ((const char *, const char *));
@@ -566,16 +568,20 @@ assemble_gif (str)
   frag_align (4, 0, 0);
   record_alignment (now_seg, 4);
 
+  /* Insert a label so we can compute the number of quadwords when the
+     .endgif is seen.  This is put before the mach type label because gif
+     insns are followed by data and we don't want the disassembler to try
+     to disassemble them as mips insns (since it uses the st_other field)
+     of the closest label to choose the mach type and since we don't have
+     a special st_other value for "data".  */
+  gif_data_name = S_GET_NAME (create_colon_label (0, "", unique_name (NULL)));
+
   record_mach (DVP_GIF, 1);
 
   gif_insn_frag = f = frag_more (16);
   for (i = 0; i < 4; ++i)
     md_number_to_chars (f + i * 4, insn_buf[i], 4);
 
-  /* Insert a label so we can compute the number of quadwords when the
-     .endgif is seen.  */
-  gif_data_name = S_GET_NAME (create_colon_label (0, "", unique_name (NULL)));
-
   /* Record the type of the gif tag so we know how to compute nloop
      in s_endgif.  */
   if (strcmp (opcode->mnemonic, "gifpacked") == 0)
@@ -1556,7 +1562,7 @@ unique_name (prefix)
   char *result;
 
   if (prefix == NULL)
-    prefix = "dvptmp";
+    prefix = UNIQUE_LABEL_PREFIX;
   asprintf (&result, "%s%d", prefix, counter);
   ++counter;
   return result;
@@ -2100,10 +2106,12 @@ s_endgif (ignore)
     }
   pop_asm_state (0);
 
+  /* The -16 is because the `gif_data_name' label is emitted at the start
+     of the gif tag.  */
   if (gif_insn_type == GIF_PACKED)
-    count = eval_expr (0, 0, "(. - %s) >> 4", gif_data_name);
+    count = eval_expr (0, 0, "(. - %s - 16) >> 4", gif_data_name);
   else
-    count = eval_expr (0, 0, "(. - %s) >> 3", gif_data_name);
+    count = eval_expr (0, 0, "(. - %s - 16) >> 3", gif_data_name);
 
   if (count < 0
       || fixup_count != 0)