diff mbox series

target/sparc: Use memcpy() in memcpy32()

Message ID 20241204204151.61221-1-philmd@linaro.org
State New
Headers show
Series target/sparc: Use memcpy() in memcpy32() | expand

Commit Message

Philippe Mathieu-Daudé Dec. 4, 2024, 8:41 p.m. UTC
Rather than manually copying each register, use
the libc memcpy(), which is well optimized.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
Worth renaming as reg8cpy()?
---
 target/sparc/win_helper.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

Comments

Pierrick Bouvier Dec. 4, 2024, 9:23 p.m. UTC | #1
On 12/4/24 12:41, Philippe Mathieu-Daudé wrote:
> Rather than manually copying each register, use
> the libc memcpy(), which is well optimized.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> Worth renaming as reg8cpy()?
> ---
>   target/sparc/win_helper.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
> 
> diff --git a/target/sparc/win_helper.c b/target/sparc/win_helper.c
> index b53fc9ce940..dab0ff00ccc 100644
> --- a/target/sparc/win_helper.c
> +++ b/target/sparc/win_helper.c
> @@ -26,14 +26,7 @@
>   
>   static inline void memcpy32(target_ulong *dst, const target_ulong *src)
>   {
> -    dst[0] = src[0];
> -    dst[1] = src[1];
> -    dst[2] = src[2];
> -    dst[3] = src[3];
> -    dst[4] = src[4];
> -    dst[5] = src[5];
> -    dst[6] = src[6];
> -    dst[7] = src[7];
> +    memcpy(dst, src, 8 * sizeof(target_ulong));
>   }
>   
>   void cpu_set_cwp(CPUSPARCState *env, int new_cwp)

Potentially we could go further and just remove the memcpy32 function.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Richard Henderson Dec. 5, 2024, 12:14 a.m. UTC | #2
On 12/4/24 14:41, Philippe Mathieu-Daudé wrote:
> Rather than manually copying each register, use
> the libc memcpy(), which is well optimized.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> Worth renaming as reg8cpy()?
> ---
>   target/sparc/win_helper.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
> 
> diff --git a/target/sparc/win_helper.c b/target/sparc/win_helper.c
> index b53fc9ce940..dab0ff00ccc 100644
> --- a/target/sparc/win_helper.c
> +++ b/target/sparc/win_helper.c
> @@ -26,14 +26,7 @@
>   
>   static inline void memcpy32(target_ulong *dst, const target_ulong *src)
>   {
> -    dst[0] = src[0];
> -    dst[1] = src[1];
> -    dst[2] = src[2];
> -    dst[3] = src[3];
> -    dst[4] = src[4];
> -    dst[5] = src[5];
> -    dst[6] = src[6];
> -    dst[7] = src[7];
> +    memcpy(dst, src, 8 * sizeof(target_ulong));
>   }
>   
>   void cpu_set_cwp(CPUSPARCState *env, int new_cwp)

Once upon a time, calling the libc function was slower.
That optimization is probably at least 10 years out of date.
I imagine this gets expanded inline as a vector copy these days.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

I'll agree with Pierrick that we can probably remove the function too.


r~
diff mbox series

Patch

diff --git a/target/sparc/win_helper.c b/target/sparc/win_helper.c
index b53fc9ce940..dab0ff00ccc 100644
--- a/target/sparc/win_helper.c
+++ b/target/sparc/win_helper.c
@@ -26,14 +26,7 @@ 
 
 static inline void memcpy32(target_ulong *dst, const target_ulong *src)
 {
-    dst[0] = src[0];
-    dst[1] = src[1];
-    dst[2] = src[2];
-    dst[3] = src[3];
-    dst[4] = src[4];
-    dst[5] = src[5];
-    dst[6] = src[6];
-    dst[7] = src[7];
+    memcpy(dst, src, 8 * sizeof(target_ulong));
 }
 
 void cpu_set_cwp(CPUSPARCState *env, int new_cwp)