summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/insts
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2007-06-19 17:56:06 +0000
committerGabe Black <gblack@eecs.umich.edu>2007-06-19 17:56:06 +0000
commitd49649279312fe8d05c27a91f94992d8d584c35b (patch)
treec094438ae522f3438438bf0f5865b9681470608a /src/arch/x86/isa/insts
parent4486762a8519783aaec7ebe6a391355cd30792e0 (diff)
downloadgem5-d49649279312fe8d05c27a91f94992d8d584c35b.tar.xz
Make instructions that are illegal in 64 bit mode not do the wrong thing in 64 bit mode. Also add in more versions of PUSH and POP, and a version of near CALL.
--HG-- extra : convert_revision : 7d8266cdfa54ac25610466b3533d3e9e5433297b
Diffstat (limited to 'src/arch/x86/isa/insts')
-rw-r--r--src/arch/x86/isa/insts/control_transfer/call.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/arch/x86/isa/insts/control_transfer/call.py b/src/arch/x86/isa/insts/control_transfer/call.py
index 231db6e40..5cd8a6359 100644
--- a/src/arch/x86/isa/insts/control_transfer/call.py
+++ b/src/arch/x86/isa/insts/control_transfer/call.py
@@ -53,7 +53,18 @@
#
# Authors: Gabe Black
-microcode = ""
+microcode = '''
+def macroop CALL_I
+{
+ .adjust_env "if(machInst.mode.submode == SixtyFourBitMode && env.dataSize == 4) env.dataSize = 8\;"
+
+ limm "NUM_INTREGS+2", "IMMEDIATE"
+ rdip "NUM_INTREGS+1"
+ subi "INTREG_RSP", "INTREG_RSP", "env.dataSize"
+ st "NUM_INTREGS+1", 2, [0, "NUM_INTREGS", "INTREG_RSP"]
+ wrip "NUM_INTREGS+1", "NUM_INTREGS+2"
+};
+'''
#let {{
# class CALL(Inst):
# "GenFault ${new UnimpInstFault}"