On Thu, Nov 13, 2014 at 12:13:23PM +0100, Laszlo Ersek wrote:
> Anthony,
>
> On 11/06/14 12:24, Anthony PERARD wrote:
> > The BaseTools/Scripts/ConvertMasmToNasm.py script was used to convert
> > X64/TestAndClearBit.asm to X64/TestAndClearBit.nasm
> >
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Anthony PERARD <[email protected]>
> > ---
> > OvmfPkg/XenBusDxe/X64/TestAndClearBit.S | 12
> > ------------
> > .../X64/{TestAndClearBit.asm => TestAndClearBit.nasm} | 8 ++++----
> > OvmfPkg/XenBusDxe/XenBusDxe.inf | 3 +--
> > 3 files changed, 5 insertions(+), 18 deletions(-)
> > delete mode 100644 OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> > rename OvmfPkg/XenBusDxe/X64/{TestAndClearBit.asm => TestAndClearBit.nasm}
> > (63%)
> >
> > diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> > b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> > deleted file mode 100644
> > index 0372e83..0000000
> > --- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.S
> > +++ /dev/null
> > @@ -1,12 +0,0 @@
> > -# INT32
> > -# EFIAPI
> > -# TestAndClearBit (
> > -# IN INT32 Bit, // rcx
> > -# IN volatile VOID* Address // rdx
> > -# );
> > -ASM_GLOBAL ASM_PFX(TestAndClearBit)
> > -ASM_PFX(TestAndClearBit):
> > - lock
> > - btrl %ecx, (%rdx)
> > - sbbl %eax, %eax
> > - ret
> > diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> > b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> > similarity index 63%
> > rename from OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> > rename to OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> > index 3a25879..38ac549 100644
> > --- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.asm
> > +++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> > @@ -1,4 +1,5 @@
> > -.code
> > +DEFAULT REL
> > +SECTION .text
> >
> > ; INT32
> > ; EFIAPI
> > @@ -6,11 +7,10 @@
> > ; IN INT32 Bit, // rcx
> > ; IN volatile VOID* Address // rdx
> > ; );
> > -TestAndClearBit PROC
> > +global ASM_PFX(TestAndClearBit)
> > +ASM_PFX(TestAndClearBit):
> > lock
> > btr [rdx], ecx
> > sbb eax, eax
> > ret
> > -TestAndClearBit ENDP
> >
> > -END
> > diff --git a/OvmfPkg/XenBusDxe/XenBusDxe.inf
> > b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> > index 61f7568..4ce4743 100644
> > --- a/OvmfPkg/XenBusDxe/XenBusDxe.inf
> > +++ b/OvmfPkg/XenBusDxe/XenBusDxe.inf
> > @@ -56,8 +56,7 @@
> > [Sources.X64]
> > X64/hypercall.nasm
> > X64/InterlockedCompareExchange16.nasm
> > - X64/TestAndClearBit.S
> > - X64/TestAndClearBit.asm
> > + X64/TestAndClearBit.nasm
> >
> > [LibraryClasses]
> > UefiDriverEntryPoint
> >
>
> when building this, my nasm reports:
>
> Build/OvmfX64/DEBUG_GCC48/X64/OvmfPkg/XenBusDxe/XenBusDxe/OUTPUT/X64/TestAndClearBit.iii:12:
> warning: instruction is not lockable
>
> Looking at the "insns.dat" file in the "nasm" source code, I can see
>
> BTR mem,reg64 [mr: hle o64 0f b3 /r]
> X64,SM,LOCK
>
> So apparently the problem is that you don't pass the bit position in a 64-bit
> register (rcx); you pass it in a 32-bit register (ecx). I tried the following
> patch:
>
> diff --git a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> index 38ac549..ce49d7f 100644
> --- a/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> +++ b/OvmfPkg/XenBusDxe/X64/TestAndClearBit.nasm
> @@ -10,7 +10,7 @@ SECTION .text
> global ASM_PFX(TestAndClearBit)
> ASM_PFX(TestAndClearBit):
> lock
> - btr [rdx], ecx
> + btr [rdx], rcx
> sbb eax, eax
> ret
>
> But nasm emits the same warning. Any ideas?
Yes, put lock and btr on the same line ...
ASM_PFX(TestAndClearBit):
- lock
- btr [rdx], ecx
+ lock btr [rdx], ecx
sbb eax, eax
This small patch appear to work, no more warning from nasm.
> The warning is a bit strange though, because the disassembly confirms the BTR
> is locked:
>
> Disassembly of section .text:
>
> 0000000000000000 <TestAndClearBit>:
> 0: f0 48 0f b3 0a lock btr %rcx,(%rdx)
> 5: 19 c0 sbb %eax,%eax
> 7: c3 retq
>
> So maybe it's a nasm bug.
--
Anthony PERARD
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel