This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello! This patch adds back generation of cld instructions when stringops are used in the function. cld insn is emitted as unspec volatile at the end of function prologue. Currently, patched gcc emits cld when "-mcld" is added to compile flags. Currently, there is no configure-time support, I think we should first reach a consensus on how to configure this. We can ./configure --with-cld (or something), where no cld generation is default. Anyway the code for: --cut here-- extern void *memcpy (void *, const void *, __SIZE_TYPE__); int foo[10]; int bar[10]; char baz[15]; char quux[15]; void do_copy () { memcpy (foo, bar, sizeof foo); memcpy (baz, quux, sizeof baz); } --cut here-- now generates (gcc -Os): do_copy: pushl %ebp movl %esp, %ebp pushl %edi pushl %esi subl $8, %esp cld <- here movl $foo, %edi movl $bar, %esi movl $10, %ecx rep movsl movl $baz, %edi movl $quux, %esi movb $15, %cl rep movsb popl %eax popl %edx popl %esi popl %edi popl %ebp ret 2008-03-06 Uros Bizjak <ubizjak@gmail.com> * config/i386/i386.h (TARGET_CLD): New define. (struct machine_function): Add needs_cld field. (ix86_current_function_needs_cld): New define. * config/i386/i386.md (UNSPEC_CLD): New unspec volatile constant. ("cld"): New isns pattern. ("strmov_singleop"): Set ix86_current_function_needs_cld flag. ("rep_mov"): Ditto. ("strset_singleop"): Ditto. ("rep_stos"): Ditto. ("cmpstrnqi_nz_1"): Ditto. ("cmpstrnqi_1"): Ditto. ("strlenqi_1"): Ditto. * config/i386/i386.opt (mcld): New option. * config/i386/i386.c (ix86_expand_prologue): Emit cld insn for TARGET_CLD when ix86_current_function_needs_cld is set. The patch was bootstrapped on i686-pc-linux-gnu, regression test with -mcld is in progress. Uros.
Attachment:
p.diff.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |