Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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 */