Am 07.02.2010 um 17:27 schrieb Anthony Liguori <anthony@xxxxxxxxxxxxx>:
On 02/07/2010 06:32 AM, Avi Kivity wrote:
On 02/04/2010 05:55 PM, Alexander Graf wrote:
The guest I was trying to get to run uses the LHA and LHAU
instructions.
Those instructions basically do a load, but also sign extend the
result.
Since we need to fill our registers by hand when doing MMIO, we
also need
to sign extend manually.
This patch implements sign extended MMIO and the LHA(U)
instructions.
@@ -300,6 +300,25 @@ static void kvmppc_complete_mmio_load(struct
kvm_vcpu *vcpu,
}
}
+ if (vcpu->arch.mmio_sign_extend) {
+ switch (run->mmio.len) {
+#ifdef CONFIG_PPC64
+ case 4:
+ if (gpr& 0x80000000)
+ gpr |= 0xffffffff00000000ULL;
+ break;
Wouldn't
gpr = (s64)(gpr << 32) >> 32;
work? Not sure if >> is guaranteed to sign extend.
It's technically implementation dependent but I don't know of an
implementation that doesn't sign extend.
Hrm, would
gpr = (s64)(s32)gpr;
work? :)
Alex
--
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