mirror of
https://github.com/ptitSeb/box86.git
synced 2025-05-08 21:08:57 +08:00
Improved ucomiss test17 with minss and maxss testing
This commit is contained in:
parent
aee4ee9430
commit
535db78525
@ -9,3 +9,31 @@ ucomiss nan, 1.000000 => 0x247
|
||||
ucomiss 1.000000, 1.000000 => 0x242
|
||||
ucomiss inf, inf => 0x242
|
||||
ucomiss nan, nan => 0x247
|
||||
minss 1, 2 => 1
|
||||
minss 2, 1 => 1
|
||||
minss -inf, 2 => -inf
|
||||
minss 2, -inf => -inf
|
||||
minss inf, 2 => 2
|
||||
minss 2, inf => 2
|
||||
minss nan, 2 => 2
|
||||
minss 2, nan => nan
|
||||
minss nan, 3.40282e+38 => 3.40282e+38
|
||||
minss 3.40282e+38, nan => nan
|
||||
minss -inf, 3.40282e+38 => -inf
|
||||
minss 3.40282e+38, -inf => -inf
|
||||
minss inf, 3.40282e+38 => 3.40282e+38
|
||||
minss 3.40282e+38, inf => 3.40282e+38
|
||||
maxss 1, 2 => 2
|
||||
maxss 2, 1 => 2
|
||||
maxss -inf, 2 => 2
|
||||
maxss 2, -inf => 2
|
||||
maxss inf, 2 => inf
|
||||
maxss 2, inf => inf
|
||||
maxss nan, 2 => 2
|
||||
maxss 2, nan => nan
|
||||
maxss nan, -3.40282e+38 => -3.40282e+38
|
||||
maxss -3.40282e+38, nan => nan
|
||||
maxss -inf, -3.40282e+38 => -3.40282e+38
|
||||
maxss -3.40282e+38, -inf => -3.40282e+38
|
||||
maxss inf, -3.40282e+38 => inf
|
||||
maxss -3.40282e+38, inf => inf
|
||||
|
BIN
tests/test17
BIN
tests/test17
Binary file not shown.
115
tests/test17.c
115
tests/test17.c
@ -16,6 +16,24 @@ uint64_t _ucomiss_(float a, float b)
|
||||
:"=a" (ret)::"xmm0","xmm1","cc");
|
||||
return ret;
|
||||
}
|
||||
uint64_t _minss_(float a, float b)
|
||||
{
|
||||
uint64_t ret;
|
||||
asm volatile (
|
||||
"minss %%xmm1, %%xmm0\n"
|
||||
"movd %%xmm0, %%eax"
|
||||
:"=a" (ret)::"xmm0","xmm1","cc");
|
||||
return ret;
|
||||
}
|
||||
uint64_t _maxss_(float a, float b)
|
||||
{
|
||||
uint64_t ret;
|
||||
asm volatile (
|
||||
"maxss %%xmm1, %%xmm0\n"
|
||||
"movd %%xmm0, %%eax"
|
||||
:"=a" (ret)::"xmm0","xmm1","cc");
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
uint64_t _ucomiss_(float a, float b)
|
||||
{
|
||||
@ -29,12 +47,37 @@ uint64_t _ucomiss_(float a, float b)
|
||||
:"=a" (ret):"m"(a), "m"(b):"xmm0", "xmm1", "cc");
|
||||
return ret;
|
||||
}
|
||||
uint64_t _minss_(float a, float b)
|
||||
{
|
||||
uint32_t ret;
|
||||
asm volatile (
|
||||
"movss %1, %%xmm0\n"
|
||||
"movss %2, %%xmm1\n"
|
||||
"minss %%xmm1, %%xmm0\n"
|
||||
"movd %%xmm0, %%eax"
|
||||
:"=a" (ret):"m"(a), "m"(b):"xmm0", "xmm1", "cc");
|
||||
return ret;
|
||||
}
|
||||
uint64_t _maxss_(float a, float b)
|
||||
{
|
||||
uint32_t ret;
|
||||
asm volatile (
|
||||
"movss %1, %%xmm0\n"
|
||||
"movss %2, %%xmm1\n"
|
||||
"maxss %%xmm1, %%xmm0\n"
|
||||
"movd %%xmm0, %%eax"
|
||||
:"=a" (ret):"m"(a), "m"(b):"xmm0", "xmm1", "cc");
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
int main(int argc, const char** argv)
|
||||
{
|
||||
float a, b;
|
||||
uint64_t flags;
|
||||
uint32_t maxf = 0x7f7fffff;
|
||||
uint32_t minf = 0xff7fffff;
|
||||
uint32_t r;
|
||||
a = 1.0f; b = 2.0f;
|
||||
flags = _ucomiss_(a, b);
|
||||
printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
|
||||
@ -65,5 +108,77 @@ int main(int argc, const char** argv)
|
||||
flags = _ucomiss_(a, b);
|
||||
printf("ucomiss %f, %f => 0x%lx\n", a, b, flags);
|
||||
|
||||
a = 1.0f; b = 2.0f;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = -INFINITY;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = +INFINITY;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = NAN;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
b = *(float*)&maxf;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = -INFINITY;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = +INFINITY;
|
||||
r = _minss_(a, b);
|
||||
printf("minss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _minss_(b, a);
|
||||
printf("minss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
|
||||
a = 1.0f; b = 2.0f;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = -INFINITY;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = +INFINITY;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = NAN;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
b = *(float*)&minf;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = -INFINITY;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
a = +INFINITY;
|
||||
r = _maxss_(a, b);
|
||||
printf("maxss %g, %g => %g\n", a, b, *(float*)&r);
|
||||
r = _maxss_(b, a);
|
||||
printf("maxss %g, %g => %g\n", b, a, *(float*)&r);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user