[Bug target/72839] New: MOVE_RATIO is too small for Lakemont
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Aug 8 15:25:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72839
Bug ID: 72839
Summary: MOVE_RATIO is too small for Lakemont
Product: gcc
Version: 6.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: ubizjak at gmail dot com
Target Milestone: ---
Host: i386
[hjl@gnu-6 stringops-1]$ cat x.i
extern char *strcpy (char *, const char *);
void
foo (char *s)
{
strcpy (s,
"12345678123456781234567812345678123456781234567812345678"
"1234567");
}
[hjl@gnu-6 stringops-1]$ gcc -O2 -mtune=lakemont -m32 -S x.i
[hjl@gnu-6 stringops-1]$ cat x.s
.file "x.i"
.section .rodata.str1.4,"aMS",@progbits,1
.align 4
.LC0:
.string
"123456781234567812345678123456781234567812345678123456781234567"
.text
.p2align 4,,15
.globl foo
.type foo, @function
foo:
.LFB0:
.cfi_startproc
pushl %edi
.cfi_def_cfa_offset 8
.cfi_offset 7, -8
pushl %esi
.cfi_def_cfa_offset 12
.cfi_offset 6, -12
movl 12(%esp), %edi
movl $.LC0, %esi
movl $64, %eax
testl $1, %edi
jne .L21
testl $2, %edi
jne .L22
.L3:
movl %eax, %ecx
xorl %edx, %edx
shrl $2, %ecx
testb $2, %al
rep movsl
je .L4
movw (%esi), %dx
movw %dx, (%edi)
movl $2, %edx
.L4:
testb $1, %al
je .L1
movb (%esi,%edx), %al
movb %al, (%edi,%edx)
.L1:
popl %esi
.cfi_remember_state
.cfi_restore 6
.cfi_def_cfa_offset 8
popl %edi
.cfi_restore 7
.cfi_def_cfa_offset 4
ret
.p2align 4,,7
.p2align 3
.L21:
.cfi_restore_state
movb .LC0, %al
incl %edi
movb %al, -1(%edi)
movl $.LC0+1, %esi
movl $63, %eax
testl $2, %edi
je .L3
.p2align 4,,7
.p2align 3
.L22:
movw (%esi), %dx
addl $2, %edi
movw %dx, -2(%edi)
addl $2, %esi
subl $2, %eax
jmp .L3
.cfi_endproc
.LFE0:
.size foo, .-foo
The code is bigger and slower.
More information about the Gcc-bugs
mailing list