summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorchedahub <2017000029@ushs.hs.kr>2025-11-03 16:00:05 +0900
committerPeter LaFosse <peter@vector35.com>2025-11-03 12:49:02 -0500
commit4bbf5434655da660322205b9db590c524bef4aa8 (patch)
tree4b4caf289615689bc32d70cbc41feae4037c57ec /arch
parent251799ddc71f7c4027d7317ec00c87189b499eb4 (diff)
Fix VLE I16L-form instructions to use rD instead of rA
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/decode/vle32.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/powerpc/decode/vle32.c b/arch/powerpc/decode/vle32.c
index 3b67184c..f722c789 100644
--- a/arch/powerpc/decode/vle32.c
+++ b/arch/powerpc/decode/vle32.c
@@ -383,13 +383,12 @@ static void FillOperands32Vle(Instruction* instruction, uint32_t word32, uint64_
case PPC_ID_VLE_E_AND2IS:
case PPC_ID_VLE_E_OR2I:
case PPC_ID_VLE_E_OR2IS:
- case PPC_ID_VLE_E_LIS:
{
uint32_t ui5_15 = word32 & 0x7ff;
uint32_t ui0_4 = (word32 >> 16) & 0x1f;
uint32_t ui = (ui0_4 << 11) | ui5_15;
- PushRA(instruction, word32);
+ PushRD(instruction, word32);
if (translate)
PushRS(instruction, word32);
@@ -399,6 +398,16 @@ static void FillOperands32Vle(Instruction* instruction, uint32_t word32, uint64_
break;
}
+ case PPC_ID_VLE_E_LIS:
+ {
+ uint32_t ui5_15 = word32 & 0x7ff;
+ uint32_t ui0_4 = (word32 >> 16) & 0x1f;
+ uint32_t ui = (ui0_4 << 11) | ui5_15;
+ PushRD(instruction, word32);
+ PushUIMMValue(instruction, ui);
+ break;
+ }
+
// <op>[.] rA, rS, SH
case PPC_ID_VLE_E_RLWIx:
case PPC_ID_VLE_E_SLWIx: