diff options
author | Martin Hunt <hunt@redhat.com> | 1996-08-26 20:42:37 +0000 |
---|---|---|
committer | Martin Hunt <hunt@redhat.com> | 1996-08-26 20:42:37 +0000 |
commit | 443dbf147ed6d77866936e4ab4c790492074d310 (patch) | |
tree | 872b7f18bac2aeccc206b7d5a9a5c9bb32472640 | |
parent | f9085532ddad137cd5f2216b195e81715e07fe4a (diff) | |
download | gdb-443dbf147ed6d77866936e4ab4c790492074d310.zip gdb-443dbf147ed6d77866936e4ab4c790492074d310.tar.gz gdb-443dbf147ed6d77866936e4ab4c790492074d310.tar.bz2 |
Mon Aug 26 13:39:27 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
* tc-d10v.c (parallel_ok): Fix bug in parallel
checking code.
-rw-r--r-- | gas/config/tc-d10v.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/gas/config/tc-d10v.c b/gas/config/tc-d10v.c index c23fab1..5729e56 100644 --- a/gas/config/tc-d10v.c +++ b/gas/config/tc-d10v.c @@ -801,7 +801,7 @@ parallel_ok (op1, insn1, op2, insn2) ins = insn2; } mod[j] = used[j] = 0; - for (i = 0; op1->operands[i]; i++) + for (i = 0; op->operands[i]; i++) { flags = d10v_operands[op->operands[i]].flags; shift = d10v_operands[op->operands[i]].shift; @@ -834,17 +834,17 @@ parallel_ok (op1, insn1, op2, insn2) used[j] |= 1 << (regno + 1); } } - else if (op->exec_type & RMEM) - used[j] |= 1 << 20; - else if (op->exec_type & WMEM) - mod[j] |= 1 << 20; - else if (op->exec_type & RF0) - used[j] |= 1 << 19; - else if (op->exec_type & WF0) - mod[j] |= 1 << 19; - else if (op->exec_type & WCAR) - mod[j] |= 1 << 19; - } + } + if (op->exec_type & RMEM) + used[j] |= 1 << 20; + else if (op->exec_type & WMEM) + mod[j] |= 1 << 20; + else if (op->exec_type & RF0) + used[j] |= 1 << 19; + else if (op->exec_type & WF0) + mod[j] |= 1 << 19; + else if (op->exec_type & WCAR) + mod[j] |= 1 << 19; } if ((mod[0] & mod[1]) == 0 && (mod[0] & used[1]) == 0 && (mod[1] & used[0]) == 0) return 1; @@ -1045,7 +1045,9 @@ find_opcode (opcode, myops) myops[opnum].X_op_symbol = NULL; } - if (myops[opnum].X_op == O_constant || S_IS_DEFINED(myops[opnum].X_add_symbol)) + if (myops[opnum].X_op == O_constant || (myops[opnum].X_op == O_symbol && + S_IS_DEFINED(myops[opnum].X_add_symbol) && + (S_GET_SEGMENT(myops[opnum].X_add_symbol) == now_seg))) { next_opcode=opcode+1; for (i=0; opcode->operands[i+1]; i++) @@ -1294,7 +1296,7 @@ d10v_cleanup (done) seg = now_seg; subseg = now_subseg; subseg_set (prev_seg, prev_subseg); - write_1_short (prev_opcode, prev_insn, fixups); + write_1_short (prev_opcode, prev_insn, fixups->next); subseg_set (seg, subseg); prev_opcode = NULL; } |