Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
gcc41
nvl161673.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nvl161673.patch of Package gcc41
You asked whether there was a smaller patch that only reordered operands in the backend to "fix" the indexed load/store problem. David Edelsohn does have one which I'm attaching here for you. I just applied the patch to the latest GCC 4.1 branch and bootstrapped it and regtested it with no problems. * config/rs6000/rs6000.c (print_operand, 'y'): Swap position of registers in index addresses. (print_operand_address): Same. Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c.orig 2007-01-15 11:11:08.000000000 +0100 +++ gcc/config/rs6000/rs6000.c 2009-11-20 13:41:27.000000000 +0100 @@ -10784,12 +10784,14 @@ print_operand (FILE *file, rtx x, int co && REG_P (XEXP (tmp, 0)) && REG_P (XEXP (tmp, 1))); - if (REGNO (XEXP (tmp, 0)) == 0) - fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (tmp, 1)) ], - reg_names[ REGNO (XEXP (tmp, 0)) ]); - else + /* Second index register frequently contains base address, + preferentially place it in rA position unless it is r0. */ + if (REGNO (XEXP (tmp, 1)) == 0) fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (tmp, 0)) ], reg_names[ REGNO (XEXP (tmp, 1)) ]); + else + fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (tmp, 1)) ], + reg_names[ REGNO (XEXP (tmp, 0)) ]); } break; } @@ -10843,12 +10845,15 @@ print_operand_address (FILE *file, rtx x else if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == REG) { gcc_assert (REG_P (XEXP (x, 0))); - if (REGNO (XEXP (x, 0)) == 0) - fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (x, 1)) ], - reg_names[ REGNO (XEXP (x, 0)) ]); - else + + /* Second index register frequently contains base address, + preferentially place it in rA position unless it is r0. */ + if (REGNO (XEXP (x, 1)) == 0) fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (x, 0)) ], reg_names[ REGNO (XEXP (x, 1)) ]); + else + fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (x, 1)) ], + reg_names[ REGNO (XEXP (x, 0)) ]); } else if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 1)) == CONST_INT) fprintf (file, HOST_WIDE_INT_PRINT_DEC "(%s)",
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor