This patch also reverses the order of registers when being pushed. We will
later utilise this.
Signed-off-by: Ralf Ramsauer <ralf.ramsa...@oth-regensburg.de>
---
hypervisor/arch/arm64/entry.S | 66 ++++++++++++++++++-----------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/hypervisor/arch/arm64/entry.S b/hypervisor/arch/arm64/entry.S
index d6280484..0aa8fed8 100644
--- a/hypervisor/arch/arm64/entry.S
+++ b/hypervisor/arch/arm64/entry.S
@@ -270,24 +270,25 @@ bootstrap_vectors:
.macro handle_vmexit exit_reason
.align 7
/* Fill the union registers. Should comply with NUM_USR_REGS */
- stp x29, x30, [sp, #-16]!
- stp x27, x28, [sp, #-16]!
- stp x25, x26, [sp, #-16]!
- stp x23, x24, [sp, #-16]!
- stp x21, x22, [sp, #-16]!
- stp x19, x20, [sp, #-16]!
- stp x17, x18, [sp, #-16]!
- stp x15, x16, [sp, #-16]!
- stp x13, x14, [sp, #-16]!
- stp x11, x12, [sp, #-16]!
- stp x9, x10, [sp, #-16]!
- stp x7, x8, [sp, #-16]!
- stp x5, x6, [sp, #-16]!
- stp x3, x4, [sp, #-16]!
- stp x1, x2, [sp, #-16]!
+ sub sp, sp, #(16 * 16)
+ stp x1, x2, [sp, #(1 * 16)]
+ stp x3, x4, [sp, #(2 * 16)]
+ stp x5, x6, [sp, #(3 * 16)]
+ stp x7, x8, [sp, #(4 * 16)]
+ stp x9, x10, [sp, #(5 * 16)]
+ stp x11, x12, [sp, #(6 * 16)]
+ stp x13, x14, [sp, #(7 * 16)]
+ stp x15, x16, [sp, #(8 * 16)]
+ stp x17, x18, [sp, #(9 * 16)]
+ stp x19, x20, [sp, #(10 * 16)]
+ stp x21, x22, [sp, #(11 * 16)]
+ stp x23, x24, [sp, #(12 * 16)]
+ stp x25, x26, [sp, #(13 * 16)]
+ stp x27, x28, [sp, #(14 * 16)]
+ stp x29, x30, [sp, #(15 * 16)]
mov x1, #\exit_reason
- stp x1, x0, [sp, #-16]!
+ stp x1, x0, [sp, #(0 * 16)]
mov x29, xzr /* reset fp,lr */
mov x30, xzr
@@ -391,21 +392,22 @@ shutdown_el2:
vmreturn:
/* x0: union registers* */
mov sp, x0
- ldp x1, x0, [sp], #16 /* x1 is the exit_reason */
- ldp x1, x2, [sp], #16
- ldp x3, x4, [sp], #16
- ldp x5, x6, [sp], #16
- ldp x7, x8, [sp], #16
- ldp x9, x10, [sp], #16
- ldp x11, x12, [sp], #16
- ldp x13, x14, [sp], #16
- ldp x15, x16, [sp], #16
- ldp x17, x18, [sp], #16
- ldp x19, x20, [sp], #16
- ldp x21, x22, [sp], #16
- ldp x23, x24, [sp], #16
- ldp x25, x26, [sp], #16
- ldp x27, x28, [sp], #16
- ldp x29, x30, [sp], #16
+ ldp x29, x30, [sp, #(15 * 16)]
+ ldp x27, x28, [sp, #(14 * 16)]
+ ldp x25, x26, [sp, #(13 * 16)]
+ ldp x23, x24, [sp, #(12 * 16)]
+ ldp x21, x22, [sp, #(11 * 16)]
+ ldp x19, x20, [sp, #(10 * 16)]
+ ldp x17, x18, [sp, #(9 * 16)]
+ ldp x15, x16, [sp, #(8 * 16)]
+ ldp x13, x14, [sp, #(7 * 16)]
+ ldp x11, x12, [sp, #(6 * 16)]
+ ldp x9, x10, [sp, #(5 * 16)]
+ ldp x7, x8, [sp, #(4 * 16)]
+ ldp x5, x6, [sp, #(3 * 16)]
+ ldp x3, x4, [sp, #(2 * 16)]
+ ldp x1, x0, [sp, #(0 * 16)] /* x1 is the exit_reason */