1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2019  Arm Limited
4  * Original author: Dave Martin <Dave.Martin@arm.com>
5  */
6 
7 #ifndef COMPILER_H
8 #define COMPILER_H
9 
10 #define __always_unused __attribute__((__unused__))
11 #define __noreturn __attribute__((__noreturn__))
12 #define __unreachable() __builtin_unreachable()
13 
14 /* curse(e) has value e, but the compiler cannot assume so */
15 #define curse(e) ({				\
16 	__typeof__(e) __curse_e = (e);		\
17 	asm ("" : "+r" (__curse_e));		\
18 	__curse_e;				\
19 })
20 
21 #endif /* ! COMPILER_H */
22