qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] PATCH for bugs 661696 and 1248376: target-i386: x87 exc


From: Jaume Martí
Subject: Re: [Qemu-devel] PATCH for bugs 661696 and 1248376: target-i386: x87 exception pointers using TCG.
Date: Sun, 22 Jun 2014 21:17:09 +0200

Thanks Richard for your feedback. I am going to correct the patch and
resubmit it.

Best regards,
Jaume

On Sun, Jun 22, 2014 at 8:55 PM, Richard Henderson <address@hidden> wrote:
> On 06/22/2014 07:55 AM, Jaume Martí wrote:
>> -        cpu_x86_fsave(env, fpstate_addr, 1);
>> -        fpstate->status = fpstate->sw;
>> -        magic = 0xffff;
>> +    cpu_x86_fsave(env, fpstate_addr);
>> +    fpstate->status = fpstate->sw;
>> +    magic = 0xffff;
>
> This patch needs to be split into format fixes and the actual change to be
> reviewed.
>
>> -    /* KVM-only so far */
>> -    uint16_t fpop;
>> +    union {
>> +        uint32_t tcg;
>> +        uint16_t kvm;
>> +    } fpop;
>
> This is highly questionable.
>
>>      .fields = (VMStateField[]) {
>> -        VMSTATE_UINT16(env.fpop, X86CPU),
>> +        VMSTATE_UINT16(env.fpop.kvm, X86CPU),
>
> You're breaking save/restore in tcg.  KVM is not required for migration.
>
>> +        if (non_control_x87_instr(modrm, b)) {
>> +            tcg_gen_movi_i32(cpu_fpop, ((b & 0x7) << 8) | (modrm & 0xff));
>> +            tcg_gen_movi_tl(cpu_fpip, pc_start - s->cs_base);
>> +            tcg_gen_movi_i32(cpu_fpcs, env->segs[R_CS].selector);
>> +        }
>
> I strongly suspect you can implement this feature without having to add 3
> (largely redundant) register writes to every x87 instruction executed.
>
> See how restore_state_to_opc works to compute the value of CC_OP during
> translation.  You can do the same thing to recover these three values.
>
> You do have to sync these values before normal exits from the TB, but you only
> have to do that once, not once for every insn executed.  See gen_update_cc_op.
>
>
> r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]