We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent a390136 commit 925cd69Copy full SHA for 925cd69
src/arch/arm/insts/misc64.cc
@@ -2654,4 +2654,27 @@ IsbOp64::generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
2654
return ss.str();
2655
}
2656
2657
+std::string
2658
+DsbOp64::generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
2659
+{
2660
+ std::stringstream ss;
2661
+ ss << " " << mnemonic << " ";
2662
+ switch (imm) {
2663
+ case 1: ss << "OSHLD"; break;
2664
+ case 2: ss << "OSHST"; break;
2665
+ case 3: ss << "OSH"; break;
2666
+ case 5: ss << "NSHLD"; break;
2667
+ case 6: ss << "NSHST"; break;
2668
+ case 7: ss << "NSH"; break;
2669
+ case 9: ss << "ISHLD"; break;
2670
+ case 10: ss << "ISHST"; break;
2671
+ case 11: ss << "ISH"; break;
2672
+ case 13: ss << "LD"; break;
2673
+ case 14: ss << "ST"; break;
2674
+ case 15: ss << "SY"; break;
2675
+ default: ss << "#" << imm; break;
2676
+ }
2677
+ return ss.str();
2678
+}
2679
+
2680
} // namespace gem5
src/arch/arm/insts/misc64.hh
@@ -371,6 +371,20 @@ class IsbOp64 : public ArmISA::ArmStaticInst
371
Addr pc, const loader::SymbolTable *symtab) const override;
372
};
373
374
+class DsbOp64 : public ArmISA::ArmStaticInst
375
376
+ protected:
377
+ uint64_t imm;
378
379
+ DsbOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
380
+ OpClass __opClass, uint64_t _imm) :
381
+ ArmISA::ArmStaticInst(mnem, _machInst, __opClass), imm(_imm)
382
+ {}
383
384
+ std::string generateDisassembly(
385
+ Addr pc, const loader::SymbolTable *symtab) const override;
386
+};
387
388
389
390
#endif
src/arch/arm/isa/formats/aarch64.isa
@@ -399,12 +399,12 @@ namespace Aarch64
399
if (bits(crm, 1, 0) == 0b10) {
400
switch (bits(crm, 3, 2)) {
401
case 0x1: // Non-Shareable
402
- return new Dsb64Local(machInst);
+ return new Dsb64Local(machInst, crm);
403
case 0x0: // OuterShareable
404
case 0x2: // InnerShareable
405
case 0x3: // FullSystem
406
return new Dsb64Shareable(
407
- machInst, dec.dvmEnabled);
+ machInst, crm, dec.dvmEnabled);
408
default:
409
GEM5_UNREACHABLE;
410
@@ -416,12 +416,12 @@ namespace Aarch64
416
case 0x4:
417
418
419
420
421
422
423
424
425
426
427
src/arch/arm/isa/insts/misc64.isa
@@ -194,11 +194,11 @@ let {{
194
decoder_output += ImmOp64Constructor.subst(isbIop)
195
exec_output += BasicExecute.subst(isbIop)
196
197
- dsbLocalIop = ArmInstObjParams("dsb", "Dsb64Local", "ArmStaticInst", "",
+ dsbLocalIop = ArmInstObjParams("dsb", "Dsb64Local", "DsbOp64", "",
198
['IsReadBarrier', 'IsWriteBarrier',
199
'IsSerializeAfter'])
200
- header_output += BasicDeclare.subst(dsbLocalIop)
201
- decoder_output += BasicConstructor64.subst(dsbLocalIop)
+ header_output += ImmOp64Declare.subst(dsbLocalIop)
+ decoder_output += ImmOp64Constructor.subst(dsbLocalIop)
202
exec_output += BasicExecute.subst(dsbLocalIop)
203
204
dvmCode = '''
@@ -215,7 +215,7 @@ let {{
215
PendingDvm = false;
216
217
'''
218
- dsbShareableIop = ArmInstObjParams("dsb", "Dsb64Shareable", "ArmStaticInst",
+ dsbShareableIop = ArmInstObjParams("dsb", "Dsb64Shareable", "DsbOp64",
219
{ "code" : "", "dvm_code" : dvmCode },
220
221
src/arch/arm/isa/templates/misc64.isa
@@ -331,7 +331,7 @@ def template DvmDeclare {{
331
332
public:
333
/// Constructor.
334
- %(class_name)s(ExtMachInst machInst, bool dvm_enabled);
+ %(class_name)s(ExtMachInst machInst, uint64_t imm, bool dvm_enabled);
335
Fault initiateAcc(ExecContext *, trace::InstRecord *) const override;
336
Fault completeAcc(PacketPtr, ExecContext *,
337
trace::InstRecord *) const override;
@@ -368,8 +368,9 @@ def template AtConstructor {{
368
}};
369
370
def template DvmConstructor {{
- %(class_name)s::%(class_name)s(ExtMachInst machInst, bool dvm_enabled) :
- %(base_class)s("%(mnemonic)s", machInst, %(op_class)s),
+ %(class_name)s::%(class_name)s(ExtMachInst machInst, uint64_t imm,
+ bool dvm_enabled) :
+ %(base_class)s("%(mnemonic)s", machInst, %(op_class)s, imm),
dvmEnabled(dvm_enabled)
{
%(set_reg_idx_arr)s;
0 commit comments