diff options
Diffstat (limited to 'arch/arm/include/asm/vfpmacros.h')
-rw-r--r-- | arch/arm/include/asm/vfpmacros.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h new file mode 100644 index 000000000000..422f3cc204a2 --- /dev/null +++ b/arch/arm/include/asm/vfpmacros.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * arch/arm/include/asm/vfpmacros.h | ||
3 | * | ||
4 | * Assembler-only file containing VFP macros and register definitions. | ||
5 | */ | ||
6 | #include "vfp.h" | ||
7 | |||
8 | @ Macros to allow building with old toolkits (with no VFP support) | ||
9 | .macro VFPFMRX, rd, sysreg, cond | ||
10 | MRC\cond p10, 7, \rd, \sysreg, cr0, 0 @ FMRX \rd, \sysreg | ||
11 | .endm | ||
12 | |||
13 | .macro VFPFMXR, sysreg, rd, cond | ||
14 | MCR\cond p10, 7, \rd, \sysreg, cr0, 0 @ FMXR \sysreg, \rd | ||
15 | .endm | ||
16 | |||
17 | @ read all the working registers back into the VFP | ||
18 | .macro VFPFLDMIA, base, tmp | ||
19 | #if __LINUX_ARM_ARCH__ < 6 | ||
20 | LDC p11, cr0, [\base],#33*4 @ FLDMIAX \base!, {d0-d15} | ||
21 | #else | ||
22 | LDC p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d0-d15} | ||
23 | #endif | ||
24 | #ifdef CONFIG_VFPv3 | ||
25 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | ||
26 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | ||
27 | cmp \tmp, #2 @ 32 x 64bit registers? | ||
28 | ldceql p11, cr0, [\base],#32*4 @ FLDMIAD \base!, {d16-d31} | ||
29 | addne \base, \base, #32*4 @ step over unused register space | ||
30 | #endif | ||
31 | .endm | ||
32 | |||
33 | @ write all the working registers out of the VFP | ||
34 | .macro VFPFSTMIA, base, tmp | ||
35 | #if __LINUX_ARM_ARCH__ < 6 | ||
36 | STC p11, cr0, [\base],#33*4 @ FSTMIAX \base!, {d0-d15} | ||
37 | #else | ||
38 | STC p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d0-d15} | ||
39 | #endif | ||
40 | #ifdef CONFIG_VFPv3 | ||
41 | VFPFMRX \tmp, MVFR0 @ Media and VFP Feature Register 0 | ||
42 | and \tmp, \tmp, #MVFR0_A_SIMD_MASK @ A_SIMD field | ||
43 | cmp \tmp, #2 @ 32 x 64bit registers? | ||
44 | stceql p11, cr0, [\base],#32*4 @ FSTMIAD \base!, {d16-d31} | ||
45 | addne \base, \base, #32*4 @ step over unused register space | ||
46 | #endif | ||
47 | .endm | ||