basicmem.isa (3388:1c6ebfc4c20e) | basicmem.isa (3391:3b6298cab636) |
---|---|
1// Copyright (c) 2006 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 132 unchanged lines hidden (view full) --- 141 142 %(InitiateAccDeclare)s 143 144 %(CompleteAccDeclare)s 145 }; 146}}; 147 148let {{ | 1// Copyright (c) 2006 The Regents of The University of Michigan 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer; 8// redistributions in binary form must reproduce the above copyright --- 132 unchanged lines hidden (view full) --- 141 142 %(InitiateAccDeclare)s 143 144 %(CompleteAccDeclare)s 145 }; 146}}; 147 148let {{ |
149 # XXX Need to take care of pstate.hpriv as well. The lower ASIs are split 150 # into ones that are available in priv and hpriv, and those that are only 151 # available in hpriv 152 privilegedString = '''if(bits(Pstate,2,2) == 0 && (EXT_ASI & 0x80) == 0) 153 return new PrivilegedAction; 154 if(AsiIsAsIfUser(EXT_ASI) && !bits(Pstate,2,2)) 155 return new PrivilegedAction;''' 156 157 def doMemFormat(code, execute, priv, name, Name, opt_flags): | 149 def doMemFormat(code, execute, faultCode, name, Name, opt_flags): |
158 addrCalcReg = 'EA = Rs1 + Rs2;' 159 addrCalcImm = 'EA = Rs1 + imm;' 160 iop = InstObjParams(name, Name, 'Mem', code, | 150 addrCalcReg = 'EA = Rs1 + Rs2;' 151 addrCalcImm = 'EA = Rs1 + imm;' 152 iop = InstObjParams(name, Name, 'Mem', code, |
161 opt_flags, {"priv_check": priv, "ea_code": addrCalcReg}) | 153 opt_flags, {"fault_check": faultCode, "ea_code": addrCalcReg}) |
162 iop_imm = InstObjParams(name, Name + "Imm", 'MemImm', code, | 154 iop_imm = InstObjParams(name, Name + "Imm", 'MemImm', code, |
163 opt_flags, {"priv_check": priv, "ea_code": addrCalcImm}) | 155 opt_flags, {"fault_check": faultCode, "ea_code": addrCalcImm}) |
164 header_output = MemDeclare.subst(iop) + MemDeclare.subst(iop_imm) 165 decoder_output = BasicConstructor.subst(iop) + BasicConstructor.subst(iop_imm) 166 decode_block = ROrImmDecode.subst(iop) 167 exec_output = doSplitExecute(code, addrCalcReg, addrCalcImm, execute, | 156 header_output = MemDeclare.subst(iop) + MemDeclare.subst(iop_imm) 157 decoder_output = BasicConstructor.subst(iop) + BasicConstructor.subst(iop_imm) 158 decode_block = ROrImmDecode.subst(iop) 159 exec_output = doSplitExecute(code, addrCalcReg, addrCalcImm, execute, |
168 priv, name, name + "Imm", Name, Name + "Imm", opt_flags) | 160 faultCode, name, name + "Imm", Name, Name + "Imm", opt_flags) |
169 return (header_output, decoder_output, exec_output, decode_block) 170}}; 171 172def format LoadAlt(code, *opt_flags) {{ 173 (header_output, 174 decoder_output, 175 exec_output, 176 decode_block) = doMemFormat(code, LoadExecute, | 161 return (header_output, decoder_output, exec_output, decode_block) 162}}; 163 164def format LoadAlt(code, *opt_flags) {{ 165 (header_output, 166 decoder_output, 167 exec_output, 168 decode_block) = doMemFormat(code, LoadExecute, |
177 privelegedString, name, Name, opt_flags) | 169 AlternateAsiPrivFaultCheck, name, Name, opt_flags) |
178}}; 179 180def format StoreAlt(code, *opt_flags) {{ 181 (header_output, 182 decoder_output, 183 exec_output, 184 decode_block) = doMemFormat(code, StoreExecute, | 170}}; 171 172def format StoreAlt(code, *opt_flags) {{ 173 (header_output, 174 decoder_output, 175 exec_output, 176 decode_block) = doMemFormat(code, StoreExecute, |
185 privilegedString, name, Name, opt_flags) | 177 AlternateAsiPrivFaultCheck, name, Name, opt_flags) |
186}}; 187 188def format Load(code, *opt_flags) {{ 189 (header_output, 190 decoder_output, 191 exec_output, 192 decode_block) = doMemFormat(code, 193 LoadExecute, '', name, Name, opt_flags) 194}}; 195 196def format Store(code, *opt_flags) {{ 197 (header_output, 198 decoder_output, 199 exec_output, 200 decode_block) = doMemFormat(code, 201 StoreExecute, '', name, Name, opt_flags) 202}}; | 178}}; 179 180def format Load(code, *opt_flags) {{ 181 (header_output, 182 decoder_output, 183 exec_output, 184 decode_block) = doMemFormat(code, 185 LoadExecute, '', name, Name, opt_flags) 186}}; 187 188def format Store(code, *opt_flags) {{ 189 (header_output, 190 decoder_output, 191 exec_output, 192 decode_block) = doMemFormat(code, 193 StoreExecute, '', name, Name, opt_flags) 194}}; |