diff options
author | Jason Eckhardt <jle@rice.edu> | 2003-08-06 04:31:58 +0000 |
---|---|---|
committer | Jason Eckhardt <jle@rice.edu> | 2003-08-06 04:31:58 +0000 |
commit | 07c7854e59793948dc14c849123b36a577d33cde (patch) | |
tree | 74219603b827cd76ead1de2ab23d3efb8dd6b5e3 /gas | |
parent | 9d7e2ba5ae9870ec093baf6ad6e8dc3a9282d7e3 (diff) | |
download | binutils-gdb-07c7854e59793948dc14c849123b36a577d33cde.tar.gz |
2003-08-05 Jason Eckhardt <jle@rice.edu>
* config/tc-i860.c (i860_process_insn): Don't handle dual-bit
setting during flop argument parsing. Instead, do it after
instruction is fully parsed.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-i860.c | 21 |
2 files changed, 21 insertions, 6 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 5dfb5e9915e..06114a037b3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,11 @@ 2003-08-05 Jason Eckhardt <jle@rice.edu> + * config/tc-i860.c (i860_process_insn): Don't handle dual-bit + setting during flop argument parsing. Instead, do it after + instruction is fully parsed. + +2003-08-05 Jason Eckhardt <jle@rice.edu> + * doc/c-i860.texi: Mention that .dual, .enddual, and .atmp directives are only available in Intel syntax mode. diff --git a/gas/config/tc-i860.c b/gas/config/tc-i860.c index 2418997e874..37aff49efa4 100644 --- a/gas/config/tc-i860.c +++ b/gas/config/tc-i860.c @@ -638,12 +638,6 @@ i860_process_insn (char *str) case 'g': opcode |= mask << 16; - if (dual_mode != DUAL_OFF) - opcode |= (1 << 9); - if (dual_mode == DUAL_DDOT) - dual_mode = DUAL_OFF; - if (dual_mode == DUAL_ONDDOT) - dual_mode = DUAL_ON; if ((opcode & (1 << 10)) && mask != 0 && (mask == ((opcode >> 11) & 0x1f))) as_warn (_("Pipelined instruction: fsrc1 = fdest")); @@ -934,6 +928,21 @@ i860_process_insn (char *str) break; } + /* Set the dual bit on this instruction if necessary. */ + if (dual_mode != DUAL_OFF) + { + if ((opcode & 0xfc000000) == 0x48000000 || opcode == 0xb0000000) + { + opcode |= (1 << 9); + if (dual_mode == DUAL_DDOT) + dual_mode = DUAL_OFF; + else if (dual_mode == DUAL_ONDDOT) + dual_mode = DUAL_ON; + } + else if (dual_mode == DUAL_DDOT || dual_mode == DUAL_ONDDOT) + as_bad (_("Prefix 'd.' invalid for instruction `%s'"), insn->name); + } + the_insn.opcode = opcode; /* Only recognize XP instructions when the user has requested it. */ |