From 94b3eb96a905a9bf4600f5df11e4804900d711bb Mon Sep 17 00:00:00 2001 From: gdkchan Date: Fri, 30 Mar 2018 16:46:00 -0300 Subject: [PATCH] Add BIT instruction --- AOpCodeTable.cs | 1 + Instruction/AInstEmitSimdLogical.cs | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/AOpCodeTable.cs b/AOpCodeTable.cs index c2929d9..0d3fa29 100644 --- a/AOpCodeTable.cs +++ b/AOpCodeTable.cs @@ -141,6 +141,7 @@ namespace ChocolArm64 Set("0x001110011xxxxx000111xxxxxxxxxx", AInstEmit.Bic_V, typeof(AOpCodeSimdReg)); Set("0x10111100000xxx<101110<<1xxxxx100011xxxxxxxxxx", AInstEmit.Cmeq_V, typeof(AOpCodeSimdReg)); Set("0>001110<<100000100110xxxxxxxxxx", AInstEmit.Cmeq_V, typeof(AOpCodeSimd)); diff --git a/Instruction/AInstEmitSimdLogical.cs b/Instruction/AInstEmitSimdLogical.cs index 8fd8ea4..967c3d3 100644 --- a/Instruction/AInstEmitSimdLogical.cs +++ b/Instruction/AInstEmitSimdLogical.cs @@ -33,6 +33,16 @@ namespace ChocolArm64.Instruction } public static void Bif_V(AILEmitterCtx Context) + { + EmitBitBif(Context, true); + } + + public static void Bit_V(AILEmitterCtx Context) + { + EmitBitBif(Context, false); + } + + public static void EmitBitBif(AILEmitterCtx Context, bool NotRm) { AOpCodeSimdReg Op = (AOpCodeSimdReg)Context.CurrOp; @@ -47,6 +57,11 @@ namespace ChocolArm64.Instruction EmitVectorExtractZx(Context, Op.Rm, Index, Op.Size); + if (NotRm) + { + Context.Emit(OpCodes.Not); + } + Context.Emit(OpCodes.And); EmitVectorExtractZx(Context, Op.Rd, Index, Op.Size);