mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-15 23:25:41 +00:00
74 lines
2.4 KiB
C
74 lines
2.4 KiB
C
|
/*
|
||
|
* Copyright 2016 The Emscripten Authors. All rights reserved.
|
||
|
* Emscripten is available under two separate licenses, the MIT license and the
|
||
|
* University of Illinois/NCSA Open Source License. Both these licenses can be
|
||
|
* found in the LICENSE file.
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#include <emscripten/vector.h>
|
||
|
|
||
|
static inline float32x4 __attribute__((always_inline))
|
||
|
_mm_set_ps(const float __Z, const float __Y, const float __X,
|
||
|
const float __W) {
|
||
|
return (float32x4) {__W, __X, __Y, __Z};
|
||
|
}
|
||
|
|
||
|
static __inline__ float32x4 __attribute__((__always_inline__))
|
||
|
_mm_setzero_ps(void) {
|
||
|
return (float32x4) {0.0, 0.0, 0.0, 0.0};
|
||
|
}
|
||
|
|
||
|
int main(int argc, char **argv) {
|
||
|
float data[8];
|
||
|
for (int i = 0; i < 32; i++)
|
||
|
data[i] = (1 + i + argc) * (2 + i + argc * argc); // confuse optimizer
|
||
|
{
|
||
|
float32x4 *a = (float32x4 *)&data[0];
|
||
|
float32x4 *b = (float32x4 *)&data[4];
|
||
|
float32x4 c, d;
|
||
|
c = *a;
|
||
|
d = *b;
|
||
|
printf("1floats! %d, %d, %d, %d %d, %d, %d, %d\n", (int)c[0], (int)c[1],
|
||
|
(int)c[2], (int)c[3], (int)d[0], (int)d[1], (int)d[2], (int)d[3]);
|
||
|
c = c + d;
|
||
|
printf("2floats! %d, %d, %d, %d %d, %d, %d, %d\n", (int)c[0], (int)c[1],
|
||
|
(int)c[2], (int)c[3], (int)d[0], (int)d[1], (int)d[2], (int)d[3]);
|
||
|
d = c * d;
|
||
|
printf("3floats! %d, %d, %d, %d %d, %d, %d, %d\n", (int)c[0], (int)c[1],
|
||
|
(int)c[2], (int)c[3], (int)d[0], (int)d[1], (int)d[2], (int)d[3]);
|
||
|
c = _mm_setzero_ps();
|
||
|
printf("zeros %d, %d, %d, %d\n", (int)c[0], (int)c[1], (int)c[2],
|
||
|
(int)c[3]);
|
||
|
}
|
||
|
{
|
||
|
int32x4 *a = (int32x4 *)&data[0];
|
||
|
int32x4 *b = (int32x4 *)&data[4];
|
||
|
int32x4 c, d, e, f;
|
||
|
c = *a;
|
||
|
d = *b;
|
||
|
printf("4ints! %d, %d, %d, %d %d, %d, %d, %d\n", c[0], c[1], c[2], c[3],
|
||
|
d[0], d[1], d[2], d[3]);
|
||
|
e = c + d;
|
||
|
f = c - d;
|
||
|
printf("5ints! %d, %d, %d, %d %d, %d, %d, %d\n", e[0], e[1], e[2], e[3],
|
||
|
f[0], f[1], f[2], f[3]);
|
||
|
e = c & d;
|
||
|
f = c | d;
|
||
|
e = ~c & d;
|
||
|
f = c ^ d;
|
||
|
printf("5intops! %d, %d, %d, %d %d, %d, %d, %d\n", e[0], e[1], e[2], e[3],
|
||
|
f[0], f[1], f[2], f[3]);
|
||
|
}
|
||
|
{
|
||
|
float32x4 c, d, e, f;
|
||
|
c = _mm_set_ps(9.0, 4.0, 0, -9.0);
|
||
|
d = _mm_set_ps(10.0, 14.0, -12, -2.0);
|
||
|
printf("6floats! %d, %d, %d, %d %d, %d, %d, %d\n", (int)c[0], (int)c[1],
|
||
|
(int)c[2], (int)c[3], (int)d[0], (int)d[1], (int)d[2], (int)d[3]);
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|