18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright (C) 2005-2018 Andes Technology Corporation */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef __NDS32_FPU_INST_H 58c2ecf20Sopenharmony_ci#define __NDS32_FPU_INST_H 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#define cop0_op 0x35 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci/* 108c2ecf20Sopenharmony_ci * COP0 field of opcodes. 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci#define fs1_op 0x0 138c2ecf20Sopenharmony_ci#define fs2_op 0x4 148c2ecf20Sopenharmony_ci#define fd1_op 0x8 158c2ecf20Sopenharmony_ci#define fd2_op 0xc 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci/* 188c2ecf20Sopenharmony_ci * FS1 opcode. 198c2ecf20Sopenharmony_ci */ 208c2ecf20Sopenharmony_cienum fs1 { 218c2ecf20Sopenharmony_ci fadds_op, fsubs_op, fcpynss_op, fcpyss_op, 228c2ecf20Sopenharmony_ci fmadds_op, fmsubs_op, fcmovns_op, fcmovzs_op, 238c2ecf20Sopenharmony_ci fnmadds_op, fnmsubs_op, 248c2ecf20Sopenharmony_ci fmuls_op = 0xc, fdivs_op, 258c2ecf20Sopenharmony_ci fs1_f2op_op = 0xf 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* 298c2ecf20Sopenharmony_ci * FS1/F2OP opcode. 308c2ecf20Sopenharmony_ci */ 318c2ecf20Sopenharmony_cienum fs1_f2 { 328c2ecf20Sopenharmony_ci fs2d_op, fsqrts_op, 338c2ecf20Sopenharmony_ci fui2s_op = 0x8, fsi2s_op = 0xc, 348c2ecf20Sopenharmony_ci fs2ui_op = 0x10, fs2ui_z_op = 0x14, 358c2ecf20Sopenharmony_ci fs2si_op = 0x18, fs2si_z_op = 0x1c 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci/* 398c2ecf20Sopenharmony_ci * FS2 opcode. 408c2ecf20Sopenharmony_ci */ 418c2ecf20Sopenharmony_cienum fs2 { 428c2ecf20Sopenharmony_ci fcmpeqs_op, fcmpeqs_e_op, fcmplts_op, fcmplts_e_op, 438c2ecf20Sopenharmony_ci fcmples_op, fcmples_e_op, fcmpuns_op, fcmpuns_e_op 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci/* 478c2ecf20Sopenharmony_ci * FD1 opcode. 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_cienum fd1 { 508c2ecf20Sopenharmony_ci faddd_op, fsubd_op, fcpynsd_op, fcpysd_op, 518c2ecf20Sopenharmony_ci fmaddd_op, fmsubd_op, fcmovnd_op, fcmovzd_op, 528c2ecf20Sopenharmony_ci fnmaddd_op, fnmsubd_op, 538c2ecf20Sopenharmony_ci fmuld_op = 0xc, fdivd_op, fd1_f2op_op = 0xf 548c2ecf20Sopenharmony_ci}; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci/* 578c2ecf20Sopenharmony_ci * FD1/F2OP opcode. 588c2ecf20Sopenharmony_ci */ 598c2ecf20Sopenharmony_cienum fd1_f2 { 608c2ecf20Sopenharmony_ci fd2s_op, fsqrtd_op, 618c2ecf20Sopenharmony_ci fui2d_op = 0x8, fsi2d_op = 0xc, 628c2ecf20Sopenharmony_ci fd2ui_op = 0x10, fd2ui_z_op = 0x14, 638c2ecf20Sopenharmony_ci fd2si_op = 0x18, fd2si_z_op = 0x1c 648c2ecf20Sopenharmony_ci}; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci/* 678c2ecf20Sopenharmony_ci * FD2 opcode. 688c2ecf20Sopenharmony_ci */ 698c2ecf20Sopenharmony_cienum fd2 { 708c2ecf20Sopenharmony_ci fcmpeqd_op, fcmpeqd_e_op, fcmpltd_op, fcmpltd_e_op, 718c2ecf20Sopenharmony_ci fcmpled_op, fcmpled_e_op, fcmpund_op, fcmpund_e_op 728c2ecf20Sopenharmony_ci}; 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci#define NDS32Insn(x) x 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci#define I_OPCODE_off 25 778c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE(x) (NDS32Insn(x) >> I_OPCODE_off) 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_ci#define I_OPCODE_offRt 20 808c2ecf20Sopenharmony_ci#define I_OPCODE_mskRt (0x1fUL << I_OPCODE_offRt) 818c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_Rt(x) \ 828c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskRt) >> I_OPCODE_offRt) 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci#define I_OPCODE_offRa 15 858c2ecf20Sopenharmony_ci#define I_OPCODE_mskRa (0x1fUL << I_OPCODE_offRa) 868c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_Ra(x) \ 878c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskRa) >> I_OPCODE_offRa) 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci#define I_OPCODE_offRb 10 908c2ecf20Sopenharmony_ci#define I_OPCODE_mskRb (0x1fUL << I_OPCODE_offRb) 918c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_Rb(x) \ 928c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskRb) >> I_OPCODE_offRb) 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci#define I_OPCODE_offbit1014 10 958c2ecf20Sopenharmony_ci#define I_OPCODE_mskbit1014 (0x1fUL << I_OPCODE_offbit1014) 968c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_BIT1014(x) \ 978c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskbit1014) >> I_OPCODE_offbit1014) 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci#define I_OPCODE_offbit69 6 1008c2ecf20Sopenharmony_ci#define I_OPCODE_mskbit69 (0xfUL << I_OPCODE_offbit69) 1018c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_BIT69(x) \ 1028c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskbit69) >> I_OPCODE_offbit69) 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci#define I_OPCODE_offCOP0 0 1058c2ecf20Sopenharmony_ci#define I_OPCODE_mskCOP0 (0x3fUL << I_OPCODE_offCOP0) 1068c2ecf20Sopenharmony_ci#define NDS32Insn_OPCODE_COP0(x) \ 1078c2ecf20Sopenharmony_ci ((NDS32Insn(x) & I_OPCODE_mskCOP0) >> I_OPCODE_offCOP0) 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci#endif /* __NDS32_FPU_INST_H */ 110