From b50bc46888cf9a8d94ae1590c0941be62a083533 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Wed, 14 Mar 2018 01:59:22 -0300 Subject: [PATCH] CPU fix for the cases using a Mask with shift = 0 --- ChocolArm64/Decoder/AOpCodeSimdImm.cs | 9 ++++++++- ChocolArm64/Instruction/AInstEmitSimdShift.cs | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChocolArm64/Decoder/AOpCodeSimdImm.cs b/ChocolArm64/Decoder/AOpCodeSimdImm.cs index 2959aee6de..e7dfe62114 100644 --- a/ChocolArm64/Decoder/AOpCodeSimdImm.cs +++ b/ChocolArm64/Decoder/AOpCodeSimdImm.cs @@ -88,7 +88,14 @@ namespace ChocolArm64.Decoder private static long ShlOnes(long Value, int Shift) { - return Value << Shift | (long)(ulong.MaxValue >> (64 - Shift)); + if (Shift != 0) + { + return Value << Shift | (long)(ulong.MaxValue >> (64 - Shift)); + } + else + { + return Value; + } } } } \ No newline at end of file diff --git a/ChocolArm64/Instruction/AInstEmitSimdShift.cs b/ChocolArm64/Instruction/AInstEmitSimdShift.cs index bffed57ed4..24d35abe4c 100644 --- a/ChocolArm64/Instruction/AInstEmitSimdShift.cs +++ b/ChocolArm64/Instruction/AInstEmitSimdShift.cs @@ -58,7 +58,7 @@ namespace ChocolArm64.Instruction int Shift = Op.Imm - (8 << Op.Size); - ulong Mask = ulong.MaxValue >> (64 - Shift); + ulong Mask = Shift != 0 ? ulong.MaxValue >> (64 - Shift) : 0; for (int Index = 0; Index < (Bytes >> Op.Size); Index++) {