summaryrefslogtreecommitdiff
path: root/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py')
-rw-r--r--src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py30
1 files changed, 12 insertions, 18 deletions
diff --git a/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py b/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py
index 3ed9d8bff..5771242e6 100644
--- a/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py
+++ b/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py
@@ -89,8 +89,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, [1, t0, rsp], "-env.dataSize"
- subi rsp, rsp, dsz
+ stupd reg, ss, [1, t0, rsp], "-env.dataSize"
};
def macroop PUSH_I {
@@ -98,8 +97,7 @@ def macroop PUSH_I {
.adjust_env oszIn64Override
limm t1, imm
- st t1, ss, [1, t0, rsp], "-env.dataSize"
- subi rsp, rsp, dsz
+ stupd t1, ss, [1, t0, rsp], "-env.dataSize"
};
def macroop PUSH_M {
@@ -107,8 +105,7 @@ def macroop PUSH_M {
.adjust_env oszIn64Override
ld t1, seg, sib, disp
- st t1, ss, [1, t0, rsp], "-env.dataSize"
- subi rsp, rsp, dsz
+ stupd t1, ss, [1, t0, rsp], "-env.dataSize"
};
def macroop PUSH_P {
@@ -117,22 +114,19 @@ def macroop PUSH_P {
rdip t7
ld t1, seg, riprel, disp
- # Check stack address
- subi rsp, rsp, dsz
- st t1, ss, [1, t0, rsp]
+ stupd t1, ss, [1, t0, rsp], "-env.dataSize"
};
def macroop PUSHA {
# Check all the stack addresses.
- 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"
+ stupd rax, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rcx, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rdx, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rbx, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rsp, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rbp, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rsi, ss, [1, t0, rsp], "-env.dataSize"
+ stupd rdi, ss, [1, t0, rsp], "-env.dataSize"
};
def macroop POPA {