Fix PSRAD x86 instruction encoding, TRN, UABD and UABDL implementations
This commit is contained in:
parent
a1ced9e112
commit
6dd580e9d4
3 changed files with 10 additions and 5 deletions
|
@ -167,7 +167,7 @@ namespace ARMeilleure.CodeGen.X86
|
|||
Add(X86Instruction.Pshufd, new InstInfo(BadOp, BadOp, BadOp, BadOp, 0x00000f70, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Pslldq, new InstInfo(BadOp, 0x07000f73, BadOp, BadOp, BadOp, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psllw, new InstInfo(BadOp, 0x06000f71, BadOp, BadOp, 0x00000ff1, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psrad, new InstInfo(BadOp, 0x00000f72, BadOp, BadOp, 0x00000fe2, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psrad, new InstInfo(BadOp, 0x04000f72, BadOp, BadOp, 0x00000fe2, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psraw, new InstInfo(BadOp, 0x04000f71, BadOp, BadOp, 0x00000fe1, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psrld, new InstInfo(BadOp, 0x02000f72, BadOp, BadOp, 0x00000fd2, InstFlags.Vex | InstFlags.Prefix66));
|
||||
Add(X86Instruction.Psrlq, new InstInfo(BadOp, 0x02000f73, BadOp, BadOp, 0x00000fd3, InstFlags.Vex | InstFlags.Prefix66));
|
||||
|
|
|
@ -3153,7 +3153,7 @@ namespace ARMeilleure.Instructions
|
|||
|
||||
Operand onesMask = X86GetAllElements(context, -1L);
|
||||
|
||||
cmpMask = context.AddIntrinsic(Instruction.X86Pand, cmpMask, onesMask);
|
||||
cmpMask = context.AddIntrinsic(Instruction.X86Pandn, cmpMask, onesMask);
|
||||
|
||||
Instruction subInst = X86PsubInstruction[size];
|
||||
|
||||
|
|
|
@ -567,13 +567,13 @@ namespace ARMeilleure.Instructions
|
|||
|
||||
if (Optimizations.UseSsse3)
|
||||
{
|
||||
long maskE0 = _masksE0_TrnUzpXtn[op.Size];
|
||||
long maskE1 = _masksE1_TrnUzp [op.Size];
|
||||
|
||||
Operand mask = null;
|
||||
|
||||
if (op.Size < 3)
|
||||
{
|
||||
long maskE0 = _masksE0_TrnUzpXtn[op.Size];
|
||||
long maskE1 = _masksE1_TrnUzp [op.Size];
|
||||
|
||||
mask = X86GetScalar(context, maskE0);
|
||||
|
||||
mask = EmitVectorInsert(context, mask, Const(maskE1), 1, 3);
|
||||
|
@ -599,6 +599,11 @@ namespace ARMeilleure.Instructions
|
|||
|
||||
Operand res = context.AddIntrinsic(punpckInst, n, m);
|
||||
|
||||
if (op.RegisterSize == RegisterSize.Simd64)
|
||||
{
|
||||
res = context.VectorZeroUpper64(res);
|
||||
}
|
||||
|
||||
context.Copy(GetVec(op.Rd), res);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue