thanks, but the reason i need lvmcall is because i want to call a specific 
intel instruction (which llvm actually supports - i've found the patch for 
it).  but before i do that i am trying to just get "something" to work, and 
printf seemed like a good intermediate goal.

i am going to look at the implementing code and work out what is generated, 
i think, and then ask llvmdev for help.  there's something i don't 
understand about the context in which the llvm ir is inserted.  "declare" 
instructions don't seem to be accepted, for example.  once i can pin that 
down i think i can ask a sensible question on llvmdev...

cheers,
andrew


On Saturday, 16 May 2015 22:01:25 UTC-3, Yichao Yu wrote:
>
> On Sat, May 16, 2015 at 5:01 PM, andrew cooke <[email protected] 
> <javascript:>> wrote: 
> > 
> > Does anyone have a working example that calls printf via llvmcall? 
> > 
> > I realise I'm uncomfortably inbetween llvmdev and julia-users, but I'm 
> > asking here first because I suspect my limitations are still more 
> > julia-related. 
> > 
> > In particular, 
> > 
> > julia> g() = Base.llvmcall(""" 
> >          call i32 (i8*, ...)* @printf(i8* c"hello world\00") 
> >          ret""", 
> >          Void, Tuple{}) 
> > g (generic function with 2 methods) 
> > 
> > julia> g() 
> > ERROR: error compiling g: Failed to parse LLVM Assembly: 
> > julia: llvmcall:3:35: error: expected string 
> > call i32 (i8*, ...)* @printf(i8* c"hello world 
> >                                   ^ 
> > 
> > seems like it's *almost* there...? 
> > 
> > Thanks, 
> > Andrew 
> > 
> > (I suspect I also need something other than @printf, like 
> > IntrinsicsX86.printf or something, but I can't find where I saw an 
> example 
> > like that...  Related, declare doesn't seem to be accepted, or 
> assignment to 
> > global vsariables.  But I am completely new to all this...) 
> > 
>
> I was also interested in knowning how to use `llvmcall` in general but 
> at least for this limited case, (and I guess you probably know 
> already) it is easier to user `ccall` 
>
> ```julia 
> julia> ccall(:printf, Int, (Ptr{Cchar},), "hellow world\n") 
> hellow world 
> 13 
> ``` 
>

Reply via email to