summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/insts/data_transfer/stack_operations.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/isa/insts/data_transfer/stack_operations.py')
-rw-r--r--src/arch/x86/isa/insts/data_transfer/stack_operations.py56
1 files changed, 27 insertions, 29 deletions
diff --git a/src/arch/x86/isa/insts/data_transfer/stack_operations.py b/src/arch/x86/isa/insts/data_transfer/stack_operations.py
index 082e24485..9e6807039 100644
--- a/src/arch/x86/isa/insts/data_transfer/stack_operations.py
+++ b/src/arch/x86/isa/insts/data_transfer/stack_operations.py
@@ -58,7 +58,7 @@ def macroop POP_R {
# Make the default data size of pops 64 bits in 64 bit mode
.adjust_env oszIn64Override
- ld reg, ss, [0, t0, rsp]
+ ld reg, ss, [1, t0, rsp]
addi rsp, rsp, dsz
};
@@ -66,9 +66,9 @@ def macroop POP_M {
# Make the default data size of pops 64 bits in 64 bit mode
.adjust_env oszIn64Override
- ld t1, ss, [0, t0, rsp]
+ ld t1, ss, [1, t0, rsp]
addi rsp, rsp, dsz
- st t1, ds, [scale, index, base], disp
+ st t1, seg, sib, disp
};
def macroop POP_P {
@@ -76,9 +76,9 @@ def macroop POP_P {
.adjust_env oszIn64Override
rdip t7
- ld t1, ss, [0, t0, rsp]
+ ld t1, ss, [1, t0, rsp]
addi rsp, rsp, dsz
- st t1, ds, [0, t0, t7]
+ st t1, seg, riprel, disp
};
def macroop PUSH_R {
@@ -87,7 +87,7 @@ def macroop PUSH_R {
# This needs to work slightly differently from the other versions of push
# because the -original- version of the stack pointer is what gets pushed
- st reg, ss, [0, t0, rsp], "-env.dataSize"
+ st reg, ss, [1, t0, rsp], "-env.dataSize"
subi rsp, rsp, dsz
};
@@ -97,16 +97,16 @@ def macroop PUSH_I {
limm t1, imm
subi rsp, rsp, dsz
- st t1, ss, [0, t0, rsp]
+ st t1, ss, [1, t0, rsp]
};
def macroop PUSH_M {
# Make the default data size of pops 64 bits in 64 bit mode
.adjust_env oszIn64Override
- ld t1, ds, [scale, index, base], disp
+ ld t1, seg, sib, disp
subi rsp, rsp, dsz
- st t1, ss, [0, t0, rsp]
+ st t1, ss, [1, t0, rsp]
};
def macroop PUSH_P {
@@ -114,31 +114,31 @@ def macroop PUSH_P {
.adjust_env oszIn64Override
rdip t7
- ld t1, ds, [0, t0, t7], disp
+ ld t1, seg, riprel, disp
subi rsp, rsp, dsz
- st t1, ss, [0, t0, rsp]
+ st t1, ss, [1, t0, rsp]
};
def macroop PUSHA {
- st rax, ss, [0, t0, rsp], "-0 * env.dataSize"
- st rcx, ss, [0, t0, rsp], "-1 * env.dataSize"
- st rdx, ss, [0, t0, rsp], "-2 * env.dataSize"
- st rbx, ss, [0, t0, rsp], "-3 * env.dataSize"
- st rsp, ss, [0, t0, rsp], "-4 * env.dataSize"
- st rbp, ss, [0, t0, rsp], "-5 * env.dataSize"
- st rsi, ss, [0, t0, rsp], "-6 * env.dataSize"
- st rdi, ss, [0, t0, rsp], "-7 * env.dataSize"
+ st rax, ss, [1, t0, rsp], "-0 * env.dataSize"
+ st rcx, ss, [1, t0, rsp], "-1 * env.dataSize"
+ st rdx, ss, [1, t0, rsp], "-2 * env.dataSize"
+ st rbx, ss, [1, t0, rsp], "-3 * env.dataSize"
+ st rsp, ss, [1, t0, rsp], "-4 * env.dataSize"
+ st rbp, ss, [1, t0, rsp], "-5 * env.dataSize"
+ st rsi, ss, [1, t0, rsp], "-6 * env.dataSize"
+ st rdi, ss, [1, t0, rsp], "-7 * env.dataSize"
subi rsp, rsp, "8 * env.dataSize"
};
def macroop POPA {
- ld rdi, ss, [0, t0, rsp], "0 * env.dataSize"
- ld rsi, ss, [0, t0, rsp], "1 * env.dataSize"
- ld rbp, ss, [0, t0, rsp], "2 * env.dataSize"
- ld rbx, ss, [0, t0, rsp], "4 * env.dataSize"
- ld rdx, ss, [0, t0, rsp], "5 * env.dataSize"
- ld rcx, ss, [0, t0, rsp], "6 * env.dataSize"
- ld rax, ss, [0, t0, rsp], "7 * env.dataSize"
+ ld rdi, ss, [1, t0, rsp], "0 * env.dataSize"
+ ld rsi, ss, [1, t0, rsp], "1 * env.dataSize"
+ ld rbp, ss, [1, t0, rsp], "2 * env.dataSize"
+ ld rbx, ss, [1, t0, rsp], "4 * env.dataSize"
+ ld rdx, ss, [1, t0, rsp], "5 * env.dataSize"
+ ld rcx, ss, [1, t0, rsp], "6 * env.dataSize"
+ ld rax, ss, [1, t0, rsp], "7 * env.dataSize"
addi rsp, rsp, "8 * env.dataSize"
};
@@ -147,13 +147,11 @@ def macroop LEAVE {
.adjust_env oszIn64Override
mov rsp, rsp, rbp
- ld rbp, ss, [0, t0, rsp]
+ ld rbp, ss, [1, t0, rsp]
addi rsp, rsp, dsz
};
'''
#let {{
# class ENTER(Inst):
# "GenFault ${new UnimpInstFault}"
-# class LEAVE(Inst):
-# "GenFault ${new UnimpInstFault}"
#}};