diff -r 72acb565a7d8 -r cda55ff69124 src/arch/x86/isa/insts/general_purpose/control_transfer/call.py --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py Mon Jan 31 13:44:01 2011 -0800 +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/call.py Mon Jan 31 15:58:10 2011 -0800 @@ -44,7 +44,8 @@ limm t1, imm rdip t7 # Check target of call - stupd t7, ss, [0, t0, rsp], "-env.dataSize" + st t7, ss, [0, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz wrip t7, t1 }; @@ -55,7 +56,8 @@ rdip t1 # Check target of call - stupd t1, ss, [0, t0, rsp], "-env.dataSize" + st t1, ss, [0, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz wripi reg, 0 }; @@ -67,7 +69,8 @@ rdip t7 ld t1, seg, sib, disp # Check target of call - stupd t7, ss, [0, t0, rsp], "-env.dataSize" + st t7, ss, [0, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz wripi t1, 0 }; @@ -79,7 +82,8 @@ rdip t7 ld t1, seg, riprel, disp # Check target of call - stupd t7, ss, [0, t0, rsp], "-env.dataSize" + st t7, ss, [0, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz wripi t1, 0 }; ''' diff -r 72acb565a7d8 -r cda55ff69124 src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py --- a/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py Mon Jan 31 13:44:01 2011 -0800 +++ b/src/arch/x86/isa/insts/general_purpose/data_transfer/stack_operations.py Mon Jan 31 15:58:10 2011 -0800 @@ -70,7 +70,8 @@ # Make the default data size of pops 64 bits in 64 bit mode .adjust_env oszIn64Override - stupd reg, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st reg, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + subi rsp, rsp, ssz }; def macroop PUSH_I { @@ -78,7 +79,8 @@ .adjust_env oszIn64Override limm t1, imm - stupd t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + subi rsp, rsp, ssz }; def macroop PUSH_M { @@ -86,7 +88,8 @@ .adjust_env oszIn64Override ld t1, seg, sib, disp, dataSize=ssz - stupd t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + subi rsp, rsp, ssz }; def macroop PUSH_P { @@ -95,7 +98,8 @@ rdip t7 ld t1, seg, riprel, disp, dataSize=ssz - stupd t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + subi rsp, rsp, ssz }; def macroop PUSHA { @@ -103,14 +107,15 @@ # end are ok, then the stuff in the middle should be as well. cda ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz cda ss, [1, t0, rsp], "-8 * env.stackSize", dataSize=ssz - stupd rax, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rcx, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rdx, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rbx, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rsp, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rbp, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rsi, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz - stupd rdi, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st rax, ss, [1, t0, rsp], "1 * -env.stackSize", dataSize=ssz + st rcx, ss, [1, t0, rsp], "2 * -env.stackSize", dataSize=ssz + st rdx, ss, [1, t0, rsp], "3 * -env.stackSize", dataSize=ssz + st rbx, ss, [1, t0, rsp], "4 * -env.stackSize", dataSize=ssz + st rsp, ss, [1, t0, rsp], "5 * -env.stackSize", dataSize=ssz + st rbp, ss, [1, t0, rsp], "6 * -env.stackSize", dataSize=ssz + st rsi, ss, [1, t0, rsp], "7 * -env.stackSize", dataSize=ssz + st rdi, ss, [1, t0, rsp], "8 * -env.stackSize", dataSize=ssz + subi rsp, rsp, "8 * env.stackSize" }; def macroop POPA { @@ -151,7 +156,8 @@ # t1 is now the masked nesting level, and t2 is the amount of storage. # Push rbp. - stupd rbp, ss, [1, t0, rsp], "-env.dataSize" + st rbp, ss, [1, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz # Save the stack pointer for later mov t6, t6, rsp @@ -167,7 +173,8 @@ limm t4, "ULL(-1)", dataSize=8 topOfLoop: ld t5, ss, [dsz, t4, rbp] - stupd t5, ss, [1, t0, rsp], "-env.dataSize" + st t5, ss, [1, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz # If we're not done yet, loop subi t4, t4, 1, dataSize=8 @@ -176,7 +183,8 @@ bottomOfLoop: # Push the old rbp onto the stack - stupd t6, ss, [1, t0, rsp], "-env.dataSize" + st t6, ss, [1, t0, rsp], "-env.dataSize" + subi rsp, rsp, ssz skipLoop: sub rsp, rsp, t2, dataSize=ssz diff -r 72acb565a7d8 -r cda55ff69124 src/arch/x86/isa/insts/general_purpose/flags/push_and_pop.py --- a/src/arch/x86/isa/insts/general_purpose/flags/push_and_pop.py Mon Jan 31 13:44:01 2011 -0800 +++ b/src/arch/x86/isa/insts/general_purpose/flags/push_and_pop.py Mon Jan 31 15:58:10 2011 -0800 @@ -40,7 +40,8 @@ .adjust_env oszIn64Override rflags t1 - stupd t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + st t1, ss, [1, t0, rsp], "-env.stackSize", dataSize=ssz + subi rsp, rsp, ssz }; def macroop POPF {