summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/insts/control_transfer/call.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/isa/insts/control_transfer/call.py')
-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}"