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