target/6869: G++ 3.1 generates incorrect assembler instructions for HPPA 2.0

Stefan.Becker@nokia.com Stefan.Becker@nokia.com
Thu May 30 08:06:00 GMT 2002


>Number:         6869
>Category:       target
>Synopsis:       G++ 3.1 generates incorrect assembler instructions for HPPA 2.0
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu May 30 08:06:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Stefan Becker
>Release:        gcc-3.1, binutils-2.12.1
>Organization:
>Environment:
hppa2.0-hp-hpux11.11
>Description:
g++ generates in static initialization code:

        addil LR%L$3244-$global$,%r27
        ldw RR%L$3244-$global$(%r1),%r22
        ldil L%$$dyncall,%r2
-       ble  R%$$dyncall(%sr4,%r2)       <- for PA1.1
+       be,l  R%$$dyncall(%sr4,%r2)      <- for PA2.0
        copy %r31,%r2
        ldw 12(%r3),%r19
 
GNU as complains about the "be,l" lines with the following error message:

xxxx.s:197656: Error: Invalid Nullification: (l)
>How-To-Repeat:
Unfortunately I couldn't create a small test file and the original file contains confidential information.
>Fix:
I checked the HPPA configuration and could only two places in pa.c which generate "be,l":

pa.c:5924:        output_asm_insn ("{ble|be,l} R%%%0(%%sr4,%3)", xoperands);
pa.c:6169:            output_asm_insn ("{ble|be,l}  R%%$$dyncall(%%sr4,%%r2)",

The second one is the one which generates the offending code in my case.

I don't have a HPPA manual, but I guess either a) "be,l" is a wrong instruction or b) GNU as is broken.
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list