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 49#define FP_HARD_SIZE 35 50 51struct fp_hard_struct { 52 unsigned int save[FP_HARD_SIZE]; /* as yet undefined */ 53}; 54 55#define FP_SOFT_SIZE 35 56 57struct fp_soft_struct { 58 unsigned int save[FP_SOFT_SIZE]; /* undefined information */ 59}; 60 61#define IWMMXT_SIZE 0x98 62 63struct iwmmxt_struct { 64 unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)]; 65}; 66 67union fp_state { 68 struct fp_hard_struct hard; 69 struct fp_soft_struct soft; 70#ifdef CONFIG_IWMMXT 71 struct iwmmxt_struct iwmmxt; 72#endif 73}; 74 75#define FP_SIZE (sizeof(union fp_state) / sizeof(int)) 76 77#endif 78 79#endif 80