391 lines
10 KiB
C
391 lines
10 KiB
C
|
// ******************************
|
||
|
// Intel Confidential
|
||
|
// ******************************
|
||
|
|
||
|
#ifndef _EM_INSTR_H
|
||
|
#define _EM_INSTR_H
|
||
|
|
||
|
#include "fepublic.h"
|
||
|
|
||
|
static EM_fp_reg_type
|
||
|
fp_ieee_recip(
|
||
|
EM_fp_reg_type den);
|
||
|
|
||
|
static EM_fp_reg_type
|
||
|
fp_ieee_recip_sqrt(
|
||
|
EM_fp_reg_type root);
|
||
|
|
||
|
// ********************************
|
||
|
// Instruction Pages Prototypes
|
||
|
// ********************************
|
||
|
|
||
|
// Floating-point Multiply Add
|
||
|
static INLINE void
|
||
|
_fma(EM_state_type *ps,
|
||
|
EM_opcode_pc_type pc,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
// Floating-point Parallel Multiply Add
|
||
|
static INLINE void
|
||
|
_fpma(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
// Floating-point Multiply Subtract
|
||
|
static INLINE void
|
||
|
_fms(EM_state_type *ps,
|
||
|
EM_opcode_pc_type pc,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
// Floating-point Parallel Multiply Subtract
|
||
|
static INLINE void
|
||
|
_fpms(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
// Floating-point Negative Multiply Add
|
||
|
static INLINE void
|
||
|
_fnma(EM_state_type *ps,
|
||
|
EM_opcode_pc_type pc,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
|
||
|
// Floating-point Parallel Negative Multiply Add
|
||
|
static INLINE void
|
||
|
_fpnma(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f3,
|
||
|
EM_uint_t f4,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
|
||
|
// Floating-point Compare
|
||
|
static INLINE void
|
||
|
_fcmp(EM_state_type *ps,
|
||
|
EM_opcode_frel_type frel,
|
||
|
EM_opcode_ctype_type ctype,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t p1,
|
||
|
EM_uint_t p2,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Reciprocal Approximation
|
||
|
static INLINE void
|
||
|
_frcpa(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t p2,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Reciprocal Approximation
|
||
|
static INLINE void
|
||
|
_fprcpa(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t p2,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Reciprocal Square Root Approximation
|
||
|
static INLINE void
|
||
|
_frsqrta(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t p2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Reciprocal Square Root Approximation
|
||
|
static INLINE void
|
||
|
_fprsqrta(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t p2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Minimum
|
||
|
static INLINE void
|
||
|
_fmin(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
static INLINE void
|
||
|
_fmax(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Absolute Minimum
|
||
|
static INLINE void
|
||
|
_famin(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Absolute Maximum
|
||
|
static INLINE void
|
||
|
_famax(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Minimum
|
||
|
static INLINE void
|
||
|
_fpmin(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Minimum
|
||
|
static INLINE void
|
||
|
_fpmax(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
|
||
|
// Floating-point Parallel Absolute Minimum
|
||
|
static INLINE void
|
||
|
_fpamin(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Absolute Maximum
|
||
|
static INLINE void
|
||
|
_fpamax(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Floating-point Parallel Compare
|
||
|
static INLINE void
|
||
|
_fpcmp(EM_state_type *ps,
|
||
|
EM_opcode_frel_type frel,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2,
|
||
|
EM_uint_t f3);
|
||
|
|
||
|
// Convert Floating-point to Integer
|
||
|
static INLINE void
|
||
|
_fcvt_fx(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
// Parallel Convert Floating-point to Integer
|
||
|
static INLINE void
|
||
|
_fpcvt_fx(EM_state_type *ps,
|
||
|
EM_opcode_sf_type sf,
|
||
|
EM_uint_t qp,
|
||
|
EM_uint_t f1,
|
||
|
EM_uint_t f2);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#undef GETSTATE_F1
|
||
|
#undef PUTSTATE_F1
|
||
|
|
||
|
#undef GETSTATE_F4
|
||
|
#undef PUTSTATE_F4
|
||
|
|
||
|
#undef GETSTATE_F6
|
||
|
#undef PUTSTATE_F6
|
||
|
|
||
|
#undef GETSTATE_F7
|
||
|
#undef PUTSTATE_F7
|
||
|
|
||
|
#undef GETSTATE_F8
|
||
|
#undef PUTSTATE_F8
|
||
|
|
||
|
#undef GETSTATE_F10
|
||
|
#undef PUTSTATE_F10
|
||
|
|
||
|
#define GETSTATE_F1(qp,f1,f3,f4,f2) _GETSTATE_F1(ps, qp,f1,f3,f4,f2)
|
||
|
#define PUTSTATE_F1(f1) _PUTSTATE_F1(ps, f1)
|
||
|
|
||
|
#define GETSTATE_F4(qp,p1,p2,f2,f3) _GETSTATE_F4(ps, qp,p1,p2,f2,f3)
|
||
|
#define PUTSTATE_F4(p1,p2) _PUTSTATE_F4(ps, p1,p2)
|
||
|
|
||
|
#define GETSTATE_F6(qp,f1,p2,f2,f3) _GETSTATE_F6(ps,qp,f1,p2,f2,f3)
|
||
|
#define PUTSTATE_F6(f1,p2) _PUTSTATE_F6(ps,f1,p2)
|
||
|
|
||
|
#define GETSTATE_F7(qp,f1,p2,f3) _GETSTATE_F7(ps, qp,f1,p2,f3)
|
||
|
#define PUTSTATE_F7(f1,p2) _PUTSTATE_F7(ps, f1,p2)
|
||
|
|
||
|
#define GETSTATE_F8(qp,f1,f2,f3) _GETSTATE_F8(ps, qp,f1,f2,f3)
|
||
|
#define PUTSTATE_F8(f1) _PUTSTATE_F8(ps, f1)
|
||
|
|
||
|
#define GETSTATE_F10(qp,f1,f2) _GETSTATE_F10(ps, qp,f1,f2)
|
||
|
#define PUTSTATE_F10(f1) _PUTSTATE_F10(ps, f1)
|
||
|
|
||
|
/***********************************************************
|
||
|
undefs
|
||
|
************************************************************/
|
||
|
|
||
|
#undef fp_reg_disabled
|
||
|
#undef fp_reg_read_hi
|
||
|
#undef fp_reg_read_lo
|
||
|
#undef fp_ieee_rnd_to_int
|
||
|
#undef fp_ieee_rnd_to_int_sp
|
||
|
#undef fp_ieee_round_sp
|
||
|
#undef fp_ieee_round
|
||
|
|
||
|
#undef fminmax_exception_fault_check
|
||
|
#undef fpminmax_exception_fault_check
|
||
|
#undef fcmp_exception_fault_check
|
||
|
#undef fpcmp_exception_fault_check
|
||
|
|
||
|
#undef fcvt_exception_fault_check
|
||
|
#undef fpcvt_exception_fault_check
|
||
|
|
||
|
#undef fma_exception_fault_check
|
||
|
#undef fpma_exception_fault_check
|
||
|
#undef fms_fnma_exception_fault_check
|
||
|
#undef fpms_fpnma_exception_fault_check
|
||
|
|
||
|
#undef frcpa_exception_fault_check
|
||
|
#undef fprcpa_exception_fault_check
|
||
|
#undef frsqrta_exception_fault_check
|
||
|
#undef fprsqrta_exception_fault_check
|
||
|
|
||
|
#undef illegal_operation_fault
|
||
|
#undef fp_check_target_register
|
||
|
|
||
|
#undef fp_exception_fault
|
||
|
#undef fp_exception_trap
|
||
|
|
||
|
#undef disabled_fp_register_fault
|
||
|
|
||
|
#undef fp_update_fpsr
|
||
|
#undef fp_update_psr
|
||
|
|
||
|
/***********************************************************
|
||
|
redefinitions
|
||
|
************************************************************/
|
||
|
#define fp_reg_disabled(f1,f2,f3,f4) fp82_fp_reg_disabled(ps, f1,f2,f3,f4)
|
||
|
|
||
|
|
||
|
#define fp_reg_read_hi(f2) fp82_reg_read_hi(ps,f2)
|
||
|
#define fp_reg_read_lo(f3) fp82_reg_read_lo(ps,f3)
|
||
|
|
||
|
#define fp_ieee_rnd_to_int(arg1,arg2) \
|
||
|
fp82_fp_ieee_rnd_to_int(ps, arg1, arg2)
|
||
|
#define fp_ieee_rnd_to_int_sp(arg1,arg2, arg3) \
|
||
|
fp82_fp_ieee_rnd_to_int_sp(ps, arg1, arg2, arg3)
|
||
|
|
||
|
|
||
|
#define fp_ieee_round_sp(arg1, arg2, arg3) \
|
||
|
fp82_fp_ieee_round_sp(ps, arg1, arg2, arg3)
|
||
|
#define fp_ieee_round(arg1, arg2) \
|
||
|
fp82_fp_ieee_round(ps, arg1, arg2)
|
||
|
|
||
|
#define fminmax_exception_fault_check(arg1, arg2, arg3, arg4) \
|
||
|
fp82_fminmax_exception_fault_check(ps, arg1, arg2, arg3, arg4)
|
||
|
#define fpminmax_exception_fault_check(arg1, arg2, arg3, arg4) \
|
||
|
fp82_fpminmax_exception_fault_check(ps, arg1, arg2, arg3, arg4)
|
||
|
|
||
|
#define fcmp_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fcmp_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
#define fpcmp_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fpcmp_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
|
||
|
#define fcvt_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fcvt_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
#define fpcvt_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fpcvt_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
|
||
|
#define fma_exception_fault_check(arg1, arg2, arg3, arg4, arg5, arg6) \
|
||
|
fp82_fma_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5, arg6)
|
||
|
#define fpma_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fpma_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
|
||
|
#define fms_fnma_exception_fault_check(arg1, arg2, arg3, arg4, arg5, arg6) \
|
||
|
fp82_fms_fnma_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5, arg6)
|
||
|
|
||
|
#define fpms_fpnma_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fpms_fpnma_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
|
||
|
#define frcpa_exception_fault_check(arg1, arg2, arg3, arg4) \
|
||
|
fp82_frcpa_exception_fault_check(ps, arg1, arg2, arg3, arg4)
|
||
|
|
||
|
#define fprcpa_exception_fault_check(arg1, arg2, arg3, arg4, arg5) \
|
||
|
fp82_fprcpa_exception_fault_check(ps, arg1, arg2, arg3, arg4, arg5)
|
||
|
|
||
|
#define frsqrta_exception_fault_check(arg1, arg2, arg3) \
|
||
|
fp82_frsqrta_exception_fault_check(ps, arg1, arg2, arg3)
|
||
|
|
||
|
#define fprsqrta_exception_fault_check(arg1, arg2, arg3, arg4) \
|
||
|
fp82_fprsqrta_exception_fault_check(ps, arg1, arg2, arg3, arg4)
|
||
|
|
||
|
#define illegal_operation_fault( NON_RS) \
|
||
|
fp82_illegal_operation_fault(ps, NON_RS)
|
||
|
|
||
|
#define fp_check_target_register( reg_specifier) \
|
||
|
fp82_fp_check_target_register(ps, reg_specifier)
|
||
|
|
||
|
#define fp_exception_fault( tmp) \
|
||
|
fp82_fp_exception_fault(ps, tmp)
|
||
|
|
||
|
#define fp_exception_trap( tmp) \
|
||
|
fp82_fp_exception_trap(ps, tmp)
|
||
|
|
||
|
#define disabled_fp_register_fault(isr_code, itype) \
|
||
|
fp82_disabled_fp_register_fault(ps, isr_code, itype)
|
||
|
|
||
|
#define fp_update_fpsr(sf, tmp_env) fp82_fp_update_fpsr(ps,sf, tmp_env)
|
||
|
#define fp_update_psr(dest_freg) fp82_fp_update_psr(ps,dest_freg)
|
||
|
|
||
|
|