cvs commit: src/sys/amd64/amd64 support.S

David Xu davidxu at freebsd.org
Tue Aug 15 13:34:50 UTC 2006


On Tuesday 15 August 2006 21:13, John Baldwin wrote:
> On Tuesday 15 August 2006 08:45, David Xu wrote:
> > davidxu     2006-08-15 12:45:51 UTC
> >
> >   FreeBSD src repository
> >
> >   Modified files:
> >     sys/amd64/amd64      support.S
> >   Log:
> >   Because fuword on AMD64 returns 64bit long integer -1 on fault, clear
> >   entire %rax to zero instead of only clearing %eax, otherwise it will
> >   leave garbage data in upper 32 bits.
>
> Are you sure that 'xorl %eax,%eax' doesn't actually clear all 64 bits? 
> This practice of just using xorl rather than xorq is all over the place in
> the amd64 code, and I think I've even seen gcc generate it, so I'm guessing
> that the xorl actually is a xorq.

From my understanding, they are different.

before my change, generated binary code:

0000000000003ba0 <fusufault>:
    3ba0:       65 48 8b 0c 25 20 00    mov    %gs:0x20,%rcx
    3ba7:       00 00
    3ba9:       31 c0                   xor    %eax,%eax
    3bab:       48 89 81 a8 02 00 00    mov    %rax,0x2a8(%rcx)
    3bb2:       48 ff c8                dec    %rax
    3bb5:       c3                      retq
    3bb6:       66                      data16
    3bb7:       66                      data16
    3bb8:       66                      data16

=======================================
after this change:

0000000000003ba0 <fusufault>:
    3ba0:       65 48 8b 0c 25 20 00    mov    %gs:0x20,%rcx
    3ba7:       00 00
    3ba9:       48 31 c0                xor    %rax,%rax
    3bac:       48 89 81 a8 02 00 00    mov    %rax,0x2a8(%rcx)
    3bb3:       48 ff c8                dec    %rax
    3bb6:       c3                      retq


I have only checked fuword while I am working on userland mutex
priority propagating, I have not checked suword and others yet.

David Xu


More information about the cvs-src mailing list