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]

[PATCH, i386]: Optimization of the i386 and x86_64 compilers


Hello!

Attached patch implements the idea, proposed by Michael Meissner in PR
31019. The core of his idea is to substitute (1 << ix86_[tune|arch])
in x86_some_var & (1 << ix86_[tune|arch])) by a precalculated global
variable.

The results of this patch are quite suprising as the text size of cc1
on i686 host was lowered considerably:

size cc1
  text    data     bss     dec     hex filename
7632793   18876  574516 8226185  7d8589 cc1

size cc1-patched
  text    data     bss     dec     hex filename
6731749   18876  574516 7325141  6fc5d5 cc1-patched

Yes, for 901k.

This effect could be partially attributed to the way i386 handles
variable shifts. Unpached gcc uses code that also clobbers %ecx:

8554612:	8b 0d 9c a1 81 08    	mov    0x881a19c,%ecx
8554618:	a1 a4 4b 72 08       	mov    0x8724ba4,%eax
855461d:	d3 f8                	sar    %cl,%eax
855461f:	a8 01                	test   $0x1,%al

Patched gcc uses following code:

8498762:	a1 a0 e1 73 08       	mov    0x873e1a0,%eax
8498767:	85 05 04 8c 64 08    	test   %eax,0x8648c04


2007-03-02 Uros Bizjak <ubizjak@gmail.com> Michael Meissner <michael.meissner@amd.com>

       * config/i386/i386.h (TUNEMASK): Redefine to use ix86_tune_mask.
	(ARCHMASK): Define.
	(TARGET_CMOVE): Use ARCHMASK.
	(TARGET_CMPXCHG): Ditto.
	(TARGET_CMPXCHG8B): Ditto.
	(TARGET_XADD): Ditto.
	(TARGET_BSWAP): Ditto.
	* config/i386/i386.c (ix86_tune_mask): New global variable.
	(ix86_arch_mask): Ditto.
	(override_options): Initialize ix86_tune_mask and
	ix86_arch_mask. Use ARCHMASK to clear MASK_NO_FANCY_MATH_387 in
	target_flags.

The patch was bootstrapped on i686-pc-linux-gnu, regression tested for
c, c++ and gfortran.

BTW: The patch also rearranges processors #defines into more logical sequence.

Uros.

Attachment: i386-mask.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]