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> 18*c0db6f8dSMarek 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 6075d7a0d7SStefan Agner .irp c,,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo 6175d7a0d7SStefan Agner .macro ret\c, reg 6275d7a0d7SStefan Agner #if defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) 6375d7a0d7SStefan Agner mov\c pc, \reg 6475d7a0d7SStefan Agner #else 6575d7a0d7SStefan Agner .ifeqs "\reg", "lr" 6675d7a0d7SStefan Agner bx\c \reg 6775d7a0d7SStefan Agner .else 6875d7a0d7SStefan Agner mov\c pc, \reg 6975d7a0d7SStefan Agner .endif 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 */ 8075d7a0d7SStefan Agner #ifdef CONFIG_SYS_THUMB_BUILD 8175d7a0d7SStefan Agner #define CALGN(code...) 8275d7a0d7SStefan Agner #else 83d8834a13SMatthias Weisser #define CALGN(code...) code 8475d7a0d7SStefan Agner #endif 85