[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [UNIKRAFT PATCHv4 11/43] arch/arm64: Add processor optimization GCC flags for arm64



On 10.07.2018 14:28, Julien Grall wrote:
On 10/07/18 08:02, Wei Chen wrote:
Hi Julien,
Hi Wei,

-----Original Message-----
From: Julien Grall <julien.grall@xxxxxxx>
Sent: 2018年7月9日 18:26
To: Wei Chen <Wei.Chen@xxxxxxx>; minios-devel@xxxxxxxxxxxxxxxxxxxx;
simon.kuenzer@xxxxxxxxx
Cc: Kaly Xin <Kaly.Xin@xxxxxxx>; nd <nd@xxxxxxx>
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 11/43] arch/arm64: Add processor
optimization GCC flags for arm64

On 09/07/18 10:17, Wei Chen wrote:
Hi Julien,

Hi,

-----Original Message-----
From: Julien Grall <julien.grall@xxxxxxx>
Sent: 2018年7月8日 5:59
To: Wei Chen <Wei.Chen@xxxxxxx>; minios-devel@xxxxxxxxxxxxxxxxxxxx;
simon.kuenzer@xxxxxxxxx
Cc: Kaly Xin <Kaly.Xin@xxxxxxx>; nd <nd@xxxxxxx>
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 11/43] arch/arm64: Add
processor
optimization GCC flags for arm64

Hi Wei,

On 07/06/2018 10:03 AM, Wei Chen wrote:
We added serval arm64 CPU models in support list. In this patch,

s/serval/several/


Oh, thanks again!

Cheers,

we check the GCC version and add optimization GCC flags for
selected processor.

Current supported arm64 CPU models:
native, generic, cortex-a53, cortex-a57, cortex-a72, cortex-a73,
cortex-a55 and cortex-a75.

Signed-off-by: Wei Chen <Wei.Chen@xxxxxxx>
---
    arch/arm/arm64/Compiler.uk |  6 ++++++
    arch/arm/arm64/Makefile.uk | 43 ++++++++++++++++++++++++++++++++++++++
    2 files changed, 49 insertions(+)
    create mode 100644 arch/arm/arm64/Compiler.uk
    create mode 100644 arch/arm/arm64/Makefile.uk

diff --git a/arch/arm/arm64/Compiler.uk b/arch/arm/arm64/Compiler.uk
new file mode 100644
index 0000000..4572013
--- /dev/null
+++ b/arch/arm/arm64/Compiler.uk
@@ -0,0 +1,6 @@
+# set cross compile
+ifeq ($(CONFIG_CROSS_COMPILE),)
+ifneq ($(CONFIG_UK_ARCH),$(HOSTARCH))
+    CONFIG_CROSS_COMPILE := aarch64-linux-gnu-
+endif
+endif
diff --git a/arch/arm/arm64/Makefile.uk b/arch/arm/arm64/Makefile.uk
new file mode 100644
index 0000000..f6aeeac
--- /dev/null
+++ b/arch/arm/arm64/Makefile.uk
@@ -0,0 +1,43 @@
+ASFLAGS  += -D__ARM_64__
+CFLAGS   += -D__ARM_64__ -fms-extensions
+CXXFLAGS += -D__ARM_64__ -fms-extensions

I would rather avoid to define yet another macro and re-use __aarch64__
defined by the aarch64 compiler.

It does make sense. But I am not sure if we keep __ARM_64__ here can improve the compatibility for other libraries. Because for internal libraries we can
__aarch64__ uniformly. But for external libraries, we change them to
__aarch64__
Easily.

If other libraries are using __ARM_64__, then I would say go an fix your
libraries :). But I would expect most of them to use what's the compiler
provide.

Unfortunately, we did this mistake already with x86. It mainly came from code that we ported from Mini-OS (__X86_64__). Providing __ARM_64__ is now just being consistent with the status quo of Unikraft. On the other hand, the compiler provided macros (e.g., __aarch64__) are anyways there and should be best practice to use those. On the other hand, it does not hurt right now to keep __ARM_64__. I would say, if we want to get rid of this one, we should also get rid of the x86 ones but I would prefer this with another and independent patch series.



Do you know from which version the GCC started to support __aarch64__ macro
by default? Or if we don't use GCC, does other compiler like LLVM still
provide __aarch64__ macro?


For now, we support only GCC. So it is fine to focus on this one. There are even other places in the code (e.g., nolibc) that rely on GCC definitions and would need to get fixed to support different compilers - especially when the one is not GCC compatible.

I don't know which GCC version that started to support __aarch64__, but I am ready to be this was there since the beginning as there are counterpart for other architectures [1].

Note that, we have been using that macro on Xen since that arm64 port was added (5 years ago).

For other compiler, while this is a GNU C extension, this is also at least defined by Clang. I would not be surprised if other supports that too as some headers will require to have different behavior depending on the architecture.

Cheers,

[1] https://sourceforge.net/p/predef/wiki/Architectures/


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.