================
@@ -4119,6 +4119,230 @@ static bool interp__builtin_ia32_gfni_mul(InterpState
&S, CodePtr OpPC,
return true;
}
+static bool interp__builtin_x86_comi(InterpState &S, CodePtr OpPC,
+ const InterpFrame *Frame,
+ const CallExpr *Call, unsigned ID) {
+ uint32_t Predicate;
+ switch (ID) {
+ case X86::BI__builtin_ia32_comieq:
+ case X86::BI__builtin_ia32_ucomieq:
+ case X86::BI__builtin_ia32_comisdeq:
+ case X86::BI__builtin_ia32_ucomisdeq:
+ Predicate = X86CmpImm::CMP_EQ_OQ;
+ break;
+ case X86::BI__builtin_ia32_comilt:
+ case X86::BI__builtin_ia32_ucomilt:
+ case X86::BI__builtin_ia32_comisdlt:
+ case X86::BI__builtin_ia32_ucomisdlt:
+ Predicate = X86CmpImm::CMP_LT_OQ;
+ break;
+ case X86::BI__builtin_ia32_comile:
+ case X86::BI__builtin_ia32_ucomile:
+ case X86::BI__builtin_ia32_comisdle:
+ case X86::BI__builtin_ia32_ucomisdle:
+ Predicate = X86CmpImm::CMP_LE_OQ;
+ break;
+ case X86::BI__builtin_ia32_comigt:
+ case X86::BI__builtin_ia32_ucomigt:
+ case X86::BI__builtin_ia32_comisdgt:
+ case X86::BI__builtin_ia32_ucomisdgt:
+ Predicate = X86CmpImm::CMP_GT_OQ;
+ break;
+ case X86::BI__builtin_ia32_comige:
+ case X86::BI__builtin_ia32_ucomige:
+ case X86::BI__builtin_ia32_comisdge:
+ case X86::BI__builtin_ia32_ucomisdge:
+ Predicate = X86CmpImm::CMP_GE_OQ;
+ break;
+ case X86::BI__builtin_ia32_comineq:
+ case X86::BI__builtin_ia32_ucomineq:
+ case X86::BI__builtin_ia32_comisdneq:
+ case X86::BI__builtin_ia32_ucomisdneq:
+ Predicate = X86CmpImm::CMP_NEQ_UQ;
+ break;
+ case X86::BI__builtin_ia32_vcomish: {
+ discard(S.Stk, *S.getContext().classify(Call->getArg(3)));
+ const APSInt Imm = popToAPSInt(S, Call->getArg(2));
+ Predicate = Imm.getZExtValue();
----------------
tbaederr wrote:
```suggestion
Predicate = popToUInt64(S, Call->getArg(2));
```
https://github.com/llvm/llvm-project/pull/182589
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits