* config/tc-mips.c: Throughout, check target_big_endian rather

than byte_order.
 	(byte_order): Remove.
	(mips_init_after_args): Remove.
	* config/tc-mips.h (LITTLE_ENDIAN, BIG_ENDIAN): Don't define.
	(mips_init_after_args): Don't declare.
	(tc_init_after_args): Don't define.

	* config/tc-mips.h (tc_frob_after_relocs): Define if
	OBJ_MAYBE_ELF.
	(mips_elf_final_processing): Likewise.
	(ELF_TC_SPECIAL_SECTIONS): Likewise.
This commit is contained in:
Ian Lance Taylor
1997-01-02 20:13:05 +00:00
parent bc83032148
commit b9129c6fcd
2 changed files with 57 additions and 79 deletions

View File

@ -1,3 +1,18 @@
Thu Jan 2 13:37:29 1997 Ian Lance Taylor <ian@cygnus.com>
* config/tc-mips.c: Throughout, check target_big_endian rather
than byte_order.
(byte_order): Remove.
(mips_init_after_args): Remove.
* config/tc-mips.h (LITTLE_ENDIAN, BIG_ENDIAN): Don't define.
(mips_init_after_args): Don't declare.
(tc_init_after_args): Don't define.
* config/tc-mips.h (tc_frob_after_relocs): Define if
OBJ_MAYBE_ELF.
(mips_elf_final_processing): Likewise.
(ELF_TC_SPECIAL_SECTIONS): Likewise.
start-sanitize-v850 start-sanitize-v850
Tue Dec 31 15:12:35 1996 Michael Meissner <meissner@tiktok.cygnus.com> Tue Dec 31 15:12:35 1996 Michael Meissner <meissner@tiktok.cygnus.com>

View File

@ -1,5 +1,5 @@
/* tc-mips.c -- assemble code for a MIPS chip. /* tc-mips.c -- assemble code for a MIPS chip.
Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by the OSF and Ralph Campbell. Contributed by the OSF and Ralph Campbell.
Written by Keith Knowles and Ralph Campbell, working independently. Written by Keith Knowles and Ralph Campbell, working independently.
Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus Modified for ECOFF and R4000 support by Ian Lance Taylor of Cygnus
@ -255,8 +255,6 @@ const char FLT_CHARS[] = "rRsSfFdDxXpP";
static char *insn_error; static char *insn_error;
static int byte_order;
static int auto_align = 1; static int auto_align = 1;
/* When outputting SVR4 PIC code, the assembler needs to know the /* When outputting SVR4 PIC code, the assembler needs to know the
@ -4690,13 +4688,13 @@ macro (ip)
dob: dob:
assert (mips_isa < 2); assert (mips_isa < 2);
macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)", macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
byte_order == LITTLE_ENDIAN ? treg : treg + 1, target_big_endian ? treg + 1 : treg,
(int) r, breg); (int) r, breg);
/* FIXME: A possible overflow which I don't know how to deal /* FIXME: A possible overflow which I don't know how to deal
with. */ with. */
offset_expr.X_add_number += 4; offset_expr.X_add_number += 4;
macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)", macro_build ((char *) NULL, &icnt, &offset_expr, "lwc1", "T,o(b)",
byte_order == LITTLE_ENDIAN ? treg + 1 : treg, target_big_endian ? treg : treg + 1,
(int) r, breg); (int) r, breg);
/* To avoid confusion in tc_gen_reloc, we must ensure that this /* To avoid confusion in tc_gen_reloc, we must ensure that this
@ -4775,7 +4773,7 @@ macro (ip)
/* Even on a big endian machine $fn comes before $fn+1. We have /* Even on a big endian machine $fn comes before $fn+1. We have
to adjust when loading from memory. We set coproc if we must to adjust when loading from memory. We set coproc if we must
load $fn+1 first. */ load $fn+1 first. */
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
coproc = 0; coproc = 0;
if (mips_pic == NO_PIC if (mips_pic == NO_PIC
@ -5238,11 +5236,11 @@ macro2 (ip)
/* Even on a big endian machine $fn comes before $fn+1. We have /* Even on a big endian machine $fn comes before $fn+1. We have
to adjust when storing to memory. */ to adjust when storing to memory. */
macro_build ((char *) NULL, &icnt, &offset_expr, "swc1", "T,o(b)", macro_build ((char *) NULL, &icnt, &offset_expr, "swc1", "T,o(b)",
byte_order == LITTLE_ENDIAN ? treg : treg + 1, target_big_endian ? treg + 1 : treg,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
offset_expr.X_add_number += 4; offset_expr.X_add_number += 4;
macro_build ((char *) NULL, &icnt, &offset_expr, "swc1", "T,o(b)", macro_build ((char *) NULL, &icnt, &offset_expr, "swc1", "T,o(b)",
byte_order == LITTLE_ENDIAN ? treg + 1 : treg, target_big_endian ? treg : treg + 1,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
return; return;
@ -5557,11 +5555,11 @@ macro2 (ip)
if (offset_expr.X_add_number >= 0x7fff) if (offset_expr.X_add_number >= 0x7fff)
as_bad ("operand overflow"); as_bad ("operand overflow");
/* avoid load delay */ /* avoid load delay */
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number += 1; offset_expr.X_add_number += 1;
macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number -= 1; offset_expr.X_add_number -= 1;
else else
offset_expr.X_add_number += 1; offset_expr.X_add_number += 1;
@ -5583,11 +5581,11 @@ macro2 (ip)
ulw: ulw:
if (offset_expr.X_add_number >= 0x8000 - off) if (offset_expr.X_add_number >= 0x8000 - off)
as_bad ("operand overflow"); as_bad ("operand overflow");
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number += off; offset_expr.X_add_number += off;
macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number -= off; offset_expr.X_add_number -= off;
else else
offset_expr.X_add_number += off; offset_expr.X_add_number += off;
@ -5610,13 +5608,13 @@ macro2 (ip)
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
mips_isa < 3 ? "addu" : "daddu", mips_isa < 3 ? "addu" : "daddu",
"d,v,t", AT, AT, breg); "d,v,t", AT, AT, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = off; expr1.X_add_number = off;
else else
expr1.X_add_number = 0; expr1.X_add_number = 0;
macro_build ((char *) NULL, &icnt, &expr1, s, "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &expr1, s, "t,o(b)", treg,
(int) BFD_RELOC_LO16, AT); (int) BFD_RELOC_LO16, AT);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = 0; expr1.X_add_number = 0;
else else
expr1.X_add_number = off; expr1.X_add_number = off;
@ -5631,12 +5629,12 @@ macro2 (ip)
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
mips_isa < 3 ? "addu" : "daddu", mips_isa < 3 ? "addu" : "daddu",
"d,v,t", AT, AT, breg); "d,v,t", AT, AT, breg);
if (byte_order == BIG_ENDIAN) if (target_big_endian)
expr1.X_add_number = 0; expr1.X_add_number = 0;
macro_build ((char *) NULL, &icnt, &expr1, macro_build ((char *) NULL, &icnt, &expr1,
mask == M_ULH_A ? "lb" : "lbu", "t,o(b)", treg, mask == M_ULH_A ? "lb" : "lbu", "t,o(b)", treg,
(int) BFD_RELOC_LO16, AT); (int) BFD_RELOC_LO16, AT);
if (byte_order == BIG_ENDIAN) if (target_big_endian)
expr1.X_add_number = 1; expr1.X_add_number = 1;
else else
expr1.X_add_number = 0; expr1.X_add_number = 0;
@ -5651,12 +5649,12 @@ macro2 (ip)
case M_USH: case M_USH:
if (offset_expr.X_add_number >= 0x7fff) if (offset_expr.X_add_number >= 0x7fff)
as_bad ("operand overflow"); as_bad ("operand overflow");
if (byte_order == BIG_ENDIAN) if (target_big_endian)
offset_expr.X_add_number += 1; offset_expr.X_add_number += 1;
macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &offset_expr, "sb", "t,o(b)", treg,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
macro_build ((char *) NULL, &icnt, NULL, "srl", "d,w,<", AT, treg, 8); macro_build ((char *) NULL, &icnt, NULL, "srl", "d,w,<", AT, treg, 8);
if (byte_order == BIG_ENDIAN) if (target_big_endian)
offset_expr.X_add_number -= 1; offset_expr.X_add_number -= 1;
else else
offset_expr.X_add_number += 1; offset_expr.X_add_number += 1;
@ -5676,11 +5674,11 @@ macro2 (ip)
usw: usw:
if (offset_expr.X_add_number >= 0x8000 - off) if (offset_expr.X_add_number >= 0x8000 - off)
as_bad ("operand overflow"); as_bad ("operand overflow");
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number += off; offset_expr.X_add_number += off;
macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &offset_expr, s, "t,o(b)", treg,
(int) BFD_RELOC_LO16, breg); (int) BFD_RELOC_LO16, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
offset_expr.X_add_number -= off; offset_expr.X_add_number -= off;
else else
offset_expr.X_add_number += off; offset_expr.X_add_number += off;
@ -5703,13 +5701,13 @@ macro2 (ip)
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
mips_isa < 3 ? "addu" : "daddu", mips_isa < 3 ? "addu" : "daddu",
"d,v,t", AT, AT, breg); "d,v,t", AT, AT, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = off; expr1.X_add_number = off;
else else
expr1.X_add_number = 0; expr1.X_add_number = 0;
macro_build ((char *) NULL, &icnt, &expr1, s, "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &expr1, s, "t,o(b)", treg,
(int) BFD_RELOC_LO16, AT); (int) BFD_RELOC_LO16, AT);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = 0; expr1.X_add_number = 0;
else else
expr1.X_add_number = off; expr1.X_add_number = off;
@ -5723,19 +5721,19 @@ macro2 (ip)
macro_build ((char *) NULL, &icnt, (expressionS *) NULL, macro_build ((char *) NULL, &icnt, (expressionS *) NULL,
mips_isa < 3 ? "addu" : "daddu", mips_isa < 3 ? "addu" : "daddu",
"d,v,t", AT, AT, breg); "d,v,t", AT, AT, breg);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = 0; expr1.X_add_number = 0;
macro_build ((char *) NULL, &icnt, &expr1, "sb", "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &expr1, "sb", "t,o(b)", treg,
(int) BFD_RELOC_LO16, AT); (int) BFD_RELOC_LO16, AT);
macro_build ((char *) NULL, &icnt, NULL, "srl", "d,w,<", treg, macro_build ((char *) NULL, &icnt, NULL, "srl", "d,w,<", treg,
treg, 8); treg, 8);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = 1; expr1.X_add_number = 1;
else else
expr1.X_add_number = 0; expr1.X_add_number = 0;
macro_build ((char *) NULL, &icnt, &expr1, "sb", "t,o(b)", treg, macro_build ((char *) NULL, &icnt, &expr1, "sb", "t,o(b)", treg,
(int) BFD_RELOC_LO16, AT); (int) BFD_RELOC_LO16, AT);
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
expr1.X_add_number = 0; expr1.X_add_number = 0;
else else
expr1.X_add_number = 1; expr1.X_add_number = 1;
@ -6497,7 +6495,7 @@ mips_ip (str, ip)
)) ))
{ {
imm_expr.X_op = O_constant; imm_expr.X_op = O_constant;
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
imm_expr.X_add_number = imm_expr.X_add_number =
(((((((int) temp[3] << 8) (((((((int) temp[3] << 8)
| temp[2]) << 8) | temp[2]) << 8)
@ -7536,7 +7534,7 @@ md_atof (type, litP, sizeP)
*sizeP = prec * 2; *sizeP = prec * 2;
if (byte_order == LITTLE_ENDIAN) if (! target_big_endian)
{ {
for (i = prec - 1; i >= 0; i--) for (i = prec - 1; i >= 0; i--)
{ {
@ -7562,19 +7560,10 @@ md_number_to_chars (buf, val, n)
valueT val; valueT val;
int n; int n;
{ {
switch (byte_order) if (target_big_endian)
{ number_to_chars_bigendian (buf, val, n);
case LITTLE_ENDIAN: else
number_to_chars_littleendian (buf, val, n); number_to_chars_littleendian (buf, val, n);
break;
case BIG_ENDIAN:
number_to_chars_bigendian (buf, val, n);
break;
default:
internalError ();
}
} }
CONST char *md_shortopts = "O::g::G:"; CONST char *md_shortopts = "O::g::G:";
@ -7990,15 +7979,6 @@ MIPS options:\n\
-64 create 64 bit object file\n"); -64 create 64 bit object file\n");
#endif #endif
} }
void
mips_init_after_args ()
{
if (target_big_endian)
byte_order = BIG_ENDIAN;
else
byte_order = LITTLE_ENDIAN;
}
long long
md_pcrel_from (fixP) md_pcrel_from (fixP)
@ -8033,7 +8013,7 @@ cons_fix_new_mips (frag, where, nbytes, exp)
4 byte reloc. */ 4 byte reloc. */
if (nbytes == 8 && ! mips_64) if (nbytes == 8 && ! mips_64)
{ {
if (byte_order == BIG_ENDIAN) if (target_big_endian)
where += 4; where += 4;
nbytes = 4; nbytes = 4;
} }
@ -8218,7 +8198,7 @@ md_apply_fix (fixP, valueP)
value += 0x10000; value += 0x10000;
value >>= 16; value >>= 16;
buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where; buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where;
if (byte_order == BIG_ENDIAN) if (target_big_endian)
buf += 2; buf += 2;
md_number_to_chars (buf, value, 2); md_number_to_chars (buf, value, 2);
break; break;
@ -8229,7 +8209,7 @@ md_apply_fix (fixP, valueP)
if ((fixP->fx_addsy->bsym->flags & BSF_SECTION_SYM) == 0) if ((fixP->fx_addsy->bsym->flags & BSF_SECTION_SYM) == 0)
value += fixP->fx_frag->fr_address + fixP->fx_where; value += fixP->fx_frag->fr_address + fixP->fx_where;
buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where; buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where;
if (byte_order == BIG_ENDIAN) if (target_big_endian)
buf += 2; buf += 2;
md_number_to_chars (buf, value, 2); md_number_to_chars (buf, value, 2);
break; break;
@ -8249,7 +8229,7 @@ md_apply_fix (fixP, valueP)
long hiv; long hiv;
w1 = w2 = fixP->fx_where; w1 = w2 = fixP->fx_where;
if (byte_order == BIG_ENDIAN) if (target_big_endian)
w1 += 4; w1 += 4;
else else
w2 += 4; w2 += 4;
@ -8293,7 +8273,7 @@ md_apply_fix (fixP, valueP)
as_bad_where (fixP->fx_file, fixP->fx_line, as_bad_where (fixP->fx_file, fixP->fx_line,
"relocation overflow"); "relocation overflow");
buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where; buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where;
if (byte_order == BIG_ENDIAN) if (target_big_endian)
buf += 2; buf += 2;
md_number_to_chars (buf, value, 2); md_number_to_chars (buf, value, 2);
} }
@ -8312,20 +8292,10 @@ md_apply_fix (fixP, valueP)
/* update old instruction data */ /* update old instruction data */
buf = (unsigned char *) (fixP->fx_where + fixP->fx_frag->fr_literal); buf = (unsigned char *) (fixP->fx_where + fixP->fx_frag->fr_literal);
switch (byte_order) if (target_big_endian)
{ insn = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
case LITTLE_ENDIAN: else
insn = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]; insn = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
break;
case BIG_ENDIAN:
insn = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
break;
default:
internalError ();
return 0;
}
if (value >= -0x8000 && value < 0x8000) if (value >= -0x8000 && value < 0x8000)
insn |= value & 0xffff; insn |= value & 0xffff;
@ -9718,17 +9688,10 @@ md_convert_frag (abfd, asec, fragp)
buf = (bfd_byte *) (fragp->fr_literal + fragp->fr_fix); buf = (bfd_byte *) (fragp->fr_literal + fragp->fr_fix);
switch (byte_order) if (target_big_endian)
{ insn = bfd_getb16 (buf);
default: else
internalError (); insn = bfd_getl16 (buf);
case LITTLE_ENDIAN:
insn = bfd_getl16 (buf);
break;
case BIG_ENDIAN:
insn = bfd_getb16 (buf);
break;
}
mips16_immed (fragp->fr_file, fragp->fr_line, type, val, false, small, mips16_immed (fragp->fr_file, fragp->fr_line, type, val, false, small,
ext, &insn, &use_extend, &extend); ext, &insn, &use_extend, &extend);