* cgen.c (cgen_parse_operand): Renamed from cgen_asm_parse_operand.
authorDavid Edelsohn <dje.gcc@gmail.com>
Thu, 10 Apr 1997 23:40:30 +0000 (23:40 +0000)
committerDavid Edelsohn <dje.gcc@gmail.com>
Thu, 10 Apr 1997 23:40:30 +0000 (23:40 +0000)
New argument `want'.  Update enum cgen_parse_operand_result values.
Initialize if CGEN_PARSE_OPERAND_INIT.
* config/tc-m32r.c (md_begin): Set cgen_parse_operand_fn.
(md_assemble): Call cgen_asm_init_parse.
Update call to m32r_cgen_assemble_insn, call as_bad if assembly failed.

gas/ChangeLog
gas/cgen.c

index 880e9a56c333b67a545fdcf02acd3bd8ae6f9082..4b496233caa8005958d8a499ff909ae71040d928 100644 (file)
@@ -1,6 +1,9 @@
 Thu Apr 10 14:40:00 1997  Doug Evans  <dje@canuck.cygnus.com>
 
-       * config/tc-m32r.c (md_begin): Set cgen_asm_parse_operand_fn.
+       * cgen.c (cgen_parse_operand): Renamed from cgen_asm_parse_operand.
+       New argument `want'.  Update enum cgen_parse_operand_result values.
+       Initialize if CGEN_PARSE_OPERAND_INIT.
+       * config/tc-m32r.c (md_begin): Set cgen_parse_operand_fn.
        (md_assemble): Call cgen_asm_init_parse.
        Update call to m32r_cgen_assemble_insn, call as_bad if assembly failed.
 
index 355268faa9dc2b73f60106a0b494a2052dcde106..3ed8d99b9898b3636d53ad824c24f76c7825210f 100644 (file)
@@ -61,6 +61,9 @@ struct fixup
 static struct fixup fixups[MAX_FIXUPS];
 static int num_fixups;
 
+/* Prepare to parse an instruction.
+   ??? May wish to make this static and delete calls in md_assemble.  */
+
 void
 cgen_asm_init_parse ()
 {
@@ -161,50 +164,63 @@ cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp)
 /* Callback for cgen interface.  Parse the expression at *STRP.
    The result is an error message or NULL for success (in which case
    *STRP is advanced past the parsed text).
-   An enum cgen_asm_result is stored in RESULTP.
+   WANT is an indication of what the caller is looking for.
+   If WANT == CGEN_ASM_PARSE_INIT the caller is beginning to try to match
+   a table entry with the insn, reset the queued fixups counter.
+   An enum cgen_parse_operand_result is stored in RESULTP.
+   OPINDEX is the operand's table entry index.
    OPINFO is something the caller chooses to help in reloc determination.
    The resulting value is stored in VALUEP.  */
 
 const char *
-cgen_asm_parse_operand (strP, opindex, opinfo, resultP, valueP)
+cgen_parse_operand (want, strP, opindex, opinfo, resultP, valueP)
+     enum cgen_parse_operand_type want;
      const char **strP;
      int opindex;
      int opinfo;
-     enum cgen_asm_result *resultP;
+     enum cgen_parse_operand_result *resultP;
      bfd_vma *valueP;
 {
   char *hold;
   const char *errmsg = NULL;
   expressionS exp;
 
+  if (want == CGEN_PARSE_OPERAND_INIT)
+    {
+      cgen_asm_init_parse ();
+      return NULL;
+    }
+
   hold = input_line_pointer;
   input_line_pointer = (char *) *strP;
   expression (&exp);
   *strP = input_line_pointer;
   input_line_pointer = hold;
 
+  /* FIXME: Need to check `want'.  */
+
   switch (exp.X_op)
     {
     case O_illegal :
       errmsg = "illegal operand";
-      *resultP = CGEN_ASM_ERROR;
+      *resultP = CGEN_PARSE_OPERAND_RESULT_ERROR;
       break;
     case O_absent :
       errmsg = "missing operand";
-      *resultP = CGEN_ASM_ERROR;
+      *resultP = CGEN_PARSE_OPERAND_RESULT_ERROR;
       break;
     case O_constant :
       *valueP = exp.X_add_number;
-      *resultP = CGEN_ASM_NUMBER;
+      *resultP = CGEN_PARSE_OPERAND_RESULT_NUMBER;
       break;
     case O_register :
       *valueP = exp.X_add_number;
-      *resultP = CGEN_ASM_REGISTER;
+      *resultP = CGEN_PARSE_OPERAND_RESULT_REGISTER;
       break;
     default :
       cgen_queue_fixup (opindex, opinfo, &exp);
       *valueP = 0;
-      *resultP = CGEN_ASM_QUEUED;
+      *resultP = CGEN_PARSE_OPERAND_RESULT_QUEUED;
       break;
     }