+Wed May 6 11:51:51 1998 Richard Henderson <rth@cygnus.com>
+
+ * config/tc-d30v.c (do_assemble): Accept a new parameter requesting
+ a short format insn.
+ (md_assemble): Set it for explicitly packed insns.
+
+Tue May 5 13:23:13 1998 Nick Clifton <nickc@cygnus.com>
+
+ * config/obj-coff.c (c_symbol_merge): Do not take address of
+ native fields when performing the memcpy.
+
Tue May 5 13:10:41 1998 Gavin Koch <gavin@cygnus.com>
* config/tc-mips.c (macro,macro2): Implement
static void write_1_short PARAMS ((struct d30v_insn *opcode, long long insn, Fixups *fx));
static int write_2_short PARAMS ((struct d30v_insn *opcode1, long long insn1,
struct d30v_insn *opcode2, long long insn2, exec_type_enum exec_type, Fixups *fx));
-static long long do_assemble PARAMS ((char *str, struct d30v_insn *opcode));
+static long long do_assemble PARAMS ((char *str, struct d30v_insn *opcode,
+ int shortp));
static int parallel_ok PARAMS ((struct d30v_insn *opcode1, unsigned long insn1,
struct d30v_insn *opcode2, unsigned long insn2,
exec_type_enum exec_type));
md_show_usage (stream)
FILE *stream;
{
- fprintf(stream, (_"\nD30V options:\n\
+ fprintf(stream, (_("\nD30V options:\n\
-O Make adjacent short instructions parallel if possible.\n\
-n Warn about all NOPs inserted by the assembler.\n\
--N Warn about NOPs inserted after word multiplies.\n"));
+-N Warn about NOPs inserted after word multiplies.\n")));
}
int
d30v_cleanup();
/* assemble first instruction and save it */
- prev_insn = do_assemble (str, &prev_opcode);
+ prev_insn = do_assemble (str, &prev_opcode, 1);
if (prev_insn == -1)
as_fatal (_("cannot assemble instruction "));
if (prev_opcode.form->form >= LONG)
}
}
- insn = do_assemble (str, &opcode);
+ insn = do_assemble (str, &opcode,
+ (extype != EXEC_UNKNOWN || etype != EXEC_UNKNOWN));
if (insn == -1)
{
- if (extype)
+ if (extype != EXEC_UNKNOWN)
{
etype = extype;
return;
as_fatal (_("cannot assemble instruction "));
}
- if (etype)
+ if (etype != EXEC_UNKNOWN)
{
extype = etype;
- etype = 0;
+ etype = EXEC_UNKNOWN;
}
/* Word multiply instructions must not be followed by either a load or a
/* it returns -1 (an invalid opcode) on error */
static long long
-do_assemble (str, opcode)
+do_assemble (str, opcode, shortp)
char *str;
struct d30v_insn *opcode;
+ int shortp;
{
unsigned char *op_start, *save;
unsigned char *op_end;
char name[20];
- int cmp_hack, nlen = 0, fsize = 0;
+ int cmp_hack, nlen = 0, fsize = (shortp ? FORCE_SHORT : 0);
expressionS myops[6];
long long insn;