/*
 * Copyright (c) 2023, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef FPU_H
#define FPU_H

/* The FPU and SIMD register bank is 32 quadword (128 bits) Q registers. */
#define FPU_Q_SIZE		16U
#define FPU_Q_COUNT		32U

/* These defines are needed by assembly code to access FPU registers. */
#define FPU_OFFSET_Q		0U
#define FPU_OFFSET_FPSR		(FPU_Q_SIZE * FPU_Q_COUNT)
#define FPU_OFFSET_FPCR		(FPU_OFFSET_FPSR + 8)

#ifndef __ASSEMBLER__

#include <stdbool.h>
#include <stdint.h>

typedef struct fpu_reg_state {
	uint8_t q[FPU_Q_COUNT][FPU_Q_SIZE];
	unsigned long fpsr;
	unsigned long fpcr;
} fpu_reg_state_t __aligned(16);

/*
 * Read and compare FPU state registers with provided template values in parameters.
 */
bool fpu_state_compare_template(fpu_reg_state_t *fpu);

/*
 * Fill the template with random values and copy it to
 * FPU state registers(SIMD vectors, FPCR, FPSR).
 */
void fpu_state_fill_regs_and_template(fpu_reg_state_t *fpu);

/*
 * This function populates the provided FPU structure with the provided template
 * regs_val for all the 32 FPU/SMID registers, and the status registers FPCR/FPSR
 */
void fpu_state_set(fpu_reg_state_t *vec,
		uint8_t regs_val);

/*
 * This function prints the content of the provided FPU structure
 */
void fpu_state_print(fpu_reg_state_t *vec);

#endif /* __ASSEMBLER__ */
#endif /* FPU_H */
