diff -r b69773a3290a -r 2994d86da4b7 src/arch/arm/isa/formats/branch.isa --- a/src/arch/arm/isa/formats/branch.isa Fri Aug 13 11:55:23 2010 -0500 +++ b/src/arch/arm/isa/formats/branch.isa Fri Aug 13 11:56:38 2010 -0500 @@ -196,11 +196,14 @@ case 0x2: return new Clrex(machInst); case 0x4: - return new WarnUnimplemented("dsb", machInst); + //return new WarnUnimplemented("dsb", machInst); + return new Dsb(machInst); case 0x5: - return new WarnUnimplemented("dmb", machInst); + //return new WarnUnimplemented("dmb", machInst); + return new Dmb(machInst); case 0x6: - return new WarnUnimplemented("isb", machInst); + //return new WarnUnimplemented("isb", machInst); + return new Isb(machInst); default: break; } diff -r b69773a3290a -r 2994d86da4b7 src/arch/arm/isa/formats/uncond.isa --- a/src/arch/arm/isa/formats/uncond.isa Fri Aug 13 11:55:23 2010 -0500 +++ b/src/arch/arm/isa/formats/uncond.isa Fri Aug 13 11:56:38 2010 -0500 @@ -99,11 +99,14 @@ case 0x1: return new Clrex(machInst); case 0x4: - return new WarnUnimplemented("dsb", machInst); + //return new WarnUnimplemented("dsb", machInst); + return new Dsb(machInst); case 0x5: - return new WarnUnimplemented("dmb", machInst); + //return new WarnUnimplemented("dmb", machInst); + return new Dmb(machInst); case 0x6: - return new WarnUnimplemented("isb", machInst); + //return new WarnUnimplemented("isb", machInst); + return new Isb(machInst); } } } else if (bits(op2, 0) == 0) { diff -r b69773a3290a -r 2994d86da4b7 src/arch/arm/isa/insts/misc.isa --- a/src/arch/arm/isa/insts/misc.isa Fri Aug 13 11:55:23 2010 -0500 +++ b/src/arch/arm/isa/insts/misc.isa Fri Aug 13 11:56:38 2010 -0500 @@ -677,6 +677,33 @@ decoder_output += BasicConstructor.subst(clrexIop) exec_output += PredOpExecute.subst(clrexIop) + isbCode = ''' + ''' + isbIop = InstObjParams("isb", "Isb", "PredOp", + {"code": isbCode, + "predicate_test": predicateTest}, ['IsSerializing']) + header_output += BasicDeclare.subst(isbIop) + decoder_output += BasicConstructor.subst(isbIop) + exec_output += PredOpExecute.subst(isbIop) + + dsbCode = ''' + ''' + dsbIop = InstObjParams("dsb", "Dsb", "PredOp", + {"code": dsbCode, + "predicate_test": predicateTest},['IsMemBarrier']) + header_output += BasicDeclare.subst(dsbIop) + decoder_output += BasicConstructor.subst(dsbIop) + exec_output += PredOpExecute.subst(dsbIop) + + dmbCode = ''' + ''' + dmbIop = InstObjParams("dmb", "Dmb", "PredOp", + {"code": dmbCode, + "predicate_test": predicateTest},['IsMemBarrier']) + header_output += BasicDeclare.subst(dmbIop) + decoder_output += BasicConstructor.subst(dmbIop) + exec_output += PredOpExecute.subst(dmbIop) + cpsCode = ''' uint32_t mode = bits(imm, 4, 0); uint32_t f = bits(imm, 5);