aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-avr.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-avr.c')
-rw-r--r--gas/config/tc-avr.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index 067657b..51f1b93 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -1326,6 +1326,15 @@ avr_operand (struct avr_opcodes_s *opcode,
return op_mask;
}
+/* TC_FRAG_INIT hook */
+
+void
+avr_frag_init (fragS *frag)
+{
+ memset (& frag->tc_frag_data, 0, sizeof frag->tc_frag_data);
+}
+
+
/* Parse instruction operands.
Return binary opcode. */
@@ -1337,7 +1346,6 @@ avr_operands (struct avr_opcodes_s *opcode, char **line)
char *frag = frag_more (opcode->insn_size * 2);
char *str = *line;
int where = frag - frag_now->fr_literal;
- static unsigned int prev = 0; /* Previous opcode. */
int regno1 = -2;
int regno2 = -2;
@@ -1403,7 +1411,7 @@ avr_operands (struct avr_opcodes_s *opcode, char **line)
(AVR core bug, fixed in the newer devices). */
if (!(avr_opt.no_skip_bug ||
(avr_mcu->isa & (AVR_ISA_MUL | AVR_ISA_MOVW)))
- && AVR_SKIP_P (prev))
+ && AVR_SKIP_P (frag_now->tc_frag_data.prev_opcode))
as_warn (_("skipping two-word instruction"));
bfd_putl32 ((bfd_vma) bin, frag);
@@ -1411,7 +1419,7 @@ avr_operands (struct avr_opcodes_s *opcode, char **line)
else
bfd_putl16 ((bfd_vma) bin, frag);
- prev = bin;
+ frag_now->tc_frag_data.prev_opcode = bin;
*line = str;
return bin;
}