From bd4797beb088cc7bcdc59ce7b7fcd51d4014cef8 Mon Sep 17 00:00:00 2001 From: LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com> Date: Sun, 29 Sep 2019 23:05:51 +0200 Subject: [PATCH] Update SoftFallback.cs --- ARMeilleure/Instructions/SoftFallback.cs | 42 ++++++++++++++---------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/ARMeilleure/Instructions/SoftFallback.cs b/ARMeilleure/Instructions/SoftFallback.cs index dc0309218b..8d48c34f66 100644 --- a/ARMeilleure/Instructions/SoftFallback.cs +++ b/ARMeilleure/Instructions/SoftFallback.cs @@ -837,49 +837,55 @@ namespace ARMeilleure.Instructions #endregion #region "Table" - public static V128 Tbl1_V64(V128 vector, V128 tb0) + public static V128 Tbl1(V128 vector, int bytes, V128 tb0) { - return Tbl(vector, 8, tb0); + return TblOrTbx(default, vector, bytes, tb0); } - public static V128 Tbl1_V128(V128 vector, V128 tb0) + public static V128 Tbl2(V128 vector, int bytes, V128 tb0, V128 tb1) { - return Tbl(vector, 16, tb0); + return TblOrTbx(default, vector, bytes, tb0, tb1); } - public static V128 Tbl2_V64(V128 vector, V128 tb0, V128 tb1) + public static V128 Tbl3(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { - return Tbl(vector, 8, tb0, tb1); + return TblOrTbx(default, vector, bytes, tb0, tb1, tb2); } - public static V128 Tbl2_V128(V128 vector, V128 tb0, V128 tb1) + public static V128 Tbl4(V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { - return Tbl(vector, 16, tb0, tb1); + return TblOrTbx(default, vector, bytes, tb0, tb1, tb2, tb3); } - public static V128 Tbl3_V64(V128 vector, V128 tb0, V128 tb1, V128 tb2) + public static V128 Tbx1(V128 dest, V128 vector, int bytes, V128 tb0) { - return Tbl(vector, 8, tb0, tb1, tb2); + return TblOrTbx(dest, vector, bytes, tb0); } - public static V128 Tbl3_V128(V128 vector, V128 tb0, V128 tb1, V128 tb2) + public static V128 Tbx2(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1) { - return Tbl(vector, 16, tb0, tb1, tb2); + return TblOrTbx(dest, vector, bytes, tb0, tb1); } - public static V128 Tbl4_V64(V128 vector, V128 tb0, V128 tb1, V128 tb2, V128 tb3) + public static V128 Tbx3(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2) { - return Tbl(vector, 8, tb0, tb1, tb2, tb3); + return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2); } - public static V128 Tbl4_V128(V128 vector, V128 tb0, V128 tb1, V128 tb2, V128 tb3) + public static V128 Tbx4(V128 dest, V128 vector, int bytes, V128 tb0, V128 tb1, V128 tb2, V128 tb3) { - return Tbl(vector, 16, tb0, tb1, tb2, tb3); + return TblOrTbx(dest, vector, bytes, tb0, tb1, tb2, tb3); } - private static V128 Tbl(V128 vector, int bytes, params V128[] tb) + private static V128 TblOrTbx(V128 dest, V128 vector, int bytes, params V128[] tb) { - byte[] res = new byte[16]; + byte[] res = new byte[16]; + + if (dest != default) + { + Buffer.BlockCopy(dest.ToArray(), 0, res, 0, bytes); + } + byte[] table = new byte[tb.Length * 16]; for (byte index = 0; index < tb.Length; index++)