mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-11 13:56:30 +00:00
c0db6f8d20
Import unified.h from Linux kernel 4.4.6 , commit 0d1912303e54ed1b2a371be0bba51c384dd57326 . This header file contains macros used in libgcc functions in Linux kernel on ARM and will be needed for the libgcc sync. Since unified.h defines the W(instr) macro, we must drop this from the macro from memcpy.S , otherwise this triggers a warning about symbol redefinition. In order to keep the changes to unified.h to the minimum, tweak arch/arm/lib/Makefile such that it defines the CONFIG_ARM_ASM_UNIFIED macro, which places .syntax unified into all of the assembler files. This is mandatory. Moreover, for Thumb2 build, define CONFIG_THUMB2_KERNEL macro if and only if Thumb2 build is enabled. This macro is checked by unified.h and toggles between ARM and Thumb2 variant of the instructions in the assembler source files. Finally, this patch defines __LINUX_ARM_ARCH__=N macro based on the new CONFIG_SYS_ARM_ARCH Kconfig option. This macro selects between more optimal and more dense codepaths which work on armv5 and newer and less optimal codepaths which work on armv4 and possible armv3m. Tegra2 needs the same special handling as it does in arch/arm/Makefile to cater for the arm720t boot core. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Simon Glass <sjg@chromium.org> Cc: Tom Rini <trini@konsulko.com> Reviewed-by: Tom Rini <trini@konsulko.com>
129 lines
2.2 KiB
C
129 lines
2.2 KiB
C
/*
|
|
* include/asm-arm/unified.h - Unified Assembler Syntax helper macros
|
|
*
|
|
* Copyright (C) 2008 ARM Limited
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0
|
|
*/
|
|
|
|
#ifndef __ASM_UNIFIED_H
|
|
#define __ASM_UNIFIED_H
|
|
|
|
#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
|
|
.syntax unified
|
|
#endif
|
|
|
|
#ifdef CONFIG_CPU_V7M
|
|
#define AR_CLASS(x...)
|
|
#define M_CLASS(x...) x
|
|
#else
|
|
#define AR_CLASS(x...) x
|
|
#define M_CLASS(x...)
|
|
#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
|
|
#ifdef __ASSEMBLY__
|
|
#define W(instr) instr.w
|
|
#else
|
|
#define WASM(instr) #instr ".w"
|
|
#endif
|
|
|
|
#else /* !CONFIG_THUMB2_KERNEL */
|
|
|
|
/* The CPSR bit describing the instruction set (ARM) */
|
|
#define PSR_ISETSTATE 0
|
|
|
|
#define ARM(x...) x
|
|
#define THUMB(x...)
|
|
#ifdef __ASSEMBLY__
|
|
#define W(instr) instr
|
|
#else
|
|
#define WASM(instr) #instr
|
|
#endif
|
|
|
|
#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 */
|