================
@@ -4774,6 +4774,26 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC,
const CallExpr *Call,
return std::pair<unsigned, int>{VecIdx, ElemIdx};
});
+ case X86::BI__builtin_ia32_alignd128:
+ case X86::BI__builtin_ia32_alignd256:
+ case X86::BI__builtin_ia32_alignd512:
+ case X86::BI__builtin_ia32_alignq128:
+ case X86::BI__builtin_ia32_alignq256:
+ case X86::BI__builtin_ia32_alignq512: {
+ unsigned NumElems =
+ Call->getType()->castAs<VectorType>()->getNumElements();
+ return interp__builtin_ia32_shuffle_generic(
+ S, OpPC, Call, [NumElems](unsigned DstIdx, unsigned Shift) {
+ unsigned Imm = Shift & 0xFF;
+ unsigned EffectiveShift = Imm & (NumElems - 1);
+ unsigned SourcePos = DstIdx + EffectiveShift;
+ unsigned VecIdx = SourcePos < NumElems ? 1u : 0u;
+ unsigned ElemIdx =
+ SourcePos < NumElems ? SourcePos : SourcePos - NumElems;
----------------
RKSimon wrote:
```suggestion
unsigned ElemIdx = SourcePos & (NumElems - 1);
```
https://github.com/llvm/llvm-project/pull/168206
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits