diff options
Diffstat (limited to 'arch/mips/include/asm/mipsregs.h')
| -rw-r--r-- | arch/mips/include/asm/mipsregs.h | 203 | 
1 files changed, 187 insertions, 16 deletions
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 12b70c25906..0da44d422f5 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h @@ -1166,7 +1166,10 @@ do {									\  	unsigned int __dspctl;						\  									\  	__asm__ __volatile__(						\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\  	"	rddsp	%0, %x1					\n"	\ +	"	.set pop					\n"	\  	: "=r" (__dspctl)						\  	: "i" (mask));							\  	__dspctl;							\ @@ -1175,30 +1178,198 @@ do {									\  #define wrdsp(val, mask)						\  do {									\  	__asm__ __volatile__(						\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\  	"	wrdsp	%0, %x1					\n"	\ +	"	.set pop					\n"	\  	:								\  	: "r" (val), "i" (mask));					\  } while (0) -#define mflo0() ({ long mflo0; __asm__("mflo %0, $ac0" : "=r" (mflo0)); mflo0;}) -#define mflo1() ({ long mflo1; __asm__("mflo %0, $ac1" : "=r" (mflo1)); mflo1;}) -#define mflo2() ({ long mflo2; __asm__("mflo %0, $ac2" : "=r" (mflo2)); mflo2;}) -#define mflo3() ({ long mflo3; __asm__("mflo %0, $ac3" : "=r" (mflo3)); mflo3;}) +#define mflo0()								\ +({									\ +	long mflo0;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mflo %0, $ac0					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mflo0)); 						\ +	mflo0;								\ +}) + +#define mflo1()								\ +({									\ +	long mflo1;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mflo %0, $ac1					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mflo1)); 						\ +	mflo1;								\ +}) + +#define mflo2()								\ +({									\ +	long mflo2;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mflo %0, $ac2					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mflo2)); 						\ +	mflo2;								\ +}) -#define mfhi0() ({ long mfhi0; __asm__("mfhi %0, $ac0" : "=r" (mfhi0)); mfhi0;}) -#define mfhi1() ({ long mfhi1; __asm__("mfhi %0, $ac1" : "=r" (mfhi1)); mfhi1;}) -#define mfhi2() ({ long mfhi2; __asm__("mfhi %0, $ac2" : "=r" (mfhi2)); mfhi2;}) -#define mfhi3() ({ long mfhi3; __asm__("mfhi %0, $ac3" : "=r" (mfhi3)); mfhi3;}) +#define mflo3()								\ +({									\ +	long mflo3;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mflo %0, $ac3					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mflo3)); 						\ +	mflo3;								\ +}) -#define mtlo0(x) __asm__("mtlo %0, $ac0" ::"r" (x)) -#define mtlo1(x) __asm__("mtlo %0, $ac1" ::"r" (x)) -#define mtlo2(x) __asm__("mtlo %0, $ac2" ::"r" (x)) -#define mtlo3(x) __asm__("mtlo %0, $ac3" ::"r" (x)) +#define mfhi0()								\ +({									\ +	long mfhi0;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mfhi %0, $ac0					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mfhi0)); 						\ +	mfhi0;								\ +}) -#define mthi0(x) __asm__("mthi %0, $ac0" ::"r" (x)) -#define mthi1(x) __asm__("mthi %0, $ac1" ::"r" (x)) -#define mthi2(x) __asm__("mthi %0, $ac2" ::"r" (x)) -#define mthi3(x) __asm__("mthi %0, $ac3" ::"r" (x)) +#define mfhi1()								\ +({									\ +	long mfhi1;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mfhi %0, $ac1					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mfhi1)); 						\ +	mfhi1;								\ +}) + +#define mfhi2()								\ +({									\ +	long mfhi2;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mfhi %0, $ac2					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mfhi2)); 						\ +	mfhi2;								\ +}) + +#define mfhi3()								\ +({									\ +	long mfhi3;							\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mfhi %0, $ac3					\n"	\ +	"	.set pop					\n" 	\ +	: "=r" (mfhi3)); 						\ +	mfhi3;								\ +}) + + +#define mtlo0(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mtlo %0, $ac0					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mtlo1(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mtlo %0, $ac1					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mtlo2(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mtlo %0, $ac2					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mtlo3(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mtlo %0, $ac3					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mthi0(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mthi %0, $ac0					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mthi1(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mthi %0, $ac1					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mthi2(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mthi %0, $ac2					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +}) + +#define mthi3(x)							\ +({									\ +	__asm__(							\ +	"	.set push					\n"	\ +	"	.set dsp					\n"	\ +	"	mthi %0, $ac3					\n"	\ +	"	.set pop					\n"	\ +	:								\ +	: "r" (x));							\ +})  #else  |