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 <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
> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to