1d8834a13SMatthias Weisser /* 2d8834a13SMatthias Weisser * arch/arm/include/asm/assembler.h 3d8834a13SMatthias Weisser * 4d8834a13SMatthias Weisser * Copyright (C) 1996-2000 Russell King 5d8834a13SMatthias Weisser * 6d8834a13SMatthias Weisser * This program is free software; you can redistribute it and/or modify 7d8834a13SMatthias Weisser * it under the terms of the GNU General Public License version 2 as 8d8834a13SMatthias Weisser * published by the Free Software Foundation. 9d8834a13SMatthias Weisser * 10d8834a13SMatthias Weisser * This file contains arm architecture specific defines 11d8834a13SMatthias Weisser * for the different processors. 12d8834a13SMatthias Weisser * 13d8834a13SMatthias Weisser * Do not include any C declarations in this file - it is included by 14d8834a13SMatthias Weisser * assembler source. 15d8834a13SMatthias Weisser */ 16d8834a13SMatthias Weisser 1775d7a0d7SStefan Agner #include <config.h> 18c0db6f8dSMarek Vasut #include <asm/unified.h> 1975d7a0d7SStefan Agner 20d8834a13SMatthias Weisser /* 21d8834a13SMatthias Weisser * Endian independent macros for shifting bytes within registers. 22d8834a13SMatthias Weisser */ 23d8834a13SMatthias Weisser #ifndef __ARMEB__ 2475d7a0d7SStefan Agner #define lspull lsr 2575d7a0d7SStefan Agner #define lspush lsl 26d8834a13SMatthias Weisser #define get_byte_0 lsl #0 27d8834a13SMatthias Weisser #define get_byte_1 lsr #8 28d8834a13SMatthias Weisser #define get_byte_2 lsr #16 29d8834a13SMatthias Weisser #define get_byte_3 lsr #24 30d8834a13SMatthias Weisser #define put_byte_0 lsl #0 31d8834a13SMatthias Weisser #define put_byte_1 lsl #8 32d8834a13SMatthias Weisser #define put_byte_2 lsl #16 33d8834a13SMatthias Weisser #define put_byte_3 lsl #24 34d8834a13SMatthias Weisser #else 3575d7a0d7SStefan Agner #define lspull lsl 3675d7a0d7SStefan Agner #define lspush lsr 37d8834a13SMatthias Weisser #define get_byte_0 lsr #24 38d8834a13SMatthias Weisser #define get_byte_1 lsr #16 39d8834a13SMatthias Weisser #define get_byte_2 lsr #8 40d8834a13SMatthias Weisser #define get_byte_3 lsl #0 41d8834a13SMatthias Weisser #define put_byte_0 lsl #24 42d8834a13SMatthias Weisser #define put_byte_1 lsl #16 43d8834a13SMatthias Weisser #define put_byte_2 lsl #8 44d8834a13SMatthias Weisser #define put_byte_3 lsl #0 45d8834a13SMatthias Weisser #endif 46d8834a13SMatthias Weisser 47d8834a13SMatthias Weisser /* 48d8834a13SMatthias Weisser * Data preload for architectures that support it 49d8834a13SMatthias Weisser */ 50d8834a13SMatthias Weisser #if defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || \ 51d8834a13SMatthias Weisser defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || \ 52d8834a13SMatthias Weisser defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || \ 53d8834a13SMatthias Weisser defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_7A__) || \ 54d8834a13SMatthias Weisser defined(__ARM_ARCH_7R__) 55d8834a13SMatthias Weisser #define PLD(code...) code 56d8834a13SMatthias Weisser #else 57d8834a13SMatthias Weisser #define PLD(code...) 58d8834a13SMatthias Weisser #endif 59d8834a13SMatthias Weisser 60431afb4eSTom Rini /* 61431afb4eSTom Rini * We only support cores that support at least Thumb-1 and thus we use 62431afb4eSTom Rini * 'bx lr' 63431afb4eSTom Rini */ 6475d7a0d7SStefan Agner .irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo 6575d7a0d7SStefan Agner .macro ret\c, reg 6675d7a0d7SStefan Agner .ifeqs "\reg", "lr" 6775d7a0d7SStefan Agner bx\c \reg 6875d7a0d7SStefan Agner .else 6975d7a0d7SStefan Agner mov\c pc, \reg 7075d7a0d7SStefan Agner .endif 7175d7a0d7SStefan Agner .endm 7275d7a0d7SStefan Agner .endr 7375d7a0d7SStefan Agner 74d8834a13SMatthias Weisser /* 7575d7a0d7SStefan Agner * Cache aligned, used for optimized memcpy/memset 7675d7a0d7SStefan Agner * In the kernel this is only enabled for Feroceon CPU's... 7775d7a0d7SStefan Agner * We disable it especially for Thumb builds since those instructions 7875d7a0d7SStefan Agner * are not made in a Thumb ready way... 79d8834a13SMatthias Weisser */ 80*3a649407STom Rini #if CONFIG_IS_ENABLED(SYS_THUMB_BUILD) 8175d7a0d7SStefan Agner #define CALGN(code...) 8275d7a0d7SStefan Agner #else 83d8834a13SMatthias Weisser #define CALGN(code...) code 8475d7a0d7SStefan Agner #endif 85