<< Back to previous view

[PCC-82] invalid assembly on amd64 Created: 19/Aug/09  Updated: 03/Jun/10

Status: Closed
Project: pcc
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Daniel Dickman Assignee: Anders Magnusson
Resolution: Fixed Votes: 1
Environment: [/usr/src/bin/cp] uname -msrvp
OpenBSD 4.6 GENERIC.MP#130 amd64 Intel(R) Core(TM)2 Duo CPU T7100 @ 1.80GHz


 Description   
Compiling with -O2 on OpenBSD/amd64 produces the following error for some code

[/usr/src/bin/cp] pcc -O2 -c cp.c
/tmp/ctm.sE01ll: Assembler messages:
/tmp/ctm.sE01ll:488: Error: `(%eax,%r14d)' is not a valid 64 bit base/index expression

Leaving out the -O2 seems to work
[/usr/src/bin/cp] pcc -c cp.c
[/usr/src/bin/cp]


 Comments   
Comment by Jonathan Gray [ 14/Sep/09 05:25 PM ]
pcc:

        leal (%eax,%ebx),%eax
        leal (%eax,%ecx),%ebx

gcc:

        leal (%rax,%rbx),%eax
        leal (%rax,%rcx),%ebx

perhaps this wasn't noticed during development as NetBSD supports -m32 on amd64?
Comment by Jonathan Gray [ 14/Sep/09 06:25 PM ]
It is worth pointing out that OpenBSD currently uses binutils 2.15, there have been several noteable amd64 changes since
such as:

Changes from binutils 2.16.91.0.2:
2. Support x86-64 medium model.
Changes from binutils 2.16.91.0.1:
4. Add x86-64 new relocations for medium model.

When specifying -mcmodel=medium to gcc it will generate code with leal instructions that looks like that of pcc.
Comment by Jonathan Gray [ 14/Sep/09 06:33 PM ]
I mistakenly used pcc in the last test not gcc, all leal instructions still use %r* registers with the different mcmodel it would seem.
Comment by Anders Magnusson [ 03/Jun/10 09:57 PM ]
This is a bug in the old gas used in OpenBSD, it do not accept constructs like "leal (%eax,%ebx),%ecx" which does not have anything to do with addresses but in fact is a 3-operand addition. pcc may emit it to avoid an extra movl instruction.

It must be fixed in OpenBSD, it's not a compiler problem. Newer gas supports this.
Generated at Sun Dec 21 02:10:42 CET 2014 using JIRA Enterprise Edition, Version: 3.13.1-#333.