[Bug target/18019] [4.0 Regression] -march=pentium4 generates word fetch instead of byte fetch

neroden at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Thu Dec 2 03:35:00 GMT 2004


------- Additional Comments From neroden at gcc dot gnu dot org  2004-12-02 03:35 -------
Jan's message quoted in the previous comment seems to be orthogonal to the 
main problem in this bug.  The problem is that a word fetch is being generated 
which *reads out of bounds memory*. 
 
If the last byte in a page is being fetched, you must not extend that to fetch 
the next byte; if the first byte in a page is being fetched, you must not 
extend that to fetch the previous byte.  Those are the key failure situations 
which must be prevented, regardless of whether this is -Os, -O2, or -O0. 
 
It doesn't appear to me that the changes proposed in Jan's message actually 
address that, since none of them seem to feature a alignment or other type of 
correctness check before converting a QImode move into a (possibly illegal) 
SImode move. 
 
In particular, this statement looks like it's wrong: 
>while for 
>TARGET_PARTIAL_REG_STALL/TARGET_PARTIAL_REG_DEPENDENCY we can still use 
>the full moves as long as they don't encode longer.  
 
I believe a check is required that the full moves don't cause a segmentation 
violation.  An alignment check would be sufficient (it would prohibit more 
cases than strictly necessary, but this is a correctness issue, and I haven't 
thought of a better check). 
 

-- 


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



More information about the Gcc-bugs mailing list