Hi, In file X86DisassemblerDecoder.c, we have function readPrefixes() with below code: ..... } else if (insn->mode == MODE_32BIT) { insn->registerSize = (hasOpSize ? 2 : 4); insn->addressSize = (hasAdSize ? 2 : 4); insn->displacementSize = (hasAdSize ? 2 : 4); insn->immediateSize = (hasOpSize ? 2 : 4); } .... This is confused to me: so we have registerSize to be either 2 or 4 bytes. But we might have instruction like: adc al, 0x89 This case we should have registerSize = 1 for AL. So is this a bug, or I am misunderstanding the meaning of this "registerSize" ?? Thank you. Jun -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140331/66ae8d36/attachment.html>
On Mon, Mar 31, 2014 at 11:48 PM, Jun Koi <junkoi2004 at gmail.com> wrote:> Hi, > > In file X86DisassemblerDecoder.c, we have function readPrefixes() with > below code: > > ..... > } else if (insn->mode == MODE_32BIT) { > insn->registerSize = (hasOpSize ? 2 : 4); > insn->addressSize = (hasAdSize ? 2 : 4); > insn->displacementSize = (hasAdSize ? 2 : 4); > insn->immediateSize = (hasOpSize ? 2 : 4); > } > .... > > This is confused to me: so we have registerSize to be either 2 or 4 bytes. > But we might have instruction like: > > adc al, 0x89 > > This case we should have registerSize = 1 for AL. So is this a bug, or I > am misunderstanding the meaning of this "registerSize" ?? > >any help please? thanks. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140402/aaa1de51/attachment.html>
I looked at this briefly, I think it causes some mistakes that get reversed later in fixupReg. The disassembler design is a bit of a mess with regards to prefixes and operand size. On Tue, Apr 1, 2014 at 4:43 PM, Jun Koi <junkoi2004 at gmail.com> wrote:> > > > On Mon, Mar 31, 2014 at 11:48 PM, Jun Koi <junkoi2004 at gmail.com> wrote: > >> Hi, >> >> In file X86DisassemblerDecoder.c, we have function readPrefixes() with >> below code: >> >> ..... >> } else if (insn->mode == MODE_32BIT) { >> insn->registerSize = (hasOpSize ? 2 : 4); >> insn->addressSize = (hasAdSize ? 2 : 4); >> insn->displacementSize = (hasAdSize ? 2 : 4); >> insn->immediateSize = (hasOpSize ? 2 : 4); >> } >> .... >> >> This is confused to me: so we have registerSize to be either 2 or 4 bytes. >> But we might have instruction like: >> >> adc al, 0x89 >> >> This case we should have registerSize = 1 for AL. So is this a bug, or I >> am misunderstanding the meaning of this "registerSize" ?? >> >> > any help please? > > thanks. > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-- ~Craig -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140401/cbe8d415/attachment.html>