blockmem.isa (3440:d2adedf01f3a) | blockmem.isa (3792:dae368e56d0e) |
---|---|
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 --- 279 unchanged lines hidden (view full) --- 288 exec_output = '' 289 for microPc in range(8): 290 flag_code = '' 291 if (microPc == 7): 292 flag_code = "flags[IsLastMicroOp] = true;" 293 else: 294 flag_code = "flags[IsDelayedCommit] = true;" 295 pcedCode = matcher.sub("Frd_%d" % microPc, code) | 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 --- 279 unchanged lines hidden (view full) --- 288 exec_output = '' 289 for microPc in range(8): 290 flag_code = '' 291 if (microPc == 7): 292 flag_code = "flags[IsLastMicroOp] = true;" 293 else: 294 flag_code = "flags[IsDelayedCommit] = true;" 295 pcedCode = matcher.sub("Frd_%d" % microPc, code) |
296 iop = InstObjParams(name, Name, 'BlockMem', pcedCode, 297 opt_flags, {"ea_code": addrCalcReg, | 296 iop = InstObjParams(name, Name, 'BlockMem', 297 {"code": pcedCode, "ea_code": addrCalcReg, |
298 "fault_check": faultCode, "micro_pc": microPc, | 298 "fault_check": faultCode, "micro_pc": microPc, |
299 "set_flags": flag_code}) 300 iop_imm = InstObjParams(name, Name + 'Imm', 'BlockMemImm', pcedCode, 301 opt_flags, {"ea_code": addrCalcImm, | 299 "set_flags": flag_code}, opt_flags) 300 iop_imm = InstObjParams(name, Name + 'Imm', 'BlockMemImm', 301 {"code": pcedCode, "ea_code": addrCalcImm, |
302 "fault_check": faultCode, "micro_pc": microPc, | 302 "fault_check": faultCode, "micro_pc": microPc, |
303 "set_flags": flag_code}) | 303 "set_flags": flag_code}, opt_flags) |
304 decoder_output += BlockMemMicroConstructor.subst(iop) 305 decoder_output += BlockMemMicroConstructor.subst(iop_imm) 306 exec_output += doDualSplitExecute( 307 pcedCode, addrCalcReg, addrCalcImm, execute, faultCode, 308 makeMicroName(name, microPc), 309 makeMicroName(name + "Imm", microPc), 310 makeMicroName(Name, microPc), 311 makeMicroName(Name + "Imm", microPc), 312 opt_flags); 313 faultCode = '' 314 return (header_output, decoder_output, exec_output, decode_block) 315}}; 316 317def format BlockLoad(code, *opt_flags) {{ | 304 decoder_output += BlockMemMicroConstructor.subst(iop) 305 decoder_output += BlockMemMicroConstructor.subst(iop_imm) 306 exec_output += doDualSplitExecute( 307 pcedCode, addrCalcReg, addrCalcImm, execute, faultCode, 308 makeMicroName(name, microPc), 309 makeMicroName(name + "Imm", microPc), 310 makeMicroName(Name, microPc), 311 makeMicroName(Name + "Imm", microPc), 312 opt_flags); 313 faultCode = '' 314 return (header_output, decoder_output, exec_output, decode_block) 315}}; 316 317def format BlockLoad(code, *opt_flags) {{ |
318 # We need to make sure to check the highest priority fault last. 319 # That way, if other faults have been detected, they'll be overwritten 320 # rather than the other way around. 321 faultCode = AlternateASIPrivFaultCheck + BlockAlignmentFaultCheck 322 (header_output, 323 decoder_output, 324 exec_output, 325 decode_block) = doBlockMemFormat(code, faultCode, 326 LoadExecute, name, Name, opt_flags) | 318 # We need to make sure to check the highest priority fault last. 319 # That way, if other faults have been detected, they'll be overwritten 320 # rather than the other way around. 321 faultCode = AlternateASIPrivFaultCheck + BlockAlignmentFaultCheck 322 (header_output, 323 decoder_output, 324 exec_output, 325 decode_block) = doBlockMemFormat(code, faultCode, 326 LoadFuncs, name, Name, opt_flags) |
327}}; 328 329def format BlockStore(code, *opt_flags) {{ | 327}}; 328 329def format BlockStore(code, *opt_flags) {{ |
330 # We need to make sure to check the highest priority fault last. 331 # That way, if other faults have been detected, they'll be overwritten 332 # rather than the other way around. 333 faultCode = AlternateASIPrivFaultCheck + BlockAlignmentFaultCheck 334 (header_output, 335 decoder_output, 336 exec_output, 337 decode_block) = doBlockMemFormat(code, faultCode, 338 StoreExecute, name, Name, opt_flags) | 330 # We need to make sure to check the highest priority fault last. 331 # That way, if other faults have been detected, they'll be overwritten 332 # rather than the other way around. 333 faultCode = AlternateASIPrivFaultCheck + BlockAlignmentFaultCheck 334 (header_output, 335 decoder_output, 336 exec_output, 337 decode_block) = doBlockMemFormat(code, faultCode, 338 StoreFuncs, name, Name, opt_flags) |
339}}; | 339}}; |