aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorThiemo Seufer <ths@networkno.de>2001-08-26 10:42:12 +0000
committerThiemo Seufer <ths@networkno.de>2001-08-26 10:42:12 +0000
commite7d556dfef22edc573b26552828940679ec437ee (patch)
tree2b831ab4e359e2632ef1d94e28730b33549ed4c1 /gas/config
parentb92b9cfe73c82c7d0bf61d18aa48a125612ac34f (diff)
downloadgdb-e7d556dfef22edc573b26552828940679ec437ee.zip
gdb-e7d556dfef22edc573b26552828940679ec437ee.tar.gz
gdb-e7d556dfef22edc573b26552828940679ec437ee.tar.bz2
* tc_mips.h (MAX_GPREL_OFFSET): Change it to the maximum allowed
value, not the word beyond maximum. * tc_mips.c (macro_build_lui): Code cleanup. (macro): Reflect change to MAX_GPREL_OFFSET. (mips_ip): Check explicitly against S_EX_NONE. (my_get_SmallExpression): parse for %gp_rel, not %gprel. (md_apply_fix): Code cleanup.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-mips.c29
-rw-r--r--gas/config/tc-mips.h2
2 files changed, 14 insertions, 17 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 6cd1f83..e939bda 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -2877,10 +2877,8 @@ macro_build_lui (place, counter, ep, regnum)
if (high_expr.X_op == O_constant)
{
/* we can compute the instruction now without a relocation entry */
- if (high_expr.X_add_number & 0x8000)
- high_expr.X_add_number += 0x10000;
- high_expr.X_add_number =
- ((unsigned long) high_expr.X_add_number >> 16) & 0xffff;
+ high_expr.X_add_number = ((high_expr.X_add_number + 0x8000)
+ >> 16) & 0xffff;
r = BFD_RELOC_UNUSED;
}
else
@@ -4982,7 +4980,7 @@ macro (ip)
With a constant we always use the latter case. */
if (breg == 0)
{
- if ((valueT) offset_expr.X_add_number >= MAX_GPREL_OFFSET
+ if ((valueT) offset_expr.X_add_number > MAX_GPREL_OFFSET
|| nopic_need_relax (offset_expr.X_add_symbol, 1))
p = NULL;
else
@@ -5007,7 +5005,7 @@ macro (ip)
}
else
{
- if ((valueT) offset_expr.X_add_number >= MAX_GPREL_OFFSET
+ if ((valueT) offset_expr.X_add_number > MAX_GPREL_OFFSET
|| nopic_need_relax (offset_expr.X_add_symbol, 1))
p = NULL;
else
@@ -5502,7 +5500,7 @@ macro (ip)
If there is a base register, we add it to $at after the
lui instruction. If there is a constant, we always use
the last case. */
- if ((valueT) offset_expr.X_add_number >= MAX_GPREL_OFFSET
+ if ((valueT) offset_expr.X_add_number > MAX_GPREL_OFFSET
|| nopic_need_relax (offset_expr.X_add_symbol, 1))
{
p = NULL;
@@ -7806,7 +7804,7 @@ mips_ip (str, ip)
case 'u': /* upper 16 bits */
c = my_getSmallExpression (&imm_expr, s);
imm_reloc = BFD_RELOC_LO16;
- if (c)
+ if (c != S_EX_NONE)
{
if (c != S_EX_LO)
{
@@ -8677,13 +8675,14 @@ my_getSmallExpression (ep, str)
else if (str[0] == '%'
&& tolower(str[1]) == 'g'
&& tolower(str[2]) == 'p'
- && tolower(str[3]) == 'r'
- && tolower(str[4]) == 'e'
- && tolower(str[5]) == 'l'
- && str[6] == '(')
+ && tolower(str[3]) == '_'
+ && tolower(str[4]) == 'r'
+ && tolower(str[5]) == 'e'
+ && tolower(str[6]) == 'l'
+ && str[7] == '(')
{
c = S_EX_GPREL;
- str += sizeof ("%gprel(") - 2;
+ str += sizeof ("%gp_rel(") - 2;
}
else if (str[0] == '%'
&& tolower(str[1]) == 'n'
@@ -9723,9 +9722,7 @@ md_apply_fix (fixP, valueP)
value += (fixP->fx_next->fx_frag->fr_address
+ fixP->fx_next->fx_where);
}
- if (value & 0x8000)
- value += 0x10000;
- value >>= 16;
+ value = ((value + 0x8000) >> 16) & 0xffff;
buf = (unsigned char *) fixP->fx_frag->fr_literal + fixP->fx_where;
if (target_big_endian)
buf += 2;
diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h
index 7e52940..1358cc8 100644
--- a/gas/config/tc-mips.h
+++ b/gas/config/tc-mips.h
@@ -47,7 +47,7 @@ struct expressionS;
/* Maximum symbol offset that can be encoded in a BFD_RELOC_MIPS_GPREL
relocation: */
-#define MAX_GPREL_OFFSET (0x7FF4)
+#define MAX_GPREL_OFFSET (0x7FF0)
#define md_relax_frag(segment, fragp, stretch) mips_relax_frag(fragp, stretch)
extern int mips_relax_frag PARAMS ((struct frag *, long));