[LLVMdev] floating point exception and SSE2 instructions

Evan Cheng evan.cheng at apple.com
Tue Apr 18 23:27:39 PDT 2006


Hi Simon,

The x86 backend does generate scalar SSE2 instructions. For your  
example, it should emit something like:

         .text
         .align  4
         .globl  _sum_d
_sum_d:
         subl $12, %esp
         movl 20(%esp), %eax
         movl 16(%esp), %ecx
         cmpl $0, %eax
         jne LBB_sum_d_2 # cond_true.preheader
LBB_sum_d_1:    # entry.bb9_crit_edge
         pxor %xmm0, %xmm0
         jmp LBB_sum_d_5 # bb9
LBB_sum_d_2:    # cond_true.preheader
         pxor %xmm0, %xmm0
         xorl %edx, %edx
LBB_sum_d_3:    # cond_true
         addsd (%ecx), %xmm0
         addl $8, %ecx
         incl %edx
         cmpl %eax, %edx
         jne LBB_sum_d_3 # cond_true
LBB_sum_d_4:    # bb9.loopexit
LBB_sum_d_5:    # bb9
         movsd %xmm0, (%esp)
         fldl (%esp)
         addl $12, %esp
         ret

There is nothing here that should cause an exception. Are you using a  
release or cvs?

Evan

On Apr 18, 2006, at 11:17 PM, Simon Burton wrote:

>
> Hi,
>
> I'm building a little JIT that creates functions to do array  
> manipulations,
> eg. sum all the elements of a double* array. I'm writing this in  
> python, generating
> llvm assembly intructions and piping that through a call to  
> ParseAssemblyString,
> ExecutionEngine, etc.
>
> It's working OK on integer values, but i'm getting nasty floating  
> point exceptions
> when i try this on double* values. I've seen this behaviour before  
> on this platform
> (debian Intel P4) when I tried using ATLAS with sse2. I'm pretty  
> sure it's
> valid assembly; the code still causes exceptions when i try using  
> the output
> from the llvm demo website. And it works fine on an AMD machine.
>
> What is LLVM doing with my code ? Does it generate SSE2 instructions ?
>
> thanks!
>
> Simon.
>
> double sum_d(double*mem,int n)
> {
>   double val=0.0;
>   while(n)
>   { val += *mem; mem++; n--; }
>   return val;
> }
>
>
> -- 
> Simon Burton, B.Sc.
> Licensed PO Box 8066
> ANU Canberra 2601
> Australia
> Ph. 61 02 6249 6940
> http://arrowtheory.com
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list