================
@@ -3364,6 +3425,16 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC,
const CallExpr *Call,
return interp__builtin_elementwise_int_binop(S, OpPC, Call,
llvm::APIntOps::avgCeilU);
+ case clang::X86::BI__builtin_ia32_pmaddubsw128:
+ case clang::X86::BI__builtin_ia32_pmaddubsw256:
+ case clang::X86::BI__builtin_ia32_pmaddubsw512:
+ return interp__builtin_ia32_pmadd(S, OpPC, Call, BuiltinID);
----------------
RKSimon wrote:
use a callback system like interp__builtin_elementwise_int_binop:
```cpp
return interp__builtin_ia32_pmadd(S, OpPC, Call,
[](const APSInt &LoLHS, const APSInt &HiLHS, const APSInt &HiRHS, const
APSInt &HiRHS) {
unsigned BitWidth = 2 * LHS.getBitWidth();
return (LoLHS.zext(BitWidth) *
LoRHS.sext(BitWidth)).sadd_sat((HiLHS.zext(BitWidth) * HiRHS.sext(BitWidth)));
});
```
https://github.com/llvm/llvm-project/pull/161563
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits