* config/tc-v850.c (md_apply_fix3): Use little endian get/put

routines to fetch/store the updated instruction from/to memory.
        (v850_insert_operand): If the operand has a specialized insert
        routine, call it.
Getting fixups closer.  At least br <target> works now.
This commit is contained in:
Jeff Law 1996-08-31 05:52:38 +00:00
parent 7ab4a84a3a
commit 74dd0c0786
2 changed files with 28 additions and 4 deletions

View File

@ -1,4 +1,11 @@
start-sanitize-v850
Fri Aug 30 23:50:08 1996 Jeffrey A Law (law@cygnus.com)
* config/tc-v850.c (md_apply_fix3): Use little endian get/put
routines to fetch/store the updated instruction from/to memory.
(v850_insert_operand): If the operand has a specialized insert
routine, call it.
Fri Aug 30 18:35:26 1996 J.T. Conklin <jtc@hippo.cygnus.com>
* config/tc-v850.c (reg_name_search): Align calling convention to

View File

@ -883,12 +883,16 @@ md_apply_fix3 (fixp, valuep, seg)
operand = &v850_operands[opindex];
/* Fetch the instruction, insert the fully resolved operand
value, and stuff the instruction back again. */
value, and stuff the instruction back again.
Note the instruction has been stored in little endian
format! */
where = fixp->fx_frag->fr_literal + fixp->fx_where;
insn = bfd_getb32((unsigned char *) where);
insn = bfd_getl32((unsigned char *) where);
insn = v850_insert_operand (insn, operand, (offsetT) value,
fixp->fx_file, fixp->fx_line);
bfd_putb32((bfd_vma) insn, (unsigned char *) where);
bfd_putl32((bfd_vma) insn, (unsigned char *) where);
if (fixp->fx_done)
{
@ -971,6 +975,19 @@ v850_insert_operand (insn, operand, val, file, line)
}
}
insn |= (((long) val & ((1 << operand->bits) - 1)) << operand->shift);
if (operand->insert)
{
const char *message = NULL;
insn = (operand->insert) (insn, val, &message);
if (message != NULL)
{
if (file == (char *) NULL)
as_warn (message);
else
as_warn_where (file, line, message);
}
}
else
insn |= (((long) val & ((1 << operand->bits) - 1)) << operand->shift);
return insn;
}