x86: increment the stack pointer in lret inst
authorChristian Menard <Christian.Menard@tu-dresden.de>
Tue, 23 Apr 2013 05:03:04 +0000 (00:03 -0500)
committerChristian Menard <Christian.Menard@tu-dresden.de>
Tue, 23 Apr 2013 05:03:04 +0000 (00:03 -0500)
The 'lret' instruction reloads instruction pointer and code segment from the
stack and then pops them. But the popping part is missing from the current
implementation. This caused incorrect behavior in some code related to the
Fiasco OS. Microops are being added to rectify the behavior of the instruction.

Committed by: Nilay Vaish <nilay@cs.wisc.edu>

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

index 6b21db851a965cbf6223d875153d5d210e4a107f..7ebe22e78e191ff86421c1b0e6ce915a8d8c5ace 100644 (file)
@@ -69,6 +69,11 @@ def macroop RET_FAR {
     # Get the return CS
     ld t2, ss, [1, t0, rsp], ssz
 
+    # increment the stack pointer to pop the instruction pointer
+    # and the code segment from the stack.
+    addi rsp, rsp, dsz
+    addi rsp, rsp, dsz
+
     # Get the rpl
     andi t3, t2, 0x3