aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-mips.c24
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/mips/elf-consthilo.d10
-rw-r--r--gas/testsuite/gas/mips/elf-consthilo.s12
-rw-r--r--gas/testsuite/gas/mips/mips.exp1
6 files changed, 42 insertions, 15 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index acce571..7f9a5ac 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-12 Richard Sandiford <rsandifo@redhat.com>
+
+ * config/tc-mips.c (mips_ip): Don't work out the value of
+ constant %hi()s here.
+
2002-08-10 Alan Modra <amodra@bigpond.net.au>
* config/tc-i386.c (tc_i386_fix_adjustable): Test OUTPUT_FLAVOR
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 54e2540..6fea63a 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -8525,9 +8525,11 @@ mips_ip (str, ip)
{
if (c != S_EX_LO)
{
- if (imm_expr.X_op == O_constant)
- imm_expr.X_add_number =
- (imm_expr.X_add_number >> 16) & 0xffff;
+ if (c == S_EX_HI)
+ {
+ *imm_reloc = BFD_RELOC_HI16_S;
+ imm_unmatched_hi = true;
+ }
#ifdef OBJ_ELF
else if (c == S_EX_HIGHEST)
*imm_reloc = BFD_RELOC_MIPS_HIGHEST;
@@ -8553,11 +8555,6 @@ mips_ip (str, ip)
}
}
#endif
- else if (c == S_EX_HI)
- {
- *imm_reloc = BFD_RELOC_HI16_S;
- imm_unmatched_hi = true;
- }
else
*imm_reloc = BFD_RELOC_HI16;
}
@@ -8658,10 +8655,7 @@ mips_ip (str, ip)
{
if (c != S_EX_LO)
{
- if (imm_expr.X_op == O_constant)
- imm_expr.X_add_number =
- (imm_expr.X_add_number >> 16) & 0xffff;
- else if (c == S_EX_HI)
+ if (c == S_EX_HI)
{
*imm_reloc = BFD_RELOC_HI16_S;
imm_unmatched_hi = true;
@@ -8695,9 +8689,9 @@ mips_ip (str, ip)
else if (imm_expr.X_op == O_constant)
imm_expr.X_add_number &= 0xffff;
}
- if (imm_expr.X_op == O_constant
- && (imm_expr.X_add_number < 0
- || imm_expr.X_add_number >= 0x10000))
+ else if (imm_expr.X_op == O_constant
+ && (imm_expr.X_add_number < 0
+ || imm_expr.X_add_number >= 0x10000))
as_bad (_("lui expression not in range 0..65535"));
s = expr_end;
continue;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 9079372..9248656 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2002-08-12 Richard Sandiford <rsandifo@redhat.com>
+
+ * gas/mips/elf-consthilo.[sd]: New test.
+ * gas/mips/mips.exp: Run it.
+
2002-08-09 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
* gas/mips/empic.d: Treat "addiu" and "daddiu" as equivalent when
diff --git a/gas/testsuite/gas/mips/elf-consthilo.d b/gas/testsuite/gas/mips/elf-consthilo.d
new file mode 100644
index 0000000..30b2761
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-consthilo.d
@@ -0,0 +1,10 @@
+#objdump: --prefix-addresses -dr
+#name: MIPS constant hi/lo
+
+.*: +file format elf.*mips.*
+
+Disassembly of section \.text:
+0+00 <.*> lui a0,0xdeae
+0+04 <.*> jr ra
+0+08 <.*> lb v0,-16657\(a0\)
+#pass
diff --git a/gas/testsuite/gas/mips/elf-consthilo.s b/gas/testsuite/gas/mips/elf-consthilo.s
new file mode 100644
index 0000000..ed7e111
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-consthilo.s
@@ -0,0 +1,12 @@
+ .set noreorder
+ .set nomacro
+ .set noat
+ .set nomips16
+
+ .equ addr, 0xdeadbeef
+ .ent foo
+foo:
+ lui $4,%hi(addr)
+ jr $31
+ lb $2,%lo(addr)($4)
+ .end foo
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index a3b6911..fa1dbf8 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -215,5 +215,6 @@ if { [istarget mips*-*-*] } then {
run_dump_test "${tmips}mips${el}16-e"
run_dump_test "${tmips}mips${el}16-f"
}
+ run_dump_test "elf-consthilo"
}
}