1# Copyright (c) 2007 The Hewlett-Packard Development Company 2# All rights reserved. 3# 4# Redistribution and use of this software in source and binary forms, 5# with or without modification, are permitted provided that the 6# following conditions are met: 7# 8# The software must be used only for Non-Commercial Use which means any --- 53 unchanged lines hidden (view full) --- 62 addi rsp, rsp, dsz 63}; 64 65def macroop POP_M { 66 # Make the default data size of pops 64 bits in 64 bit mode 67 .adjust_env oszIn64Override 68 69 ld t1, ss, [1, t0, rsp] |
70 # Check stack address |
71 addi rsp, rsp, dsz 72 st t1, seg, sib, disp 73}; 74 75def macroop POP_P { 76 # Make the default data size of pops 64 bits in 64 bit mode 77 .adjust_env oszIn64Override 78 79 rdip t7 80 ld t1, ss, [1, t0, rsp] |
81 # Check stack address |
82 addi rsp, rsp, dsz 83 st t1, seg, riprel, disp 84}; 85 86def macroop PUSH_R { 87 # Make the default data size of pops 64 bits in 64 bit mode 88 .adjust_env oszIn64Override 89 90 # This needs to work slightly differently from the other versions of push 91 # because the -original- version of the stack pointer is what gets pushed 92 st reg, ss, [1, t0, rsp], "-env.dataSize" 93 subi rsp, rsp, dsz 94}; 95 96def macroop PUSH_I { 97 # Make the default data size of pops 64 bits in 64 bit mode 98 .adjust_env oszIn64Override 99 100 limm t1, imm |
101 st t1, ss, [1, t0, rsp], "-env.dataSize" |
102 subi rsp, rsp, dsz |
103}; 104 105def macroop PUSH_M { 106 # Make the default data size of pops 64 bits in 64 bit mode 107 .adjust_env oszIn64Override 108 109 ld t1, seg, sib, disp |
110 st t1, ss, [1, t0, rsp], "-env.dataSize" |
111 subi rsp, rsp, dsz |
112}; 113 114def macroop PUSH_P { 115 # Make the default data size of pops 64 bits in 64 bit mode 116 .adjust_env oszIn64Override 117 118 rdip t7 119 ld t1, seg, riprel, disp |
120 # Check stack address |
121 subi rsp, rsp, dsz 122 st t1, ss, [1, t0, rsp] 123}; 124 125def macroop PUSHA { |
126 # Check all the stack addresses. |
127 st rax, ss, [1, t0, rsp], "-0 * env.dataSize" 128 st rcx, ss, [1, t0, rsp], "-1 * env.dataSize" 129 st rdx, ss, [1, t0, rsp], "-2 * env.dataSize" 130 st rbx, ss, [1, t0, rsp], "-3 * env.dataSize" 131 st rsp, ss, [1, t0, rsp], "-4 * env.dataSize" 132 st rbp, ss, [1, t0, rsp], "-5 * env.dataSize" 133 st rsi, ss, [1, t0, rsp], "-6 * env.dataSize" 134 st rdi, ss, [1, t0, rsp], "-7 * env.dataSize" 135 subi rsp, rsp, "8 * env.dataSize" 136}; 137 138def macroop POPA { |
139 # Check all the stack addresses. |
140 ld rdi, ss, [1, t0, rsp], "0 * env.dataSize" 141 ld rsi, ss, [1, t0, rsp], "1 * env.dataSize" 142 ld rbp, ss, [1, t0, rsp], "2 * env.dataSize" 143 ld rbx, ss, [1, t0, rsp], "4 * env.dataSize" 144 ld rdx, ss, [1, t0, rsp], "5 * env.dataSize" 145 ld rcx, ss, [1, t0, rsp], "6 * env.dataSize" 146 ld rax, ss, [1, t0, rsp], "7 * env.dataSize" 147 addi rsp, rsp, "8 * env.dataSize" 148}; 149 150def macroop LEAVE { 151 # Make the default data size of pops 64 bits in 64 bit mode 152 .adjust_env oszIn64Override 153 |
154 mov t1, t1, rbp 155 ld rbp, ss, [1, t0, t1] 156 mov rsp, rsp, t1 |
157 addi rsp, rsp, dsz 158}; 159''' 160#let {{ 161# class ENTER(Inst): 162# "GenFault ${new UnimpInstFault}" 163#}}; |