Minimum version of binutils required to compile the kernel is 2.25.
This version correctly handles the "rep" prefixes, so it is possible
to remove the semicolon, which was used to support ancient versions
of GNU as.
Due to the semicolon, the compiler considers "rep; insn" (or its
alternate "rep\n\tinsn" form) as two separate instructions. Removing
the semicolon makes asm length calculations more accurate, consequently
making scheduling and inlining decisions of the compiler more accurate.
Removing the semicolon also enables assembler checks involving "rep"
prefixes. Trying to assemble e.g. "rep addl %eax, %ebx" results in:
  Error: invalid instruction `add' after `rep'
Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Juergen Gross <jgross@suse.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Mares <mj@ucw.cz>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250418071437.4144391-1-ubizjak@gmail.com
        movw    %dx, %si
        movw    %sp, %di
        movw    $11, %cx
-       rep; movsl
+       rep movsl
 
        /* Pop full state from the stack */
        popal
        jz      4f
        movw    %sp, %si
        movw    $11, %cx
-       rep; movsl
+       rep movsl
 4:     addw    $44, %sp
 
        /* Restore state and return */
 
 static inline bool memcmp_fs(const void *s1, addr_t s2, size_t len)
 {
        bool diff;
-       asm volatile("fs; repe; cmpsb" CC_SET(nz)
+       asm volatile("fs repe cmpsb" CC_SET(nz)
                     : CC_OUT(nz) (diff), "+D" (s1), "+S" (s2), "+c" (len));
        return diff;
 }
 static inline bool memcmp_gs(const void *s1, addr_t s2, size_t len)
 {
        bool diff;
-       asm volatile("gs; repe; cmpsb" CC_SET(nz)
+       asm volatile("gs repe cmpsb" CC_SET(nz)
                     : CC_OUT(nz) (diff), "+D" (s1), "+S" (s2), "+c" (len));
        return diff;
 }
 
 {
        int d0, d1, d2;
        asm volatile(
-               "rep ; movsl\n\t"
+               "rep movsl\n\t"
                "movl %4,%%ecx\n\t"
-               "rep ; movsb\n\t"
+               "rep movsb"
                : "=&c" (d0), "=&D" (d1), "=&S" (d2)
                : "0" (n >> 2), "g" (n & 3), "1" (dest), "2" (src)
                : "memory");
 {
        long d0, d1, d2;
        asm volatile(
-               "rep ; movsq\n\t"
+               "rep movsq\n\t"
                "movq %4,%%rcx\n\t"
-               "rep ; movsb\n\t"
+               "rep movsb"
                : "=&c" (d0), "=&D" (d1), "=&S" (d2)
                : "0" (n >> 3), "g" (n & 7), "1" (dest), "2" (src)
                : "memory");
 
        movw    %dx, %si
        pushw   %cx
        shrw    $2, %cx
-       rep; movsl
+       rep movsl
        popw    %cx
        andw    $3, %cx
-       rep; movsb
+       rep movsb
        popw    %di
        popw    %si
        retl
        imull   $0x01010101,%eax
        pushw   %cx
        shrw    $2, %cx
-       rep; stosl
+       rep stosl
        popw    %cx
        andw    $3, %cx
-       rep; stosb
+       rep stosb
        popw    %di
        retl
 SYM_FUNC_END(memset)
 
        xorl    %eax, %eax
        subw    %di, %cx
        shrw    $2, %cx
-       rep; stosl
+       rep stosl
 
 # Jump to C code (should not return)
        calll   main
 
 int memcmp(const void *s1, const void *s2, size_t len)
 {
        bool diff;
-       asm("repe; cmpsb" CC_SET(nz)
+       asm("repe cmpsb" CC_SET(nz)
            : CC_OUT(nz) (diff), "+D" (s1), "+S" (s2), "+c" (len));
        return diff;
 }
 
                             "shrw %%cx ; "
                             "jnc 1f ; "
                             "stosw \n\t"
-                            "1: rep;stosl ; "
+                            "1: rep stosl ; "
                             "popw %%es"
                             : "+D" (dst), "+c" (npad)
                             : "bdS" (video_segment),