From 035936da058aee94f16cd82b6a433bddd9678118 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 12 Feb 1997 20:20:11 +0000 Subject: [PATCH] * config/tc-mips.c (append_insn): Warn about an attempt to put an extended instruction in a delay slot when not reordering. Set prev_insn_valid even if not reordering. (md_convert_frag): Warn if an extended instruction appears in a delay slot. --- gas/ChangeLog | 6 ++++++ gas/config/tc-mips.c | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 0afe16e934..2e3978d2a0 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,11 @@ Wed Feb 12 14:36:29 1997 Ian Lance Taylor + * config/tc-mips.c (append_insn): Warn about an attempt to put an + extended instruction in a delay slot when not reordering. Set + prev_insn_valid even if not reordering. + (md_convert_frag): Warn if an extended instruction appears in a + delay slot. + * config/tc-mips.c (mips_pseudo_table): Add "insn". (s_insn): New static function. * doc/c-mips.texi: Document .insn. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 683019846b..04be71e941 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -1493,7 +1493,15 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi) f = frag_more (2); } else - f = frag_more (4); + { + if (mips16 + && mips_noreorder + && (prev_pinfo & INSN_UNCOND_BRANCH_DELAY) != 0) + as_warn ("extended instruction in delay slot"); + + f = frag_more (4); + } + fixp = NULL; if (address_expr != NULL && reloc_type < BFD_RELOC_UNUSED) { @@ -1980,6 +1988,7 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi) PC relative relocs. */ prev_insn = *ip; prev_insn_reloc_type = reloc_type; + prev_insn_valid = 1; } /* We just output an insn, so the next one doesn't have a label. */ @@ -9969,6 +9978,12 @@ md_convert_frag (abfd, asec, fragp) record_alignment (asec, op->shift); } + if (ext + && (RELAX_MIPS16_JAL_DSLOT (fragp->fr_subtype) + || RELAX_MIPS16_DSLOT (fragp->fr_subtype))) + as_warn_where (fragp->fr_file, fragp->fr_line, + "extended instruction in delay slot"); + buf = (bfd_byte *) (fragp->fr_literal + fragp->fr_fix); if (target_big_endian) -- 2.34.1