~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/include/asm/vfpmacros.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /*
  3  * arch/arm/include/asm/vfpmacros.h
  4  *
  5  * Assembler-only file containing VFP macros and register definitions.
  6  */
  7 #include <asm/hwcap.h>
  8 
  9 #include <asm/vfp.h>
 10 
 11 #ifdef CONFIG_AS_VFP_VMRS_FPINST
 12         .macro  VFPFMRX, rd, sysreg, cond
 13         vmrs\cond       \rd, \sysreg
 14         .endm
 15 
 16         .macro  VFPFMXR, sysreg, rd, cond
 17         vmsr\cond       \sysreg, \rd
 18         .endm
 19 #else
 20         @ Macros to allow building with old toolkits (with no VFP support)
 21         .macro  VFPFMRX, rd, sysreg, cond
 22         MRC\cond        p10, 7, \rd, \sysreg, cr0, 0    @ FMRX  \rd, \sysreg
 23         .endm
 24 
 25         .macro  VFPFMXR, sysreg, rd, cond
 26         MCR\cond        p10, 7, \rd, \sysreg, cr0, 0    @ FMXR  \sysreg, \rd
 27         .endm
 28 #endif
 29 
 30         @ read all the working registers back into the VFP
 31         .macro  VFPFLDMIA, base, tmp
 32         .fpu    vfpv2
 33 #if __LINUX_ARM_ARCH__ < 6
 34         fldmiax \base!, {d0-d15}
 35 #else
 36         vldmia  \base!, {d0-d15}
 37 #endif
 38 #ifdef CONFIG_VFPv3
 39         .fpu    vfpv3
 40 #if __LINUX_ARM_ARCH__ <= 6
 41         ldr     \tmp, =elf_hwcap                    @ may not have MVFR regs
 42         ldr     \tmp, [\tmp, #0]
 43         tst     \tmp, #HWCAP_VFPD32
 44         vldmiane \base!, {d16-d31}
 45         addeq   \base, \base, #32*4                 @ step over unused register space
 46 #else
 47         VFPFMRX \tmp, MVFR0                         @ Media and VFP Feature Register 0
 48         and     \tmp, \tmp, #MVFR0_A_SIMD_MASK      @ A_SIMD field
 49         cmp     \tmp, #2                            @ 32 x 64bit registers?
 50         vldmiaeq \base!, {d16-d31}
 51         addne   \base, \base, #32*4                 @ step over unused register space
 52 #endif
 53 #endif
 54         .endm
 55 
 56         @ write all the working registers out of the VFP
 57         .macro  VFPFSTMIA, base, tmp
 58 #if __LINUX_ARM_ARCH__ < 6
 59         fstmiax \base!, {d0-d15}
 60 #else
 61         vstmia  \base!, {d0-d15}
 62 #endif
 63 #ifdef CONFIG_VFPv3
 64         .fpu    vfpv3
 65 #if __LINUX_ARM_ARCH__ <= 6
 66         ldr     \tmp, =elf_hwcap                    @ may not have MVFR regs
 67         ldr     \tmp, [\tmp, #0]
 68         tst     \tmp, #HWCAP_VFPD32
 69         vstmiane \base!, {d16-d31}
 70         addeq   \base, \base, #32*4                 @ step over unused register space
 71 #else
 72         VFPFMRX \tmp, MVFR0                         @ Media and VFP Feature Register 0
 73         and     \tmp, \tmp, #MVFR0_A_SIMD_MASK      @ A_SIMD field
 74         cmp     \tmp, #2                            @ 32 x 64bit registers?
 75         vstmiaeq \base!, {d16-d31}
 76         addne   \base, \base, #32*4                 @ step over unused register space
 77 #endif
 78 #endif
 79         .endm
 80 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php