> But, I believe -- I could be wrong -- that for ARM/AARCH64 the assembly
> syntax has been uniquely determined anyway. (If this is not the case, I
> hope I'll be corrected.)

Unfortunately not. From ArmPlatformPkg/PrePi/Arm/ to ./Library/ArmLib -
there are always both asm and S files.

On Wed, Dec 2, 2015 at 7:34 PM, Laszlo Ersek <[email protected]> wrote:

> On 12/02/15 18:37, Michael Zimmermann wrote:
> > Does NASM support ARM and AARCH64? because according to Wikipedia it
> > doesn't.
>
> It doesn't.
>
> But, I believe -- I could be wrong -- that for ARM/AARCH64 the assembly
> syntax has been uniquely determined anyway. (If this is not the case, I
> hope I'll be corrected.)
>
> Thanks
> Laszlo
>
> >> Not sure why the Vlv2TbltDevicePkg needed to add that assembly code? I
> > would also point out that the inline assembly will optimize better as the
> > compiler will always call the .S function, but the optimizer can inline
> the
> > C function if needed.
> >
> > Are you sure assembly never get's inlined? I'd expect optimizers to work
> on
> > assembly/bytecode level and at least GCC's O3 function enables -finline.
> >
> > On Wed, Dec 2, 2015 at 6:32 PM, Andrew Fish <[email protected]> wrote:
> >
> >>
> >>> On Dec 2, 2015, at 8:44 AM, Michael Zimmermann <
> [email protected]>
> >> wrote:
> >>>
> >>> Hi,
> >>>
> >>> sorry if this is documented somewhere but I've always wondered what
> this
> >>> whole assembler file situation in EDKII is about.
> >>> What I mean is that there are two versions of every assembler file -
> for
> >> VS
> >>> and GCC compilers I guess.
> >>>
> >>> What I've noticed though is that most of these files are almost
> identical
> >>> except for minor differences like different export macros and comment
> >>> characters.
> >>>
> >>> I think (I hope I'm wrong) that there even are some projects where one
> >>> version of these files is outdated/not maintained.
> >>>
> >>> If I'm right and the differences really are that small, couldn't we
> just
> >>> write some kind of converter so we can remove all this duplicate code?
> >>>
> >>
> >> I think the longer term direction is to move to nasm. There are still
> some
> >> issues of nasm working with Xcode as the DWARF info does not get placed
> >> into the Mach-O files.
> >>
> >> The MdePkg Libraries are designed so that you don't need to write
> >> assembler. On an ARM based system you may also need some help from the
> >> ArmPkg. So the general answer don't write assembler. You can usually use
> >> the BaseLib to do what you need to do.
> >>
> >> On the x86 side there are a few exceptions:
> >> 1) Reset - You start in real mode with no stack
> >> 2) Interrupts - You need to save state.
> >> 3) Mode Switches - PEI is 32-bit (No place to store the page tables) and
> >> DXE is 64-bit
> >> 4) SMM - More strange mode switching
> >> 5) Optimization - Usually not needed (MdePkg has optimized CopyMem etc.)
> >>
> >> Now I would say an issue I've seen is that the Silicon folks like to
> >> "reinvent the wheel".
> >>> find . -iname '*.S'
> >> ...
> >>
> >>
> ./Vlv2TbltDevicePkg/FspSupport/Library/SecFspPlatformSecLibVlv2/Ia32/Stack.S
> >> ./Vlv2TbltDevicePkg/Library/CpuIA32Lib/IA32/CpuIA32.S
> >> ./Vlv2TbltDevicePkg/Library/CpuIA32Lib/X64/Cpu.S
> >>
> >> If you look at these files you will see that MdePkg has SwitchStack
> >> functions, and the CpuIA32Lib is the old EDK names for functions that
> exist
> >> in the MdePkg BaseLib. So this is an example of unneeded assembly code
> in
> >> the tree.
> >>
> >>
> >>
> #------------------------------------------------------------------------------
> >> #  UINT64
> >> #  EfiReadMsr (
> >> #    IN   UINT32  Index,  // rcx
> >> #    )
> >>
> >>
> #------------------------------------------------------------------------------
> >> ASM_PFX(EfiReadMsr):
> >>       rdmsr
> >>       shl    $0x20,%rdx
> >>       or     %rdx,%rax
> >>       retq
> >>
> >>
> >> Looks a lot like:
> >>
> >> UINT64
> >> EFIAPI
> >> AsmReadMsr64 (
> >>   IN      UINT32                    Index
> >>   )
> >> {
> >>   UINT32 LowData;
> >>   UINT32 HighData;
> >>
> >>   __asm__ __volatile__ (
> >>     "rdmsr"
> >>     : "=a" (LowData),   // %0
> >>       "=d" (HighData)   // %1
> >>     : "c"  (Index)      // %2
> >>     );
> >>
> >>   return (((UINT64)HighData) << 32) | LowData;
> >> }
> >>
> >> Not sure why the Vlv2TbltDevicePkg needed to add that assembly code? I
> >> would also point out that the inline assembly will optimize better as
> the
> >> compiler will always call the .S function, but the optimizer can inline
> the
> >> C function if needed.
> >>
> >> Thanks,
> >>
> >> Andrew Fish
> >>
> >>
> >>> Michael
> >>> _______________________________________________
> >>> edk2-devel mailing list
> >>> [email protected]
> >>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>
> >>
> > _______________________________________________
> > edk2-devel mailing list
> > [email protected]
> > https://lists.01.org/mailman/listinfo/edk2-devel
> >
>
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to