public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug other/20670] New: IA-64 exception mechanism erase $f29
@ 2005-03-28 18:15 ochem at gnat dot com
  2005-03-28 18:31 ` [Bug other/20670] " ochem at gnat dot com
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: ochem at gnat dot com @ 2005-03-28 18:15 UTC (permalink / raw)
  To: gcc-bugs

There is some strange behavihour about the register f29 (and may be the next 
floating registers) when an exception is raised. Its value is not properly 
loaded. Going into the sources of gcc, I found sth interresting there : 
 
unwind-ia64.c:2298:"(p7) ldf.fill f29 = [r27]              \n\t" 
 
before this assingment, $f29 has the right value. Since it hasn't be used (ie 
it wasn't saved by anything), as far as I understand, it shouldn't be modified 
here, but it is. My belief is that there is sth wrong with r27. Here is a 
little extract of the few lines above : 
 
2258: "ld8 r22 = [r20], 8                     \n\t" 
2259: "(p6) ldf.fill f18 = [r24]              \n\t" 
2260: "cmp.ne p7, p0 = r0, r25                \n\t" 
2261: ";;                                     \n\t" 
2262: "ld8 r23 = [r20], 8                     \n\t" 
2263: "(p7) ldf.fill f19 = [r25]              \n\t" 
2264: "cmp.ne p6, p0 = r0, r26                \n\t" 
2265: ";;                                     \n\t" 
2266: "ld8 r24 = [r20], 8                     \n\t" 
2267: "(p6) ldf.fill f20 = [r26]              \n\t" 
2268: "cmp.ne p7, p0 = r0, r27                \n\t" 
2269: ";;                                     \n\t" 
2270: "ld8 r25 = [r20], 8                     \n\t" 
2271: "(p7) ldf.fill f21 = [r27]              \n\t" 
2272: "cmp.ne p6, p0 = r0, r28                \n\t" 
2273: ";;                                     \n\t" 
2274: "ld8 r26 = [r20], 8                     \n\t" 
2275: "(p6) ldf.fill f22 = [r28]              \n\t" 
2276: "cmp.ne p7, p0 = r0, r29                \n\t" 
2277: ";;                                     \n\t" 
2278: "ld8 r28 = [r20], 8                     \n\t" 
2279: "(p7) ldf.fill f23 = [r29]              \n\t" 
2280: "cmp.ne p6, p0 = r0, r22                \n\t" 
2281: ";;                                     \n\t" 
2282: "ld8 r29 = [r20], 8                     \n\t" 
2283: "(p6) ldf.fill f24 = [r22]              \n\t" 
2284: "cmp.ne p7, p0 = r0, r23                \n\t" 
2285: ";;                                     \n\t" 
2286: "(p7) ldf.fill f25 = [r23]              \n\t" 
2287: "cmp.ne p6, p0 = r0, r24                \n\t" 
2288: "cmp.ne p7, p0 = r0, r25                \n\t" 
2289: ";;                                     \n\t" 
2290: "(p6) ldf.fill f26 = [r24]              \n\t" 
2291: "(p7) ldf.fill f27 = [r25]              \n\t" 
2292: "cmp.ne p6, p0 = r0, r26                \n\t" 
2293: ";;                                     \n\t" 
2294: "(p6) ldf.fill f28 = [r26]              \n\t" 
2295: "cmp.ne p7, p0 = r0, r27                \n\t" 
2296: "cmp.ne p6, p0 = r0, r28                \n\t" 
2297: ";;                                     \n\t" 
2298: "(p7) ldf.fill f29 = [r27]              \n\t" 
 
As you see, r27 is used to fill the value of f21. Like r26 for f20, r25 for f19 
etc. But, while r25, r26, r28 and so are reloaded before filling the last float 
registers, r27 seems to be missing, so its value for f29 is the same as the one 
used for f21. The fix seems to be quite light, just add the proper load for r27 
at the right place.

-- 
           Summary: IA-64 exception mechanism erase $f29
           Product: gcc
           Version: 3.4.4
            Status: UNCONFIRMED
          Severity: critical
          Priority: P2
         Component: other
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ochem at gnat dot com
                CC: gcc-bugs at gcc dot gnu dot org,ochem at gnat dot com
 GCC build triplet: 3.4.4
  GCC host triplet: 3.4.4
GCC target triplet: 3.4.4


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


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2005-04-20  2:07 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-28 18:15 [Bug other/20670] New: IA-64 exception mechanism erase $f29 ochem at gnat dot com
2005-03-28 18:31 ` [Bug other/20670] " ochem at gnat dot com
2005-03-28 19:06 ` [Bug target/20670] " pinskia at gcc dot gnu dot org
2005-03-30  3:40 ` wilson at gcc dot gnu dot org
2005-03-30 20:13 ` ochem at gnat dot com
2005-04-05  4:22 ` wilson at gcc dot gnu dot org
2005-04-06  3:48 ` cvs-commit at gcc dot gnu dot org
2005-04-06  3:50 ` cvs-commit at gcc dot gnu dot org
2005-04-06 19:11 ` cvs-commit at gcc dot gnu dot org
2005-04-13  0:50 ` cvs-commit at gcc dot gnu dot org
2005-04-13  0:58 ` wilson at gcc dot gnu dot org
2005-04-20  1:45 ` cvs-commit at gcc dot gnu dot org
2005-04-20  2:08 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).