summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/decoder
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:02 -0500
committerGabe Black <gblack@eecs.umich.edu>2010-06-02 12:58:02 -0500
commit8136cb360575aad8a6418c76f5b69194bec23f5c (patch)
treebfc7c169c26959665b6f9face9e92f78c6cff615 /src/arch/arm/isa/decoder
parentbf45d44cbea7be475e04150122904aef0c93d813 (diff)
downloadgem5-8136cb360575aad8a6418c76f5b69194bec23f5c.tar.xz
ARM: Hook the new external data processing instructions to the ARM decoder.
Diffstat (limited to 'src/arch/arm/isa/decoder')
-rw-r--r--src/arch/arm/isa/decoder/arm.isa46
1 files changed, 2 insertions, 44 deletions
diff --git a/src/arch/arm/isa/decoder/arm.isa b/src/arch/arm/isa/decoder/arm.isa
index eeab247d7..8a5ba3e43 100644
--- a/src/arch/arm/isa/decoder/arm.isa
+++ b/src/arch/arm/isa/decoder/arm.isa
@@ -93,24 +93,7 @@ format DataOp {
0xb, 0xd, 0xf: AddrMode3::addrMode3();
}
0: decode IS_MISC {
- 0: decode OPCODE {
- 0x0: and({{ Rd = resTemp = Rn & op2; }});
- 0x1: eor({{ Rd = resTemp = Rn ^ op2; }});
- 0x2: sub({{ Rd = resTemp = Rn - op2; }}, sub);
- 0x3: rsb({{ Rd = resTemp = op2 - Rn; }}, rsb);
- 0x4: add({{ Rd = resTemp = Rn + op2; }}, add);
- 0x5: adc({{ Rd = resTemp = Rn + op2 + CondCodes<29:>; }}, add);
- 0x6: sbc({{ Rd = resTemp = Rn - op2 - !CondCodes<29:>; }}, sub);
- 0x7: rsc({{ Rd = resTemp = op2 - Rn - !CondCodes<29:>; }}, rsb);
- 0x8: tst({{ resTemp = Rn & op2; }});
- 0x9: teq({{ resTemp = Rn ^ op2; }});
- 0xa: cmp({{ resTemp = Rn - op2; }}, sub);
- 0xb: cmn({{ resTemp = Rn + op2; }}, add);
- 0xc: orr({{ Rd = resTemp = Rn | op2; }});
- 0xd: mov({{ Rd = resTemp = op2; }});
- 0xe: bic({{ Rd = resTemp = Rn & ~op2; }});
- 0xf: mvn({{ Rd = resTemp = ~op2; }});
- }
+ 0: ArmDataProcReg::armDataProcReg();
1: decode MISC_OPCODE {
0x0: decode OPCODE {
0x8: PredOp::mrs_cpsr({{
@@ -195,32 +178,7 @@ format DataOp {
}
}
0x1: decode IS_MISC {
- 0: decode OPCODE {
- format DataImmOp {
- 0x0: andi({{ Rd = resTemp = Rn & rotated_imm; }});
- 0x1: eori({{ Rd = resTemp = Rn ^ rotated_imm; }});
- 0x2: subi({{ Rd = resTemp = Rn - rotated_imm; }}, sub);
- 0x3: rsbi({{ Rd = resTemp = rotated_imm - Rn; }}, rsb);
- 0x4: addi({{ Rd = resTemp = Rn + rotated_imm; }}, add);
- 0x5: adci({{
- Rd = resTemp = Rn + rotated_imm + CondCodes<29:>;
- }}, add);
- 0x6: sbci({{
- Rd = resTemp = Rn -rotated_imm - !CondCodes<29:>;
- }}, sub);
- 0x7: rsci({{
- Rd = resTemp = rotated_imm - Rn - !CondCodes<29:>;
- }}, rsb);
- 0x8: tsti({{ resTemp = Rn & rotated_imm; }});
- 0x9: teqi({{ resTemp = Rn ^ rotated_imm; }});
- 0xa: cmpi({{ resTemp = Rn - rotated_imm; }}, sub);
- 0xb: cmni({{ resTemp = Rn + rotated_imm; }}, add);
- 0xc: orri({{ Rd = resTemp = Rn | rotated_imm; }});
- 0xd: movi({{ Rd = resTemp = rotated_imm; }});
- 0xe: bici({{ Rd = resTemp = Rn & ~rotated_imm; }});
- 0xf: mvni({{ Rd = resTemp = ~rotated_imm; }});
- }
- }
+ 0: ArmDataProcImm::armDataProcImm();
1: decode OPCODE {
// The following two instructions aren't supposed to be defined
0x8: DataOp::movw({{ Rd = IMMED_11_0 | (RN << 12) ; }});