162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2020 Synopsys, Inc. (www.synopsys.com) 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _ASM_ARC_FPU_H 862306a36Sopenharmony_ci#define _ASM_ARC_FPU_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifdef CONFIG_ARC_FPU_SAVE_RESTORE 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <asm/ptrace.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifdef CONFIG_ISA_ARCOMPACT 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci/* These DPFP regs need to be saved/restored across ctx-sw */ 1762306a36Sopenharmony_cistruct arc_fpu { 1862306a36Sopenharmony_ci struct { 1962306a36Sopenharmony_ci unsigned int l, h; 2062306a36Sopenharmony_ci } aux_dpfp[2]; 2162306a36Sopenharmony_ci}; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define fpu_init_task(regs) 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#else 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* 2862306a36Sopenharmony_ci * ARCv2 FPU Control aux register 2962306a36Sopenharmony_ci * - bits to enable Traps on Exceptions 3062306a36Sopenharmony_ci * - Rounding mode 3162306a36Sopenharmony_ci * 3262306a36Sopenharmony_ci * ARCv2 FPU Status aux register 3362306a36Sopenharmony_ci * - FPU exceptions flags (Inv, Div-by-Zero, overflow, underflow, inexact) 3462306a36Sopenharmony_ci * - Flag Write Enable to clear flags explicitly (vs. by fpu instructions 3562306a36Sopenharmony_ci * only 3662306a36Sopenharmony_ci */ 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct arc_fpu { 3962306a36Sopenharmony_ci unsigned int ctrl, status; 4062306a36Sopenharmony_ci}; 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciextern void fpu_init_task(struct pt_regs *regs); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#endif /* !CONFIG_ISA_ARCOMPACT */ 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistruct task_struct; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciextern void fpu_save_restore(struct task_struct *p, struct task_struct *n); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#else /* !CONFIG_ARC_FPU_SAVE_RESTORE */ 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define fpu_save_restore(p, n) 5362306a36Sopenharmony_ci#define fpu_init_task(regs) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci#endif /* CONFIG_ARC_FPU_SAVE_RESTORE */ 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#endif /* _ASM_ARC_FPU_H */ 58