summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThe6P4C <watsonjcampbell@gmail.com>2020-12-15 13:12:00 +0000
committeriximeow <me@iximeow.net>2020-12-15 23:46:10 -0800
commitde023b78c710d381ee50a04bb7bf60515a1fded0 (patch)
tree9804765e66347977e2e3994904c88ff07879658a
parent2c5c5cda6c39f5b7d29063731b89771ee3be30ae (diff)
Fix decoding of mov-to-PKR0.1.3
Table 4-45 had a transcription error with an M43 in place of the correct M43 for mov-to-pkr's operand form
-rw-r--r--src/lib.rs2
-rw-r--r--tests/test.rs5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 384e107..94ec425 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -4002,7 +4002,7 @@ fn get_m_opcode_and_encoding(tag: u8, word: &BitSlice<Lsb0, u8>) -> (Opcode, Ope
// [UEFI Itanium platform assembler source file](https://github.com/open-estuary/uefi/blob/af332aea6e16dec610a76da9279d4cbfe0e87cc3/MdePkg/Library/BaseLib/Ipf/AccessMsr.s)
// for accessing MSRs which uses similar syntax.
const TABLE4_45: [(Opcode, OperandEncodingM); 64] = [
- (Mov, M42), (Mov, M42), (Mov, M42), (Mov, M43), (Mov, M42), (Mov, M42), (Mov, M42), (Purple, None), (Purple, None), (Ptc_l, M45), (Ptc_g, M45), (Ptc_ga, M45), (Ptr_d, M45), (Ptr_i, M45), (Itr_d, M42), (Itr_i, M42),
+ (Mov, M42), (Mov, M42), (Mov, M42), (Mov, M42), (Mov, M42), (Mov, M42), (Mov, M42), (Purple, None), (Purple, None), (Ptc_l, M45), (Ptc_g, M45), (Ptc_ga, M45), (Ptr_d, M45), (Ptr_i, M45), (Itr_d, M42), (Itr_i, M42),
(Mov, M43),(Mov, M43), (Mov, M43), (Mov, M43), (Mov, M43), (Mov, M43), (Mov, M43), (Mov, M43), (Probe_r, M39), (Probe_w, M39), (Thash, M46), (Ttag, M46), (Purple, None), (Purple, None), (Tpa, M46), (Tak, M46),
(Purple, None), (Mov, M36), (Mov_m, M31), (Purple, None), (Mov, M33), (Mov, M36), (Purple, None), (Purple, None), (Purple, None), (Mov, M35), (Mov_m, M29), (Purple, None), (Mov, M32), (Mov, M35), (Itc_d, M41), (Itc_i, M41),
(Fc, M28),(Probe_rw_fault, M40), (Probe_r_fault, M40), (Probe_w_fault, M40), (Ptc_e, M47), (Purple, None), (Purple, None), (Purple, None), (Probe_r, M38), (Probe_w, M38), (Purple, None), (Purple, None), (Purple, None), (Purple, None), (Purple, None), (Purple, None),
diff --git a/tests/test.rs b/tests/test.rs
index 2c4e855..405e516 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -51,6 +51,11 @@ fn test_ad_hoc() {
let data = [0x0b, 0x00, 0x00, 0x00, 0x31, 0x00, 0x90, 0x08, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x04, 0x00];
let inst = decoder.decode(data[..].iter().cloned()).unwrap();
assert_eq!(format!("{}", inst), expected);
+
+ let expected = "[MMI] mov pkr[r0]=r0;; mov rr[r0]=r5; mov r1=r0;;";
+ let data = [0x0b, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x28, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x84];
+ let inst = decoder.decode(data[..].iter().cloned()).unwrap();
+ assert_eq!(format!("{}", inst), expected);
}
#[test]
fn test_shr_shl_dep_ext() {