x86 memcmp 4+2+1 vs 4+4 for 7

Criado O diff nunca expira
23 remoções
204 linhas
21 adições
198 linhas
.LCPI0_0:
.LCPI0_0:
.byte 15 # 0xf
.byte 15 # 0xf
.byte 14 # 0xe
.byte 14 # 0xe
.byte 13 # 0xd
.byte 13 # 0xd
.byte 12 # 0xc
.byte 12 # 0xc
.byte 11 # 0xb
.byte 11 # 0xb
.byte 10 # 0xa
.byte 10 # 0xa
.byte 9 # 0x9
.byte 9 # 0x9
.byte 8 # 0x8
.byte 8 # 0x8
.byte 7 # 0x7
.byte 7 # 0x7
.byte 6 # 0x6
.byte 6 # 0x6
.byte 5 # 0x5
.byte 5 # 0x5
.byte 4 # 0x4
.byte 4 # 0x4
.byte 3 # 0x3
.byte 3 # 0x3
.byte 2 # 0x2
.byte 2 # 0x2
.byte 1 # 0x1
.byte 1 # 0x1
.byte 0 # 0x0
.byte 0 # 0x0
memcmp: # @memcmp
memcmp: # @memcmp
xor eax, eax
xor eax, eax
cmp rdx, 8
cmp rdx, 8
ja .LBB0_19
ja .LBB0_19
lea rcx, [rip + .LJTI0_0]
lea rcx, [rip + .LJTI0_0]
movsxd rdx, dword ptr [rcx + 4*rdx]
movsxd rdx, dword ptr [rcx + 4*rdx]
add rdx, rcx
add rdx, rcx
jmp rdx
jmp rdx
.LBB0_2:
.LBB0_2:
movzx eax, byte ptr [rdi]
movzx eax, byte ptr [rdi]
movzx ecx, byte ptr [rsi]
movzx ecx, byte ptr [rsi]
sub eax, ecx
sub eax, ecx
ret
ret
.LBB0_19:
.LBB0_19:
cmp rdx, 16
cmp rdx, 16
ja .LBB0_23
ja .LBB0_23
mov rcx, qword ptr [rdi]
mov rcx, qword ptr [rdi]
mov r8, qword ptr [rsi]
mov r8, qword ptr [rsi]
cmp rcx, r8
cmp rcx, r8
jne .LBB0_21
jne .LBB0_21
mov rcx, qword ptr [rdi + rdx - 8]
mov rcx, qword ptr [rdi + rdx - 8]
mov rdx, qword ptr [rsi + rdx - 8]
mov rdx, qword ptr [rsi + rdx - 8]
cmp rcx, rdx
cmp rcx, rdx
je .LBB0_34
je .LBB0_34
jmp .LBB0_17
jmp .LBB0_17
.LBB0_3:
.LBB0_3:
movbe ax, word ptr [rdi]
movbe ax, word ptr [rdi]
movzx eax, ax
movzx eax, ax
movbe cx, word ptr [rsi]
movbe cx, word ptr [rsi]
movzx ecx, cx
movzx ecx, cx
sub eax, ecx
sub eax, ecx
ret
ret
.LBB0_5:
.LBB0_5:
movbe ax, word ptr [rdi]
movbe ax, word ptr [rdi]
movzx eax, ax
movzx eax, ax
movbe cx, word ptr [rsi]
movbe cx, word ptr [rsi]
movzx ecx, cx
movzx ecx, cx
sub eax, ecx
sub eax, ecx
je .LBB0_6
je .LBB0_6
.LBB0_34:
.LBB0_34:
ret
ret
.LBB0_7:
.LBB0_7:
movbe eax, dword ptr [rdi]
movbe eax, dword ptr [rdi]
movbe ecx, dword ptr [rsi]
movbe ecx, dword ptr [rsi]
Text moved to lines 100-103
sub rax, rcx
movzx ecx, ax
shr rax
or eax, ecx
ret
.LBB0_8:
jmp .LBB0_8
.LBB0_9:
movbe eax, dword ptr [rdi]
movbe eax, dword ptr [rdi]
movbe ecx, dword ptr [rsi]
movbe ecx, dword ptr [rsi]
sub rax, rcx
sub rax, rcx
movzx ecx, ax
movzx ecx, ax
shr rax
shr rax
or eax, ecx
or eax, ecx
jne .LBB0_34
jne .LBB0_34
movzx eax, byte ptr [rdi + 4]
movzx eax, byte ptr [rdi + 4]
movzx ecx, byte ptr [rsi + 4]
movzx ecx, byte ptr [rsi + 4]
sub eax, ecx
sub eax, ecx
ret
ret
.LBB0_10:
.LBB0_11:
movbe eax, dword ptr [rdi]
movbe eax, dword ptr [rdi]
movbe ecx, dword ptr [rsi]
movbe ecx, dword ptr [rsi]
sub rax, rcx
sub rax, rcx
movzx ecx, ax
movzx ecx, ax
shr rax
shr rax
or eax, ecx
or eax, ecx
jne .LBB0_34
jne .LBB0_34
movbe ax, word ptr [rdi + 4]
movbe ax, word ptr [rdi + 4]
movzx eax, ax
movzx eax, ax
movbe cx, word ptr [rsi + 4]
movbe cx, word ptr [rsi + 4]
movzx ecx, cx
movzx ecx, cx
sub eax, ecx
sub eax, ecx
ret
ret
.LBB0_12:
.LBB0_13:
movbe eax, dword ptr [rdi]
movbe eax, dword ptr [rdi]
movbe ecx, dword ptr [rsi]
movbe ecx, dword ptr [rsi]
sub rax, rcx
sub rax, rcx
movzx ecx, ax
movzx ecx, ax
shr rax
shr rax
or eax, ecx
or eax, ecx