[FFmpeg-devel] checkasm/aarch64: fix tests returning a float

Submitted by Matthieu Bouron on June 19, 2017, 9:08 a.m.

Details

Message ID 20170619090839.15747-1-matthieu.bouron@gmail.com
State Superseded
Headers show

Commit Message

Matthieu Bouron June 19, 2017, 9:08 a.m.
Avoids overriding v0 (which containins the result of the tested
function) in checkasm_call_checked.

Also properly calls checkasm_call_checked.
---
 tests/checkasm/aarch64/checkasm.S | 8 ++++----
 tests/checkasm/checkasm.h         | 2 ++
 2 files changed, 6 insertions(+), 4 deletions(-)

Comments

Matthieu Bouron June 21, 2017, 7:46 p.m.
On Mon, Jun 19, 2017 at 11:08:39AM +0200, Matthieu Bouron wrote:
> Avoids overriding v0 (which containins the result of the tested
> function) in checkasm_call_checked.
> 
> Also properly calls checkasm_call_checked.
> ---
>  tests/checkasm/aarch64/checkasm.S | 8 ++++----
>  tests/checkasm/checkasm.h         | 2 ++
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/checkasm/aarch64/checkasm.S b/tests/checkasm/aarch64/checkasm.S
> index 53a2a478dc..75a9a56143 100644
> --- a/tests/checkasm/aarch64/checkasm.S
> +++ b/tests/checkasm/aarch64/checkasm.S
> @@ -112,10 +112,10 @@ function checkasm_checked_call, export=1
>      movi        v3.8h,  #0
>  
>  .macro check_reg_neon reg1, reg2
> -    ldr         q0,  [x9], #16
> -    uzp1        v1.2d,  v\reg1\().2d, v\reg2\().2d
> -    eor         v0.16b, v0.16b, v1.16b
> -    orr         v3.16b, v3.16b, v0.16b
> +    ldr         q1,  [x9], #16
> +    uzp1        v2.2d,  v\reg1\().2d, v\reg2\().2d
> +    eor         v1.16b, v1.16b, v2.16b
> +    orr         v3.16b, v3.16b, v1.16b
>  .endm
>      check_reg_neon  8,  9
>      check_reg_neon  10, 11
> diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
> index 695d871220..5249669fba 100644
> --- a/tests/checkasm/checkasm.h
> +++ b/tests/checkasm/checkasm.h
> @@ -145,6 +145,8 @@ void checkasm_stack_clobber(uint64_t clobber, ...);
>  void checkasm_checked_call(void *func, ...);
>  #define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
>                                = (void *)checkasm_checked_call;
> +#define declare_new_float(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
> +                              = (void *)checkasm_checked_call;
>  #define CLOB (UINT64_C(0xdeadbeefdeadbeef))
>  #define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
>                                                CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\
> -- 
> 2.13.1
> 

Ping.
James Almer June 21, 2017, 7:57 p.m.
On 6/19/2017 6:08 AM, Matthieu Bouron wrote:
> Avoids overriding v0 (which containins the result of the tested
> function) in checkasm_call_checked.
> 
> Also properly calls checkasm_call_checked.
> ---
>  tests/checkasm/aarch64/checkasm.S | 8 ++++----
>  tests/checkasm/checkasm.h         | 2 ++
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/checkasm/aarch64/checkasm.S b/tests/checkasm/aarch64/checkasm.S
> index 53a2a478dc..75a9a56143 100644
> --- a/tests/checkasm/aarch64/checkasm.S
> +++ b/tests/checkasm/aarch64/checkasm.S
> @@ -112,10 +112,10 @@ function checkasm_checked_call, export=1
>      movi        v3.8h,  #0
>  
>  .macro check_reg_neon reg1, reg2
> -    ldr         q0,  [x9], #16
> -    uzp1        v1.2d,  v\reg1\().2d, v\reg2\().2d
> -    eor         v0.16b, v0.16b, v1.16b
> -    orr         v3.16b, v3.16b, v0.16b
> +    ldr         q1,  [x9], #16
> +    uzp1        v2.2d,  v\reg1\().2d, v\reg2\().2d
> +    eor         v1.16b, v1.16b, v2.16b
> +    orr         v3.16b, v3.16b, v1.16b
>  .endm
>      check_reg_neon  8,  9
>      check_reg_neon  10, 11
> diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
> index 695d871220..5249669fba 100644
> --- a/tests/checkasm/checkasm.h
> +++ b/tests/checkasm/checkasm.h
> @@ -145,6 +145,8 @@ void checkasm_stack_clobber(uint64_t clobber, ...);
>  void checkasm_checked_call(void *func, ...);
>  #define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
>                                = (void *)checkasm_checked_call;
> +#define declare_new_float(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
> +                              = (void *)checkasm_checked_call;

Isn't this doing the same as the generic "#define declare_new_float"
about 15 lines below? If declare_new_float() is no different than
declare_new() for a given target, then just let the aforementioned check
handle it.

>  #define CLOB (UINT64_C(0xdeadbeefdeadbeef))
>  #define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
>                                                CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\
> 

Should be ok either way if tested (The only aarch64 FATE client using
git head hasn't run in twenty days, so no way for me to check if this
fixes the problem anyway).

Patch hide | download patch | download mbox

diff --git a/tests/checkasm/aarch64/checkasm.S b/tests/checkasm/aarch64/checkasm.S
index 53a2a478dc..75a9a56143 100644
--- a/tests/checkasm/aarch64/checkasm.S
+++ b/tests/checkasm/aarch64/checkasm.S
@@ -112,10 +112,10 @@  function checkasm_checked_call, export=1
     movi        v3.8h,  #0
 
 .macro check_reg_neon reg1, reg2
-    ldr         q0,  [x9], #16
-    uzp1        v1.2d,  v\reg1\().2d, v\reg2\().2d
-    eor         v0.16b, v0.16b, v1.16b
-    orr         v3.16b, v3.16b, v0.16b
+    ldr         q1,  [x9], #16
+    uzp1        v2.2d,  v\reg1\().2d, v\reg2\().2d
+    eor         v1.16b, v1.16b, v2.16b
+    orr         v3.16b, v3.16b, v1.16b
 .endm
     check_reg_neon  8,  9
     check_reg_neon  10, 11
diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
index 695d871220..5249669fba 100644
--- a/tests/checkasm/checkasm.h
+++ b/tests/checkasm/checkasm.h
@@ -145,6 +145,8 @@  void checkasm_stack_clobber(uint64_t clobber, ...);
 void checkasm_checked_call(void *func, ...);
 #define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
                               = (void *)checkasm_checked_call;
+#define declare_new_float(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
+                              = (void *)checkasm_checked_call;
 #define CLOB (UINT64_C(0xdeadbeefdeadbeef))
 #define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
                                               CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\