From b50bc46888cf9a8d94ae1590c0941be62a083533 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
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++)
             {