Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing several of the Sse/Sse2.Compare* intrinsics to account for NaN inputs #34204

Merged
merged 15 commits into from
Apr 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/coreclr/src/jit/hwintrinsic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ static const HWIntrinsicInfo hwIntrinsicInfoArray[] = {
// clang-format off
#if defined(TARGET_XARCH)
#define HARDWARE_INTRINSIC(id, name, isa, ival, size, numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, flag) \
{NI_##id, name, InstructionSet_##isa, ival, size, numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, static_cast<HWIntrinsicFlag>(flag)},
{NI_##id, name, InstructionSet_##isa, static_cast<int>(ival), static_cast<unsigned>(size), numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, static_cast<HWIntrinsicFlag>(flag)},
#include "hwintrinsiclistxarch.h"
#elif defined (TARGET_ARM64)
#define HARDWARE_INTRINSIC(isa, name, ival, size, numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, flag) \
{NI_##isa##_##name, #name, InstructionSet_##isa, ival, static_cast<unsigned>(size), numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, static_cast<HWIntrinsicFlag>(flag)},
{NI_##isa##_##name, #name, InstructionSet_##isa, static_cast<int>(ival), static_cast<unsigned>(size), numarg, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, category, static_cast<HWIntrinsicFlag>(flag)},
#include "hwintrinsiclistarm64.h"
#else
#error Unsupported platform
Expand Down
103 changes: 103 additions & 0 deletions src/coreclr/src/jit/hwintrinsic.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,108 @@ enum HWIntrinsicFlag : unsigned int
HW_Flag_MaybeMemoryStore = 0x20000,
};

#if defined(TARGET_XARCH)
// This mirrors the System.Runtime.Intrinsics.X86.FloatComparisonMode enumeration
enum class FloatComparisonMode : unsigned char
{
// _CMP_EQ_OQ
OrderedEqualNonSignaling = 0,

// _CMP_LT_OS
OrderedLessThanSignaling = 1,

// _CMP_LE_OS
OrderedLessThanOrEqualSignaling = 2,

// _CMP_UNORD_Q
UnorderedNonSignaling = 3,

// _CMP_NEQ_UQ
UnorderedNotEqualNonSignaling = 4,

// _CMP_NLT_US
UnorderedNotLessThanSignaling = 5,

// _CMP_NLE_US
UnorderedNotLessThanOrEqualSignaling = 6,

// _CMP_ORD_Q
OrderedNonSignaling = 7,

// _CMP_EQ_UQ
UnorderedEqualNonSignaling = 8,

// _CMP_NGE_US
UnorderedNotGreaterThanOrEqualSignaling = 9,

// _CMP_NGT_US
UnorderedNotGreaterThanSignaling = 10,

// _CMP_FALSE_OQ
OrderedFalseNonSignaling = 11,

// _CMP_NEQ_OQ
OrderedNotEqualNonSignaling = 12,

// _CMP_GE_OS
OrderedGreaterThanOrEqualSignaling = 13,

// _CMP_GT_OS
OrderedGreaterThanSignaling = 14,

// _CMP_TRUE_UQ
UnorderedTrueNonSignaling = 15,

// _CMP_EQ_OS
OrderedEqualSignaling = 16,

// _CMP_LT_OQ
OrderedLessThanNonSignaling = 17,

// _CMP_LE_OQ
OrderedLessThanOrEqualNonSignaling = 18,

// _CMP_UNORD_S
UnorderedSignaling = 19,

// _CMP_NEQ_US
UnorderedNotEqualSignaling = 20,

// _CMP_NLT_UQ
UnorderedNotLessThanNonSignaling = 21,

// _CMP_NLE_UQ
UnorderedNotLessThanOrEqualNonSignaling = 22,

// _CMP_ORD_S
OrderedSignaling = 23,

// _CMP_EQ_US
UnorderedEqualSignaling = 24,

// _CMP_NGE_UQ
UnorderedNotGreaterThanOrEqualNonSignaling = 25,

// _CMP_NGT_UQ
UnorderedNotGreaterThanNonSignaling = 26,

// _CMP_FALSE_OS
OrderedFalseSignaling = 27,

// _CMP_NEQ_OS
OrderedNotEqualSignaling = 28,

// _CMP_GE_OQ
OrderedGreaterThanOrEqualNonSignaling = 29,

// _CMP_GT_OQ
OrderedGreaterThanNonSignaling = 30,

// _CMP_TRUE_US
UnorderedTrueSignaling = 31,
};
#endif // TARGET_XARCH

struct HWIntrinsicInfo
{
NamedIntrinsic id;
Expand Down Expand Up @@ -150,6 +252,7 @@ struct HWIntrinsicInfo

#ifdef TARGET_XARCH
static bool isAVX2GatherIntrinsic(NamedIntrinsic id);
static FloatComparisonMode lookupFloatComparisonModeForSwappedArgs(FloatComparisonMode comparison);
#endif

// Member lookup
Expand Down
96 changes: 48 additions & 48 deletions src/coreclr/src/jit/hwintrinsiclistxarch.h

Large diffs are not rendered by default.

Loading