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