[llvm-dev] [LLVMdev] Wrong encoding/decoding for POPC instruction of Sparc

Jun Koi via llvm-dev llvm-dev at lists.llvm.org
Sat Aug 8 05:49:03 PDT 2015


Excellent, thanks!!



On Sat, Aug 8, 2015 at 1:53 AM, David Wiberg <dwiberg at gmail.com> wrote:

> Hi,
>
> James made some improvements and committed it in r244064.
>
> Best regards
> David
>
> 2015-08-08 4:08 GMT+02:00 Jun Koi <junkoi2004 at gmail.com>:
> > James, is the fix of David accepted?
> >
> > Thanks.
> >
> >
> >
> > On Fri, Jul 31, 2015 at 10:02 AM, David Wiberg <dwiberg at gmail.com>
> wrote:
> >>
> >> Hi James,
> >>
> >> Not sure if you've already found the problem but I've been looking at
> this
> >> issue a bit as a way to learn. What I've seen is that the wrong operand
> >> names are used for the instruction which causes the decoder emitter to
> fail
> >> to recognize the operands.
> >>
> >> The attached patch changes the names of the operands and adds a test for
> >> the disassembly of the instruction. I haven't checked if there are more
> >> instructions which lack test cases. I have no commit access, if you
> think
> >> the patch is correct I would appreciate your help in committing it.
> >>
> >> Regards
> >> David
> >>
> >> 2015-07-31 16:56 GMT+02:00 James Y Knight <jyknight at google.com>:
> >>>
> >>> I'll look into it, thanks for the report.
> >>>
> >>> On Thu, Jul 30, 2015 at 11:01 PM, Jun Koi <junkoi2004 at gmail.com>
> wrote:
> >>>>
> >>>> Any ideas on this bug?
> >>>>
> >>>> Thanks.
> >>>>
> >>>>
> >>>> On Wed, Jul 29, 2015 at 12:17 AM, Jun Koi <junkoi2004 at gmail.com>
> wrote:
> >>>>>
> >>>>> Hello,
> >>>>>
> >>>>> There is an issue in the latest Sparc code: while we can encode POPC,
> >>>>> decode results in crash in llvm-mc
> >>>>>
> >>>>> $ echo "popc %g1, %g2" | ./Release+Asserts/bin/llvm-mc -assemble
> >>>>> -triple=sparcv9 -show-encoding
> >>>>>     .text
> >>>>>     popc %g1, %g2                   ! encoding: [0x85,0x70,0x00,0x01]
> >>>>>
> >>>>> $ echo "0x85,0x70,0x00,0x01"|./Release+Asserts/bin/llvm-mc
> -disassemble
> >>>>> -triple=sparcv9
> >>>>>     .text
> >>>>>     popc Assertion failed: (idx < size()), function operator[], file
> >>>>> /Users/jun/projects/llvm/sparc-2.git/include/llvm/ADT/SmallVector.h,
> line
> >>>>> 143.
> >>>>> 0  llvm-mc                  0x00000001096a5099
> >>>>> llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 57
> >>>>> 1  llvm-mc                  0x00000001096a45c6
> >>>>> llvm::sys::RunSignalHandlers() + 102
> >>>>> 2  llvm-mc                  0x00000001096a5b95 SignalHandler(int) +
> 693
> >>>>> 3  libsystem_platform.dylib 0x00007fff86d78f1a _sigtramp + 26
> >>>>> 4  libsystem_platform.dylib 0x0000000000000002 _sigtramp + 2032693506
> >>>>> 5  llvm-mc                  0x00000001096a5836 abort + 22
> >>>>> 6  llvm-mc                  0x00000001096a5811 __assert_rtn + 81
> >>>>> 7  llvm-mc                  0x000000010963f4e8
> >>>>> llvm::SparcInstPrinter::printOperand(llvm::MCInst const*, int,
> >>>>> llvm::MCSubtargetInfo const&, llvm::raw_ostream&) + 136
> >>>>> 8  llvm-mc                  0x000000010963eae0
> >>>>> llvm::SparcInstPrinter::printInstruction(llvm::MCInst const*,
> >>>>> llvm::MCSubtargetInfo const&, llvm::raw_ostream&) + 256
> >>>>> 9  llvm-mc                  0x000000010964f5e6
> >>>>> llvm::SparcInstPrinter::printInst(llvm::MCInst const*,
> llvm::raw_ostream&,
> >>>>> llvm::StringRef, llvm::MCSubtargetInfo const&) + 86
> >>>>> 10 llvm-mc                  0x000000010965f90f (anonymous
> >>>>> namespace)::MCAsmStreamer::EmitInstruction(llvm::MCInst const&,
> >>>>> llvm::MCSubtargetInfo const&) + 2879
> >>>>> 11 llvm-mc                  0x00000001096043b3
> >>>>> llvm::Disassembler::disassemble(llvm::Target const&,
> >>>>> std::__1::basic_string<char, std::__1::char_traits<char>,
> >>>>> std::__1::allocator<char> > const&, llvm::MCSubtargetInfo&,
> >>>>> llvm::MCStreamer&, llvm::MemoryBuffer&, llvm::SourceMgr&,
> >>>>> llvm::raw_ostream&) + 2147
> >>>>> 12 llvm-mc                  0x0000000109607460 main + 9760
> >>>>> 13 libdyld.dylib            0x00007fff8f34d5c9 start + 1
> >>>>> 14 libdyld.dylib            0x0000000000000003 start + 1892362811
> >>>>> Stack dump:
> >>>>> 0.    Program arguments: ./Release+Asserts/bin/llvm-mc -disassemble
> >>>>> -triple=sparcv9
> >>>>> Illegal instruction: 4
> >>>>>
> >>>>>
> >>>>> Any ideas on what is wrong, and how to fix this?
> >>>>>
> >>>>>
> >>>>> Thank you.
> >>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> LLVM Developers mailing list
> >>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>>>
> >>>
> >>>
> >>> _______________________________________________
> >>> LLVM Developers mailing list
> >>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>>
> >>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150808/126e2440/attachment.html>


More information about the llvm-dev mailing list