1/* $NetBSD: vfpreg.h,v 1.17 2019/09/07 19:42:42 tnn Exp $ */ 2 3/* 4 * Copyright (c) 2008 ARM Ltd 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. The name of the company may not be used to endorse or promote 16 * products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 25 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef _ARM_VFPREG_H_ 33#define _ARM_VFPREG_H_ 34 35/* FPSID register */ 36 37#define VFP_FPSID_IMP_MSK 0xff000000 /* Implementer */ 38#define VFP_FPSID_IMP_ARM 0x41000000 /* Implementer: ARM */ 39#define VFP_FPSID_SW 0x00800000 /* VFP implemented in SW */ 40#define VFP_FPSID_FMT_MSK 0x00600000 /* FLDMX/FSTMX Format */ 41#define VFP_FPSID_FMT_1 0x00000000 /* Standard format 1 */ 42#define VFP_FPSID_FMT_2 0x00200000 /* Standard format 2 */ 43#define VFP_FPSID_FMT_WEIRD 0x00600000 /* Non-standard format */ 44#define VFP_FPSID_SP 0x00100000 /* Only single precision */ 45#define VFP_FPSID_ARCH_MSK 0x000f0000 /* Architecture */ 46#define VFP_FPSID_ARCH_V1 0x00000000 /* Arch VFPv1 */ 47#define VFP_FPSID_ARCH_V2 0x00010000 /* Arch VFPv2 */ 48#define VFP_FPSID_ARCH_V3_2 0x00020000 /* Arch VFPv3 (subarch v2) */ 49#define VFP_FPSID_ARCH_V3 0x00030000 /* Arch VFPv3 (no subarch) */ 50#define VFP_FPSID_ARCH_V3_3 0x00040000 /* Arch VFPv3 (subarch v3) */ 51#define VFP_FPSID_PART_MSK 0x0000ff00 /* Part number */ 52#define VFP_FPSID_PART_VFP10 0x00001000 /* VFP10 */ 53#define VFP_FPSID_PART_VFP11 0x00002000 /* VFP11 */ 54#define VFP_FPSID_PART_VFP30 0x00003000 /* VFP30 */ 55#define VFP_FPSID_VAR_MSK 0x000000f0 /* Variant */ 56#define VFP_FPSID_VAR_ARM10 0x000000a0 /* Variant ARM10 */ 57#define VFP_FPSID_VAR_ARM11 0x000000b0 /* Variant ARM11 */ 58#define VFP_FPSID_REV_MSK 0x0000000f /* Revision */ 59 60#define FPU_VFP10_ARM10E 0x410001a0 /* Really a VFPv2 part */ 61#define FPU_VFP11_ARM11 0x410120b0 62#define FPU_VFP_CORTEXA5 0x41023050 63#define FPU_VFP_CORTEXA7 0x41023070 64#define FPU_VFP_CORTEXA8 0x410330c0 65#define FPU_VFP_CORTEXA9 0x41033090 66#define FPU_VFP_CORTEXA12 0x410330d0 67#define FPU_VFP_CORTEXA15 0x410330f0 68#define FPU_VFP_CORTEXA15_QEMU 0x410430f0 69#define FPU_VFP_CORTEXA17 0x410330e0 70#define FPU_VFP_CORTEXA53 0x41034030 71#define FPU_VFP_CORTEXA57 0x41034070 72#define FPU_VFP_MV88SV58XX 0x56022090 73 74#define VFP_FPEXC_EX 0x80000000 /* EXception status bit */ 75#define VFP_FPEXC_EN 0x40000000 /* VFP Enable bit */ 76#define VFP_FPEXC_DEX 0x20000000 /* Defined sync EXception bit */ 77#define VFP_FPEXC_FP2V 0x10000000 /* FPinst2 instruction Valid */ 78#define VFP_FPEXC_VV 0x08000000 /* Vecitr Valid */ 79#define VFP_FPEXC_TFV 0x04000000 /* Trapped Fault Valid */ 80#define VFP_FPEXC_VECITR 0x00000700 /* VECtor ITeRation count */ 81#define VFP_FPEXC_IDF 0x00000080 /* Input Denormal flag */ 82#define VFP_FPEXC_IXF 0x00000010 /* Potential inexact flag */ 83#define VFP_FPEXC_UFF 0x00000008 /* Potential underflow flag */ 84#define VFP_FPEXC_OFF 0x00000004 /* Potential overflow flag */ 85#define VFP_FPEXC_DZF 0x00000002 /* Potential DivByZero flag */ 86#define VFP_FPEXC_IOF 0x00000001 /* Potential inv. op. flag */ 87#define VFP_FPEXC_FSUM 0x000000ff /* all flag bits */ 88 89#define VFP_FPSCR_N 0x80000000 /* set if compare <= result */ 90#define VFP_FPSCR_Z 0x40000000 /* set if compare = result */ 91#define VFP_FPSCR_C 0x20000000 /* set if compare (=,>=,UNORD) result */ 92#define VFP_FPSCR_V 0x10000000 /* set if compare UNORD result */ 93#define VFP_FPSCR_QC 0x08000000 /* Cumulative saturation (SIMD) */ 94#define VFP_FPSCR_AHP 0x04000000 /* Alternative Half-Precision */ 95#define VFP_FPSCR_DN 0x02000000 /* Default NaN mode */ 96#define VFP_FPSCR_FZ 0x01000000 /* Flush-to-zero mode */ 97#define VFP_FPSCR_RMODE 0x00c00000 /* Rounding Mode */ 98#define VFP_FPSCR_RZ 0x00c00000 /* round towards zero (RZ) */ 99#define VFP_FPSCR_RM 0x00800000 /* round towards +INF (RP) */ 100#define VFP_FPSCR_RP 0x00400000 /* round towards -INF (RM) */ 101#define VFP_FPSCR_RN 0x00000000 /* round to nearest (RN) */ 102#define VFP_FPSCR_STRIDE 0x00300000 /* Vector Stride */ 103#define VFP_FPSCR_LEN 0x00070000 /* Vector Length */ 104#define VFP_FPSCR_IDE 0x00008000 /* Inout Subnormal Exception Enable */ 105#define VFP_FPSCR_ESUM 0x00001f00 /* IXE|UFE|OFE|DZE|IOE */ 106#define VFP_FPSCR_IXE 0x00001000 /* Inexact Exception Enable */ 107#define VFP_FPSCR_UFE 0x00000800 /* Underflow Exception Enable */ 108#define VFP_FPSCR_OFE 0x00000400 /* Overflow Exception Enable */ 109#define VFP_FPSCR_DZE 0x00000200 /* DivByZero Exception Enable */ 110#define VFP_FPSCR_IOE 0x00000100 /* Invalid Operation Cumulative Flag */ 111#define VFP_FPSCR_IDC 0x00000080 /* Input Subnormal Cumlative Flag */ 112#define VFP_FPSCR_CSUM 0x0000001f /* IXC|UFC|OFC|DZC|IOC */ 113#define VFP_FPSCR_IXC 0x00000010 /* Inexact Cumulative Flag */ 114#define VFP_FPSCR_UFC 0x00000008 /* Underflow Cumulative Flag */ 115#define VFP_FPSCR_OFC 0x00000004 /* Overflow Cumulative Flag */ 116#define VFP_FPSCR_DZC 0x00000002 /* DivByZero Cumulative Flag */ 117#define VFP_FPSCR_IOC 0x00000001 /* Invalid Operation Cumulative Flag */ 118 119#endif /* _ARM_VFPREG_H_ */ 120