================
@@ -6049,6 +6096,50 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC,
const CallExpr *Call,
return EvalScalarMinMaxFp(A, B, RoundingMode, /*IsMin=*/false);
},
/*IsScalar=*/true);
+ case X86::BI__builtin_ia32_vpdpwssd128:
+ case X86::BI__builtin_ia32_vpdpwssd256:
+ case X86::BI__builtin_ia32_vpdpwssd512:
+ case X86::BI__builtin_ia32_vpdpwssds128:
+ case X86::BI__builtin_ia32_vpdpwssds256:
+ case X86::BI__builtin_ia32_vpdpwssds512:
+ case X86::BI__builtin_ia32_vpdpbusds128:
+ case X86::BI__builtin_ia32_vpdpbusds256:
+ case X86::BI__builtin_ia32_vpdpbusds512:
+ case X86::BI__builtin_ia32_vpdpbusd128:
+ case X86::BI__builtin_ia32_vpdpbusd256:
+ case X86::BI__builtin_ia32_vpdpbusd512: {
+ unsigned BuiltinID = Call->getBuiltinCallee();
+ bool IsDottingWord;
+ bool IsSaturating;
+ switch (BuiltinID) {
+ case X86::BI__builtin_ia32_vpdpwssd128:
+ case X86::BI__builtin_ia32_vpdpwssd256:
+ case X86::BI__builtin_ia32_vpdpwssd512:
+ IsDottingWord = true;
+ IsSaturating = false;
+ break;
+ case X86::BI__builtin_ia32_vpdpwssds128:
+ case X86::BI__builtin_ia32_vpdpwssds256:
+ case X86::BI__builtin_ia32_vpdpwssds512:
+ IsDottingWord = true;
+ IsSaturating = true;
+ break;
+ case X86::BI__builtin_ia32_vpdpbusds128:
+ case X86::BI__builtin_ia32_vpdpbusds256:
+ case X86::BI__builtin_ia32_vpdpbusds512:
+ IsDottingWord = false;
+ IsSaturating = true;
+ break;
+ case X86::BI__builtin_ia32_vpdpbusd128:
+ case X86::BI__builtin_ia32_vpdpbusd256:
+ case X86::BI__builtin_ia32_vpdpbusd512:
+ IsDottingWord = false;
+ IsSaturating = false;
+ break;
+ }
----------------
tbaederr wrote:
I'd rather have individual calls to `interp__builtin_ia32_vpdp` instead of a
nested switch statement.
https://github.com/llvm/llvm-project/pull/190549
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits