/* * Interactive disassembler (IDA). * Copyright (c) 1990-2021 Hex-Rays * ALL RIGHTS RESERVED. * */ #ifndef __INSTRS_HPP #define __INSTRS_HPP #include "necv850.hpp" //---------------------------------------------------------------------- extern const instruc_t Instructions[]; enum NEC850_Instructions { NEC850_NULL = 0, NEC850_BREAKPOINT, NEC850_XORI, NEC850_XOR, NEC850_TST1, NEC850_TST, NEC850_TRAP, NEC850_SUBR, NEC850_SUB, NEC850_STSR, NEC850_ST_B, NEC850_ST_H, NEC850_ST_W, NEC850_SST_B, NEC850_SST_H, NEC850_SST_W, NEC850_SLD_B, NEC850_SLD_H, NEC850_SLD_W, NEC850_SHR, NEC850_SHL, NEC850_SET1, NEC850_SETF, NEC850_SATSUBR, NEC850_SATSUBI, NEC850_SATSUB, NEC850_SATADD, NEC850_SAR, NEC850_RETI, NEC850_ORI, NEC850_OR, NEC850_NOT1, NEC850_NOT, NEC850_NOP, NEC850_MULHI, NEC850_MULH, NEC850_MOVHI, NEC850_MOVEA, NEC850_MOV, NEC850_LDSR, NEC850_LD_B, NEC850_LD_H, NEC850_LD_W, NEC850_JR, NEC850_JMP, NEC850_JARL, NEC850_HALT, NEC850_EI, NEC850_DIVH, NEC850_DI, NEC850_CMP, NEC850_CLR1, NEC850_BV, NEC850_BL, NEC850_BZ, NEC850_BNH, NEC850_BN, NEC850_BR, NEC850_BLT, NEC850_BLE, NEC850_BNV, NEC850_BNC, NEC850_BNZ, NEC850_BH, NEC850_BP, NEC850_BSA, NEC850_BGE, NEC850_BGT, NEC850_ANDI, NEC850_AND, NEC850_ADDI, NEC850_ADD, // // V850E/E1/ES // NEC850_SWITCH, NEC850_ZXB, NEC850_SXB, NEC850_ZXH, NEC850_SXH, NEC850_DISPOSE_r0, NEC850_DISPOSE_r, NEC850_CALLT, NEC850_DBTRAP, NEC850_DBRET, NEC850_CTRET, NEC850_SASF, NEC850_PREPARE_sp, NEC850_PREPARE_i, NEC850_MUL, NEC850_MULU, NEC850_DIVH_r3, NEC850_DIVHU, NEC850_DIV, NEC850_DIVU, NEC850_BSW, NEC850_BSH, NEC850_HSW, NEC850_CMOV, NEC850_SLD_BU, NEC850_SLD_HU, NEC850_LD_BU, NEC850_LD_HU, // // V850E2 // NEC850_ADF, // Add on condition flag NEC850_HSH, // Halfword swap halfword NEC850_MAC, // Multiply and add word NEC850_MACU, // Multiply and add word unsigned NEC850_SBF, // Subtract on condition flag NEC850_SCH0L, // Search zero from left NEC850_SCH0R, // Search zero from right NEC850_SCH1L, // Search one from left NEC850_SCH1R, // Search one from right // // V850E2M // NEC850_CAXI, // Compare and exchange for interlock NEC850_DIVQ, // Divide word quickly NEC850_DIVQU, // Divide word unsigned quickly NEC850_EIRET, // Return from EI level exception NEC850_FERET, // Return from FE level exception NEC850_FETRAP, // FE-level Trap NEC850_RMTRAP, // Runtime monitor trap NEC850_RIE, // Reserved instruction exception NEC850_SYNCE, // Synchronize exceptions NEC850_SYNCM, // Synchronize memory NEC850_SYNCP, // Synchronize pipeline NEC850_SYSCALL, // System call // floating point (E1F only) NEC850_CVT_SW, // Real to integer conversion NEC850_TRNC_SW, // Real to integer conversion NEC850_CVT_WS, // Integer to real conversion NEC850_LDFC, // Load to Floating Controls NEC850_LDFF, // Load to Floating Flags NEC850_STFC, // Store Floating Controls NEC850_STFF, // Store Floating Flags NEC850_TRFF, // Transfer Floating Flags // floating point (E2M) NEC850_ABSF_D, // Floating-point Absolute Value (Double) NEC850_ABSF_S, // Floating-point Absolute Value (Single) NEC850_ADDF_D, // Floating-point Add (Double) NEC850_ADDF_S, // Floating-point Add (Single) NEC850_DIVF_D, // Floating-point Divide (Double) NEC850_DIVF_S, // Floating-point Divide (Single) NEC850_MAXF_D, // Floating-point Maximum (Double) NEC850_MAXF_S, // Floating-point Maximum (Single) NEC850_MINF_D, // Floating-point Minimum (Double) NEC850_MINF_S, // Floating-point Minimum (Single) NEC850_MULF_D, // Floating-point Multiply (Double) NEC850_MULF_S, // Floating-point Multiply (Single) NEC850_NEGF_D, // Floating-point Negate (Double) NEC850_NEGF_S, // Floating-point Negate (Single) NEC850_RECIPF_D, // Reciprocal of a floating-point value (Double) NEC850_RECIPF_S, // Reciprocal of a floating-point value (Single NEC850_RSQRTF_D, // Reciprocal of the square root of a floating-point value (Double) NEC850_RSQRTF_S, // Reciprocal of the square root of a floating-point value (Single) NEC850_SQRTF_D, // Floating-point Square Root (Double) NEC850_SQRTF_S, // Floating-point Square Root (Single) NEC850_SUBF_D, // Floating-point Subtract (Double) NEC850_SUBF_S, // Floating-point Subtract (Single) NEC850_MADDF_S, // Floating-point Multiply-Add (Single) NEC850_MSUBF_S, // Floating-point Multiply-Subtract (Single) NEC850_NMADDF_S, // Floating-point Negate Multiply-Add (Single) NEC850_NMSUBF_S, // Floating-point Negate Multiply-Subtract (Single) NEC850_CEILF_DL, // Floating-point Truncate to Long Fixed-point Format, rounded toward +inf (Double) NEC850_CEILF_DW, // Floating-point Truncate to Single Fixed-point Format, rounded toward +inf (Double) NEC850_CEILF_SL, // Floating-point Truncate to Long Fixed-point Format, rounded toward +inf (Single) NEC850_CEILF_SW, // Floating-point Truncate to Single Fixed-point Format, rounded toward +inf (Single) NEC850_CEILF_DUL, // Floating-point Truncate to Unsigned Long, rounded toward +inf (Double) NEC850_CEILF_DUW, // Floating-point Truncate to Unsigned Word, rounded toward +inf (Double) NEC850_CEILF_SUL, // Floating-point Truncate to Unsigned Long, rounded toward +inf (Single) NEC850_CEILF_SUW, // Floating-point Truncate to Unsigned Word, rounded toward +inf (Single) NEC850_CVTF_DL, // Floating-point Convert to Long Fixed-point Format (Double) NEC850_CVTF_DS, // Floating-point Convert to Single Floating-point Format (Double) NEC850_CVTF_DUL, // Floating-point Convert Double to Unsigned-Long (Double) NEC850_CVTF_DUW, // Floating-point Convert Double to Unsigned-Word (Double) NEC850_CVTF_DW, // Floating-point Convert to Single Fixed-point Format (Double) NEC850_CVTF_LD, // Floating-point Convert to Single Floating-point Format (Double) NEC850_CVTF_LS, // Floating-point Convert to Single Floating-point Format (Single) NEC850_CVTF_SD, // Floating-point Convert to Double Floating-point Format (Double) NEC850_CVTF_SL, // Floating-point Convert to Long Fixed-point Format (Single) NEC850_CVTF_SUL, // Floating-point Convert Single to Unsigned-Long (Single) NEC850_CVTF_SUW, // Floating-point Convert Single to Unsigned-Word (Single) NEC850_CVTF_SW, // Floating-point Convert to Single Fixed-point Format (Single) NEC850_CVTF_ULD, // Floating-point Convert Unsigned-Long to Double (Double) NEC850_CVTF_ULS, // Floating-point Convert Unsigned-Long to Single (Single) NEC850_CVTF_UWD, // Floating-point Convert Unsigned-Word to Double (Double) NEC850_CVTF_UWS, // Floating-point Convert Unsigned-Word to Single (Single) NEC850_CVTF_WD, // Floating-point Convert to Single Floating-point Format (Double) NEC850_CVTF_WS, // Floating-point Convert to Single Floating-point Format (Single) NEC850_FLOORF_DL, // Floating-point Truncate to Long Fixed-point Format, rounded toward -inf (Double) NEC850_FLOORF_DW, // Floating-point Truncate to Single Fixed-point Format, rounded toward -inf (Double) NEC850_FLOORF_SL, // Floating-point Truncate to Long Fixed-point Format, rounded toward -inf (Single) NEC850_FLOORF_SW, // Floating-point Truncate to Single Fixed-point Format, rounded toward -inf (Single) NEC850_FLOORF_DUL, // Floating-point Truncate to Unsigned Long, rounded toward -inf (Double) NEC850_FLOORF_DUW, // Floating-point Truncate to Unsigned Word, rounded toward -inf (Double) NEC850_FLOORF_SUL, // Floating-point Truncate to Unsigned Long, rounded toward -inf (Single) NEC850_FLOORF_SUW, // Floating-point Truncate to Unsigned Word, rounded toward -inf (Single) NEC850_TRNCF_DL, // Floating-point Truncate to Long Fixed-point Format, rounded to zero (Double) NEC850_TRNCF_DUL, // Floating-point Truncate Double to Unsigned-Long (Double) NEC850_TRNCF_DUW, // Floating-point Truncate Double to Unsigned-Word (Double) NEC850_TRNCF_DW, // Floating-point Truncate to Single Fixed-point Format, rounded to zero (Double) NEC850_TRNCF_SL, // Floating-point Truncate to Long Fixed-point Format, rounded to zero (Single) NEC850_TRNCF_SUL, // Floating-point Truncate Single to Unsigned-Long (Single) NEC850_TRNCF_SUW, // Floating-point Truncate Single to Unsigned-Word (Single) NEC850_TRNCF_SW, // Floating-point Truncate to Single Fixed-point Format, rounded to zero (Single) NEC850_CMPF_S, // Compares floating-point values (Single) NEC850_CMPF_D, // Compares floating-point values (Double) NEC850_CMOVF_S, // Floating-point conditional move (Single) NEC850_CMOVF_D, // Floating-point conditional move (Double) NEC850_TRFSR, // Transfers specified CC bit to Zero flag in PSW (Single) // // RH850 // NEC850_SYNCI, // Synchronize instruction pipeline NEC850_SNOOZE, // Snooze NEC850_BINS, // Bitfield Insert NEC850_ROTL, // Rotate Left NEC850_LOOP, // Loop NEC850_LD_DW, // Load Double Word NEC850_ST_DW, // Store Double Word NEC850_LDL_W, // Load Linked NEC850_STC_W, // Store Conditional NEC850_CLL, // Clear Load Link NEC850_CACHE, // Cache operation NEC850_PREF, // Prefetch NEC850_PUSHSP, // Push registers to Stack NEC850_POPSP, // Pop registers from Stack // new RH850 FP instructions NEC850_CVTF_HS, // Floating-point Convert Half to Single (Single) NEC850_CVTF_SH, // Floating-point Convert Single to Half (Single) NEC850_FMAF_S, // Floating-point Fused-Multiply-add (Single) NEC850_FMSF_S, // Floating-point Fused-Multiply-subtract (Single) NEC850_FNMAF_S, // Floating-point Fused-Negate-Multiply-add (Single) NEC850_FNMSF_S, // Floating-point Fused-Negate-Multiply-subtract (Single) // debug instructions NEC850_DBPUSH, // NEC850_DBCP, // NEC850_DBTAG, // NEC850_DBHVTRAP, // // virtualization instructions NEC850_EST, // NEC850_DST, // NEC850_HVTRAP, // NEC850_HVCALL, // NEC850_LDVC_SR, // NEC850_STVC_SR, // NEC850_LDTC_GR, // NEC850_STTC_GR, // NEC850_LDTC_PC, // NEC850_STTC_PC, // NEC850_LDTC_SR, // NEC850_STTC_SR, // NEC850_LDTC_VR, // NEC850_STTC_VR, // // TLB instructions NEC850_TLBAI, // NEC850_TLBR, // NEC850_TLBS, // NEC850_TLBVI, // NEC850_TLBW, // NEC850_LAST_INSTRUCTION }; #endif