diff --git a/ARMeilleure/CodeGen/X86/PreAllocator.cs b/ARMeilleure/CodeGen/X86/PreAllocator.cs index cb2476b4..3b3fd683 100644 --- a/ARMeilleure/CodeGen/X86/PreAllocator.cs +++ b/ARMeilleure/CodeGen/X86/PreAllocator.cs @@ -135,7 +135,7 @@ namespace ARMeilleure.CodeGen.X86 private static void HandleConstantRegCopy(IntrusiveList nodes, Node node, Operation operation) { - if (operation.SourcesCount == 0 || IsIntrinsic(operation.Instruction)) + if (operation.SourcesCount == 0 || IsXmmIntrinsic(operation)) { return; } @@ -1400,5 +1400,18 @@ namespace ARMeilleure.CodeGen.X86 { return inst == Instruction.Extended; } + + private static bool IsXmmIntrinsic(Operation operation) + { + if (operation.Instruction != Instruction.Extended) + { + return false; + } + + IntrinsicOperation intrinOp = (IntrinsicOperation)operation; + IntrinsicInfo info = IntrinsicTable.GetInfo(intrinOp.Intrinsic); + + return info.Type != IntrinsicType.Crc32; + } } } \ No newline at end of file