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

David Wiberg dwiberg at gmail.com
Fri Jul 31 10:02:31 PDT 2015


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/20150731/c135230f/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SparcPopcDecoding.patch
Type: application/octet-stream
Size: 1037 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150731/c135230f/attachment.obj>


More information about the llvm-dev mailing list