1/* Renesas SH (32bit) only */ 2 3#ifndef ARCH_SH_H 4#define ARCH_SH_H 5 6#define FIO_ARCH (arch_sh) 7 8#define nop __asm__ __volatile__ ("nop": : :"memory") 9 10#define mb() \ 11 do { \ 12 if (arch_flags & ARCH_FLAG_1) \ 13 __asm__ __volatile__ ("synco": : :"memory"); \ 14 else \ 15 __asm__ __volatile__ (" " : : : "memory"); \ 16 } while (0) 17 18#define read_barrier() mb() 19#define write_barrier() mb() 20 21#include <stdio.h> 22#include <elf.h> 23 24extern unsigned long arch_flags; 25 26#define CPU_HAS_LLSC 0x0040 27 28static inline int arch_init(char *envp[]) 29{ 30 Elf32_auxv_t *auxv; 31 32 while (*envp++ != NULL) 33 ; 34 35 for (auxv = (Elf32_auxv_t *) envp; auxv->a_type != AT_NULL; auxv++) { 36 if (auxv->a_type == AT_HWCAP) { 37 if (auxv->a_un.a_val & CPU_HAS_LLSC) { 38 arch_flags |= ARCH_FLAG_1; 39 break; 40 } 41 } 42 } 43 44 return 0; 45} 46 47#define ARCH_HAVE_INIT 48 49#endif 50