Index: src/trusted/validator_ragel/proof_tools_templates.py |
diff --git a/src/trusted/validator_ragel/proof_tools_templates.py b/src/trusted/validator_ragel/proof_tools_templates.py |
index 939a78a14d0b54f00489079c52078546fd5a61f9..b43c2d8a18489e48dfe680a8f7d94ad922b5efd0 100644 |
--- a/src/trusted/validator_ragel/proof_tools_templates.py |
+++ b/src/trusted/validator_ragel/proof_tools_templates.py |
@@ -31,3 +31,27 @@ def LockedRegWithRegOrMem16bit(mnemonic_name, bitness): |
lock = proof_tools.LockPrefix() |
return (proof_tools.OpsProd(lock, instr, reg16, mem) | |
proof_tools.OpsProd(instr, reg16, reg16 | mem)) |
+ |
+ |
+def XmmYmmOrMemory3operand(mnemonic_name, bitness): |
+ """Set of 3 operand xmm/ymm/memory ops (memory is a possible source operand). |
+ |
+ e.g. |
+ |
+ instr xmm1/mem, xmm2, xmm3 |
+ or |
+ instr ymm1/mem, ymm2, ymm3 |
+ |
+ Args: |
+ mnemonic_name: the mnemonic we are producing the pattern for. |
+ bitness: the bitness of the architecture (32 or 64) |
+ Returns: |
+ All possible disassembly sequences that follow the pattern. |
+ """ |
+ xmm = proof_tools.AllXMMOperands(bitness) |
+ ymm = proof_tools.AllYMMOperands(bitness) |
+ mem = proof_tools.AllMemoryOperands(bitness) |
+ mnemonic = proof_tools.MnemonicOp(mnemonic_name) |
+ |
+ return (proof_tools.OpsProd(mnemonic, (xmm | mem), xmm, xmm) | |
+ proof_tools.OpsProd(mnemonic, (ymm | mem), ymm, ymm)) |