110 lines
2.5 KiB
C
110 lines
2.5 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/* Copyright (C) 2005-2018 Andes Technology Corporation */
|
||
|
|
||
|
#ifndef __NDS32_FPU_INST_H
|
||
|
#define __NDS32_FPU_INST_H
|
||
|
|
||
|
#define cop0_op 0x35
|
||
|
|
||
|
/*
|
||
|
* COP0 field of opcodes.
|
||
|
*/
|
||
|
#define fs1_op 0x0
|
||
|
#define fs2_op 0x4
|
||
|
#define fd1_op 0x8
|
||
|
#define fd2_op 0xc
|
||
|
|
||
|
/*
|
||
|
* FS1 opcode.
|
||
|
*/
|
||
|
enum fs1 {
|
||
|
fadds_op, fsubs_op, fcpynss_op, fcpyss_op,
|
||
|
fmadds_op, fmsubs_op, fcmovns_op, fcmovzs_op,
|
||
|
fnmadds_op, fnmsubs_op,
|
||
|
fmuls_op = 0xc, fdivs_op,
|
||
|
fs1_f2op_op = 0xf
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* FS1/F2OP opcode.
|
||
|
*/
|
||
|
enum fs1_f2 {
|
||
|
fs2d_op, fsqrts_op,
|
||
|
fui2s_op = 0x8, fsi2s_op = 0xc,
|
||
|
fs2ui_op = 0x10, fs2ui_z_op = 0x14,
|
||
|
fs2si_op = 0x18, fs2si_z_op = 0x1c
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* FS2 opcode.
|
||
|
*/
|
||
|
enum fs2 {
|
||
|
fcmpeqs_op, fcmpeqs_e_op, fcmplts_op, fcmplts_e_op,
|
||
|
fcmples_op, fcmples_e_op, fcmpuns_op, fcmpuns_e_op
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* FD1 opcode.
|
||
|
*/
|
||
|
enum fd1 {
|
||
|
faddd_op, fsubd_op, fcpynsd_op, fcpysd_op,
|
||
|
fmaddd_op, fmsubd_op, fcmovnd_op, fcmovzd_op,
|
||
|
fnmaddd_op, fnmsubd_op,
|
||
|
fmuld_op = 0xc, fdivd_op, fd1_f2op_op = 0xf
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* FD1/F2OP opcode.
|
||
|
*/
|
||
|
enum fd1_f2 {
|
||
|
fd2s_op, fsqrtd_op,
|
||
|
fui2d_op = 0x8, fsi2d_op = 0xc,
|
||
|
fd2ui_op = 0x10, fd2ui_z_op = 0x14,
|
||
|
fd2si_op = 0x18, fd2si_z_op = 0x1c
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* FD2 opcode.
|
||
|
*/
|
||
|
enum fd2 {
|
||
|
fcmpeqd_op, fcmpeqd_e_op, fcmpltd_op, fcmpltd_e_op,
|
||
|
fcmpled_op, fcmpled_e_op, fcmpund_op, fcmpund_e_op
|
||
|
};
|
||
|
|
||
|
#define NDS32Insn(x) x
|
||
|
|
||
|
#define I_OPCODE_off 25
|
||
|
#define NDS32Insn_OPCODE(x) (NDS32Insn(x) >> I_OPCODE_off)
|
||
|
|
||
|
#define I_OPCODE_offRt 20
|
||
|
#define I_OPCODE_mskRt (0x1fUL << I_OPCODE_offRt)
|
||
|
#define NDS32Insn_OPCODE_Rt(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskRt) >> I_OPCODE_offRt)
|
||
|
|
||
|
#define I_OPCODE_offRa 15
|
||
|
#define I_OPCODE_mskRa (0x1fUL << I_OPCODE_offRa)
|
||
|
#define NDS32Insn_OPCODE_Ra(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskRa) >> I_OPCODE_offRa)
|
||
|
|
||
|
#define I_OPCODE_offRb 10
|
||
|
#define I_OPCODE_mskRb (0x1fUL << I_OPCODE_offRb)
|
||
|
#define NDS32Insn_OPCODE_Rb(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskRb) >> I_OPCODE_offRb)
|
||
|
|
||
|
#define I_OPCODE_offbit1014 10
|
||
|
#define I_OPCODE_mskbit1014 (0x1fUL << I_OPCODE_offbit1014)
|
||
|
#define NDS32Insn_OPCODE_BIT1014(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskbit1014) >> I_OPCODE_offbit1014)
|
||
|
|
||
|
#define I_OPCODE_offbit69 6
|
||
|
#define I_OPCODE_mskbit69 (0xfUL << I_OPCODE_offbit69)
|
||
|
#define NDS32Insn_OPCODE_BIT69(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskbit69) >> I_OPCODE_offbit69)
|
||
|
|
||
|
#define I_OPCODE_offCOP0 0
|
||
|
#define I_OPCODE_mskCOP0 (0x3fUL << I_OPCODE_offCOP0)
|
||
|
#define NDS32Insn_OPCODE_COP0(x) \
|
||
|
((NDS32Insn(x) & I_OPCODE_mskCOP0) >> I_OPCODE_offCOP0)
|
||
|
|
||
|
#endif /* __NDS32_FPU_INST_H */
|