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}};