Merge pull request #5326 from OFFTKP/vcmpss_full

Add vcmp**_full tests
This commit is contained in:
LC authored and GitHub committed 2026-02-24 17:37:46 -05:00
commit 5ee18388c4
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;
}
+369
View File
@@ -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
+373
View File
@@ -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
+375
View File
@@ -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
+379
View File
@@ -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