[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug binutils/10973] New: OP_E_memory produces wrong disassembled code
From: |
spop at gcc dot gnu dot org |
Subject: |
[Bug binutils/10973] New: OP_E_memory produces wrong disassembled code |
Date: |
17 Nov 2009 16:53:38 -0000 |
The following patterns are not disassembled correctly for the
registers (rbp, rsp, r12, r13) and for any of the instructions of FMA4
or XOP with four operands.
vfmaddpd %xmm10,(%rbp),%xmm5,%xmm11
vfmaddpd %xmm10,(%rsp),%xmm5,%xmm11
VPMACSDD %xmm10,(%r12),%xmm5,%xmm11
VPMACSDD %xmm10,(%r13),%xmm5,%xmm11
wrongly disassembled like this:
0: c4 63 51 69 5d 00 a0 vfmaddpd %xmm12,0x5d(%rbp),%xmm5,%xmm11
7: c4 63 51 69 1c 24 a0 vfmaddpd %xmm8,(%rsp,%rbx,1),%xmm5,%xmm11
e: 8f 48 50 9e 1c 24 a0 vpmacsdd %xmm8,(%r12,%rbx,1),%xmm5,%xmm11
15: 8f 48 50 9e 5d 00 a0 vpmacsdd %xmm6,0x5d(%r13),%xmm5,%xmm11
The disassembler gets confused in OP_E_memory, that makes me suspect
that this bug is also present in other instructions using OP_E_memory.
Furthermore, the assembler seems to try to accommodate this bug by
using a fake_zero_displacement exactly in the cases that we were hit
in the disassembler:
/* x86-64 ignores REX prefix bit here to avoid decoder
complications. */
if ((i.base_reg->reg_num & 7) == EBP_REG_NUM)
{
default_seg = &ss;
if (i.disp_operands == 0)
{
fake_zero_displacement = 1;
i.types[op].bitfield.disp8 = 1;
}
}
--
Summary: OP_E_memory produces wrong disassembled code
Product: binutils
Version: 2.21 (HEAD)
Status: NEW
Severity: normal
Priority: P2
Component: binutils
AssignedTo: unassigned at sources dot redhat dot com
ReportedBy: spop at gcc dot gnu dot org
CC: bug-binutils at gnu dot org
http://sourceware.org/bugzilla/show_bug.cgi?id=10973
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
- [Bug binutils/10973] New: OP_E_memory produces wrong disassembled code,
spop at gcc dot gnu dot org <=
- [Bug binutils/10973] OP_E_memory produces wrong disassembled code, spop at gcc dot gnu dot org, 2009/11/17
- [Bug binutils/10973] OP_E_memory produces wrong disassembled code, hjl dot tools at gmail dot com, 2009/11/18
- [Bug binutils/10973] OP_E_memory produces wrong disassembled code, spop at gcc dot gnu dot org, 2009/11/18
- [Bug binutils/10973] OP_E_memory produces wrong disassembled code, cvs-commit at gcc dot gnu dot org, 2009/11/19
- [Bug binutils/10973] OP_E_memory produces wrong disassembled code, spop at gcc dot gnu dot org, 2009/11/19