Re: [ipxe-devel] [RFC] Why does ARM set -mcpu=cortex-a15

2018-03-29 Thread Mark Rutland
On Thu, Mar 29, 2018 at 03:08:17PM +0100, Michael Brown wrote:
> On 29/03/18 01:45, Heinrich Schuchardt wrote:
> > I have some questions concerning the compilation flags used by iPXE on ARM.
> > 
> > There are a lot of different ARM CPUs available. Why do we set
> > -mcpu=cortex-a15?
> 
> In all honesty, I don't remember.  My best guess is that the build options
> were copied from whatever the EDK2 toolchain happens to use. I'd have to dig
> out my notebooks to find out for sure.
> 
> > Couldn't we use something like
> > -march=armv7-a -mfpu=vfpv3-d16 -mfloat=hard
> > instead? This is what Debian requires for armhf.
> 
> Mark: would this be sensible for AArch32 UEFI?

Unfortunately, UEFI forbids FP/simd/vector usage for AArch32, so I don't
think it's safe to pass -mfpu=vfpv3-d16 or -mfloat=hard. In contrast,
UEFI permits FP and SIMD for AArch64.

Per the UEFI 2.7 spec [1], section 2.3.5.3, describing AArch32:

  Floating point, SIMD, vector operations and other instruction set
  extensions must not be used.

It's probably necessary to use -mgeneral-regs-only to ensure the
compiler doesn't implicitly use vectors/simd, and if FP is necessary,
softfloat must be used.

Using -march=armv7a sounds fine to me otherwise, assuming IPXE is not
expected to run on ARMv6 or earlier.

I've also just spotted that the spec also states:

  The EFI ARM platform binding defines register r9 as an additional
  callee-saved variable register.

... which probably requires some special GCC option.

Thanks,
Mark.

[1] 
http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_7_A%20Sept%206.pdf
___
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel


Re: [ipxe-devel] [RFC] Why does ARM set -mcpu=cortex-a15

2018-03-29 Thread Michael Brown

On 29/03/18 01:45, Heinrich Schuchardt wrote:

I have some questions concerning the compilation flags used by iPXE on ARM.

There are a lot of different ARM CPUs available. Why do we set
-mcpu=cortex-a15?


In all honesty, I don't remember.  My best guess is that the build 
options were copied from whatever the EDK2 toolchain happens to use. 
I'd have to dig out my notebooks to find out for sure.



Couldn't we use something like
-march=armv7-a -mfpu=vfpv3-d16 -mfloat=hard
instead? This is what Debian requires for armhf.


Mark: would this be sensible for AArch32 UEFI?

Thanks,

Michael
___
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel