[PATCH 31/33] KVM: PPC: Add rlwinm instruction emulation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch adds emulation support for the rlwinm instruction.

Signed-off-by: Alexander Graf <agraf@xxxxxxx>
---
 arch/powerpc/include/asm/ppc-opcode.h |  1 +
 arch/powerpc/kvm/emulate.c            | 10 +++++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
index 569b518..fac38a8 100644
--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -120,6 +120,7 @@
 #define OP_ADDIS 15
 #define OP_BC   16
 #define OP_RLWIMI 20
+#define OP_RLWINM 21
 #define OP_ORI  24
 #define OP_ORIS 25
 #define OP_ANDI 28
diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c
index c40f255..1da6691 100644
--- a/arch/powerpc/kvm/emulate.c
+++ b/arch/powerpc/kvm/emulate.c
@@ -601,7 +601,7 @@ int kvmppc_emulate_rld(struct kvm_vcpu *vcpu, u32 inst)
 	return EMULATE_DONE;
 }
 
-int kvmppc_emulate_rlwimi(struct kvm_vcpu *vcpu, u32 inst)
+int kvmppc_emulate_rlwi(struct kvm_vcpu *vcpu, u32 inst)
 {
 	int sh = (inst >> 11) & 0x1f;
 	int mb = (inst >> 6) & 0x1f;
@@ -623,7 +623,8 @@ int kvmppc_emulate_rlwimi(struct kvm_vcpu *vcpu, u32 inst)
 			mask = ~mask;
 	}
 	dest &= mask;
-	dest |= kvmppc_get_gpr(vcpu, get_ra(inst)) & ~mask;
+	if (get_op(inst) == OP_RLWIMI)
+		dest |= kvmppc_get_gpr(vcpu, get_ra(inst)) & ~mask;
 
 	kvmppc_set_gpr(vcpu, get_ra(inst), dest);
 	if (get_rc(inst))
@@ -707,7 +708,10 @@ int kvmppc_emulate_any_instruction(struct kvm_vcpu *vcpu)
 		emulated = kvmppc_emulate_rld(vcpu, inst);
 		break;
 	case OP_RLWIMI:
-		emulated = kvmppc_emulate_rlwimi(vcpu, inst);
+		emulated = kvmppc_emulate_rlwi(vcpu, inst);
+		break;
+	case OP_RLWINM:
+		emulated = kvmppc_emulate_rlwi(vcpu, inst);
 		break;
 	case 31:
 		switch (get_xop(inst)) {
-- 
1.8.1.4

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux