Vyacheslav Akhmechet
2005-Mar-08 03:16 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
Ok, I just tried the patch with some modifications (added msvc target and used WIN32 instead of __MINGW32__ for preprocessor) and everything worked beautifully. Thanks for the help! On Mon, 7 Mar 2005 20:45:40 -0500, Vyacheslav Akhmechet <coffeemug at gmail.com> wrote:> Reid, > > This patch won't work for me. I compile llvm toolset with MSVC Express > (hence __MINGW32__ won't be defined for me at compile time). I only > try to feed the generated assembly into gcc (pretty much gnu > assembler, I suppose). I don't use mingw tools at the earlier stage. > However it's obvious for me how to modify the code now (just add MSVC > at that line), thanks! I'll try it as soon as I can. > > Thanks, > - Vyacheslav. > > > On Mon, 07 Mar 2005 17:32:00 -0800, Reid Spencer <reid at x10sys.com> wrote: > > Vyacheslav, > > > > I've tracked down the change and I have a fix for you to test. The > > attached patch should be applied to the CVS head (version 1.132) of > > X86AsmPrinter.cpp in llvm/lib/Target/X86. The patch just includes MINGW > > targets in the same set of choices that it makes for Cygwin. Could you > > please try the patch and let me know if it solves your problem? If it > > does, I'll commit the patch. > > > > Thanks, > > > > Reid. > > > > > > On Mon, 2005-03-07 at 16:39, Vyacheslav Akhmechet wrote: > > > Ok, I got home so I have more details. Here's the sample C program: > > > ----------------- C program --------------- > > > #include <stdio.h> > > > int main() { > > > printf("hello world\n"); > > > return 0; > > > } > > > ------------- end C program ------------- > > > > > > This is compiled using llvm online demo into the following llvm code > > > (target removed): > > > ----------------- LLVM code -------------- > > > deplibs = [ "stdc++", "c", "crtend" ] > > > %.str_1 = internal constant [13 x sbyte] c"hello world\0A\00"; <[13 x > > > sbyte]*> [#uses=1] > > > > > > implementation ; Functions: > > > > > > declare int %printf(sbyte*, ...) > > > > > > int %main() { > > > entry: > > > call void %__main( ) > > > %tmp.0 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([13 x > > > sbyte]* %.str_1, int 0, int 0) ); <int> [#uses=0] > > > ret int 0 > > > } > > > > > > declare void %__main() > > > ------------- End LLVM code ----------- > > > > > > which in turn produces the following assembly code: > > > > > > ------------- Assembly code ------------- > > > .text > > > .align 16 > > > .globl main > > > .type main, @function > > > main: > > > subl $12, %esp > > > fnstcw 10(%esp) > > > movb $2, 11(%esp) > > > fldcw 10(%esp) > > > call __main > > > movl $l1__2E_str_1, %eax > > > movl %eax, (%esp) > > > call printf > > > movl $0, %eax > > > #IMPLICIT_USE > > > addl $12, %esp > > > ret > > > > > > > > > .data > > > .align 1 > > > .type l1__2E_str_1, at object > > > .size l1__2E_str_1,13 > > > l1__2E_str_1: # [13 x sbyte]* %.str_1 = c"hello world\0A\00" > > > .ascii "hello world\n\000" > > > ---------- End assembly code ---------- > > > > > > When I try to assemble the above code using > > > gcc hello.c.s -o hello.exe > > > I get the following errors: > > > > > > hello.c.s: Assembler messages: > > > hello.c.s:6: Warning: .type pseudo-op used outside of .def/.endef ignored. > > > hello.c.s:6: Error: junk at end of line, first unrecognized character is `m' > > > hello.c.s:24: Warning: .type pseudo-op used outside of .def/.endef ignored. > > > hello.c.s:24: Error: junk at end of line, first unrecognized character is `l' > > > hello.c.s:25: Warning: .size pseudo-op used outside of .def/.endef ignored. > > > hello.c.s:25: Error: junk at end of line, first unrecognized character is `l' > > > > > > Sorry for the long email. I attach all relevant files for clarity. > > > > > > ______________________________________________________________________ > > > _______________________________________________ > > > LLVM Developers mailing list > > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > > >
Chris Lattner
2005-Mar-08 04:47 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
On Mon, 7 Mar 2005, Vyacheslav Akhmechet wrote:> Ok, I just tried the patch with some modifications (added msvc target > and used WIN32 instead of __MINGW32__ for preprocessor) and everything > worked beautifully. Thanks for the help!Did you actually try the previous patch? If you compiled llvm-gcc with mingw, it should work, regardless of the compiler you use to compile the LLVM X86 backend with. -Chris> On Mon, 7 Mar 2005 20:45:40 -0500, Vyacheslav Akhmechet > <coffeemug at gmail.com> wrote: >> Reid, >> >> This patch won't work for me. I compile llvm toolset with MSVC Express >> (hence __MINGW32__ won't be defined for me at compile time). I only >> try to feed the generated assembly into gcc (pretty much gnu >> assembler, I suppose). I don't use mingw tools at the earlier stage. >> However it's obvious for me how to modify the code now (just add MSVC >> at that line), thanks! I'll try it as soon as I can. >> >> Thanks, >> - Vyacheslav. >> >> >> On Mon, 07 Mar 2005 17:32:00 -0800, Reid Spencer <reid at x10sys.com> wrote: >>> Vyacheslav, >>> >>> I've tracked down the change and I have a fix for you to test. The >>> attached patch should be applied to the CVS head (version 1.132) of >>> X86AsmPrinter.cpp in llvm/lib/Target/X86. The patch just includes MINGW >>> targets in the same set of choices that it makes for Cygwin. Could you >>> please try the patch and let me know if it solves your problem? If it >>> does, I'll commit the patch. >>> >>> Thanks, >>> >>> Reid. >>> >>> >>> On Mon, 2005-03-07 at 16:39, Vyacheslav Akhmechet wrote: >>>> Ok, I got home so I have more details. Here's the sample C program: >>>> ----------------- C program --------------- >>>> #include <stdio.h> >>>> int main() { >>>> printf("hello world\n"); >>>> return 0; >>>> } >>>> ------------- end C program ------------- >>>> >>>> This is compiled using llvm online demo into the following llvm code >>>> (target removed): >>>> ----------------- LLVM code -------------- >>>> deplibs = [ "stdc++", "c", "crtend" ] >>>> %.str_1 = internal constant [13 x sbyte] c"hello world\0A\00"; <[13 x >>>> sbyte]*> [#uses=1] >>>> >>>> implementation ; Functions: >>>> >>>> declare int %printf(sbyte*, ...) >>>> >>>> int %main() { >>>> entry: >>>> call void %__main( ) >>>> %tmp.0 = call int (sbyte*, ...)* %printf( sbyte* getelementptr ([13 x >>>> sbyte]* %.str_1, int 0, int 0) ); <int> [#uses=0] >>>> ret int 0 >>>> } >>>> >>>> declare void %__main() >>>> ------------- End LLVM code ----------- >>>> >>>> which in turn produces the following assembly code: >>>> >>>> ------------- Assembly code ------------- >>>> .text >>>> .align 16 >>>> .globl main >>>> .type main, @function >>>> main: >>>> subl $12, %esp >>>> fnstcw 10(%esp) >>>> movb $2, 11(%esp) >>>> fldcw 10(%esp) >>>> call __main >>>> movl $l1__2E_str_1, %eax >>>> movl %eax, (%esp) >>>> call printf >>>> movl $0, %eax >>>> #IMPLICIT_USE >>>> addl $12, %esp >>>> ret >>>> >>>> >>>> .data >>>> .align 1 >>>> .type l1__2E_str_1, at object >>>> .size l1__2E_str_1,13 >>>> l1__2E_str_1: # [13 x sbyte]* %.str_1 = c"hello world\0A\00" >>>> .ascii "hello world\n\000" >>>> ---------- End assembly code ---------- >>>> >>>> When I try to assemble the above code using >>>> gcc hello.c.s -o hello.exe >>>> I get the following errors: >>>> >>>> hello.c.s: Assembler messages: >>>> hello.c.s:6: Warning: .type pseudo-op used outside of .def/.endef ignored. >>>> hello.c.s:6: Error: junk at end of line, first unrecognized character is `m' >>>> hello.c.s:24: Warning: .type pseudo-op used outside of .def/.endef ignored. >>>> hello.c.s:24: Error: junk at end of line, first unrecognized character is `l' >>>> hello.c.s:25: Warning: .size pseudo-op used outside of .def/.endef ignored. >>>> hello.c.s:25: Error: junk at end of line, first unrecognized character is `l' >>>> >>>> Sorry for the long email. I attach all relevant files for clarity. >>>> >>>> ______________________________________________________________________ >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev >>> >>> >>> >> > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev >-Chris -- http://nondot.org/sabre/ http://llvm.cs.uiuc.edu/
Vyacheslav Akhmechet
2005-Mar-08 14:25 UTC
[LLVMdev] GCC assembler rejects native code generated by LLVM
> Did you actually try the previous patch? If you compiled llvm-gcc with > mingw, it should work, regardless of the compiler you use to compile > the LLVM X86 backend with.I didn't build llvm-gcc. I just used the front end provided by the online demo on LLVM's webpage.
Possibly Parallel Threads
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM
- [LLVMdev] GCC assembler rejects native code generated by LLVM