diff options
Diffstat (limited to 'src/arch/arm/isa/decoder.isa')
-rw-r--r-- | src/arch/arm/isa/decoder.isa | 238 |
1 files changed, 9 insertions, 229 deletions
diff --git a/src/arch/arm/isa/decoder.isa b/src/arch/arm/isa/decoder.isa index cdb228efa..7cc0b198f 100644 --- a/src/arch/arm/isa/decoder.isa +++ b/src/arch/arm/isa/decoder.isa @@ -112,235 +112,15 @@ format DataOp { 0x19: WarnUnimpl::ldrex(); } } - 0xb: decode PUBWL { - format ArmStoreMemory { - 0x0: strh_({{ Mem.uh = Rd; - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x4: strh_i({{ Mem.uh = Rd; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x8: strh_u({{ Mem.uh = Rd; - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0xc: strh_ui({{ Mem.uh = Rd; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x10: strh_p({{ Mem.uh = Rd; }}, - {{ EA = Rn - Rm; }}); - 0x12: strh_pw({{ Mem.uh = Rd; - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x14: strh_pi({{ Mem.uh = Rd.uh; }}, - {{ EA = Rn + hilo; }}); - 0x16: strh_piw({{ Mem.uh = Rd; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x18: strh_pu({{ Mem.uh = Rd; }}, - {{ EA = Rn + Rm; }}); - 0x1a: strh_puw({{ Mem.uh = Rd; - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1c: strh_pui({{ Mem.uh = Rd; }}, - {{ EA = Rn + hilo; }}); - 0x1e: strh_puiw({{ Mem.uh = Rd; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - } - format ArmLoadMemory { - 0x1: ldrh_l({{ Rd = Mem.uh; - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x5: ldrh_il({{ Rd = Mem.uh; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x9: ldrh_ul({{ Rd = Mem.uh; - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0xd: ldrh_uil({{ Rd = Mem.uh; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x11: ldrh_pl({{ Rd = Mem.uh; }}, - {{ EA = Rn - Rm; }}); - 0x13: ldrh_pwl({{ Rd = Mem.uh; - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x15: ldrh_pil({{ Rd = Mem.uh; }}, - {{ EA = Rn + hilo; }}); - 0x17: ldrh_piwl({{ Rd = Mem.uh; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x19: ldrh_pul({{ Rd = Mem.uh; }}, - {{ EA = Rn + Rm; }}); - 0x1b: ldrh_puwl({{ Rd = Mem.uh; - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1d: ldrh_puil({{ Rd = Mem.uh; }}, - {{ EA = Rn + hilo; }}); - 0x1f: ldrh_puiwl({{ Rd = Mem.uh; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - } - } - format ArmLoadMemory { - 0xd: decode PUBWL { - 0x0: ldrd_({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x1: ldrsb_l({{ Rd = Mem.sb; - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x4: ldrd_i({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x5: ldrsb_il({{ Rd = Mem.sb; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x8: ldrd_u({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0x9: ldrsb_ul({{ Rd = Mem.sb; - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0xc: ldrd_ui({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0xd: ldrsb_uil({{ Rd = Mem.sb; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x10: ldrd_p({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); }}, - {{ EA = Rn - Rm; }}); - 0x11: ldrsb_pl({{ Rd = Mem.sb; }}, - {{ EA = Rn - Rm; }}); - 0x12: ldrd_pw({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x13: ldrsb_pwl({{ Rd = Mem.sb; - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x14: ldrd_pi({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); }}, - {{ EA = Rn + hilo; }}); - 0x15: ldrsb_pil({{ Rd = Mem.sb; }}, - {{ EA = Rn + hilo; }}); - 0x16: ldrd_piw({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x17: ldrsb_piwl({{ Rd = Mem.sb; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x18: ldrd_pu({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); }}, - {{ EA = Rn + Rm; }}); - 0x19: ldrsb_pul({{ Rd = Mem.sb; }}, - {{ EA = Rn + Rm; }}); - 0x1a: ldrd_puw({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1b: ldrsb_puwl({{ Rd = Mem.sb; - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1c: ldrd_pui({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); }}, - {{ EA = Rn + hilo; }}); - 0x1d: ldrsb_puil({{ Rd = Mem.sb; }}, - {{ EA = Rn + hilo; }}); - 0x1e: ldrd_puiw({{ Rde = bits(Mem.ud, 31, 0); - Rdo = bits(Mem.ud, 63, 32); - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x1f: ldrsb_puiwl({{ Rd = Mem.sb; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - } - 0xf: decode PUBWL { - 0x1: ldrsh_l({{ Rd = Mem.sh; - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x5: ldrsh_il({{ Rd = Mem.sh; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x9: ldrsh_ul({{ Rd = Mem.sh; - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0xd: ldrsh_uil({{ Rd = Mem.sh; - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x11: ldrsh_pl({{ Rd = Mem.sh; }}, - {{ EA = Rn - Rm; }}); - 0x13: ldrsh_pwl({{ Rd = Mem.sh; - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x15: ldrsh_pil({{ Rd = Mem.sh; }}, - {{ EA = Rn + hilo; }}); - 0x17: ldrsh_piwl({{ Rd = Mem.sh; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x19: ldrsh_pul({{ Rd = Mem.sh; }}, - {{ EA = Rn + Rm; }}); - 0x1b: ldrsh_puwl({{ Rd = Mem.sh; - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1d: ldrsh_puil({{ Rd = Mem.sh; }}, - {{ EA = Rn + hilo; }}); - 0x1f: ldrsh_puiwl({{ Rd = Mem.sh; - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - format ArmStoreMemory { - 0x0: strd_({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn - Rm; }}, - {{ EA = Rn; }}); - 0x4: strd_i({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x8: strd_u({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + Rm; }}, - {{ EA = Rn; }}); - 0xc: strd_ui({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + hilo; }}, - {{ EA = Rn; }}); - 0x10: strd_p({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); }}, - {{ EA = Rn - Rm; }}); - 0x12: strd_pw({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn - Rm; }}, - {{ EA = Rn - Rm; }}); - 0x14: strd_pi({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); }}, - {{ EA = Rn + hilo; }}); - 0x16: strd_piw({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - 0x18: strd_pu({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); }}, - {{ EA = Rn + Rm; }}); - 0x1a: strd_puw({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + Rm; }}, - {{ EA = Rn + Rm; }}); - 0x1c: strd_pui({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); }}, - {{ EA = Rn + hilo; }}); - 0x1e: strd_puiw({{ Mem.ud = (uint64_t)Rde | - ((uint64_t)Rdo << 32); - Rn = Rn + hilo; }}, - {{ EA = Rn + hilo; }}); - } - } + format AddrMode3 { + 0xb: strh_ldrh(store, {{ Mem.uh = Rd; }}, + load, {{ Rd = Mem.uh; }}); + 0xd: ldrd_ldrsb(load, {{ Rde = bits(Mem.ud, 31, 0); + Rdo = bits(Mem.ud, 63, 32); }}, + load, {{ Rd = Mem.sb; }}); + 0xf: strd_ldrsh(store, {{ Mem.ud = (Rde.ud & mask(32)) | + (Rdo.ud << 32); }}, + load, {{ Rd = Mem.sh; }}); } } 0: decode IS_MISC { |