/* Renesas SH (32bit) only */
#ifndef ARCH_SH_H
#define ARCH_SH_H
#define FIO_ARCH (arch_sh)
#ifndef __NR_ioprio_set
#define __NR_ioprio_set 288
#define __NR_ioprio_get 289
#endif
#ifndef __NR_fadvise64
#define __NR_fadvise64 250
#endif
#ifndef __NR_sys_splice
#define __NR_sys_splice 313
#define __NR_sys_tee 315
#define __NR_sys_vmsplice 316
#endif
#define nop __asm__ __volatile__ ("nop": : :"memory")
#define mb() \
do { \
if (arch_flags & ARCH_FLAG_1) \
__asm__ __volatile__ ("synco": : :"memory"); \
else \
__asm__ __volatile__ (" " : : : "memory"); \
} while (0)
#define read_barrier() mb()
#define write_barrier() mb()
#include <stdio.h>
#include <elf.h>
extern unsigned long arch_flags;
#define CPU_HAS_LLSC 0x0040
static inline int arch_init(char *envp[])
{
Elf32_auxv_t *auxv;
while (*envp++ != NULL)
;
for (auxv = (Elf32_auxv_t *) envp; auxv->a_type != AT_NULL; auxv++) {
if (auxv->a_type == AT_HWCAP) {
if (auxv->a_un.a_val & CPU_HAS_LLSC) {
arch_flags |= ARCH_FLAG_1;
break;
}
}
}
return 0;
}
#define ARCH_HAVE_INIT
#endif