-1999-10-25 Nick Clifton <nickc@cygnus.com>
-
- * config/tc-mcore.c (parse_psrmod): New function: Parse the psr
- flag specifiers of a psrclr/psrset instruction.
- (md_assemble): Parse instructions of class OPSR.
-
Mon Oct 18 18:11:10 MDT 1999 Diego Novillo <dnovillo@cygnus.com>
* tc_d10v.c (find_opcode): Allow ATSIGN to match expressions of the
static char * parse_rt PARAMS ((char *, char **, int, expressionS *));
static char * parse_imm PARAMS ((char *, unsigned *, unsigned, unsigned));
static char * parse_mem PARAMS ((char *, unsigned *, unsigned *, unsigned));
-static char * parse_psrmod PARAMS ((char *, unsigned *));
static void make_name PARAMS ((char *, char *, int));
static int enter_literal PARAMS ((expressionS *, int));
static void dump_literals PARAMS ((int));
return s;
}
-static char *
-parse_psrmod (s, reg)
- char * s;
- unsigned * reg;
-{
- int i;
- char buf[10];
- static struct psrmods
- {
- char * name;
- unsigned int value;
- }
- psrmods[] =
- {
- { "ie", 1 },
- { "fe", 2 },
- { "ee", 4 },
- { "af", 8 } /* really 0 and non-combinable */
- };
-
- for (i = 0; i < 2; i++)
- buf[i] = isascii (s[i]) ? tolower (s[i]) : 0;
-
- for (i = sizeof (psrmods) / sizeof (psrmods[0]); i--;)
- {
- if (! strncmp (psrmods[i].name, buf, 2))
- {
- * reg = psrmods[i].value;
-
- return s + 2;
- }
- }
-
- as_bad (_("bad/missing psr specifier"));
-
- * reg = 0;
-
- return s;
-}
-
static char *
parse_exp (s, e)
char * s;
output = frag_more (2);
break;
- case OPSR:
- op_end = parse_psrmod (op_end + 1, & reg);
-
- /* Look for further selectors. */
- while (* op_end == ',')
- {
- unsigned value;
-
- op_end = parse_psrmod (op_end + 1, & value);
-
- if (value & reg)
- as_bad (_("duplicated psr bit specifier"));
-
- reg |= value;
- }
-
- if (reg > 8)
- as_bad (_("`af' must appear alone"));
-
- inst |= (reg & 0x7);
- output = frag_more (2);
- break;
-
default:
as_bad (_("unimplemented opcode \"%s\""), name);
}
-1999-10-25 Nick Clifton <nickc@cygnus.com>
-
- * mcore-opc.h (enum mcore_opclass): Add class OPSR.
- (mcore_table): Add psrclr and psrset instructions.
-
- * mcore-dis.c (array imsk): Add mask for OPSR class.
- (print_insn_mcore): Add decode for OPSR class insns.
-
1999-10-18 Michael Meissner <meissner@cygnus.com>
* alpha-opc.c (alpha_operands): Fill in missing initializer.
/* OMc */ 0xFF00,
/* SIa */ 0xFE00,
- /* OPSR */ 0xFFF8, /* psrset/psrclr */
-
/* JC */ 0, /* JC,JU,JL don't appear in object */
/* JU */ 0,
/* JL */ 0,
}
break;
- case OPSR:
- {
- static char * fields[] =
- {
- "af", "ie", "fe", "fe,ie",
- "ee", "ee,ie", "ee,fe", "ee,fe,ie"
- };
-
- fprintf (stream, "\t%s", fields[inst & 0x7]);
- }
- break;
-
default:
/* if the disassembler lags the instruction set */
fprintf (stream, "\tundecoded operands, inst is 0x%04x", inst);
O0, OT, O1, OC, O2, X1, OI, OB,
OMa, SI, I7, LS, BR, BL, LR, LJ,
RM, RQ, JSR, JMP, OBRa, OBRb, OBRc, OBR2,
- O1R1, OMb, OMc, SIa, OPSR,
+ O1R1, OMb, OMc, SIa,
JC, JU, JL, RSI, DO21, OB2
}
mcore_opclass;
{ "tst", O2, 0, 0x0E00 },
{ "cmpne", O2, 0, 0x0F00 },
{ "mfcr", OC, 0, 0x1000 },
- { "psrclr", OPSR, 0, 0x11F0 },
- { "psrset", OPSR, 0, 0x11F8 },
{ "mov", O2, 0, 0x1200 },
{ "bgenr", O2, 0, 0x1300 },
{ "rsub", O2, 0, 0x1400 },