Commit 8f065d3b authored by H.J. Lu's avatar H.J. Lu

gas: Rename .nop directive to .nops

Since directives of NO_PSEUDO_DOT targets don't have the leading '.'
and "nop" can be a valid instruction, rename .nop directive to .nops
to avoid conflict.

	* 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.
parent e05cac70
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
......
......@@ -3,7 +3,7 @@
* 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:
......
......@@ -4482,7 +4482,7 @@ Some machine configurations provide additional directives.
* 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}}
......@@ -6199,10 +6199,10 @@ internal counter (which is zero initially). @code{.list} increments the
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.
......
......@@ -417,6 +417,7 @@ static const pseudo_typeS potable[] = {
{"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},
......@@ -442,7 +443,6 @@ static const pseudo_typeS potable[] = {
/* 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'},
......@@ -3510,7 +3510,7 @@ s_space (int mult)
}
void
s_nop (int ignore ATTRIBUTE_UNUSED)
s_nops (int ignore ATTRIBUTE_UNUSED)
{
expressionS exp;
expressionS val;
......@@ -3556,7 +3556,7 @@ s_nop (int ignore ATTRIBUTE_UNUSED)
}
}
else
as_bad (_("unsupported variable nop control in .nop directive"));
as_bad (_("unsupported variable nop control in .nops directive"));
demand_empty_rest_of_line ();
}
......
......@@ -206,7 +206,7 @@ extern void s_purgem (int);
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 .*
......
......@@ -4,7 +4,7 @@ _start:
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 .*
......
......@@ -4,7 +4,7 @@ _start:
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 .*
......
......@@ -4,7 +4,7 @@ _start:
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 .*
......
......@@ -453,7 +453,7 @@ skip_align:
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;
}
......@@ -1587,7 +1587,7 @@ md_generate_nops (fragS *f ATTRIBUTE_UNUSED,
offsetT count ATTRIBUTE_UNUSED,
int control ATTRIBUTE_UNUSED)
{
as_bad (_("unimplemented .nop directive"));
as_bad (_("unimplemented .nops directive"));
}
#endif
......@@ -2840,7 +2840,7 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
}
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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment