+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