Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C by scodil ( 18 years ago )
union vec2d
{
double e[2];
double v __attribute__((vector_size(16)));
};
typedef union vec2d vec2d;
static
vec2d a={{1,2}}, b={{3,4}};
static inline
vec2d
foo1 ( vec2d a, vec2d b )
{
return (vec2d){ .v = a.v/b.v };
}
static inline
vec2d
foo2 ( vec2d a, vec2d b )
{
return (vec2d){ .v = a.v+a.v*b.v };
}
vec2d
foo3 ()
{
return (vec2d){ .v = foo1(a,foo2(b,b)).v };
}
vec2d
foo4 ()
{
return (vec2d){ .v = a.v / (b.v+b.v*b.v) };
}
/////////////
.file "c_vec2.c"
.text
.p2align 4,,15
.globl foo3
.type foo3, @function
foo3:
.LFB4:
subq $96, %rsp
.LCFI0:
movq b+8(%rip), %rax
movq b(%rip), %rdx
movq $0, -16(%rsp)
movq $0, -80(%rsp)
movq $0, 80(%rsp)
movq %rax, 16(%rsp)
movq %rdx, 8(%rsp)
movapd 8(%rsp), %xmm0
movq %rax, (%rsp)
movq %rdx, -8(%rsp)
movapd %xmm0, %xmm1
movq a(%rip), %rax
mulpd -8(%rsp), %xmm1
movq %rax, -56(%rsp)
movq a+8(%rip), %rax
movq %rax, -48(%rsp)
addpd %xmm1, %xmm0
movapd %xmm0, -24(%rsp)
movq -24(%rsp), %rax
movq %rax, -72(%rsp)
movq -16(%rsp), %rax
movapd -56(%rsp), %xmm0
movq %rax, -64(%rsp)
divpd -72(%rsp), %xmm0
movapd %xmm0, -88(%rsp)
movq -88(%rsp), %rax
movq %rax, 24(%rsp)
movq -80(%rsp), %rax
movq %rax, 32(%rsp)
movapd 24(%rsp), %xmm0
movapd %xmm0, 72(%rsp)
movq 72(%rsp), %xmm0
movq 80(%rsp), %xmm1
addq $96, %rsp
ret
.LFE4:
.size foo3, .-foo3
.p2align 4,,15
.globl foo4
.type foo4, @function
foo4:
.LFB5:
movapd b(%rip), %xmm0
movq $0, -16(%rsp)
movapd %xmm0, %xmm1
mulpd %xmm0, %xmm1
addpd %xmm1, %xmm0
movapd a(%rip), %xmm1
divpd %xmm0, %xmm1
movapd %xmm1, -24(%rsp)
movq -16(%rsp), %xmm1
movq -24(%rsp), %xmm0
ret
.LFE5:
.size foo4, .-foo4
.section .rodata
.align 16
.type a, @object
.size a, 16
a:
.long 0
.long 1072693248
.long 0
.long 1073741824
.align 16
.type b, @object
.size b, 16
b:
.long 0
.long 1074266112
.long 0
.long 1074790400
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string "zR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x3
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB4
.long .LFE4-.LFB4
.uleb128 0x0
.byte 0x4
.long .LCFI0-.LFB4
.byte 0xe
.uleb128 0x68
.align 8
.LEFDE1:
.LSFDE3:
.long .LEFDE3-.LASFDE3
.LASFDE3:
.long .LASFDE3-.Lframe1
.long .LFB5
.long .LFE5-.LFB5
.uleb128 0x0
.align 8
.LEFDE3:
.ident "GCC: (GNU) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)"
.
Revise this Paste