2005-04-16 15:20:36 -07:00
/*
2008-08-02 10:55:55 +01:00
* arch / arm / include / asm / vfpmacros . h
2005-04-16 15:20:36 -07:00
*
* 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 15:22:24 +01:00
. macro VFPFLDMIA , base , tmp
2006-04-10 21:32:42 +01:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-16 15:20:36 -07:00
LDC p11 , cr0 , [ \ base ] , # 33 * 4 @ FLDMIAX \ base ! , { d0 - d15 }
2006-04-10 21:32:42 +01:00
# else
LDC p11 , cr0 , [ \ base ] , # 32 * 4 @ FLDMIAD \ base ! , { d0 - d15 }
2007-09-25 15:22:24 +01: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-10 21:32:42 +01:00
# endif
2005-04-16 15:20:36 -07:00
. endm
@ write all the working registers out of the VFP
2007-09-25 15:22:24 +01:00
. macro VFPFSTMIA , base , tmp
2006-04-10 21:32:42 +01:00
# if __LINUX_ARM_ARCH__ < 6
2005-04-16 15:20:36 -07:00
STC p11 , cr0 , [ \ base ] , # 33 * 4 @ FSTMIAX \ base ! , { d0 - d15 }
2006-04-10 21:32:42 +01:00
# else
STC p11 , cr0 , [ \ base ] , # 32 * 4 @ FSTMIAD \ base ! , { d0 - d15 }
2007-09-25 15:22:24 +01: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-10 21:32:42 +01:00
# endif
2005-04-16 15:20:36 -07:00
. endm