aboutsummaryrefslogtreecommitdiff
path: root/opcodes/m32r-asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes/m32r-asm.c')
-rw-r--r--opcodes/m32r-asm.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/opcodes/m32r-asm.c b/opcodes/m32r-asm.c
index 0d67c92..2d3bd96 100644
--- a/opcodes/m32r-asm.c
+++ b/opcodes/m32r-asm.c
@@ -222,6 +222,15 @@ m32r_cgen_parse_operand (cd, opindex, strp, fields)
switch (opindex)
{
+ case M32R_OPERAND_ACC :
+ errmsg = cgen_parse_keyword (cd, strp, & m32r_cgen_opval_h_accums, & fields->f_acc);
+ break;
+ case M32R_OPERAND_ACCD :
+ errmsg = cgen_parse_keyword (cd, strp, & m32r_cgen_opval_h_accums, & fields->f_accd);
+ break;
+ case M32R_OPERAND_ACCS :
+ errmsg = cgen_parse_keyword (cd, strp, & m32r_cgen_opval_h_accums, & fields->f_accs);
+ break;
case M32R_OPERAND_DCR :
errmsg = cgen_parse_keyword (cd, strp, & m32r_cgen_opval_cr_names, & fields->f_r1);
break;
@@ -255,6 +264,9 @@ m32r_cgen_parse_operand (cd, opindex, strp, fields)
case M32R_OPERAND_HI16 :
errmsg = parse_hi16 (cd, strp, M32R_OPERAND_HI16, &fields->f_hi16);
break;
+ case M32R_OPERAND_IMM1 :
+ errmsg = cgen_parse_unsigned_integer (cd, strp, M32R_OPERAND_IMM1, &fields->f_imm1);
+ break;
case M32R_OPERAND_SCR :
errmsg = cgen_parse_keyword (cd, strp, & m32r_cgen_opval_cr_names, & fields->f_r2);
break;
@@ -360,9 +372,14 @@ parse_insn_normal (cd, insn, strp, fields)
p = CGEN_INSN_MNEMONIC (insn);
while (*p && tolower (*p) == tolower (*str))
++p, ++str;
-
- if (* p || (* str && !isspace (* str)))
+
+ if (* p)
+ return _("unrecognized instruction");
+
+#ifndef CGEN_MNEMONIC_OPERANDS
+ if (* str && !isspace (* str))
return _("unrecognized instruction");
+#endif
CGEN_INIT_PARSE (cd);
cgen_init_parse_operand (cd);
@@ -385,6 +402,10 @@ parse_insn_normal (cd, insn, strp, fields)
/* Non operand chars must match exactly. */
if (CGEN_SYNTAX_CHAR_P (* syn))
{
+ /* FIXME: While we allow for non-GAS callers above, we assume the
+ first char after the mnemonic part is a space. */
+ /* FIXME: We also take inappropriate advantage of the fact that
+ GAS's input scrubber will remove extraneous blanks. */
if (*str == CGEN_SYNTAX_CHAR (* syn))
{
#ifdef CGEN_MNEMONIC_OPERANDS