checkasm: arm/aarch64: Fix the amount of space reserved for stack parameters
authorMartin Storsjö <martin@martin.st>
Fri, 30 Sep 2016 08:49:47 +0000 (11:49 +0300)
committerMartin Storsjö <martin@martin.st>
Sun, 16 Oct 2016 20:26:15 +0000 (23:26 +0300)
Even if MAX_ARGS - 2 (for arm) or MAX_ARGS - 7 (for aarch64) parameters
are passed on the stack to checkasm_checked_call, we actually only
need to store MAX_ARGS - 4 (for arm) or MAX_ARGS - 8 (for aarch64)
parameters on the stack when calling the tested function.

Signed-off-by: Martin Storsjö <martin@martin.st>
tests/checkasm/aarch64/checkasm.S
tests/checkasm/arm/checkasm.S

index 9668518..39e8337 100644 (file)
@@ -52,7 +52,7 @@ endconst
 // max number of args used by any asm function.
 #define MAX_ARGS 15
 
-#define ARG_STACK ((8*(MAX_ARGS - 7) + 15) & ~15)
+#define ARG_STACK ((8*(MAX_ARGS - 8) + 15) & ~15)
 
 function checkasm_checked_call, export=1
     stp         x29, x30, [sp, #-16]!
@@ -81,7 +81,7 @@ function checkasm_checked_call, export=1
     sub         sp,  sp,  #ARG_STACK
 .equ pos, 0
 // the first stacked arg is copied to x7
-.rept MAX_ARGS-7
+.rept MAX_ARGS-8
     ldr         x9, [x29, #16 + 8 + pos]
     str         x9, [sp, #pos]
 .equ pos, pos + 8
index 098f22e..237252f 100644 (file)
@@ -50,7 +50,7 @@ endconst
 @ max number of args used by any asm function.
 #define MAX_ARGS 15
 
-#define ARG_STACK 4*(MAX_ARGS - 2)
+#define ARG_STACK 4*(MAX_ARGS - 4)
 
 @ align the used stack space to 8 to preserve the stack alignment
 #define ARG_STACK_A (((ARG_STACK + pushed + 7) & ~7) - pushed)
@@ -74,7 +74,7 @@ function checkasm_checked_call_\variant, export=1
 
     sub         sp,  sp,  #ARG_STACK_A
 .equ pos, 0
-.rept MAX_ARGS-2
+.rept MAX_ARGS-4
     ldr         r12, [sp, #ARG_STACK_A + pushed + 8 + pos]
     str         r12, [sp, #pos]
 .equ pos, pos + 4