From fdb987ee01ed911144681463cceca4ad666a13ee Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 12 Aug 2002 08:33:42 +0000 Subject: [PATCH] [gas/] * config/tc-mips.c (mips_ip): Don't work out the value of constant %hi()s here. [gas/testsuite/] * gas/mips/elf-consthilo.[sd]: New test. * gas/mips/mips.exp: Run it. --- gas/ChangeLog | 5 +++++ gas/config/tc-mips.c | 24 +++++++++--------------- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/mips/elf-consthilo.d | 10 ++++++++++ gas/testsuite/gas/mips/elf-consthilo.s | 12 ++++++++++++ gas/testsuite/gas/mips/mips.exp | 1 + 6 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 gas/testsuite/gas/mips/elf-consthilo.d create mode 100644 gas/testsuite/gas/mips/elf-consthilo.s diff --git a/gas/ChangeLog b/gas/ChangeLog index acce5717ca3..7f9a5ac9ee7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2002-08-12 Richard Sandiford + + * config/tc-mips.c (mips_ip): Don't work out the value of + constant %hi()s here. + 2002-08-10 Alan Modra * 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 54e2540f1bb..6fea63abe75 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 9079372897a..924865690cc 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2002-08-12 Richard Sandiford + + * gas/mips/elf-consthilo.[sd]: New test. + * gas/mips/mips.exp: Run it. + 2002-08-09 Maciej W. Rozycki * 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 00000000000..30b27615c5b --- /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 00000000000..ed7e111a3a5 --- /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 a3b6911f34c..fa1dbf8ace1 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" } } -- 2.30.2