From daf083f8707836321206c6e4b7cc231f0d3b6fbf Mon Sep 17 00:00:00 2001
From: Clark Coleman <clc@zephyr-software.com>
Date: Fri, 23 Oct 2020 08:37:15 -0400
Subject: [PATCH] SPARK: Handle wide operands (128+ bits).

---
 src/base/SMPInstr.cpp | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/src/base/SMPInstr.cpp b/src/base/SMPInstr.cpp
index 80d84585..8a742f84 100644
--- a/src/base/SMPInstr.cpp
+++ b/src/base/SMPInstr.cpp
@@ -474,6 +474,15 @@ void GetSPARKMemWriteProcString(std::size_t OpndByteWidth, char *MemWriteString)
 	else if (OpndByteWidth == 10) {
 		SMP_snprintf(MemWriteString, 30, "X86.WriteMem80(Unsigned64(");
 	}
+	else if (OpndByteWidth == 16) {
+		SMP_snprintf(MemWriteString, 30, "X86.WriteMem128(Unsigned64(");
+	}
+	else if (OpndByteWidth == 32) {
+		SMP_snprintf(MemWriteString, 30, "X86.WriteMem256(Unsigned64(");
+	}
+	else if (OpndByteWidth == 64) {
+		SMP_snprintf(MemWriteString, 30, "X86.WriteMem512(Unsigned64(");
+	}
 
 	return;
 } // end of GetSPARKMemWriteProcString()
@@ -495,6 +504,15 @@ void GetSPARKMemReadProcString(std::size_t OpndByteWidth, char *MemReadString) {
 	else if (OpndByteWidth == 10) {
 		SMP_snprintf(MemReadString, 30, "X86.ReadMem80(Unsigned64(");
 	}
+	else if (OpndByteWidth == 16) {
+		SMP_snprintf(MemReadString, 30, "X86.ReadMem128(Unsigned64(");
+	}
+	else if (OpndByteWidth == 32) {
+		SMP_snprintf(MemReadString, 30, "X86.ReadMem256(Unsigned64(");
+	}
+	else if (OpndByteWidth == 64) {
+		SMP_snprintf(MemReadString, 30, "X86.ReadMem512(Unsigned64(");
+	}
 
 	return;
 } // end of GetSPARKMemReadProcString()
@@ -516,6 +534,15 @@ void GetSPARKWidthSignedCastString(std::size_t OpndByteWidth, char *CastString)
 	else if (OpndByteWidth == 10) {
 		SMP_snprintf(CastString, 15, "Signed80");
 	}
+	else if (OpndByteWidth == 16) {
+		SMP_snprintf(CastString, 15, "Signed128");
+	}
+	else if (OpndByteWidth == 32) {
+		SMP_snprintf(CastString, 15, "Signed256");
+	}
+	else if (OpndByteWidth == 64) {
+		SMP_snprintf(CastString, 15, "Signed512");
+	}
 
 
 	return;
@@ -538,6 +565,15 @@ void GetSPARKWidthCastString(std::size_t OpndByteWidth, char *CastString) {
 	else if (OpndByteWidth == 10) {
 		SMP_snprintf(CastString, 15, "Unsigned80");
 	}
+	else if (OpndByteWidth == 16) {
+		SMP_snprintf(CastString, 15, "Unsigned128");
+	}
+	else if (OpndByteWidth == 32) {
+		SMP_snprintf(CastString, 15, "Unsigned256");
+	}
+	else if (OpndByteWidth == 64) {
+		SMP_snprintf(CastString, 15, "Unsigned512");
+	}
 
 
 	return;
-- 
GitLab