On Monday, 8 October 2012 at 20:23:50 UTC, Iain Buclaw wrote:
float a = 1, b = 2, c = 3, d = 4;
float4 f = [a,b,c,d];
===>
movss -16(%rbp), %xmm0
movss -12(%rbp), %xmm1
The obligatory "me too" post:
LDC turns
---
import core.simd;
struct T {
float a, b, c, d;
ubyte[100] passOnStack;
}
void test(T t) {
receiver([t.a, t.b, t.c, t.d]);
}
void receiver(float4 f);
---
into
---
0000000000000000 <_D4test4testFS4test1TZv>:
0: 50 push rax
1: 0f 28 44 24 10 movaps xmm0,XMMWORD PTR [rsp+0x10]
6: e8 00 00 00 00 call b
<_D4test4testFS4test1TZv+0xb>
b: 58 pop rax
c: c3 ret
---
(the struct is just there so that the values are actually on the
stack, and receiver just so that the optimizer doesn't eat
everything for breakfast).
David