Does NASM support ARM and AARCH64? because according to Wikipedia it doesn't.
> 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 <af...@apple.com> wrote: > > > On Dec 2, 2015, at 8:44 AM, Michael Zimmermann <sigmaepsilo...@gmail.com> > 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 > > edk2-devel@lists.01.org > > https://lists.01.org/mailman/listinfo/edk2-devel > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel