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

Jun Koi via llvm-dev llvm-dev at lists.llvm.org
Fri Aug 7 19:08:04 PDT 2015


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/20150807/be21bbce/attachment.html>


More information about the llvm-dev mailing list