svn commit: r241744 - projects/bhyve/usr.sbin/bhyve

Andriy Gapon avg at FreeBSD.org
Tue Oct 23 17:13:46 UTC 2012


on 23/10/2012 19:44 Peter Grehan said the following:
> On 10/23/12 3:55 AM, Jilles Tjoelker wrote:
>> On Mon, Oct 22, 2012 at 05:18:11PM -0600, Peter Grehan wrote:
>>>> Case 4 looks wrong. A 32-bit write clears the top 32 bits of the
>>>> register instead of preserving them.
>>
>>>    Yep, you're right. How about:
>>
>>>   >  +    case 4:
>>>   >  +        val = (reg & ~0xffffffffUL) | (operand & 0xffffffffUL);
>>>   >  +        break;
>>
>> I think you mean:
>>     val = operand &  0xffffffffUL;
>>
>> Right?
> 
>  Don't think so - the high 32 bits of the target register need to be or'd in, as
> you originally mentioned.

If this code emulates something like mov into %eax on AMDD64, then it should clear
upper 32-bits of %rax.  Which I think your original code already did, but in a
less obvious way than Jilles suggested above.
But I could be very well confused...

-- 
Andriy Gapon


More information about the svn-src-projects mailing list