linux/arch/arm64/include/asm/fpsimd.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2012 ARM Ltd.
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public License
  14 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  15 */
  16#ifndef __ASM_FP_H
  17#define __ASM_FP_H
  18
  19#include <asm/ptrace.h>
  20
  21#ifndef __ASSEMBLY__
  22
  23/*
  24 * FP/SIMD storage area has:
  25 *  - FPSR and FPCR
  26 *  - 32 128-bit data registers
  27 *
  28 * Note that user_fpsimd forms a prefix of this structure, which is
  29 * relied upon in the ptrace FP/SIMD accessors.
  30 */
  31struct fpsimd_state {
  32        union {
  33                struct user_fpsimd_state user_fpsimd;
  34                struct {
  35                        __uint128_t vregs[32];
  36                        u32 fpsr;
  37                        u32 fpcr;
  38                };
  39        };
  40};
  41
  42#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
  43/* Masks for extracting the FPSR and FPCR from the FPSCR */
  44#define VFP_FPSCR_STAT_MASK     0xf800009f
  45#define VFP_FPSCR_CTRL_MASK     0x07f79f00
  46/*
  47 * The VFP state has 32x64-bit registers and a single 32-bit
  48 * control/status register.
  49 */
  50#define VFP_STATE_SIZE          ((32 * 8) + 4)
  51#endif
  52
  53struct task_struct;
  54
  55extern void fpsimd_save_state(struct fpsimd_state *state);
  56extern void fpsimd_load_state(struct fpsimd_state *state);
  57
  58extern void fpsimd_thread_switch(struct task_struct *next);
  59extern void fpsimd_flush_thread(void);
  60
  61#endif
  62
  63#endif
  64