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

            Bug ID: 57865
           Summary: Broken _save64gpr and _rest64gpr usage
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sebastian.hu...@embedded-brains.de

Created attachment 30483
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30483&action=edit
Test case.

The 64-bit GPR save and restore sequence is broken and destroys the link
register saved on the stack:

powerpc-eabi-gcc -mcpu=8540 -mspe -mabi=spe -mfloat-gprs=double -Os -S test.c

diff -u test-4.7.2.s test-4.8.1.s 
--- test-4.7.2.s        2013-07-09 13:09:56.418360402 +0200
+++ test-4.8.1.s        2013-07-09 13:31:59.097519823 +0200
@@ -6,7 +6,7 @@
 f:
        stwu 1,-56(1)
        mflr 0
-       addi 11,1,-88
+       addi 11,1,-80
        stw 0,60(1)
        bl _save64gpr_29
        mr 29,3
@@ -15,16 +15,16 @@
        stw 6,24(1)
        bl g
        lwz 5,16(1)
+       lwz 6,24(1)
+       evmergelo 31,3,4
        stw 3,8(1)
        stw 4,12(1)
        mr 3,29
-       lwz 6,24(1)
        mr 4,30
-       evldd 31,8(1)
        bl h
-       addi 11,1,-88
+       addi 11,1,-80
        efdctsiz 3,31
        b _rest64gpr_29_x
        .size   f, .-f
-       .ident  "GCC: (GNU) 4.7.2"
+       .ident  "GCC: (GNU) 4.8.1"
        .gnu_attribute 4, 2

Reply via email to