История изменений
Исправление Psilocybe, (текущая версия) :
Вариант с уменьшенным числом джампов. Если полагаться на эвристику, что пробелов не слишком много, а пересылка байта быстрее джампа, то должно работать быстрее.
void remove_spaces(char *src, char *out) {
for( ;*src; src++ ) {
*out = *src;
out+= *src != ' ';
}
*out = '\0';
}
remove_spaces(char*, char*):
jmp .L8
.L3:
mov BYTE PTR [rsi], al
xor eax, eax
cmp BYTE PTR [rdi], 32
setne al
add rdi, 1
add rsi, rax
.L8:
movzx eax, BYTE PTR [rdi]
test al, al
jne .L3
mov BYTE PTR [rsi], 0
ret
Исходная версия Psilocybe, :
Вариант с уменьшенным числом джампов.
void remove_spaces(char *src, char *out) {
for( ;*src; src++ ) {
*out = *src;
out+= *src != ' ';
}
*out = '\0';
}
remove_spaces(char*, char*):
jmp .L8
.L3:
mov BYTE PTR [rsi], al
xor eax, eax
cmp BYTE PTR [rdi], 32
setne al
add rdi, 1
add rsi, rax
.L8:
movzx eax, BYTE PTR [rdi]
test al, al
jne .L3
mov BYTE PTR [rsi], 0
ret