2004-11-08 Tomer Levi <Tomer.Levi@nsc.com>
* config/tc-crx.c (print_insn): Check and set insn_addr. * config/tc-crx.h (md_frag_check): Define.
This commit is contained in:
parent
7499d566bb
commit
aea44f6290
|
@ -1,3 +1,8 @@
|
||||||
|
2004-11-08 Tomer Levi <Tomer.Levi@nsc.com>
|
||||||
|
|
||||||
|
* config/tc-crx.c (print_insn): Check and set insn_addr.
|
||||||
|
* config/tc-crx.h (md_frag_check): Define.
|
||||||
|
|
||||||
2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
|
2004-11-08 Inderpreet Singh <inderpreetb@nioda.hcltech.com>
|
||||||
Vineet Sharma <vineets@noida.hcltech.com>
|
Vineet Sharma <vineets@noida.hcltech.com>
|
||||||
|
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ set_operand (char *operand, ins * crx_ins)
|
||||||
operandS++;
|
operandS++;
|
||||||
case arg_c: /* Case 0x18. */
|
case arg_c: /* Case 0x18. */
|
||||||
/* Set constant. */
|
/* Set constant. */
|
||||||
process_label_constant (operandS, crx_ins/*, op_num*/);
|
process_label_constant (operandS, crx_ins);
|
||||||
|
|
||||||
if (cur_arg->type != arg_ic)
|
if (cur_arg->type != arg_ic)
|
||||||
cur_arg->type = arg_c;
|
cur_arg->type = arg_c;
|
||||||
|
@ -1242,7 +1242,7 @@ set_operand (char *operand, ins * crx_ins)
|
||||||
while (*operandE != '(')
|
while (*operandE != '(')
|
||||||
operandE++;
|
operandE++;
|
||||||
*operandE = '\0';
|
*operandE = '\0';
|
||||||
process_label_constant (operandS, crx_ins/*, op_num*/);
|
process_label_constant (operandS, crx_ins);
|
||||||
operandS = operandE;
|
operandS = operandE;
|
||||||
case arg_rbase: /* Case (r1). */
|
case arg_rbase: /* Case (r1). */
|
||||||
operandS++;
|
operandS++;
|
||||||
|
@ -2382,6 +2382,7 @@ print_insn (ins *insn)
|
||||||
unsigned int i, j, insn_size;
|
unsigned int i, j, insn_size;
|
||||||
char *this_frag;
|
char *this_frag;
|
||||||
unsigned short words[4];
|
unsigned short words[4];
|
||||||
|
int addr_mod;
|
||||||
|
|
||||||
/* Arrange the insn encodings in a WORD size array. */
|
/* Arrange the insn encodings in a WORD size array. */
|
||||||
for (i = 0, j = 0; i < 2; i++)
|
for (i = 0, j = 0; i < 2; i++)
|
||||||
|
@ -2443,6 +2444,13 @@ print_insn (ins *insn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Verify a 2-byte code alignment. */
|
||||||
|
addr_mod = frag_now_fix () & 1;
|
||||||
|
if (frag_now->has_code && frag_now->insn_addr != addr_mod)
|
||||||
|
as_bad (_("instruction address is not a multiple of 2"));
|
||||||
|
frag_now->insn_addr = addr_mod;
|
||||||
|
frag_now->has_code = 1;
|
||||||
|
|
||||||
/* Write the instruction encoding to frag. */
|
/* Write the instruction encoding to frag. */
|
||||||
for (i = 0; i < insn_size; i++)
|
for (i = 0; i < insn_size; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,4 +69,12 @@ extern int crx_force_relocation (struct fix *);
|
||||||
: LEN == 4 ? BFD_RELOC_CRX_NUM32 \
|
: LEN == 4 ? BFD_RELOC_CRX_NUM32 \
|
||||||
: BFD_RELOC_NONE);
|
: BFD_RELOC_NONE);
|
||||||
|
|
||||||
|
/* Give an error if a frag containing code is not aligned to a 2-byte
|
||||||
|
boundary. */
|
||||||
|
#define md_frag_check(FRAGP) \
|
||||||
|
if ((FRAGP)->has_code \
|
||||||
|
&& (((FRAGP)->fr_address + (FRAGP)->insn_addr) & 1) != 0) \
|
||||||
|
as_bad_where ((FRAGP)->fr_file, (FRAGP)->fr_line, \
|
||||||
|
_("instruction address is not a multiple of 2"));
|
||||||
|
|
||||||
#endif /* TC_CRX_H */
|
#endif /* TC_CRX_H */
|
||||||
|
|
Loading…
Reference in New Issue