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 def doMemFormat(code, execute, faultCode, name, Name, opt_flags): |
150 addrCalcReg = 'EA = Rs1 + Rs2;' 151 addrCalcImm = 'EA = Rs1 + imm;' 152 iop = InstObjParams(name, Name, 'Mem', code, |
153 opt_flags, {"fault_check": faultCode, "ea_code": addrCalcReg}) |
154 iop_imm = InstObjParams(name, Name + "Imm", 'MemImm', code, |
155 opt_flags, {"fault_check": faultCode, "ea_code": addrCalcImm}) |
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, |
160 faultCode, name, name + "Imm", Name, Name + "Imm", opt_flags) |
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, |
169 AlternateAsiPrivFaultCheck, name, Name, opt_flags) |
170}}; 171 172def format StoreAlt(code, *opt_flags) {{ 173 (header_output, 174 decoder_output, 175 exec_output, 176 decode_block) = doMemFormat(code, StoreExecute, |
177 AlternateAsiPrivFaultCheck, name, Name, opt_flags) |
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}}; |