================
@@ -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

Reply via email to