443 lines
10 KiB
C
443 lines
10 KiB
C
/******************************
|
|
Intel Confidential
|
|
******************************/
|
|
|
|
#ifndef _EM_PROTOTYPES_H
|
|
#define _EM_PROTOTYPES_H
|
|
|
|
#ifndef INLINE
|
|
#define INLINE
|
|
#endif
|
|
|
|
#if !(defined(BIG_ENDIAN) || defined(LITTLE_ENDIAN))
|
|
#error Endianness not established; define BIG_ENDIAN or LITTLE_ENDIAN
|
|
#endif
|
|
|
|
|
|
/**********************************************/
|
|
/* Assembler Supported Instruction Prototypes */
|
|
/**********************************************/
|
|
|
|
/* Floating-point Absolute Maximum */
|
|
void
|
|
fp82_famax(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
/* Floating-point Parallel Absolute Maximum */
|
|
|
|
void
|
|
fp82_fpamax(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
/* Floating-point Absolute Minimum */
|
|
void
|
|
fp82_famin(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Parallel Absolute Minimum */
|
|
|
|
void
|
|
fp82_fpamin(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Compare */
|
|
|
|
void
|
|
fp82_fcmp_eq(EM_state_type *ps,
|
|
EM_opcode_ctype_type ctype,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_pred_reg_specifier p1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fcmp_lt(EM_state_type *ps,
|
|
EM_opcode_ctype_type ctype,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_pred_reg_specifier p1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fcmp_le(EM_state_type *ps,
|
|
EM_opcode_ctype_type ctype,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_pred_reg_specifier p1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
void
|
|
fp82_fcmp_unord(EM_state_type *ps,
|
|
EM_opcode_ctype_type ctype,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_pred_reg_specifier p1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Paralel Compare */
|
|
|
|
void
|
|
fp82_fpcmp_eq(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_lt(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_le(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_unord(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_neq(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_nlt(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_nle(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
void
|
|
fp82_fpcmp_ord(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Convert Floating-point to Integer */
|
|
|
|
void
|
|
fp82_fcvt_fx(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fcvt_fx_trunc(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fcvt_fxu(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fcvt_fxu_trunc(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Parallel Convert Floating-point to Integer */
|
|
|
|
void
|
|
fp82_fpcvt_fx(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fpcvt_fx_trunc(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fpcvt_fxu(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
void
|
|
fp82_fpcvt_fxu_trunc(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
|
|
/* Floating-point Multiply Add */
|
|
|
|
void
|
|
fp82_fma(EM_state_type *ps,
|
|
EM_opcode_pc_type pc,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Floating Point Parallel Multiply Add */
|
|
void
|
|
fp82_fpma(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Floating-point Maximum */
|
|
void
|
|
fp82_fmax(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Parallel Maximum */
|
|
void
|
|
fp82_fpmax(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
/* Floating-point Minimum */
|
|
void
|
|
fp82_fmin(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Parallel Minimum */
|
|
void
|
|
fp82_fpmin(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Multiply Subtract */
|
|
void
|
|
fp82_fms(EM_state_type *ps,
|
|
EM_opcode_pc_type pc,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Floating-point Parallel Multiply Subtract */
|
|
void
|
|
fp82_fpms(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
|
|
/* Floating-point Negative Multiply Add */
|
|
void
|
|
fp82_fnma(EM_state_type *ps,
|
|
EM_opcode_pc_type pc,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Floating-point Parallel Negative Multiply Add */
|
|
|
|
void
|
|
fp82_fpnma(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_fp_reg_specifier f3,
|
|
EM_fp_reg_specifier f4,
|
|
EM_fp_reg_specifier f2);
|
|
|
|
|
|
/* Floating-point Reciprocal Approximation */
|
|
void
|
|
fp82_frcpa(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
/* Floating-point Parallel Reciprocal Approximation */
|
|
void
|
|
fp82_fprcpa(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
/* Floating-point Reciprocal Square Root Approximation */
|
|
void
|
|
fp82_frsqrta(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/* Floating-point Parallel Reciprocal Square Root Approximation */
|
|
void
|
|
fp82_fprsqrta(EM_state_type *ps,
|
|
EM_opcode_sf_type sf,
|
|
EM_pred_reg_specifier qp,
|
|
EM_fp_reg_specifier f1,
|
|
EM_pred_reg_specifier p2,
|
|
EM_fp_reg_specifier f3);
|
|
|
|
|
|
/******************************************************************************/
|
|
/* Define macros to simplify access to the fp82_ functions. This is done so */
|
|
/* the namespace doesn't get cluttered, while retaining convenient access. */
|
|
/* The FP82_NO_SHORTCUTS macro can be defined to prevent creation of these. */
|
|
/******************************************************************************/
|
|
|
|
#ifndef FP82_NO_SHORTCUTS
|
|
#define famax fp82_famax
|
|
#define fpamax fp82_fpamax
|
|
#define famin fp82_famin
|
|
#define fpamin fp82_fpamin
|
|
|
|
#define fcmp_eq fp82_fcmp_eq
|
|
#define fcmp_lt fp82_fcmp_lt
|
|
#define fcmp_le fp82_fcmp_le
|
|
#define fcmp_unord fp82_fcmp_unord
|
|
|
|
#define fpcmp_eq fp82_fpcmp_eq
|
|
#define fpcmp_lt fp82_fpcmp_lt
|
|
#define fpcmp_le fp82_fpcmp_le
|
|
#define fpcmp_unord fp82_fpcmp_unord
|
|
#define fpcmp_neq fp82_fpcmp_neq
|
|
#define fpcmp_nlt fp82_fpcmp_nlt
|
|
#define fpcmp_nle fp82_fpcmp_nle
|
|
#define fpcmp_ord fp82_fpcmp_ord
|
|
|
|
#define fcvt_fx fp82_fcvt_fx
|
|
#define fcvt_fx_trunc fp82_fcvt_fx_trunc
|
|
#define fcvt_fxu fp82_fcvt_fxu
|
|
#define fcvt_fxu_trunc fp82_fcvt_fxu_trunc
|
|
|
|
#define fpcvt_fxu_trunc fp82_fpcvt_fxu_trunc
|
|
#define fpcvt_fxu fp82_fpcvt_fxu
|
|
#define fpcvt_fx fp82_fpcvt_fx
|
|
#define fpcvt_fx_trunc fp82_fpcvt_fx_trunc
|
|
|
|
|
|
#define fma fp82_fma
|
|
#define fpma fp82_fpma
|
|
#define fmax fp82_fmax
|
|
#define fpmax fp82_fpmax
|
|
#define fmin fp82_fmin
|
|
#define fpmin fp82_fpmin
|
|
#define fms fp82_fms
|
|
#define fpms fp82_fpms
|
|
#define fnma fp82_fnma
|
|
#define fpnma fp82_fpnma
|
|
#define frcpa fp82_frcpa
|
|
#define fprcpa fp82_fprcpa
|
|
#define frsqrta fp82_frsqrta
|
|
#define fprsqrta fp82_fprsqrta
|
|
|
|
#endif /* FP82_NO_SHORTCUTS */
|
|
|
|
|
|
#endif /* _EM_PROTOTYPES_H */
|
|
|