fpstate.h (1478B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * arch/arm/include/asm/fpstate.h 4 * 5 * Copyright (C) 1995 Russell King 6 */ 7 8#ifndef __ASM_ARM_FPSTATE_H 9#define __ASM_ARM_FPSTATE_H 10 11 12#ifndef __ASSEMBLY__ 13 14/* 15 * VFP storage area has: 16 * - FPEXC, FPSCR, FPINST and FPINST2. 17 * - 16 or 32 double precision data registers 18 * - an implementation-dependent word of state for FLDMX/FSTMX (pre-ARMv6) 19 * 20 * FPEXC will always be non-zero once the VFP has been used in this process. 21 */ 22 23struct vfp_hard_struct { 24#ifdef CONFIG_VFPv3 25 __u64 fpregs[32]; 26#else 27 __u64 fpregs[16]; 28#endif 29#if __LINUX_ARM_ARCH__ < 6 30 __u32 fpmx_state; 31#endif 32 __u32 fpexc; 33 __u32 fpscr; 34 /* 35 * VFP implementation specific state 36 */ 37 __u32 fpinst; 38 __u32 fpinst2; 39 40#ifdef CONFIG_SMP 41 __u32 cpu; 42#endif 43}; 44 45union vfp_state { 46 struct vfp_hard_struct hard; 47}; 48 49extern void vfp_flush_thread(union vfp_state *); 50extern void vfp_release_thread(union vfp_state *); 51 52#define FP_HARD_SIZE 35 53 54struct fp_hard_struct { 55 unsigned int save[FP_HARD_SIZE]; /* as yet undefined */ 56}; 57 58#define FP_SOFT_SIZE 35 59 60struct fp_soft_struct { 61 unsigned int save[FP_SOFT_SIZE]; /* undefined information */ 62}; 63 64#define IWMMXT_SIZE 0x98 65 66struct iwmmxt_struct { 67 unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)]; 68}; 69 70union fp_state { 71 struct fp_hard_struct hard; 72 struct fp_soft_struct soft; 73#ifdef CONFIG_IWMMXT 74 struct iwmmxt_struct iwmmxt; 75#endif 76}; 77 78#define FP_SIZE (sizeof(union fp_state) / sizeof(int)) 79 80#endif 81 82#endif