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

[PATCH for-4.20] hvmloader: Use fastcall everywhere



HVMLoader is a single freestanding 32bit program with no external
dependencies.  Use the fastcall calling convetion (up to 3 parameters in
registers rather than on the stack) globally, which is more efficient because
of reducing the number of stack operations.

Some bloat-o-meter highligs are:

  add/remove: 0/0 grow/shrink: 3/118 up/down: 8/-3004 (-2996)
  Function                                     old     new   delta
  ...
  hvmloader_acpi_build_tables                 1125     961    -164
  acpi_build_tables                           1277    1081    -196
  pci_setup                                   4756    4516    -240
  construct_secondary_tables                  1689    1447    -242

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>

I was surprised to find that nowhere in the handover to other blobs do we pass
parameters on the stack, but then again the entry point of the new blobs
typically happen with no stack anyway so I suppose I shouldn't be surprised.
---
 tools/firmware/hvmloader/Makefile | 2 +-
 tools/firmware/hvmloader/smp.c    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/firmware/hvmloader/Makefile 
b/tools/firmware/hvmloader/Makefile
index 0e1dce26b342..05572f17f609 100644
--- a/tools/firmware/hvmloader/Makefile
+++ b/tools/firmware/hvmloader/Makefile
@@ -25,7 +25,7 @@ ld-option = $(shell if $(LD) -v $(1) >/dev/null 2>&1; then 
echo y; else echo n;
 # SMBIOS spec requires format mm/dd/yyyy
 SMBIOS_REL_DATE ?= $(shell date +%m/%d/%Y)
 
-CFLAGS += $(CFLAGS_xeninclude) -fno-pic
+CFLAGS += $(CFLAGS_xeninclude) -fno-pic -mregparm=3
 
 # We mustn't use tools-only public interfaces.
 CFLAGS += -D__XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__
diff --git a/tools/firmware/hvmloader/smp.c b/tools/firmware/hvmloader/smp.c
index 5d46eee1c5f4..1b940cefd071 100644
--- a/tools/firmware/hvmloader/smp.c
+++ b/tools/firmware/hvmloader/smp.c
@@ -31,7 +31,7 @@
 
 static int ap_callin;
 
-static void __attribute__((regparm(1))) cpu_setup(unsigned int cpu)
+static void cpu_setup(unsigned int cpu)
 {
     printf(" - CPU%d ... ", cpu);
     cacheattr_init();

base-commit: 57338346f29cea7b183403561bdc5f407163b846
prerequisite-patch-id: 212002cd69805ec19f556756d487638c7d348878
-- 
2.39.2




 


Rackspace

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