Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.17-rc6 135 lines 5.0 kB view raw
1/* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 2014 Imagination Technologies Ltd. 7 * 8 */ 9 10#ifndef __ASM_ASM_EVA_H 11#define __ASM_ASM_EVA_H 12 13#ifndef __ASSEMBLY__ 14#ifdef CONFIG_EVA 15 16#define __BUILD_EVA_INSN(insn, reg, addr) \ 17 " .set push\n" \ 18 " .set mips0\n" \ 19 " .set eva\n" \ 20 " "insn" "reg", "addr "\n" \ 21 " .set pop\n" 22 23#define user_cache(op, base) __BUILD_EVA_INSN("cachee", op, base) 24#define user_ll(reg, addr) __BUILD_EVA_INSN("lle", reg, addr) 25#define user_sc(reg, addr) __BUILD_EVA_INSN("sce", reg, addr) 26#define user_lw(reg, addr) __BUILD_EVA_INSN("lwe", reg, addr) 27#define user_lwl(reg, addr) __BUILD_EVA_INSN("lwle", reg, addr) 28#define user_lwr(reg, addr) __BUILD_EVA_INSN("lwre", reg, addr) 29#define user_lh(reg, addr) __BUILD_EVA_INSN("lhe", reg, addr) 30#define user_lb(reg, addr) __BUILD_EVA_INSN("lbe", reg, addr) 31#define user_lbu(reg, addr) __BUILD_EVA_INSN("lbue", reg, addr) 32/* No 64-bit EVA instruction for loading double words */ 33#define user_ld(reg, addr) user_lw(reg, addr) 34#define user_sw(reg, addr) __BUILD_EVA_INSN("swe", reg, addr) 35#define user_swl(reg, addr) __BUILD_EVA_INSN("swle", reg, addr) 36#define user_swr(reg, addr) __BUILD_EVA_INSN("swre", reg, addr) 37#define user_sh(reg, addr) __BUILD_EVA_INSN("she", reg, addr) 38#define user_sb(reg, addr) __BUILD_EVA_INSN("sbe", reg, addr) 39/* No 64-bit EVA instruction for storing double words */ 40#define user_sd(reg, addr) user_sw(reg, addr) 41 42#else 43 44#define user_cache(op, base) "cache " op ", " base "\n" 45#define user_ll(reg, addr) "ll " reg ", " addr "\n" 46#define user_sc(reg, addr) "sc " reg ", " addr "\n" 47#define user_lw(reg, addr) "lw " reg ", " addr "\n" 48#define user_lwl(reg, addr) "lwl " reg ", " addr "\n" 49#define user_lwr(reg, addr) "lwr " reg ", " addr "\n" 50#define user_lh(reg, addr) "lh " reg ", " addr "\n" 51#define user_lb(reg, addr) "lb " reg ", " addr "\n" 52#define user_lbu(reg, addr) "lbu " reg ", " addr "\n" 53#define user_sw(reg, addr) "sw " reg ", " addr "\n" 54#define user_swl(reg, addr) "swl " reg ", " addr "\n" 55#define user_swr(reg, addr) "swr " reg ", " addr "\n" 56#define user_sh(reg, addr) "sh " reg ", " addr "\n" 57#define user_sb(reg, addr) "sb " reg ", " addr "\n" 58 59#ifdef CONFIG_32BIT 60/* 61 * No 'sd' or 'ld' instructions in 32-bit but the code will 62 * do the correct thing 63 */ 64#define user_sd(reg, addr) user_sw(reg, addr) 65#define user_ld(reg, addr) user_lw(reg, addr) 66#else 67#define user_sd(reg, addr) "sd " reg", " addr "\n" 68#define user_ld(reg, addr) "ld " reg", " addr "\n" 69#endif /* CONFIG_32BIT */ 70 71#endif /* CONFIG_EVA */ 72 73#else /* __ASSEMBLY__ */ 74 75#ifdef CONFIG_EVA 76 77#define __BUILD_EVA_INSN(insn, reg, addr) \ 78 .set push; \ 79 .set mips0; \ 80 .set eva; \ 81 insn reg, addr; \ 82 .set pop; 83 84#define user_cache(op, base) __BUILD_EVA_INSN(cachee, op, base) 85#define user_ll(reg, addr) __BUILD_EVA_INSN(lle, reg, addr) 86#define user_sc(reg, addr) __BUILD_EVA_INSN(sce, reg, addr) 87#define user_lw(reg, addr) __BUILD_EVA_INSN(lwe, reg, addr) 88#define user_lwl(reg, addr) __BUILD_EVA_INSN(lwle, reg, addr) 89#define user_lwr(reg, addr) __BUILD_EVA_INSN(lwre, reg, addr) 90#define user_lh(reg, addr) __BUILD_EVA_INSN(lhe, reg, addr) 91#define user_lb(reg, addr) __BUILD_EVA_INSN(lbe, reg, addr) 92#define user_lbu(reg, addr) __BUILD_EVA_INSN(lbue, reg, addr) 93/* No 64-bit EVA instruction for loading double words */ 94#define user_ld(reg, addr) user_lw(reg, addr) 95#define user_sw(reg, addr) __BUILD_EVA_INSN(swe, reg, addr) 96#define user_swl(reg, addr) __BUILD_EVA_INSN(swle, reg, addr) 97#define user_swr(reg, addr) __BUILD_EVA_INSN(swre, reg, addr) 98#define user_sh(reg, addr) __BUILD_EVA_INSN(she, reg, addr) 99#define user_sb(reg, addr) __BUILD_EVA_INSN(sbe, reg, addr) 100/* No 64-bit EVA instruction for loading double words */ 101#define user_sd(reg, addr) user_sw(reg, addr) 102#else 103 104#define user_cache(op, base) cache op, base 105#define user_ll(reg, addr) ll reg, addr 106#define user_sc(reg, addr) sc reg, addr 107#define user_lw(reg, addr) lw reg, addr 108#define user_lwl(reg, addr) lwl reg, addr 109#define user_lwr(reg, addr) lwr reg, addr 110#define user_lh(reg, addr) lh reg, addr 111#define user_lb(reg, addr) lb reg, addr 112#define user_lbu(reg, addr) lbu reg, addr 113#define user_sw(reg, addr) sw reg, addr 114#define user_swl(reg, addr) swl reg, addr 115#define user_swr(reg, addr) swr reg, addr 116#define user_sh(reg, addr) sh reg, addr 117#define user_sb(reg, addr) sb reg, addr 118 119#ifdef CONFIG_32BIT 120/* 121 * No 'sd' or 'ld' instructions in 32-bit but the code will 122 * do the correct thing 123 */ 124#define user_sd(reg, addr) user_sw(reg, addr) 125#define user_ld(reg, addr) user_lw(reg, addr) 126#else 127#define user_sd(reg, addr) sd reg, addr 128#define user_ld(reg, addr) ld reg, addr 129#endif /* CONFIG_32BIT */ 130 131#endif /* CONFIG_EVA */ 132 133#endif /* __ASSEMBLY__ */ 134 135#endif /* __ASM_ASM_EVA_H */