diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java index 619ef81d4f..568c3ad71f 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java @@ -329,7 +329,6 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes @Test public void testBRDS() throws Throwable { try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "Toy:BE:64:default")) { - Assembler asm = Assemblers.getAssembler(tb.trace.getFixedProgramView(0)); TraceThread thread = initTrace(tb, List.of( "pc = 0x00400000;", @@ -668,4 +667,42 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes TraceSleighUtils.evaluate("XMM0", tb.trace, 1, thread, 0)); } } + + /** + * ( Test x86's SAR instruction + * + *
+ * This test hits an INT_SRIGHT p-code op where the two input operands have differing sizes.
+ */
+ @Test
+ public void testSAR() throws Throwable {
+ try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "x86:LE:64:default")) {
+ Register pc = tb.language.getProgramCounter();
+
+ TraceThread thread = initTrace(tb,
+ List.of(
+ "RIP = 0x00400000;",
+ "RSP = 0x00110000;",
+ "RAX = 0x7fffffff;",
+ "RCX = 4;"),
+ List.of(
+ "SAR EAX, CL"));
+
+ TracePcodeEmulator emu = new TracePcodeEmulator(tb.trace, 0);
+ PcodeThread