|
|
cf6222 |
commit fb6f7abcbc92506d302fb18a2c5fc853d2929248
|
|
|
cf6222 |
Author: Carl Love <cel@us.ibm.com>
|
|
|
cf6222 |
Date: Tue Jun 9 10:42:03 2020 -0500
|
|
|
cf6222 |
|
|
|
cf6222 |
Power PC Fix extraction of the L field for sync instruction
|
|
|
cf6222 |
|
|
|
cf6222 |
The L field is currently a two bit[22:21] field in ISA 3.0. The size of the
|
|
|
cf6222 |
L field has changed over time.
|
|
|
cf6222 |
|
|
|
cf6222 |
Currently the ISA 3.0 Valgrind sync instruction support code sets the
|
|
|
cf6222 |
flag_L for the instruction L field to a five bit value that includes bits
|
|
|
cf6222 |
that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0
|
|
|
cf6222 |
to only setting flag_L the specified two bits.
|
|
|
cf6222 |
|
|
|
cf6222 |
Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677
|
|
|
cf6222 |
|
|
|
cf6222 |
diff --git a/VEX/priv/guest_ppc_toIR.c b/VEX/priv/guest_ppc_toIR.c
|
|
|
cf6222 |
index 582c59ec0..c4965a19e 100644
|
|
|
cf6222 |
--- a/VEX/priv/guest_ppc_toIR.c
|
|
|
cf6222 |
+++ b/VEX/priv/guest_ppc_toIR.c
|
|
|
cf6222 |
@@ -8777,7 +8777,7 @@ static Bool dis_memsync ( UInt theInstr )
|
|
|
cf6222 |
/* X-Form, XL-Form */
|
|
|
cf6222 |
UChar opc1 = ifieldOPC(theInstr);
|
|
|
cf6222 |
UInt b11to25 = IFIELD(theInstr, 11, 15);
|
|
|
cf6222 |
- UChar flag_L = ifieldRegDS(theInstr);
|
|
|
cf6222 |
+ UChar flag_L = IFIELD(theInstr, 21, 2); //ISA 3.0
|
|
|
cf6222 |
UInt b11to20 = IFIELD(theInstr, 11, 10);
|
|
|
cf6222 |
UInt M0 = IFIELD(theInstr, 11, 5);
|
|
|
cf6222 |
UChar rD_addr = ifieldRegDS(theInstr);
|