backend\A64\emit_a64_packed.cpp: Implement Unsigned Sum of Absolute Differences
This commit is contained in:
parent
5958810e56
commit
f56f9c2b29
@ -342,6 +342,18 @@ void EmitA64::EmitPackedSaturatedSubS16(EmitContext& ctx, IR::Inst* inst) {
|
||||
ctx.reg_alloc.DefineValue(inst, a);
|
||||
}
|
||||
|
||||
void EmitA64::EmitPackedAbsDiffSumS8(EmitContext& ctx, IR::Inst* inst) {
|
||||
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
||||
|
||||
const ARM64Reg a = EncodeRegToDouble(ctx.reg_alloc.UseScratchFpr(args[0]));
|
||||
const ARM64Reg b = EncodeRegToDouble(ctx.reg_alloc.UseFpr(args[1]));
|
||||
|
||||
code.fp_emitter.UABD(B, a, a, b);
|
||||
code.fp_emitter.UADDLV(B, a, a);
|
||||
|
||||
ctx.reg_alloc.DefineValue(inst, a);
|
||||
}
|
||||
|
||||
void EmitA64::EmitPackedSelect(EmitContext& ctx, IR::Inst* inst) {
|
||||
auto args = ctx.reg_alloc.GetArgumentInfo(inst);
|
||||
|
||||
|
@ -212,7 +212,7 @@ OPCODE(PackedSaturatedAddU16, U32, U32,
|
||||
OPCODE(PackedSaturatedAddS16, U32, U32, U32 )
|
||||
OPCODE(PackedSaturatedSubU16, U32, U32, U32 )
|
||||
OPCODE(PackedSaturatedSubS16, U32, U32, U32 )
|
||||
//OPCODE(PackedAbsDiffSumS8, U32, U32, U32 )
|
||||
OPCODE(PackedAbsDiffSumS8, U32, U32, U32 )
|
||||
OPCODE(PackedSelect, U32, U32, U32, U32 )
|
||||
|
||||
// CRC instructions
|
||||
|
@ -186,8 +186,8 @@ INST(arm_SEL, "SEL", "cccc01101000nnnndddd11111011mmmm
|
||||
INST(arm_UBFX, "UBFX", "cccc0111111wwwwwddddvvvvv101nnnn") // v6T2
|
||||
|
||||
// Unsigned Sum of Absolute Differences instructions
|
||||
//INST(arm_USAD8, "USAD8", "cccc01111000dddd1111mmmm0001nnnn") // v6
|
||||
//INST(arm_USADA8, "USADA8", "cccc01111000ddddaaaammmm0001nnnn") // v6
|
||||
INST(arm_USAD8, "USAD8", "cccc01111000dddd1111mmmm0001nnnn") // v6
|
||||
INST(arm_USADA8, "USADA8", "cccc01111000ddddaaaammmm0001nnnn") // v6
|
||||
|
||||
// Packing instructions
|
||||
//INST(arm_PKHBT, "PKHBT", "cccc01101000nnnnddddvvvvv001mmmm") // v6K
|
||||
|
Loading…
x
Reference in New Issue
Block a user