2009-07-24 12:32:53 +01:00
/*
* include / asm - arm / unified . h - Unified Assembler Syntax helper macros
*
* Copyright ( C ) 2008 ARM Limited
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# ifndef __ASM_UNIFIED_H
# define __ASM_UNIFIED_H
# if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
. syntax unified
# endif
# ifdef CONFIG_THUMB2_KERNEL
# if __GNUC__ < 4
# error Thumb-2 kernel requires gcc >= 4
# endif
/* The CPSR bit describing the instruction set (Thumb) */
# define PSR_ISETSTATE PSR_T_BIT
# define ARM(x...)
# define THUMB(x...) x
2009-09-18 15:09:33 +01:00
# ifdef __ASSEMBLY__
2009-07-24 12:32:53 +01:00
# define W(instr) instr.w
# define BSYM(sym) sym + 1
2013-07-02 12:10:42 +01:00
# else
# define WASM(instr) #instr ".w"
2012-01-09 15:43:20 -06:00
# endif
2009-07-24 12:32:53 +01:00
# else /* !CONFIG_THUMB2_KERNEL */
/* The CPSR bit describing the instruction set (ARM) */
# define PSR_ISETSTATE 0
# define ARM(x...) x
# define THUMB(x...)
2009-09-18 15:09:33 +01:00
# ifdef __ASSEMBLY__
2009-07-24 12:32:53 +01:00
# define W(instr) instr
# define BSYM(sym) sym
2013-07-02 12:10:42 +01:00
# else
# define WASM(instr) #instr
2012-01-09 15:43:20 -06:00
# endif
2009-07-24 12:32:53 +01:00
# endif /* CONFIG_THUMB2_KERNEL */
# ifndef CONFIG_ARM_ASM_UNIFIED
/*
* If the unified assembly syntax isn ' t used ( in ARM mode ) , these
* macros expand to an empty string
*/
# ifdef __ASSEMBLY__
. macro it , cond
. endm
. macro itt , cond
. endm
. macro ite , cond
. endm
. macro ittt , cond
. endm
. macro itte , cond
. endm
. macro itet , cond
. endm
. macro itee , cond
. endm
. macro itttt , cond
. endm
. macro ittte , cond
. endm
. macro ittet , cond
. endm
. macro ittee , cond
. endm
. macro itett , cond
. endm
. macro itete , cond
. endm
. macro iteet , cond
. endm
. macro iteee , cond
. endm
# else /* !__ASSEMBLY__ */
__asm__ (
" .macro it, cond \n "
" .endm \n "
" .macro itt, cond \n "
" .endm \n "
" .macro ite, cond \n "
" .endm \n "
" .macro ittt, cond \n "
" .endm \n "
" .macro itte, cond \n "
" .endm \n "
" .macro itet, cond \n "
" .endm \n "
" .macro itee, cond \n "
" .endm \n "
" .macro itttt, cond \n "
" .endm \n "
" .macro ittte, cond \n "
" .endm \n "
" .macro ittet, cond \n "
" .endm \n "
" .macro ittee, cond \n "
" .endm \n "
" .macro itett, cond \n "
" .endm \n "
" .macro itete, cond \n "
" .endm \n "
" .macro iteet, cond \n "
" .endm \n "
" .macro iteee, cond \n "
" .endm \n " ) ;
# endif /* __ASSEMBLY__ */
# endif /* CONFIG_ARM_ASM_UNIFIED */
# endif /* !__ASM_UNIFIED_H */