x86: LOOP's operand size defaults to 64 bits in 64 bit mode.
authorGabe Black <gabeblack@google.com>
Tue, 5 Dec 2017 02:30:41 +0000 (18:30 -0800)
committerGabe Black <gabeblack@google.com>
Tue, 5 Dec 2017 23:48:57 +0000 (23:48 +0000)
The microcode for those instructions needs a directive which overrides
that setting in the instructions emulation environment.

Reported-by: Matt Sinclair <mattdsinclair@gmail.com>
Change-Id: I474d938c0b3cf01da92ec817a58b08de783f1967
Reviewed-on: https://gem5-review.googlesource.com/6301
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/arch/x86/isa/insts/general_purpose/control_transfer/loop.py

index 55c1a7fea88897888efcad392ae8c80904535f20..919551e770897d512615be42713859539ef8cd8f 100644 (file)
 
 microcode = '''
 def macroop LOOP_I {
+    # Make the default data size of pops 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
     rdip t1
     subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
     wripi t1, imm, flags=(nCEZF,)
 };
 
 def macroop LOOPNE_I {
+    # Make the default data size of pops 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
     rdip t1
     subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
     wripi t1, imm, flags=(CSTRnZnEZF,)
 };
 
 def macroop LOOPE_I {
+    # Make the default data size of pops 64 bits in 64 bit mode
+    .adjust_env oszIn64Override
     rdip t1
     subi rcx, rcx, 1, flags=(EZF,), dataSize=asz
     wripi t1, imm, flags=(CSTRZnEZF,)