diff options
author | Ian Lance Taylor <ian@airs.com> | 1997-10-22 16:52:46 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1997-10-22 16:52:46 +0000 |
commit | 517640d9b5419a85812d316280b6948df4314c13 (patch) | |
tree | 50ae0704d5b25361e4a73c3e503e2dccb4ec4cdc /gas | |
parent | 34ed833edd902b2aea91f7ed1e090f297ea71eb3 (diff) | |
download | gdb-517640d9b5419a85812d316280b6948df4314c13.zip gdb-517640d9b5419a85812d316280b6948df4314c13.tar.gz gdb-517640d9b5419a85812d316280b6948df4314c13.tar.bz2 |
* config/tc-mips.c (macro): Correct handling of constant in M_LI_D
case in little endian mode.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 33 |
2 files changed, 31 insertions, 7 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 433e8b2..4035b38 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 22 12:51:18 1997 Ian Lance Taylor <ian@cygnus.com> + + * config/tc-mips.c (macro): Correct handling of constant in M_LI_D + case in little endian mode. + Tue Oct 21 10:20:11 1997 Doug Evans <devans@canuck.cygnus.com> * config/tc-sparc.c (md_apply_fix3, cases ..._H44, ..._HIX22): Leave diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 567758d..6eecede 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -4976,16 +4976,35 @@ macro (ip) or in offset_expr. */ if (imm_expr.X_op == O_constant || imm_expr.X_op == O_big) { - load_register (&icnt, treg, &imm_expr, mips_opts.isa >= 3); - if (mips_opts.isa < 3 && treg != 31) + if (mips_opts.isa >= 3) + load_register (&icnt, treg, &imm_expr, 1); + else { - if (offset_expr.X_op == O_absent) - macro_build ((char *) NULL, &icnt, NULL, "move", "d,s", - treg + 1, 0); + int hreg, lreg; + + if (target_big_endian) + { + hreg = treg; + lreg = treg + 1; + } else { - assert (offset_expr.X_op == O_constant); - load_register (&icnt, treg + 1, &offset_expr, 0); + hreg = treg + 1; + lreg = treg; + } + + if (hreg <= 31) + load_register (&icnt, hreg, &imm_expr, 0); + if (lreg <= 31) + { + if (offset_expr.X_op == O_absent) + macro_build ((char *) NULL, &icnt, NULL, "move", "d,s", + lreg, 0); + else + { + assert (offset_expr.X_op == O_constant); + load_register (&icnt, lreg, &offset_expr, 0); + } } } return; |