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