[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