summaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJason Eckhardt <jle@rice.edu>2003-08-06 04:31:58 +0000
committerJason Eckhardt <jle@rice.edu>2003-08-06 04:31:58 +0000
commit07c7854e59793948dc14c849123b36a577d33cde (patch)
tree74219603b827cd76ead1de2ab23d3efb8dd6b5e3 /gas
parent9d7e2ba5ae9870ec093baf6ad6e8dc3a9282d7e3 (diff)
downloadbinutils-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/ChangeLog6
-rw-r--r--gas/config/tc-i860.c21
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. */