summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py
diff options
context:
space:
mode:
authorNilay Vaish <nilay@cs.wisc.edu>2013-05-21 11:34:41 -0500
committerNilay Vaish <nilay@cs.wisc.edu>2013-05-21 11:34:41 -0500
commit30fe807316ebc4b6c37ca522b3cfd6c592ca9003 (patch)
tree12f5e529771617cf5c1ce93ea0200a5cf4a4a45e /src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py
parentfba40864aab3015009efe4ade7599c07bc28ab1a (diff)
downloadgem5-30fe807316ebc4b6c37ca522b3cfd6c592ca9003.tar.xz
x86: mark instructions for being function call/return
Currently call and return instructions are marked as IsCall and IsReturn. Thus, the branch predictor does not use RAS for these instructions. Similarly, the number of function calls that took place is recorded as 0. This patch marks these instructions as they should be.
Diffstat (limited to 'src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py')
-rw-r--r--src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py
index 7ebe22e78..f24b9d70e 100644
--- a/src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py
+++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/xreturn.py
@@ -40,6 +40,7 @@ def macroop RET_NEAR
{
# Make the default data size of rets 64 bits in 64 bit mode
.adjust_env oszIn64Override
+ .function_return
ld t1, ss, [1, t0, rsp]
# Check address of return
@@ -51,6 +52,7 @@ def macroop RET_NEAR_I
{
# Make the default data size of rets 64 bits in 64 bit mode
.adjust_env oszIn64Override
+ .function_return
limm t2, imm
ld t1, ss, [1, t0, rsp]
@@ -62,6 +64,7 @@ def macroop RET_NEAR_I
def macroop RET_FAR {
.adjust_env oszIn64Override
+ .function_return
# Get the return RIP
ld t1, ss, [1, t0, rsp]
@@ -99,10 +102,10 @@ processDescriptor:
wrdl cs, t3, t2
wrsel cs, t2
wrip t0, t1
- br label("end")
+# br label("end")
# Do other stuff if they're not.
-end:
- fault "NoFault"
+#end:
+# fault "NoFault"
};
'''