История изменений
Исправление LINUX-ORG-RU, (текущая версия) :
/* коперигхт Ц ЛИНУКС-ORG-РУ, всюе прова резервед */
#include <stdio.h>
int main(int argc, char *argv[])
{
char out[256]={0};
char*ptr=out;
while(*argv[1]++ && *ptr ){ switch(*argv[1])
{
case ' ' : break;
default : *ptr=*argv[1];ptr++;break;
}}
puts(out);
return 0;
}
gcc fast.c -03 -msse -S
.file "fast.c"
.text
.section .text.startup,"ax",@progbits
.p2align 4
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
subq $264, %rsp
.cfi_def_cfa_offset 272
pxor %xmm0, %xmm0
movq 8(%rsi), %rcx
movq %rsp, %r8
movups %xmm0, (%rsp)
movups %xmm0, 16(%rsp)
movq %r8, %rdi
movups %xmm0, 32(%rsp)
movups %xmm0, 48(%rsp)
movups %xmm0, 64(%rsp)
movups %xmm0, 80(%rsp)
movups %xmm0, 96(%rsp)
movups %xmm0, 112(%rsp)
movups %xmm0, 128(%rsp)
movups %xmm0, 144(%rsp)
movups %xmm0, 160(%rsp)
movups %xmm0, 176(%rsp)
movups %xmm0, 192(%rsp)
movups %xmm0, 208(%rsp)
movups %xmm0, 224(%rsp)
movups %xmm0, 240(%rsp)
.L2:
leaq 1(%rcx), %rax
.p2align 4,,10
.p2align 3
.L3:
movq %rax, 8(%rsi)
cmpb $0, -1(%rax)
movq %rax, %rcx
jne .L4
cmpb $0, (%rdi)
je .L9
.L4:
movzbl (%rax), %edx
addq $1, %rax
cmpb $32, %dl
je .L3
movb %dl, (%rdi)
addq $1, %rdi
jmp .L2
.p2align 4,,10
.p2align 3
.L9:
movq %r8, %rdi
call puts@PLT
xorl %eax, %eax
addq $264, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (Debian 10.2.1-3) 10.2.1 20201224"
.section .note.GNU-stack,"",@progbits
Исправление LINUX-ORG-RU, :
/* коперигхт Ц ЛИНУКС-ORG-РУ, всюе прова резервед */
#include <stdio.h>
int main(int argc, char *argv[])
{
char out[256]={0};
char*ptr=out;
while(*argv[1]++ || *ptr ){ switch(*argv[1])
{
case ' ' : break;
default : *ptr=*argv[1];ptr++;break;
}}
puts(out);
return 0;
}
gcc fast.c -03 -msse -S
.file "fast.c"
.text
.section .text.startup,"ax",@progbits
.p2align 4
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
subq $264, %rsp
.cfi_def_cfa_offset 272
pxor %xmm0, %xmm0
movq 8(%rsi), %rcx
movq %rsp, %r8
movups %xmm0, (%rsp)
movups %xmm0, 16(%rsp)
movq %r8, %rdi
movups %xmm0, 32(%rsp)
movups %xmm0, 48(%rsp)
movups %xmm0, 64(%rsp)
movups %xmm0, 80(%rsp)
movups %xmm0, 96(%rsp)
movups %xmm0, 112(%rsp)
movups %xmm0, 128(%rsp)
movups %xmm0, 144(%rsp)
movups %xmm0, 160(%rsp)
movups %xmm0, 176(%rsp)
movups %xmm0, 192(%rsp)
movups %xmm0, 208(%rsp)
movups %xmm0, 224(%rsp)
movups %xmm0, 240(%rsp)
.L2:
leaq 1(%rcx), %rax
.p2align 4,,10
.p2align 3
.L3:
movq %rax, 8(%rsi)
cmpb $0, -1(%rax)
movq %rax, %rcx
jne .L4
cmpb $0, (%rdi)
je .L9
.L4:
movzbl (%rax), %edx
addq $1, %rax
cmpb $32, %dl
je .L3
movb %dl, (%rdi)
addq $1, %rdi
jmp .L2
.p2align 4,,10
.p2align 3
.L9:
movq %r8, %rdi
call puts@PLT
xorl %eax, %eax
addq $264, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (Debian 10.2.1-3) 10.2.1 20201224"
.section .note.GNU-stack,"",@progbits
Исходная версия LINUX-ORG-RU, :
/* коперигхт Ц ЛИНУКС-ORG-РУ, всюе прова резервед */
#include <stdio.h>
int main(int argc, char *argv[])
{
char out[256]={0};
char*ptr=out;
while(*argv[1]++ || *ptr ){ switch(*argv[1])
{
case ' ' : break;
default : *ptr=*argv[1];ptr++;break;
}}
puts(out);
return 0;
}