From a2d246b6b8379f9a74dbc56feefc155f615b5ea4 Mon Sep 17 00:00:00 2001 From: Andreas Hansson Date: Thu, 16 Oct 2014 05:49:51 -0400 Subject: arch: Use shared_ptr for all Faults This patch takes quite a large step in transitioning from the ad-hoc RefCountingPtr to the c++11 shared_ptr by adopting its use for all Faults. There are no changes in behaviour, and the code modifications are mostly just replacing "new" with "make_shared". --- src/arch/arm/isa/insts/data64.isa | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/arch/arm/isa/insts/data64.isa') diff --git a/src/arch/arm/isa/insts/data64.isa b/src/arch/arm/isa/insts/data64.isa index 8ec446d16..cb5671b1e 100644 --- a/src/arch/arm/isa/insts/data64.isa +++ b/src/arch/arm/isa/insts/data64.isa @@ -294,28 +294,33 @@ let {{ flat_idx == MISCREG_DC_CVAC_Xt || flat_idx == MISCREG_DC_CIVAC_Xt ) - return new UndefinedInstruction(machInst, 0, EC_TRAPPED_MSR_MRS_64, + return std::make_shared( + machInst, 0, EC_TRAPPED_MSR_MRS_64, mnemonic); - return new UndefinedInstruction(machInst, false, mnemonic); + return std::make_shared(machInst, false, + mnemonic); } // Check for traps to supervisor (FP/SIMD regs) if (el <= EL1 && msrMrs64TrapToSup(flat_idx, el, Cpacr64)) - return new SupervisorTrap(machInst, 0x1E00000, EC_TRAPPED_SIMD_FP); + return std::make_shared(machInst, 0x1E00000, + EC_TRAPPED_SIMD_FP); bool is_vfp_neon = false; // Check for traps to hypervisor if ((ArmSystem::haveVirtualization(xc->tcBase()) && el <= EL2) && msrMrs64TrapToHyp(flat_idx, %s, CptrEl264, Hcr64, &is_vfp_neon)) { - return new HypervisorTrap(machInst, is_vfp_neon ? 0x1E00000 : imm, + return std::make_shared( + machInst, is_vfp_neon ? 0x1E00000 : imm, is_vfp_neon ? EC_TRAPPED_SIMD_FP : EC_TRAPPED_MSR_MRS_64); } // Check for traps to secure monitor if ((ArmSystem::haveSecurity(xc->tcBase()) && el <= EL3) && msrMrs64TrapToMon(flat_idx, CptrEl364, el, &is_vfp_neon)) { - return new SecureMonitorTrap(machInst, + return std::make_shared( + machInst, is_vfp_neon ? 0x1E00000 : imm, is_vfp_neon ? EC_TRAPPED_SIMD_FP : EC_TRAPPED_MSR_MRS_64); } @@ -388,7 +393,8 @@ let {{ if (!canWriteAArch64SysReg( (MiscRegIndex) xc->tcBase()->flattenMiscIndex(dest), Scr64, Cpsr, xc->tcBase())) { - return new UndefinedInstruction(machInst, false, mnemonic); + return std::make_shared(machInst, false, + mnemonic); } MiscDest_ud = imm; ''', optArgs = ["IsSerializeAfter", "IsNonSpeculative"]) @@ -397,7 +403,8 @@ let {{ if (!canWriteAArch64SysReg( (MiscRegIndex) xc->tcBase()->flattenMiscIndex(dest), Scr64, Cpsr, xc->tcBase())) { - return new UndefinedInstruction(machInst, 0, EC_TRAPPED_MSR_MRS_64, + return std::make_shared( + machInst, 0, EC_TRAPPED_MSR_MRS_64, mnemonic); } CPSR cpsr = Cpsr; @@ -409,7 +416,8 @@ let {{ if (!canWriteAArch64SysReg( (MiscRegIndex) xc->tcBase()->flattenMiscIndex(dest), Scr64, Cpsr, xc->tcBase())) { - return new UndefinedInstruction(machInst, 0, EC_TRAPPED_MSR_MRS_64, + return std::make_shared( + machInst, 0, EC_TRAPPED_MSR_MRS_64, mnemonic); } CPSR cpsr = Cpsr; -- cgit v1.2.3