Hello

the "loop" instructions on x86 are broken, they seem to be using a 
16-bit immediate for the offset instead of the proper signed 8-bit one.  
This very obviously breaks instructions trying to loop backward.

The patch below fixes things on my regression test, though I might have 
something wrong (the uop routines are a bit hard to follow).  Also the 
other two LOOP variations probably need the fix too.

This allows the x86 version of my regression test run properly
( http://deater.net/weave/vmwprod/asm/ll/qemu_tests.html )

Vince

diff -r 3b2d7fdff6b1 
src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py
--- a/src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py   Fri Sep 
11 16:19:31 2009 -0500
+++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py   Mon Sep 
14 22:51:52 2009 -0400
@@ -56,8 +56,9 @@
 microcode = '''
 def macroop LOOP_I {
     rdip t1
+    limm t2, imm, dataSize=8
     subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
-    wripi t1, imm, flags=(nCEZF,)
+    wrip t1, t2, flags=(nCEZF,)
 };
 
 def macroop LOOPNE_I {
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to