mem.isa (11723:0596db108c53) | mem.isa (11726:11950d45640b) |
---|---|
1// -*- mode:c++ -*- 2 3// Copyright (c) 2015 RISC-V Foundation 4// Copyright (c) 2016 The University of Virginia 5// All rights reserved. 6// 7// Redistribution and use in source and binary forms, with or without 8// modification, are permitted provided that the following conditions are --- 172 unchanged lines hidden (view full) --- 181 182 if mem_flags: 183 mem_flags = [ 'Request::%s' % flag for flag in mem_flags ] 184 s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';' 185 iop.constructor += s 186 187 # select templates 188 | 1// -*- mode:c++ -*- 2 3// Copyright (c) 2015 RISC-V Foundation 4// Copyright (c) 2016 The University of Virginia 5// All rights reserved. 6// 7// Redistribution and use in source and binary forms, with or without 8// modification, are permitted provided that the following conditions are --- 172 unchanged lines hidden (view full) --- 181 182 if mem_flags: 183 mem_flags = [ 'Request::%s' % flag for flag in mem_flags ] 184 s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';' 185 iop.constructor += s 186 187 # select templates 188 |
189 # The InitiateAcc template is the same for StoreCond templates as the 190 # corresponding Store template.. 191 StoreCondInitiateAcc = StoreInitiateAcc 192 |
|
189 fullExecTemplate = eval(exec_template_base + 'Execute') 190 initiateAccTemplate = eval(exec_template_base + 'InitiateAcc') 191 completeAccTemplate = eval(exec_template_base + 'CompleteAcc') 192 193 # (header_output, decoder_output, decode_block, exec_output) 194 return (LoadStoreDeclare.subst(iop), 195 LoadStoreConstructor.subst(iop), 196 decode_template.subst(iop), --- 138 unchanged lines hidden (view full) --- 335 Fault 336 %(class_name)s::completeAcc(PacketPtr pkt, CPU_EXEC_CONTEXT *xc, 337 Trace::InstRecord *traceData) const 338 { 339 return NoFault; 340 } 341}}; 342 | 193 fullExecTemplate = eval(exec_template_base + 'Execute') 194 initiateAccTemplate = eval(exec_template_base + 'InitiateAcc') 195 completeAccTemplate = eval(exec_template_base + 'CompleteAcc') 196 197 # (header_output, decoder_output, decode_block, exec_output) 198 return (LoadStoreDeclare.subst(iop), 199 LoadStoreConstructor.subst(iop), 200 decode_template.subst(iop), --- 138 unchanged lines hidden (view full) --- 339 Fault 340 %(class_name)s::completeAcc(PacketPtr pkt, CPU_EXEC_CONTEXT *xc, 341 Trace::InstRecord *traceData) const 342 { 343 return NoFault; 344 } 345}}; 346 |
347def template StoreCondExecute {{ 348 Fault %(class_name)s::execute(CPU_EXEC_CONTEXT *xc, 349 Trace::InstRecord *traceData) const 350 { 351 Addr EA; 352 Fault fault = NoFault; 353 uint64_t result; 354 355 %(op_decl)s; 356 %(op_rd)s; 357 %(ea_code)s; 358 359 if (fault == NoFault) { 360 %(memacc_code)s; 361 } 362 363 if (fault == NoFault) { 364 fault = writeMemAtomic(xc, traceData, Mem, EA, memAccessFlags, 365 &result); 366 } 367 368 if (fault == NoFault) { 369 %(postacc_code)s; 370 } 371 372 if (fault == NoFault) { 373 %(op_wb)s; 374 } 375 376 return fault; 377 } 378}}; 379 380def template StoreCondCompleteAcc {{ 381 Fault %(class_name)s::completeAcc(Packet *pkt, CPU_EXEC_CONTEXT *xc, 382 Trace::InstRecord *traceData) const 383 { 384 Fault fault = NoFault; 385 386 %(op_dest_decl)s; 387 388 uint64_t result = pkt->req->getExtraData(); 389 390 if (fault == NoFault) { 391 %(postacc_code)s; 392 } 393 394 if (fault == NoFault) { 395 %(op_wb)s; 396 } 397 398 return fault; 399 } 400}}; 401 |
|
343def format Load(memacc_code, ea_code = {{EA = Rs1 + ldisp;}}, mem_flags=[], 344 inst_flags=[]) {{ 345 (header_output, decoder_output, decode_block, exec_output) = \ 346 LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags, 347 'Load', exec_template_base='Load') 348}}; 349 350def format Store(memacc_code, ea_code={{EA = Rs1 + sdisp;}}, mem_flags=[], 351 inst_flags=[]) {{ 352 (header_output, decoder_output, decode_block, exec_output) = \ 353 LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags, 354 'Store', exec_template_base='Store') 355}}; | 402def format Load(memacc_code, ea_code = {{EA = Rs1 + ldisp;}}, mem_flags=[], 403 inst_flags=[]) {{ 404 (header_output, decoder_output, decode_block, exec_output) = \ 405 LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags, 406 'Load', exec_template_base='Load') 407}}; 408 409def format Store(memacc_code, ea_code={{EA = Rs1 + sdisp;}}, mem_flags=[], 410 inst_flags=[]) {{ 411 (header_output, decoder_output, decode_block, exec_output) = \ 412 LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags, 413 'Store', exec_template_base='Store') 414}}; |
415 416def format StoreCond(memacc_code, postacc_code, ea_code={{EA = Rs1;}}, 417 mem_flags=[], inst_flags=[], aq=0, rl=0) {{ 418 if aq: 419 mem_flags = makeList(mem_flags) + ["ACQUIRE"] 420 if rl: 421 mem_flags = makeList(mem_flags) + ["RELEASE"] 422 (header_output, decoder_output, decode_block, exec_output) = LoadStoreBase( 423 name, Name, ea_code, memacc_code, mem_flags, inst_flags, 'Store', 424 postacc_code, exec_template_base='StoreCond') 425}}; 426 427def format LoadReserved(memacc_code, ea_code={{EA = Rs1;}}, mem_flags=[], 428 inst_flags=[], aq=0, rl=0) {{ 429 if aq: 430 mem_flags = makeList(mem_flags) + ["ACQUIRE"] 431 if rl: 432 mem_flags = makeList(mem_flags) + ["RELEASE"] 433 (header_output, decoder_output, decode_block, exec_output) = LoadStoreBase( 434 name, Name, ea_code, memacc_code, mem_flags, inst_flags, 'Load', 435 exec_template_base='Load') 436}}; |
|