diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 24 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-consthilo.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/elf-consthilo.s | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 1 |
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" } } |