mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
256ec489f1
Use a new config option to enabel R1000_LLSC workaound and remove define from different war.h files. Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
40 lines
923 B
C
40 lines
923 B
C
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Macros for 32/64-bit neutral inline assembler
|
|
*/
|
|
|
|
#ifndef __ASM_LLSC_H
|
|
#define __ASM_LLSC_H
|
|
|
|
#include <asm/isa-rev.h>
|
|
|
|
#if _MIPS_SZLONG == 32
|
|
#define __LL "ll "
|
|
#define __SC "sc "
|
|
#define __INS "ins "
|
|
#define __EXT "ext "
|
|
#elif _MIPS_SZLONG == 64
|
|
#define __LL "lld "
|
|
#define __SC "scd "
|
|
#define __INS "dins "
|
|
#define __EXT "dext "
|
|
#endif
|
|
|
|
/*
|
|
* Using a branch-likely instruction to check the result of an sc instruction
|
|
* works around a bug present in R10000 CPUs prior to revision 3.0 that could
|
|
* cause ll-sc sequences to execute non-atomically.
|
|
*/
|
|
#ifdef CONFIG_WAR_R10000_LLSC
|
|
# define __SC_BEQZ "beqzl "
|
|
#elif MIPS_ISA_REV >= 6
|
|
# define __SC_BEQZ "beqzc "
|
|
#else
|
|
# define __SC_BEQZ "beqz "
|
|
#endif
|
|
|
|
#endif /* __ASM_LLSC_H */
|