mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 10:00:16 +02:00
5 files changed
+1502
-6
No files matched your search
@@ -620,7 +620,7 @@ Ref OpDispatchBuilder::InsertScalarFCMPOpImpl(OpSize Size, IR::OpSize OpDstSize,
|
||||
// If either of the sources are unordered, then returns true.
|
||||
Ref Src1_U = _VFCMPEQ(Size, ElementSize, Src1, Src1);
|
||||
Ref Src2_U = _VFCMPEQ(Size, ElementSize, Src2, Src2);
|
||||
auto Ordered = _VAnd(ElementSize, ElementSize, Src1_U, Src2_U);
|
||||
auto Ordered = _VAnd(Size, ElementSize, Src1_U, Src2_U);
|
||||
|
||||
Ref Compare_Ordered = _VFCMPEQ(Size, ElementSize, Src1, Src2);
|
||||
Ref Result = _VOrn(Size, ElementSize, Compare_Ordered, Ordered);
|
||||
@@ -2508,8 +2508,8 @@ Ref OpDispatchBuilder::VFCMPOpImpl(OpSize Size, IR::OpSize ElementSize, Ref Src1
|
||||
case VectorCompareType::ORD_S: return _VFCMPORD(Size, ElementSize, Src1, Src2);
|
||||
case VectorCompareType::NGT_UQ:
|
||||
case VectorCompareType::NGT_US: {
|
||||
Ref Result = _VFCMPLT(ElementSize, ElementSize, Src2, Src1);
|
||||
return _VNot(ElementSize, ElementSize, Result);
|
||||
Ref Result = _VFCMPLT(Size, ElementSize, Src2, Src1);
|
||||
return _VNot(Size, ElementSize, Result);
|
||||
}
|
||||
case VectorCompareType::NGE_UQ:
|
||||
case VectorCompareType::NGE_US: {
|
||||
@@ -2525,7 +2525,7 @@ Ref OpDispatchBuilder::VFCMPOpImpl(OpSize Size, IR::OpSize ElementSize, Ref Src1
|
||||
// If either of the sources are unordered, then returns true.
|
||||
Ref Src1_U = _VFCMPEQ(Size, ElementSize, Src1, Src1);
|
||||
Ref Src2_U = _VFCMPEQ(Size, ElementSize, Src2, Src2);
|
||||
auto Ordered = _VAnd(ElementSize, ElementSize, Src1_U, Src2_U);
|
||||
auto Ordered = _VAnd(Size, ElementSize, Src1_U, Src2_U);
|
||||
|
||||
Ref Compare_Ordered = _VFCMPEQ(Size, ElementSize, Src1, Src2);
|
||||
return _VOrn(Size, ElementSize, Compare_Ordered, Ordered);
|
||||
@@ -2541,9 +2541,9 @@ Ref OpDispatchBuilder::VFCMPOpImpl(OpSize Size, IR::OpSize ElementSize, Ref Src1
|
||||
return _VAnd(Size, ElementSize, Result, Src2_U);
|
||||
}
|
||||
case VectorCompareType::FALSE_OQ:
|
||||
case VectorCompareType::FALSE_OS: return LoadZeroVector(OpSize::i128Bit);
|
||||
case VectorCompareType::FALSE_OS: return LoadZeroVector(Size);
|
||||
case VectorCompareType::TRUE_UQ:
|
||||
case VectorCompareType::TRUE_US: _VectorImm(OpSize::i128Bit, OpSize::i8Bit, -1, 0);
|
||||
case VectorCompareType::TRUE_US: return _VectorImm(Size, OpSize::i8Bit, -1, 0);
|
||||
}
|
||||
FEX_UNREACHABLE;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,369 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RCX": "448"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
%define true 1
|
||||
%define false 0
|
||||
|
||||
%define EQ_OQ 0
|
||||
%define LT_OS 1
|
||||
%define LE_OS 2
|
||||
%define UNORD_Q 3
|
||||
%define NEQ_UQ 4
|
||||
%define NLT_US 5
|
||||
%define NLE_US 6
|
||||
%define ORD_Q 7
|
||||
%define EQ_UQ 8
|
||||
%define NGE_US 9
|
||||
%define NGT_US 10
|
||||
%define FALSE_OQ 11
|
||||
%define NEQ_OQ 12
|
||||
%define GE_OS 13
|
||||
%define GT_OS 14
|
||||
%define TRUE_UQ 15
|
||||
%define EQ_OS 16
|
||||
%define LT_OQ 17
|
||||
%define LE_OQ 18
|
||||
%define UNORD_S 19
|
||||
%define NEQ_US 20
|
||||
%define NLT_UQ 21
|
||||
%define NLE_UQ 22
|
||||
%define ORD_S 23
|
||||
%define EQ_US 24
|
||||
%define NGE_UQ 25
|
||||
%define NGT_UQ 26
|
||||
%define FALSE_OS 27
|
||||
%define NEQ_OS 28
|
||||
%define GE_OQ 29
|
||||
%define GT_OQ 30
|
||||
%define TRUE_US 31
|
||||
|
||||
; Arguments: src1, src2, predicate, true/false
|
||||
%macro Compare 4
|
||||
vcmppd result, %1, %2, %3
|
||||
; Construct expected result
|
||||
vmovdqa temp, [rel .false + 32 * %4]
|
||||
; Compare if result and expected are equal
|
||||
vxorpd ymm6, ymm7, ymm8
|
||||
vptest ymm6, ymm6
|
||||
jnz .fail
|
||||
; Increment counter of tests passed
|
||||
add ecx, 1
|
||||
%endmacro
|
||||
|
||||
lea rax, [rel .data]
|
||||
xor ecx, ecx
|
||||
|
||||
vmovdqa ymm0, [rax + 32 * 0] ; -4.0
|
||||
vmovdqa ymm1, [rax + 32 * 1] ; -0.0
|
||||
vmovdqa ymm2, [rax + 32 * 2] ; 0.0
|
||||
vmovdqa ymm3, [rax + 32 * 3] ; 4.0
|
||||
vmovdqa ymm4, [rel .nan] ; NaN
|
||||
|
||||
%macro CompareAll 5
|
||||
%define xmm_neg_four %1
|
||||
%define xmm_neg_zero %2
|
||||
%define xmm_zero %3
|
||||
%define xmm_four %4
|
||||
%define xmm_nan %5
|
||||
|
||||
Compare xmm_four, xmm_four, EQ_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, EQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_OQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OS, false
|
||||
Compare xmm_nan, xmm_four, LT_OS, false
|
||||
Compare xmm_four, xmm_nan, LT_OS, false
|
||||
Compare xmm_nan, xmm_nan, LT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OS, true
|
||||
Compare xmm_nan, xmm_four, LE_OS, false
|
||||
Compare xmm_four, xmm_nan, LE_OS, false
|
||||
Compare xmm_nan, xmm_nan, LE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_Q, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_Q, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_Q, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_Q, false
|
||||
Compare xmm_nan, xmm_four, UNORD_Q, true
|
||||
Compare xmm_four, xmm_nan, UNORD_Q, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_Q, true
|
||||
|
||||
Compare xmm_four, xmm_four, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_neg_four, NEQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_UQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_US, true
|
||||
Compare xmm_nan, xmm_four, NLT_US, true
|
||||
Compare xmm_four, xmm_nan, NLT_US, true
|
||||
Compare xmm_nan, xmm_nan, NLT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_US, false
|
||||
Compare xmm_nan, xmm_four, NLE_US, true
|
||||
Compare xmm_four, xmm_nan, NLE_US, true
|
||||
Compare xmm_nan, xmm_nan, NLE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_Q, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_Q, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_Q, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_Q, true
|
||||
Compare xmm_nan, xmm_four, ORD_Q, false
|
||||
Compare xmm_four, xmm_nan, ORD_Q, false
|
||||
Compare xmm_nan, xmm_nan, ORD_Q, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_UQ, false
|
||||
Compare xmm_four, xmm_four, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_UQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, EQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_US, false
|
||||
Compare xmm_nan, xmm_four, NGE_US, true
|
||||
Compare xmm_four, xmm_nan, NGE_US, true
|
||||
Compare xmm_nan, xmm_nan, NGE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_US, true
|
||||
Compare xmm_nan, xmm_four, NGT_US, true
|
||||
Compare xmm_four, xmm_nan, NGT_US, true
|
||||
Compare xmm_nan, xmm_nan, NGT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OQ, true
|
||||
Compare xmm_four, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OS, true
|
||||
Compare xmm_nan, xmm_four, GE_OS, false
|
||||
Compare xmm_four, xmm_nan, GE_OS, false
|
||||
Compare xmm_nan, xmm_nan, GE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OS, false
|
||||
Compare xmm_nan, xmm_four, GT_OS, false
|
||||
Compare xmm_four, xmm_nan, GT_OS, false
|
||||
Compare xmm_nan, xmm_nan, GT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_four, xmm_nan, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_OS, false
|
||||
Compare xmm_neg_four, xmm_four, EQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, EQ_OS, true
|
||||
Compare xmm_nan, xmm_four, EQ_OS, false
|
||||
Compare xmm_four, xmm_nan, EQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OQ, false
|
||||
Compare xmm_nan, xmm_four, LT_OQ, false
|
||||
Compare xmm_four, xmm_nan, LT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OQ, true
|
||||
Compare xmm_nan, xmm_four, LE_OQ, false
|
||||
Compare xmm_four, xmm_nan, LE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_S, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_S, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_S, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_S, false
|
||||
Compare xmm_nan, xmm_four, UNORD_S, true
|
||||
Compare xmm_four, xmm_nan, UNORD_S, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_S, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_US, true
|
||||
Compare xmm_neg_four, xmm_four, NEQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NEQ_US, false
|
||||
Compare xmm_nan, xmm_four, NEQ_US, true
|
||||
Compare xmm_four, xmm_nan, NEQ_US, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NLT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NLE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_S, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_S, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_S, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_S, true
|
||||
Compare xmm_nan, xmm_four, ORD_S, false
|
||||
Compare xmm_four, xmm_nan, ORD_S, false
|
||||
Compare xmm_nan, xmm_nan, ORD_S, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_US, false
|
||||
Compare xmm_four, xmm_four, EQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_US, true
|
||||
Compare xmm_zero, xmm_zero, EQ_US, true
|
||||
Compare xmm_four, xmm_nan, EQ_US, true
|
||||
Compare xmm_nan, xmm_four, EQ_US, true
|
||||
Compare xmm_nan, xmm_nan, EQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NGE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NGT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OS, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OS, true
|
||||
Compare xmm_four, xmm_four, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OS, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OQ, true
|
||||
Compare xmm_nan, xmm_four, GE_OQ, false
|
||||
Compare xmm_four, xmm_nan, GE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OQ, false
|
||||
Compare xmm_nan, xmm_four, GT_OQ, false
|
||||
Compare xmm_four, xmm_nan, GT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_US, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_US, true
|
||||
Compare xmm_nan, xmm_four, TRUE_US, true
|
||||
Compare xmm_four, xmm_nan, TRUE_US, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_US, true
|
||||
%endmacro
|
||||
|
||||
%define temp xmm8
|
||||
%define result xmm7
|
||||
CompareAll xmm0, xmm1, xmm2, xmm3, xmm4
|
||||
%define temp ymm8
|
||||
%define result ymm7
|
||||
CompareAll ymm0, ymm1, ymm2, ymm3, ymm4
|
||||
|
||||
; If ecx is not correct we can use the counter to determine which test failed
|
||||
.fail:
|
||||
hlt
|
||||
|
||||
align 32
|
||||
.data:
|
||||
dq -4.0, -4.0, -4.0, -4.0
|
||||
|
||||
dq -0.0, -0.0, -0.0, -0.0
|
||||
|
||||
dq 0.0, 0.0, 0.0, 0.0
|
||||
|
||||
dq 4.0, 4.0, 4.0, 4.0
|
||||
|
||||
.nan:
|
||||
dq 0x7FF8000000000000
|
||||
dq 0x7FF8000000000000
|
||||
dq 0x7FF8000000000000
|
||||
dq 0x7FF8000000000000
|
||||
|
||||
.false:
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
|
||||
.true:
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
@@ -0,0 +1,373 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RCX": "448"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
%define true 1
|
||||
%define false 0
|
||||
|
||||
%define EQ_OQ 0
|
||||
%define LT_OS 1
|
||||
%define LE_OS 2
|
||||
%define UNORD_Q 3
|
||||
%define NEQ_UQ 4
|
||||
%define NLT_US 5
|
||||
%define NLE_US 6
|
||||
%define ORD_Q 7
|
||||
%define EQ_UQ 8
|
||||
%define NGE_US 9
|
||||
%define NGT_US 10
|
||||
%define FALSE_OQ 11
|
||||
%define NEQ_OQ 12
|
||||
%define GE_OS 13
|
||||
%define GT_OS 14
|
||||
%define TRUE_UQ 15
|
||||
%define EQ_OS 16
|
||||
%define LT_OQ 17
|
||||
%define LE_OQ 18
|
||||
%define UNORD_S 19
|
||||
%define NEQ_US 20
|
||||
%define NLT_UQ 21
|
||||
%define NLE_UQ 22
|
||||
%define ORD_S 23
|
||||
%define EQ_US 24
|
||||
%define NGE_UQ 25
|
||||
%define NGT_UQ 26
|
||||
%define FALSE_OS 27
|
||||
%define NEQ_OS 28
|
||||
%define GE_OQ 29
|
||||
%define GT_OQ 30
|
||||
%define TRUE_US 31
|
||||
|
||||
; Arguments: src1, src2, predicate, true/false
|
||||
%macro Compare 4
|
||||
vcmpps result, %1, %2, %3
|
||||
; Construct expected result
|
||||
vmovdqa temp, [rel .false + 32 * %4]
|
||||
; Compare if result and expected are equal
|
||||
vxorps ymm6, ymm7, ymm8
|
||||
vptest ymm6, ymm6
|
||||
jnz .fail
|
||||
; Increment counter of tests passed
|
||||
add ecx, 1
|
||||
%endmacro
|
||||
|
||||
lea rax, [rel .data]
|
||||
xor ecx, ecx
|
||||
|
||||
vmovdqa ymm0, [rax + 32 * 0] ; -4.0
|
||||
vmovdqa ymm1, [rax + 32 * 1] ; -0.0
|
||||
vmovdqa ymm2, [rax + 32 * 2] ; 0.0
|
||||
vmovdqa ymm3, [rax + 32 * 3] ; 4.0
|
||||
vmovdqa ymm4, [rel .nan] ; NaN
|
||||
|
||||
%macro CompareAll 5
|
||||
%define xmm_neg_four %1
|
||||
%define xmm_neg_zero %2
|
||||
%define xmm_zero %3
|
||||
%define xmm_four %4
|
||||
%define xmm_nan %5
|
||||
|
||||
Compare xmm_four, xmm_four, EQ_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, EQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_OQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OS, false
|
||||
Compare xmm_nan, xmm_four, LT_OS, false
|
||||
Compare xmm_four, xmm_nan, LT_OS, false
|
||||
Compare xmm_nan, xmm_nan, LT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OS, true
|
||||
Compare xmm_nan, xmm_four, LE_OS, false
|
||||
Compare xmm_four, xmm_nan, LE_OS, false
|
||||
Compare xmm_nan, xmm_nan, LE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_Q, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_Q, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_Q, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_Q, false
|
||||
Compare xmm_nan, xmm_four, UNORD_Q, true
|
||||
Compare xmm_four, xmm_nan, UNORD_Q, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_Q, true
|
||||
|
||||
Compare xmm_four, xmm_four, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_neg_four, NEQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_UQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_US, true
|
||||
Compare xmm_nan, xmm_four, NLT_US, true
|
||||
Compare xmm_four, xmm_nan, NLT_US, true
|
||||
Compare xmm_nan, xmm_nan, NLT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_US, false
|
||||
Compare xmm_nan, xmm_four, NLE_US, true
|
||||
Compare xmm_four, xmm_nan, NLE_US, true
|
||||
Compare xmm_nan, xmm_nan, NLE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_Q, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_Q, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_Q, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_Q, true
|
||||
Compare xmm_nan, xmm_four, ORD_Q, false
|
||||
Compare xmm_four, xmm_nan, ORD_Q, false
|
||||
Compare xmm_nan, xmm_nan, ORD_Q, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_UQ, false
|
||||
Compare xmm_four, xmm_four, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_UQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, EQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_US, false
|
||||
Compare xmm_nan, xmm_four, NGE_US, true
|
||||
Compare xmm_four, xmm_nan, NGE_US, true
|
||||
Compare xmm_nan, xmm_nan, NGE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_US, true
|
||||
Compare xmm_nan, xmm_four, NGT_US, true
|
||||
Compare xmm_four, xmm_nan, NGT_US, true
|
||||
Compare xmm_nan, xmm_nan, NGT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OQ, true
|
||||
Compare xmm_four, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OS, true
|
||||
Compare xmm_nan, xmm_four, GE_OS, false
|
||||
Compare xmm_four, xmm_nan, GE_OS, false
|
||||
Compare xmm_nan, xmm_nan, GE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OS, false
|
||||
Compare xmm_nan, xmm_four, GT_OS, false
|
||||
Compare xmm_four, xmm_nan, GT_OS, false
|
||||
Compare xmm_nan, xmm_nan, GT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_four, xmm_nan, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_OS, false
|
||||
Compare xmm_neg_four, xmm_four, EQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, EQ_OS, true
|
||||
Compare xmm_nan, xmm_four, EQ_OS, false
|
||||
Compare xmm_four, xmm_nan, EQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OQ, false
|
||||
Compare xmm_nan, xmm_four, LT_OQ, false
|
||||
Compare xmm_four, xmm_nan, LT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OQ, true
|
||||
Compare xmm_nan, xmm_four, LE_OQ, false
|
||||
Compare xmm_four, xmm_nan, LE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_S, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_S, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_S, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_S, false
|
||||
Compare xmm_nan, xmm_four, UNORD_S, true
|
||||
Compare xmm_four, xmm_nan, UNORD_S, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_S, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_US, true
|
||||
Compare xmm_neg_four, xmm_four, NEQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NEQ_US, false
|
||||
Compare xmm_nan, xmm_four, NEQ_US, true
|
||||
Compare xmm_four, xmm_nan, NEQ_US, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NLT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NLE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_S, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_S, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_S, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_S, true
|
||||
Compare xmm_nan, xmm_four, ORD_S, false
|
||||
Compare xmm_four, xmm_nan, ORD_S, false
|
||||
Compare xmm_nan, xmm_nan, ORD_S, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_US, false
|
||||
Compare xmm_four, xmm_four, EQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_US, true
|
||||
Compare xmm_zero, xmm_zero, EQ_US, true
|
||||
Compare xmm_four, xmm_nan, EQ_US, true
|
||||
Compare xmm_nan, xmm_four, EQ_US, true
|
||||
Compare xmm_nan, xmm_nan, EQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NGE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NGT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OS, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OS, true
|
||||
Compare xmm_four, xmm_four, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OS, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OQ, true
|
||||
Compare xmm_nan, xmm_four, GE_OQ, false
|
||||
Compare xmm_four, xmm_nan, GE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OQ, false
|
||||
Compare xmm_nan, xmm_four, GT_OQ, false
|
||||
Compare xmm_four, xmm_nan, GT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_US, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_US, true
|
||||
Compare xmm_nan, xmm_four, TRUE_US, true
|
||||
Compare xmm_four, xmm_nan, TRUE_US, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_US, true
|
||||
%endmacro
|
||||
|
||||
%define temp xmm8
|
||||
%define result xmm7
|
||||
CompareAll xmm0, xmm1, xmm2, xmm3, xmm4
|
||||
%define temp ymm8
|
||||
%define result ymm7
|
||||
CompareAll ymm0, ymm1, ymm2, ymm3, ymm4
|
||||
|
||||
; If ecx is not correct we can use the counter to determine which test failed
|
||||
.fail:
|
||||
hlt
|
||||
|
||||
align 32
|
||||
.data:
|
||||
dd -4.0, -4.0, -4.0, -4.0
|
||||
dd -4.0, -4.0, -4.0, -4.0
|
||||
|
||||
dd -0.0, -0.0, -0.0, -0.0
|
||||
dd -0.0, -0.0, -0.0, -0.0
|
||||
|
||||
dd 0.0, 0.0, 0.0, 0.0
|
||||
dd 0.0, 0.0, 0.0, 0.0
|
||||
|
||||
dd 4.0, 4.0, 4.0, 4.0
|
||||
dd 4.0, 4.0, 4.0, 4.0
|
||||
|
||||
.nan:
|
||||
dq 0x7FC000007FC00000
|
||||
dq 0x7FC000007FC00000
|
||||
dq 0x7FC000007FC00000
|
||||
dq 0x7FC000007FC00000
|
||||
|
||||
.false:
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
|
||||
.true:
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
@@ -0,0 +1,375 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RCX": "224"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
%define true 1
|
||||
%define false 0
|
||||
|
||||
%define EQ_OQ 0
|
||||
%define LT_OS 1
|
||||
%define LE_OS 2
|
||||
%define UNORD_Q 3
|
||||
%define NEQ_UQ 4
|
||||
%define NLT_US 5
|
||||
%define NLE_US 6
|
||||
%define ORD_Q 7
|
||||
%define EQ_UQ 8
|
||||
%define NGE_US 9
|
||||
%define NGT_US 10
|
||||
%define FALSE_OQ 11
|
||||
%define NEQ_OQ 12
|
||||
%define GE_OS 13
|
||||
%define GT_OS 14
|
||||
%define TRUE_UQ 15
|
||||
%define EQ_OS 16
|
||||
%define LT_OQ 17
|
||||
%define LE_OQ 18
|
||||
%define UNORD_S 19
|
||||
%define NEQ_US 20
|
||||
%define NLT_UQ 21
|
||||
%define NLE_UQ 22
|
||||
%define ORD_S 23
|
||||
%define EQ_US 24
|
||||
%define NGE_UQ 25
|
||||
%define NGT_UQ 26
|
||||
%define FALSE_OS 27
|
||||
%define NEQ_OS 28
|
||||
%define GE_OQ 29
|
||||
%define GT_OQ 30
|
||||
%define TRUE_US 31
|
||||
|
||||
; Arguments: src1, src2, predicate, true/false
|
||||
%macro Compare 4
|
||||
vcmpsd xmm7, %1, %2, %3
|
||||
; Construct expected result
|
||||
; Move truthy/falsey value to the first element based on %4
|
||||
; and [127:64] from src1
|
||||
vmovdqa xmm8, [rel .false + 32 * %4]
|
||||
vmovsd xmm5, %1, xmm8
|
||||
; Compare if result and expected are equal
|
||||
vxorpd ymm6, ymm7, ymm5
|
||||
vptest ymm6, ymm6
|
||||
jnz .fail
|
||||
; Increment counter of tests passed
|
||||
add ecx, 1
|
||||
%endmacro
|
||||
|
||||
lea rax, [rel .data]
|
||||
xor ecx, ecx
|
||||
|
||||
vmovdqa ymm0, [rax + 32 * 0] ; -4.0
|
||||
vmovdqa ymm1, [rax + 32 * 1] ; -0.0
|
||||
vmovdqa ymm2, [rax + 32 * 2] ; 0.0
|
||||
vmovdqa ymm3, [rax + 32 * 3] ; 4.0
|
||||
vmovdqa ymm4, [rel .nan] ; NaN
|
||||
|
||||
%define xmm_neg_four xmm0
|
||||
%define xmm_neg_zero xmm1
|
||||
%define xmm_zero xmm2
|
||||
%define xmm_four xmm3
|
||||
%define xmm_nan xmm4
|
||||
|
||||
Compare xmm_four, xmm_four, EQ_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, EQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_OQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OS, false
|
||||
Compare xmm_nan, xmm_four, LT_OS, false
|
||||
Compare xmm_four, xmm_nan, LT_OS, false
|
||||
Compare xmm_nan, xmm_nan, LT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OS, true
|
||||
Compare xmm_nan, xmm_four, LE_OS, false
|
||||
Compare xmm_four, xmm_nan, LE_OS, false
|
||||
Compare xmm_nan, xmm_nan, LE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_Q, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_Q, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_Q, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_Q, false
|
||||
Compare xmm_nan, xmm_four, UNORD_Q, true
|
||||
Compare xmm_four, xmm_nan, UNORD_Q, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_Q, true
|
||||
|
||||
Compare xmm_four, xmm_four, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_neg_four, NEQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_UQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_US, true
|
||||
Compare xmm_nan, xmm_four, NLT_US, true
|
||||
Compare xmm_four, xmm_nan, NLT_US, true
|
||||
Compare xmm_nan, xmm_nan, NLT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_US, false
|
||||
Compare xmm_nan, xmm_four, NLE_US, true
|
||||
Compare xmm_four, xmm_nan, NLE_US, true
|
||||
Compare xmm_nan, xmm_nan, NLE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_Q, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_Q, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_Q, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_Q, true
|
||||
Compare xmm_nan, xmm_four, ORD_Q, false
|
||||
Compare xmm_four, xmm_nan, ORD_Q, false
|
||||
Compare xmm_nan, xmm_nan, ORD_Q, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_UQ, false
|
||||
Compare xmm_four, xmm_four, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_UQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, EQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_US, false
|
||||
Compare xmm_nan, xmm_four, NGE_US, true
|
||||
Compare xmm_four, xmm_nan, NGE_US, true
|
||||
Compare xmm_nan, xmm_nan, NGE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_US, true
|
||||
Compare xmm_nan, xmm_four, NGT_US, true
|
||||
Compare xmm_four, xmm_nan, NGT_US, true
|
||||
Compare xmm_nan, xmm_nan, NGT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OQ, true
|
||||
Compare xmm_four, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OS, true
|
||||
Compare xmm_nan, xmm_four, GE_OS, false
|
||||
Compare xmm_four, xmm_nan, GE_OS, false
|
||||
Compare xmm_nan, xmm_nan, GE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OS, false
|
||||
Compare xmm_nan, xmm_four, GT_OS, false
|
||||
Compare xmm_four, xmm_nan, GT_OS, false
|
||||
Compare xmm_nan, xmm_nan, GT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_four, xmm_nan, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_OS, false
|
||||
Compare xmm_neg_four, xmm_four, EQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, EQ_OS, true
|
||||
Compare xmm_nan, xmm_four, EQ_OS, false
|
||||
Compare xmm_four, xmm_nan, EQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OQ, false
|
||||
Compare xmm_nan, xmm_four, LT_OQ, false
|
||||
Compare xmm_four, xmm_nan, LT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OQ, true
|
||||
Compare xmm_nan, xmm_four, LE_OQ, false
|
||||
Compare xmm_four, xmm_nan, LE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_S, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_S, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_S, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_S, false
|
||||
Compare xmm_nan, xmm_four, UNORD_S, true
|
||||
Compare xmm_four, xmm_nan, UNORD_S, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_S, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_US, true
|
||||
Compare xmm_neg_four, xmm_four, NEQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NEQ_US, false
|
||||
Compare xmm_nan, xmm_four, NEQ_US, true
|
||||
Compare xmm_four, xmm_nan, NEQ_US, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NLT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NLE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_S, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_S, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_S, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_S, true
|
||||
Compare xmm_nan, xmm_four, ORD_S, false
|
||||
Compare xmm_four, xmm_nan, ORD_S, false
|
||||
Compare xmm_nan, xmm_nan, ORD_S, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_US, false
|
||||
Compare xmm_four, xmm_four, EQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_US, true
|
||||
Compare xmm_zero, xmm_zero, EQ_US, true
|
||||
Compare xmm_four, xmm_nan, EQ_US, true
|
||||
Compare xmm_nan, xmm_four, EQ_US, true
|
||||
Compare xmm_nan, xmm_nan, EQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NGE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NGT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OS, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OS, true
|
||||
Compare xmm_four, xmm_four, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OS, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OQ, true
|
||||
Compare xmm_nan, xmm_four, GE_OQ, false
|
||||
Compare xmm_four, xmm_nan, GE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OQ, false
|
||||
Compare xmm_nan, xmm_four, GT_OQ, false
|
||||
Compare xmm_four, xmm_nan, GT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_US, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_US, true
|
||||
Compare xmm_nan, xmm_four, TRUE_US, true
|
||||
Compare xmm_four, xmm_nan, TRUE_US, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_US, true
|
||||
|
||||
; If ecx is not correct we can use the counter to determine which test failed
|
||||
.fail:
|
||||
hlt
|
||||
|
||||
align 32
|
||||
.data:
|
||||
dq -4.0
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dq -0.0
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dq 0.0
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dq 4.0
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
.nan:
|
||||
dq 0x7FF8000000000000
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
.false:
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
|
||||
.true:
|
||||
dq 0xFFFFFFFFFFFFFFFF
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
@@ -0,0 +1,379 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"HostFeatures": ["AVX"],
|
||||
"RegData": {
|
||||
"RCX": "224"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
%define true 1
|
||||
%define false 0
|
||||
|
||||
%define EQ_OQ 0
|
||||
%define LT_OS 1
|
||||
%define LE_OS 2
|
||||
%define UNORD_Q 3
|
||||
%define NEQ_UQ 4
|
||||
%define NLT_US 5
|
||||
%define NLE_US 6
|
||||
%define ORD_Q 7
|
||||
%define EQ_UQ 8
|
||||
%define NGE_US 9
|
||||
%define NGT_US 10
|
||||
%define FALSE_OQ 11
|
||||
%define NEQ_OQ 12
|
||||
%define GE_OS 13
|
||||
%define GT_OS 14
|
||||
%define TRUE_UQ 15
|
||||
%define EQ_OS 16
|
||||
%define LT_OQ 17
|
||||
%define LE_OQ 18
|
||||
%define UNORD_S 19
|
||||
%define NEQ_US 20
|
||||
%define NLT_UQ 21
|
||||
%define NLE_UQ 22
|
||||
%define ORD_S 23
|
||||
%define EQ_US 24
|
||||
%define NGE_UQ 25
|
||||
%define NGT_UQ 26
|
||||
%define FALSE_OS 27
|
||||
%define NEQ_OS 28
|
||||
%define GE_OQ 29
|
||||
%define GT_OQ 30
|
||||
%define TRUE_US 31
|
||||
|
||||
; Arguments: src1, src2, predicate, true/false
|
||||
%macro Compare 4
|
||||
vcmpss xmm7, %1, %2, %3
|
||||
; Construct expected result
|
||||
; Move truthy/falsey value to the first element based on %4
|
||||
; and [127:32] from src1
|
||||
vmovdqa xmm8, [rel .false + 32 * %4]
|
||||
vmovss xmm5, %1, xmm8
|
||||
; Compare if result and expected are equal
|
||||
vxorps ymm6, ymm7, ymm5
|
||||
vptest ymm6, ymm6
|
||||
jnz .fail
|
||||
; Increment counter of tests passed
|
||||
add ecx, 1
|
||||
%endmacro
|
||||
|
||||
lea rax, [rel .data]
|
||||
xor ecx, ecx
|
||||
|
||||
vmovdqa ymm0, [rax + 32 * 0] ; -4.0
|
||||
vmovdqa ymm1, [rax + 32 * 1] ; -0.0
|
||||
vmovdqa ymm2, [rax + 32 * 2] ; 0.0
|
||||
vmovdqa ymm3, [rax + 32 * 3] ; 4.0
|
||||
vmovdqa ymm4, [rel .nan] ; NaN
|
||||
|
||||
%define xmm_neg_four xmm0
|
||||
%define xmm_neg_zero xmm1
|
||||
%define xmm_zero xmm2
|
||||
%define xmm_four xmm3
|
||||
%define xmm_nan xmm4
|
||||
|
||||
Compare xmm_four, xmm_four, EQ_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, EQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_OQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, EQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OS, false
|
||||
Compare xmm_nan, xmm_four, LT_OS, false
|
||||
Compare xmm_four, xmm_nan, LT_OS, false
|
||||
Compare xmm_nan, xmm_nan, LT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OS, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OS, true
|
||||
Compare xmm_nan, xmm_four, LE_OS, false
|
||||
Compare xmm_four, xmm_nan, LE_OS, false
|
||||
Compare xmm_nan, xmm_nan, LE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_Q, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_Q, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_Q, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_Q, false
|
||||
Compare xmm_nan, xmm_four, UNORD_Q, true
|
||||
Compare xmm_four, xmm_nan, UNORD_Q, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_Q, true
|
||||
|
||||
Compare xmm_four, xmm_four, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_neg_four, NEQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_UQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_UQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, NEQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_US, true
|
||||
Compare xmm_nan, xmm_four, NLT_US, true
|
||||
Compare xmm_four, xmm_nan, NLT_US, true
|
||||
Compare xmm_nan, xmm_nan, NLT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_US, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_US, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_US, false
|
||||
Compare xmm_nan, xmm_four, NLE_US, true
|
||||
Compare xmm_four, xmm_nan, NLE_US, true
|
||||
Compare xmm_nan, xmm_nan, NLE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_Q, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_Q, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_Q, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_Q, true
|
||||
Compare xmm_nan, xmm_four, ORD_Q, false
|
||||
Compare xmm_four, xmm_nan, ORD_Q, false
|
||||
Compare xmm_nan, xmm_nan, ORD_Q, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_UQ, false
|
||||
Compare xmm_four, xmm_four, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_UQ, true
|
||||
Compare xmm_zero, xmm_zero, EQ_UQ, true
|
||||
Compare xmm_four, xmm_nan, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_four, EQ_UQ, true
|
||||
Compare xmm_nan, xmm_nan, EQ_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_US, false
|
||||
Compare xmm_nan, xmm_four, NGE_US, true
|
||||
Compare xmm_four, xmm_nan, NGE_US, true
|
||||
Compare xmm_nan, xmm_nan, NGE_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_US, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_US, true
|
||||
Compare xmm_nan, xmm_four, NGT_US, true
|
||||
Compare xmm_four, xmm_nan, NGT_US, true
|
||||
Compare xmm_nan, xmm_nan, NGT_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OQ, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OQ, true
|
||||
Compare xmm_four, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OQ, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OQ, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OQ, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OS, true
|
||||
Compare xmm_nan, xmm_four, GE_OS, false
|
||||
Compare xmm_four, xmm_nan, GE_OS, false
|
||||
Compare xmm_nan, xmm_nan, GE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OS, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OS, false
|
||||
Compare xmm_nan, xmm_four, GT_OS, false
|
||||
Compare xmm_four, xmm_nan, GT_OS, false
|
||||
Compare xmm_nan, xmm_nan, GT_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_four, TRUE_UQ, true
|
||||
Compare xmm_four, xmm_nan, TRUE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_OS, false
|
||||
Compare xmm_neg_four, xmm_four, EQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_OS, true
|
||||
Compare xmm_neg_zero, xmm_zero, EQ_OS, true
|
||||
Compare xmm_nan, xmm_four, EQ_OS, false
|
||||
Compare xmm_four, xmm_nan, EQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, EQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LT_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LT_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, LT_OQ, false
|
||||
Compare xmm_nan, xmm_four, LT_OQ, false
|
||||
Compare xmm_four, xmm_nan, LT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, LE_OQ, false
|
||||
Compare xmm_neg_four, xmm_four, LE_OQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, LE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, LE_OQ, true
|
||||
Compare xmm_nan, xmm_four, LE_OQ, false
|
||||
Compare xmm_four, xmm_nan, LE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, LE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, UNORD_S, false
|
||||
Compare xmm_neg_four, xmm_four, UNORD_S, false
|
||||
Compare xmm_zero, xmm_neg_zero, UNORD_S, false
|
||||
Compare xmm_neg_zero, xmm_zero, UNORD_S, false
|
||||
Compare xmm_nan, xmm_four, UNORD_S, true
|
||||
Compare xmm_four, xmm_nan, UNORD_S, true
|
||||
Compare xmm_nan, xmm_nan, UNORD_S, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_US, true
|
||||
Compare xmm_neg_four, xmm_four, NEQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_US, false
|
||||
Compare xmm_neg_zero, xmm_zero, NEQ_US, false
|
||||
Compare xmm_nan, xmm_four, NEQ_US, true
|
||||
Compare xmm_four, xmm_nan, NEQ_US, true
|
||||
Compare xmm_nan, xmm_nan, NEQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLT_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLT_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NLT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NLE_UQ, true
|
||||
Compare xmm_neg_four, xmm_four, NLE_UQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, NLE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NLE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NLE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NLE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NLE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, ORD_S, true
|
||||
Compare xmm_neg_four, xmm_four, ORD_S, true
|
||||
Compare xmm_zero, xmm_neg_zero, ORD_S, true
|
||||
Compare xmm_neg_zero, xmm_zero, ORD_S, true
|
||||
Compare xmm_nan, xmm_four, ORD_S, false
|
||||
Compare xmm_four, xmm_nan, ORD_S, false
|
||||
Compare xmm_nan, xmm_nan, ORD_S, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, EQ_US, false
|
||||
Compare xmm_four, xmm_four, EQ_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, EQ_US, true
|
||||
Compare xmm_zero, xmm_zero, EQ_US, true
|
||||
Compare xmm_four, xmm_nan, EQ_US, true
|
||||
Compare xmm_nan, xmm_four, EQ_US, true
|
||||
Compare xmm_nan, xmm_nan, EQ_US, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGE_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGE_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGE_UQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, NGE_UQ, false
|
||||
Compare xmm_nan, xmm_four, NGE_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGE_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGE_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NGT_UQ, false
|
||||
Compare xmm_neg_four, xmm_four, NGT_UQ, true
|
||||
Compare xmm_zero, xmm_neg_zero, NGT_UQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_four, NGT_UQ, true
|
||||
Compare xmm_four, xmm_nan, NGT_UQ, true
|
||||
Compare xmm_nan, xmm_nan, NGT_UQ, true
|
||||
|
||||
Compare xmm_four, xmm_neg_four, FALSE_OS, false
|
||||
Compare xmm_neg_four, xmm_four, FALSE_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, FALSE_OS, false
|
||||
Compare xmm_neg_zero, xmm_zero, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_four, FALSE_OS, false
|
||||
Compare xmm_four, xmm_nan, FALSE_OS, false
|
||||
Compare xmm_nan, xmm_nan, FALSE_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, NEQ_OS, true
|
||||
Compare xmm_four, xmm_four, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_neg_zero, NEQ_OS, false
|
||||
Compare xmm_zero, xmm_zero, NEQ_OS, false
|
||||
Compare xmm_four, xmm_nan, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_four, NEQ_OS, false
|
||||
Compare xmm_nan, xmm_nan, NEQ_OS, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GE_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GE_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GE_OQ, true
|
||||
Compare xmm_neg_zero, xmm_zero, GE_OQ, true
|
||||
Compare xmm_nan, xmm_four, GE_OQ, false
|
||||
Compare xmm_four, xmm_nan, GE_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GE_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, GT_OQ, true
|
||||
Compare xmm_neg_four, xmm_four, GT_OQ, false
|
||||
Compare xmm_zero, xmm_neg_zero, GT_OQ, false
|
||||
Compare xmm_neg_zero, xmm_zero, GT_OQ, false
|
||||
Compare xmm_nan, xmm_four, GT_OQ, false
|
||||
Compare xmm_four, xmm_nan, GT_OQ, false
|
||||
Compare xmm_nan, xmm_nan, GT_OQ, false
|
||||
|
||||
Compare xmm_four, xmm_neg_four, TRUE_US, true
|
||||
Compare xmm_neg_four, xmm_four, TRUE_US, true
|
||||
Compare xmm_zero, xmm_neg_zero, TRUE_US, true
|
||||
Compare xmm_neg_zero, xmm_zero, TRUE_US, true
|
||||
Compare xmm_nan, xmm_four, TRUE_US, true
|
||||
Compare xmm_four, xmm_nan, TRUE_US, true
|
||||
Compare xmm_nan, xmm_nan, TRUE_US, true
|
||||
|
||||
; If ecx is not correct we can use the counter to determine which test failed
|
||||
.fail:
|
||||
hlt
|
||||
|
||||
align 32
|
||||
.data:
|
||||
dd -4.0
|
||||
dd 0xCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dd -0.0
|
||||
dd 0xCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dd 0.0
|
||||
dd 0xCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
dd 4.0
|
||||
dd 0xCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
.nan:
|
||||
dq 0xCCCCCCCC7FC00000
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
dq 0xCCCCCCCCCCCCCCCC
|
||||
|
||||
.false:
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
|
||||
.true:
|
||||
dq 0x00000000FFFFFFFF
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
dq 0x0000000000000000
|
||||
Reference in new issue
Block a user