root/arch/arm/include/asm/fpstate.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  23 struct 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 
  45 union vfp_state {
  46         struct vfp_hard_struct  hard;
  47 };
  48 
  49 extern void vfp_flush_thread(union vfp_state *);
  50 extern void vfp_release_thread(union vfp_state *);
  51 
  52 #define FP_HARD_SIZE 35
  53 
  54 struct fp_hard_struct {
  55         unsigned int save[FP_HARD_SIZE];                /* as yet undefined */
  56 };
  57 
  58 #define FP_SOFT_SIZE 35
  59 
  60 struct fp_soft_struct {
  61         unsigned int save[FP_SOFT_SIZE];                /* undefined information */
  62 };
  63 
  64 #define IWMMXT_SIZE     0x98
  65 
  66 struct iwmmxt_struct {
  67         unsigned int save[IWMMXT_SIZE / sizeof(unsigned int)];
  68 };
  69 
  70 union 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 struct crunch_state {
  81         unsigned int    mvdx[16][2];
  82         unsigned int    mvax[4][3];
  83         unsigned int    dspsc[2];
  84 };
  85 
  86 #define CRUNCH_SIZE     sizeof(struct crunch_state)
  87 
  88 #endif
  89 
  90 #endif

/* [<][>][^][v][top][bottom][index][help] */