+2018-02-27 H.J. Lu <hongjiu.lu@intel.com>
+
+ * NEWS: Rename .nop to .nops.
+ * doc/as.texinfo: Likewise.
+ * read.c (potable): Add "nops". Remove "nop".
+ (s_nop): Renamed to ...
+ (s_nops): This.
+ * read.h (s_nop): Renamed to ...
+ (s_nops): This.
+ * write.c (cvt_frag_to_fill): Rename .nop to .nops.
+ (md_generate_nops): Likewise.
+ (relax_segment): Likewise.
+ * testsuite/gas/i386/nop-1.d: Updated.
+ * testsuite/gas/i386/nop-1.s: Likewise.
+ * testsuite/gas/i386/nop-2.d: Likewise.
+ * testsuite/gas/i386/nop-2.s: Likewise.
+ * testsuite/gas/i386/nop-3.d: Likewise.
+ * testsuite/gas/i386/nop-3.s: Likewise.
+ * testsuite/gas/i386/nop-4.d: Likewise.
+ * testsuite/gas/i386/nop-4.s: Likewise.
+ * testsuite/gas/i386/nop-5.d: Likewise.
+ * testsuite/gas/i386/nop-5.s: Likewise.
+ * testsuite/gas/i386/nop-6.d: Likewise.
+ * testsuite/gas/i386/nop-6.s: Likewise.
+ * testsuite/gas/i386/nop-bad-1.l: Likewise.
+ * testsuite/gas/i386/nop-bad-1.s: Likewise.
+ * testsuite/gas/i386/x86-64-nop-1.d: Likewise.
+ * testsuite/gas/i386/x86-64-nop-2.d: Likewise.
+ * testsuite/gas/i386/x86-64-nop-3.d: Likewise.
+ * testsuite/gas/i386/x86-64-nop-4.d: Likewise.
+ * testsuite/gas/i386/x86-64-nop-5.d: Likewise.
+ * testsuite/gas/i386/x86-64-nop-6.d: Likewise.
+
2018-02-27 H.J. Lu <hongjiu.lu@intel.com>
PR gas/22871
* Add -O[2|s] command-line options to x86 assembler to enable alternate
shorter instruction encoding.
-* Add support for .nop directive. It is currently supported only for
+* Add support for .nops directive. It is currently supported only for
x86 targets.
Changes in 2.30:
* MRI:: @code{.mri @var{val}}
* Noaltmacro:: @code{.noaltmacro}
* Nolist:: @code{.nolist}
-* Nop:: @code{.nop @var{size}[, @var{control}]}
+* Nops:: @code{.nops @var{size}[, @var{control}]}
* Octa:: @code{.octa @var{bignums}}
* Offset:: @code{.offset @var{loc}}
* Org:: @code{.org @var{new-lc}, @var{fill}}
counter, and @code{.nolist} decrements it. Assembly listings are
generated whenever the counter is greater than zero.
-@node Nop
-@section @code{.nop @var{size}[, @var{control}]}
+@node Nops
+@section @code{.nops @var{size}[, @var{control}]}
-@cindex @code{nop} directive
+@cindex @code{nops} directive
@cindex filling memory with no-op instructions
This directive emits @var{size} bytes filled with no-op instructions.
@var{size} is absolute expression, which must be a positve value.
{"noformat", s_ignore, 0},
{"nolist", listing_list, 0}, /* Turn listing off. */
{"nopage", listing_nopage, 0},
+ {"nops", s_nops, 0},
{"octa", cons, 16},
{"offset", s_struct, 0},
{"org", s_org, 0},
/* size */
{"space", s_space, 0},
{"skip", s_space, 0},
- {"nop", s_nop, 0},
{"sleb128", s_leb128, 1},
{"spc", s_ignore, 0},
{"stabd", s_stab, 'd'},
}
void
-s_nop (int ignore ATTRIBUTE_UNUSED)
+s_nops (int ignore ATTRIBUTE_UNUSED)
{
expressionS exp;
expressionS val;
}
}
else
- as_bad (_("unsupported variable nop control in .nop directive"));
+ as_bad (_("unsupported variable nop control in .nops directive"));
demand_empty_rest_of_line ();
}
extern void s_rept (int);
extern void s_set (int);
extern void s_space (int mult);
-extern void s_nop (int);
+extern void s_nops (int);
extern void s_stab (int what);
extern void s_struct (int);
extern void s_text (int);
#objdump: -drw
-#name: i386 .nop 1
+#name: i386 .nops 1
.*: +file format .*
.text
single:
- .nop 0
+ .nops 0
nop
pseudo_1:
- .nop 1
+ .nops 1
pseudo_8:
- .nop 8
+ .nops 8
pseudo_8_4:
- .nop 8, 4
+ .nops 8, 4
pseudo_20:
- .nop 20
+ .nops 20
pseudo_30:
- .nop 30
+ .nops 30
xor %eax, %eax
#objdump: -drw -Mi8086
-#name: i386 .nop 2
+#name: i386 .nops 2
.*: +file format .*
.text
.code16
single:
- .nop 0
+ .nops 0
nop
pseudo_1:
- .nop 1
+ .nops 1
pseudo_8:
- .nop 8
+ .nops 8
pseudo_8_4:
- .nop 8, 4
+ .nops 8, 4
pseudo_20:
- .nop 20
+ .nops 20
pseudo_30:
- .nop 30
+ .nops 30
xor %eax, %eax
#objdump: -drw
-#name: i386 .nop 3
+#name: i386 .nops 3
.*: +file format .*
140:
testl %eax, %eax
141:
- .nop -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b)),7
+ .nops -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b)),7
142:
xor %eax, %eax
.pushsection .altinstr_replacement,"ax"
#objdump: -drw
-#name: i386 .nop 4
+#name: i386 .nops 4
.*: +file format .*
140:
testl %eax, %eax
141:
- .nop -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b))
+ .nops -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b))
142:
xor %eax, %eax
.pushsection .altinstr_replacement,"ax"
#objdump: -drw
-#name: i386 .nop 5
+#name: i386 .nops 5
.*: +file format .*
140:
testl %eax, %eax
141:
- .nop -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b)),6
+ .nops -(((144f-143f)-(141b-140b)) > 0)*((144f-143f)-(141b-140b)),6
142:
xor %eax, %eax
.pushsection .altinstr_replacement,"ax"
#objdump: -drw
-#name: i386 .nop 6
+#name: i386 .nops 6
.*: +file format .*
.macro mknops nr_bytes
- .nop \nr_bytes, 9
+ .nops \nr_bytes, 9
.endm
.macro ALTERNATIVE
.*: Assembler messages:
.*:2: Warning: negative nop control byte, ignored
-.*:4: Warning: \.space, \.nop or \.fill with negative value, ignored
+.*:4: Warning: \.space, \.nops or \.fill with negative value, ignored
.*:3: Error: invalide single nop size: 20 \(expect within \[0, [0-9]+\]\)
.text
- .nop 100, -2
- .nop 100, 20
- .nop -1
+ .nops 100, -2
+ .nops 100, 20
+ .nops -1
#source: nop-1.s
#objdump: -drw
-#name: x86-64 .nop 1
+#name: x86-64 .nops 1
.*: +file format .*
#source: nop-2.s
#objdump: -drw -Mi8086
-#name: x86-64 .nop 2
+#name: x86-64 .nops 2
.*: +file format .*
#source: nop-3.s
#objdump: -drw
-#name: x86-64 .nop 3
+#name: x86-64 .nops 3
.*: +file format .*
#source: nop-4.s
#objdump: -drw
-#name: x86-64 .nop 4
+#name: x86-64 .nops 4
.*: +file format .*
#source: nop-5.s
#objdump: -drw
-#name: x86-64 .nop 5
+#name: x86-64 .nops 5
.*: +file format .*
#source: nop-6.s
#objdump: -drw
-#name: x86-64 .nop 6
+#name: x86-64 .nops 6
.*: +file format .*
if (fragP->fr_offset < 0)
{
as_bad_where (fragP->fr_file, fragP->fr_line,
- _("attempt to .org/.space/.nop backwards? (%ld)"),
+ _("attempt to .org/.space/.nops backwards? (%ld)"),
(long) fragP->fr_offset);
fragP->fr_offset = 0;
}
offsetT count ATTRIBUTE_UNUSED,
int control ATTRIBUTE_UNUSED)
{
- as_bad (_("unimplemented .nop directive"));
+ as_bad (_("unimplemented .nops directive"));
}
#endif
}
as_warn_where (fragP->fr_file, fragP->fr_line,
- _(".space, .nop or .fill with negative value, ignored"));
+ _(".space, .nops or .fill with negative value, ignored"));
fragP->fr_symbol = 0;
}
else