--- a/sysdeps/arc/atomic-machine.h +++ b/sysdeps/arc/atomic-machine.h @@ -64,6 +64,10 @@ typedef uintmax_t uatomic_max_t; __atomic_val_bysize (__arch_compare_and_exchange_val, int, \ mem, new, old, __ATOMIC_ACQUIRE) +#ifdef __ARC700__ +#define atomic_full_barrier() ({ asm volatile ("sync":::"memory"); }) +#else #define atomic_full_barrier() ({ asm volatile ("dmb 3":::"memory"); }) +#endif #endif /* _ARC_BITS_ATOMIC_H */ --- a/sysdeps/unix/sysv/linux/arc/syscall.S +++ b/sysdeps/unix/sysv/linux/arc/syscall.S @@ -24,8 +24,13 @@ ENTRY (syscall) mov_s r1, r2 mov_s r2, r3 mov_s r3, r4 +#ifdef __ARC700__ + mov r4, r5 + mov r5, r6 +#else mov_s r4, r5 mov_s r5, r6 +#endif ARC_TRAP_INSN brhi r0, -4096, L (call_syscall_err) --- a/sysdeps/unix/sysv/linux/arc/sysdep.h +++ b/sysdeps/unix/sysv/linux/arc/sysdep.h @@ -128,7 +128,11 @@ L (call_syscall_err): ASM_LINE_SEP \ mov r8, __NR_##syscall_name ASM_LINE_SEP \ ARC_TRAP_INSN ASM_LINE_SEP +# ifdef __ARC700__ +# define ARC_TRAP_INSN trap0 +# else # define ARC_TRAP_INSN trap_s 0 +# endif #else /* !__ASSEMBLER__ */ @@ -139,7 +143,11 @@ extern long int __syscall_error (long in hidden_proto (__syscall_error) # endif +# ifdef __ARC700__ +# define ARC_TRAP_INSN "trap0 \n\t" +# else # define ARC_TRAP_INSN "trap_s 0 \n\t" +#endif # undef INTERNAL_SYSCALL_NCS # define INTERNAL_SYSCALL_NCS(number, nr_args, args...) \