Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2023, Arm Limited. All rights reserved. |
| 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | */ |
| 6 | |
| 7 | #ifndef FPU_H |
| 8 | #define FPU_H |
| 9 | |
| 10 | /* The FPU and SIMD register bank is 32 quadword (128 bits) Q registers. */ |
| 11 | #define FPU_Q_SIZE 16U |
| 12 | #define FPU_Q_COUNT 32U |
| 13 | |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 14 | #ifndef __ASSEMBLER__ |
| 15 | |
Shruti Gupta | 369955a | 2023-04-19 18:05:56 +0100 | [diff] [blame] | 16 | #include <stdbool.h> |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 17 | #include <stdint.h> |
| 18 | |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 19 | typedef uint8_t fpu_q_reg_t[FPU_Q_SIZE] __aligned(16); |
| 20 | typedef struct fpu_cs_regs { |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 21 | unsigned long fpcr; |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 22 | unsigned long fpsr; |
| 23 | } fpu_cs_regs_t __aligned(16); |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 24 | |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 25 | typedef struct fpu_state { |
| 26 | fpu_q_reg_t q_regs[FPU_Q_COUNT]; |
| 27 | fpu_cs_regs_t cs_regs; |
| 28 | } fpu_state_t __aligned(16); |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 29 | |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 30 | void fpu_cs_regs_write(const fpu_cs_regs_t *cs_regs); |
| 31 | void fpu_cs_regs_write_rand(fpu_cs_regs_t *cs_regs); |
| 32 | void fpu_cs_regs_read(fpu_cs_regs_t *cs_regs); |
| 33 | int fpu_cs_regs_compare(const fpu_cs_regs_t *s1, const fpu_cs_regs_t *s2); |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 34 | |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 35 | void fpu_q_regs_write_rand(fpu_q_reg_t q_regs[FPU_Q_COUNT]); |
| 36 | void fpu_q_regs_read(fpu_q_reg_t q_regs[FPU_Q_COUNT]); |
| 37 | int fpu_q_regs_compare(const fpu_q_reg_t s1[FPU_Q_COUNT], |
| 38 | const fpu_q_reg_t s2[FPU_Q_COUNT]); |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 39 | |
Arunachalam Ganapathy | 7e514f6 | 2023-08-30 13:27:36 +0100 | [diff] [blame] | 40 | void fpu_state_write_rand(fpu_state_t *fpu_state); |
| 41 | void fpu_state_read(fpu_state_t *fpu_state); |
| 42 | int fpu_state_compare(const fpu_state_t *s1, const fpu_state_t *s2); |
Shruti Gupta | 38133fa | 2023-04-19 17:00:38 +0100 | [diff] [blame] | 43 | |
| 44 | #endif /* __ASSEMBLER__ */ |
| 45 | #endif /* FPU_H */ |