From 30e887f84e70c16df5c421983f074d07a93b4e58 Mon Sep 17 00:00:00 2001 From: Yuriy Kolerov Date: Sun, 15 Sep 2024 14:39:01 +0300 Subject: [PATCH] A series of fixes for ARC port (#844) * arc: Fix warnings These warnings are fixed: 1. A series of "unused variables". 2. Implicit conversion from a pointer to uint32_t. Signed-off-by: Yuriy Kolerov * arc: Do not use mov_s and movl_s instructions mov_s and movl_s instructions use a restricted set of registers. However, a list of available registers for such instructions for one ARC target may not match a list for another ARC targets. For example, it is applicable to ARC700 and ARC HS3x/4x - build fails because mov_s formats may be incompatible in some cases. The easiest and the most straightforward way to fix this issue is to use mov and movl instead of mov_s and movl_s. Signed-off-by: Yuriy Kolerov --------- Signed-off-by: Yuriy Kolerov --- src/arc/arcompact.S | 4 ++-- src/arc/ffi.c | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/arc/arcompact.S b/src/arc/arcompact.S index 1d7f1a1..e749341 100644 --- a/src/arc/arcompact.S +++ b/src/arc/arcompact.S @@ -39,14 +39,14 @@ #define LARG ldl #define SARG stl #define ADDPTR addl -#define MOVPTR movl_s +#define MOVPTR movl #else #define PTRS 4 #define FLTS 4 #define LARG ld #define SARG st #define ADDPTR add -#define MOVPTR mov_s +#define MOVPTR mov #endif #define FRAME_LEN (8 * PTRS + 16) diff --git a/src/arc/ffi.c b/src/arc/ffi.c index d729274..0632319 100644 --- a/src/arc/ffi.c +++ b/src/arc/ffi.c @@ -192,9 +192,10 @@ static void unmarshal_atom(call_builder *cb, int type, void *data) { /* for arguments passed by reference returns the pointer, otherwise the arg is copied (up to MAXCOPYARG bytes) */ static void *unmarshal(call_builder *cb, ffi_type *type, int var, void *data) { size_t realign[2]; - void *pointer; #if defined(__ARC64_ARCH64__) + void *pointer; + if (type->size > 2 * __SIZEOF_POINTER__) { /* pass by reference */ unmarshal_atom(cb, FFI_TYPE_POINTER, (char*)&pointer); @@ -348,7 +349,10 @@ ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif, void *user_data, void *codeloc) { uint32_t *tramp = (uint32_t *) & (closure->tramp[0]); + +#if defined(__ARC64_ARCH64__) size_t address_ffi_closure = (size_t) ffi_closure_asm; +#endif switch (cif->abi) { @@ -367,7 +371,7 @@ ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif, FFI_ASSERT (tramp == codeloc); tramp[0] = CODE_ENDIAN (0x200a1fc0); /* mov r8, pcl */ tramp[1] = CODE_ENDIAN (0x20200f80); /* j [long imm] */ - tramp[2] = CODE_ENDIAN (ffi_closure_asm); + tramp[2] = CODE_ENDIAN ((uint32_t) ffi_closure_asm); break; #endif -- 2.34.1