Wei-zhi Liao
2012-Aug-17 16:27 UTC
[LLVMdev] Generate data16 assembly instruction for TLS with PIC
Hi all, System: x86-64 ubuntu 11.04 LLVM: 3.0 gcc: 4.5.2 I declare a thread_local global variable and access it in a function in llvm IR. for example, @my_value = linkonce thread_local global %dummy* null define void @test1() { entry: %load_my_value = load %dummy** @my_value .... } After that, I use the following command: bash$ llc -relocation-model=pic test.ll And I have test.s which is an assembly file. I tried to build it with gcc, but I have the following warning bash$ gcc -c test.s test.s: Assembler messages: test.s:43: Warning: stand-alone `data16' prefix I just wonder why I have data16 instruction in my assembly file. (ps. If I build it with "llc test.ll", the assembly file will not have data16 instruction) I search the llvm project and find some clues in this file: lib/Target/X86/X86MCInstLower.cpp static void LowerTlsAddr(...) { bool is64Bits = MI.getOpcode() == X86::TLS_addr64; .... if (is64Bits) { MCInst prefix; prefix.setOpcode(X86::DATA16_PREFIX); .... } .... } I think it is the logic to generate data16 instruction, but I wonder why gcc report warning. Is it a LLVM's bug? Thanks for your time in advance :D -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120818/d2f80ca6/attachment.html>
Cameron McInally
2012-Aug-17 16:40 UTC
[LLVMdev] Generate data16 assembly instruction for TLS with PIC
Hey Wei-zhi, I also had this issue with the X86 backend. And, unfortunately, searching for the warning did not turn up too much information. My solution was to emit a raw 0x66 byte in place of the data16 prefix. I believe those are equivalent and the assembler is much happier about it...> #if LLVM_31_MERGE > SmallString<11> byte; > byte = "\t.byte 0x66"; > OutStreamer.EmitRawText(byte); >#else /* LLVM_31_MERGE */ > prefix.setOpcode(X86::DATA16_PREFIX); > OutStreamer.EmitInstruction(prefix); >#endif /* LLVM_31_MERGE */-Cameron On Fri, Aug 17, 2012 at 12:27 PM, Wei-zhi Liao <giggle at zillians.com> wrote: ...> > I think it is the logic to generate data16 instruction, but I wonder why > gcc report warning. Is it a LLVM's bug? > Thanks for your time in advance :D >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120817/93d75f02/attachment.html>
Apparently Analagous Threads
- [LLVMdev] LLVMdev Digest, Vol 98, Issue 33
- HiPE calling convention
- gluster-volgen - syntax for mirroring/distributing across 6 nodes
- [LLVMdev] Boostrap Failure -- Expected Differences?
- [Bug 2033] New: ''zfs create'' causes panic if key file doesn''t exist