mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-12 22:05:33 +00:00
74 lines
1.9 KiB
C
74 lines
1.9 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 <assert.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <xmmintrin.h>
|
|
|
|
/*
|
|
* x86 _mm_max_ps and _mm_min_ps have defined semantics or NaN and -0.0. Ensure
|
|
* that we implement them properly.
|
|
*/
|
|
|
|
volatile __m128 negzero;
|
|
volatile __m128 zero;
|
|
volatile __m128 nan_;
|
|
volatile __m128 one;
|
|
|
|
int main() {
|
|
negzero = _mm_set1_ps(-0.0);
|
|
zero = _mm_set1_ps(0.0);
|
|
one = _mm_set1_ps(1.0);
|
|
nan_ = _mm_set1_ps(__builtin_nan(""));
|
|
|
|
__m128 expected, result;
|
|
|
|
result = _mm_max_ps(negzero, zero);
|
|
expected = zero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_max_ps(zero, negzero);
|
|
expected = negzero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_max_ps(nan_, zero);
|
|
expected = zero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_max_ps(zero, nan_);
|
|
expected = nan_;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_max_ps(zero, one);
|
|
expected = one;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_min_ps(negzero, zero);
|
|
expected = zero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_min_ps(zero, negzero);
|
|
expected = negzero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_min_ps(nan_, zero);
|
|
expected = zero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_min_ps(zero, nan_);
|
|
expected = nan_;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
result = _mm_min_ps(zero, one);
|
|
expected = zero;
|
|
assert(memcmp(&result, &expected, sizeof(__m128)) == 0);
|
|
|
|
printf("DONE");
|
|
return 0;
|
|
}
|