------- Comment #2 from ubizjak at gmail dot com  2007-06-22 09:50 -------
The problem here is exposed with core2_cost table, where mmxsse_to_integer is
as low (2 units) as move between integer registers (2 units). Such a low value
causes gcc to happily move SImode values between SSE and integer registers.

The problem itself is in ix86_modes_tieable_p(). Since all integer modes are
tieable, They have to be tieable in ALL register classes. Due to this, we must
enable HImode and QImode moves to, from and between SSE and MMX register.

A question arises, if this is a wise thing to do. Having all integer modes
wandering around in SSE as well as integer registers is not a good thing, as we
will have many moves between these sets (you can't add a SImode value in SSE,
SSE regs can't be index registers, etc). Due to this, perhaps the best solution
is to artifically raise mmxsse_to_integer to 8 units, and this will effectively
prevent moves to and from register sets.


-- 

ubizjak at gmail dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2007-06-22 09:50:39
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32413

Reply via email to