compiled with GCC), or switch to macros, or use something else.
*/
+static const char * insert_normal
+ PARAMS ((long, unsigned int, int, int, int, char *));
static const char * parse_insn_normal
PARAMS ((const CGEN_INSN *, const char **, CGEN_FIELDS *));
static const char * insert_insn_normal
PARAMS ((const CGEN_INSN *, CGEN_FIELDS *, cgen_insn_t *));
\f
+/* -- assembler routines inserted here */
+\f
/* Default insertion routine.
ATTRS is a mask of the boolean attributes.
store insn in `field' struct and add registers, etc. while parsing? */
static const char *
-insert_normal (value, attrs, start, length, shift, total_length, buffer)
+insert_normal (value, attrs, start, length, total_length, buffer)
long value;
unsigned int attrs;
int start;
int length;
- int shift;
int total_length;
char * buffer;
{
bfd_vma x;
static char buf[100];
- if (shift < 0)
- value <<= -shift;
- else
- value >>= shift;
-
/* Ensure VALUE will fit. */
if ((attrs & (1 << CGEN_OPERAND_UNSIGNED)) != 0)
{
return NULL;
}
\f
-/* -- assembler routines inserted here */
-\f
/* Default insn parser.
The syntax string is scanned and operands are parsed and stored in FIELDS.
This routine is called for each instruction to be assembled.
STR points to the insn to be assembled.
We assume all necessary tables have been initialized.
+ The assembled instruction, less any fixups, is stored in buf.
+ [??? What byte order?]
The result is a pointer to the insn's entry in the opcode table,
or NULL if an error occured (an error message will have already been
- printed). */
+ printed).
+
+ Note that when processing (non-alias) macro-insns,
+ this function recurses. */
const CGEN_INSN *
@arch@_cgen_assemble_insn (str, fields, buf, errmsg)