2005-04-17 02:20:36 +04:00
/*
* linux / include / asm - arm / vfpmacros . h
*
* Assembler - only file containing VFP macros and register definitions .
*/
# include "vfp.h"
@ Macros to allow building with old toolkits ( with no VFP support )
. macro VFPFMRX , rd , sysreg , cond
MRC \ cond p10 , 7 , \ rd , \ sysreg , cr0 , 0 @ FMRX \ rd , \ sysreg
. endm
. macro VFPFMXR , sysreg , rd , cond
MCR \ cond p10 , 7 , \ rd , \ sysreg , cr0 , 0 @ FMXR \ sysreg , \ rd
. endm
@ read all the working registers back into the VFP
2007-09-25 18:22:24 +04:00
. macro VFPFLDMIA , base , tmp
2006-04-11 00:32:42 +04:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-17 02:20:36 +04:00
LDC p11 , cr0 , [ \ base ] , # 33 * 4 @ FLDMIAX \ base ! , { d0 - d15 }
2006-04-11 00:32:42 +04:00
# else
LDC p11 , cr0 , [ \ base ] , # 32 * 4 @ FLDMIAD \ base ! , { d0 - d15 }
2007-09-25 18:22:24 +04:00
# endif
# ifdef CONFIG_VFPv3
VFPFMRX \ tmp , MVFR0 @ Media and VFP Feature Register 0
and \ tmp , \ tmp , # MVFR0_A_SIMD_MASK @ A_SIMD field
cmp \ tmp , # 2 @ 32 x 64 bit registers ?
ldceql p11 , cr0 , [ \ base ] , # 32 * 4 @ FLDMIAD \ base ! , { d16 - d31 }
addne \ base , \ base , # 32 * 4 @ step over unused register space
2006-04-11 00:32:42 +04:00
# endif
2005-04-17 02:20:36 +04:00
. endm
@ write all the working registers out of the VFP
2007-09-25 18:22:24 +04:00
. macro VFPFSTMIA , base , tmp
2006-04-11 00:32:42 +04:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-17 02:20:36 +04:00
STC p11 , cr0 , [ \ base ] , # 33 * 4 @ FSTMIAX \ base ! , { d0 - d15 }
2006-04-11 00:32:42 +04:00
# else
STC p11 , cr0 , [ \ base ] , # 32 * 4 @ FSTMIAD \ base ! , { d0 - d15 }
2007-09-25 18:22:24 +04:00
# endif
# ifdef CONFIG_VFPv3
VFPFMRX \ tmp , MVFR0 @ Media and VFP Feature Register 0
and \ tmp , \ tmp , # MVFR0_A_SIMD_MASK @ A_SIMD field
cmp \ tmp , # 2 @ 32 x 64 bit registers ?
stceql p11 , cr0 , [ \ base ] , # 32 * 4 @ FSTMIAD \ base ! , { d16 - d31 }
addne \ base , \ base , # 32 * 4 @ step over unused register space
2006-04-11 00:32:42 +04:00
# endif
2005-04-17 02:20:36 +04:00
. endm