300 lines
21 KiB
C++
300 lines
21 KiB
C++
/*
|
|
* Interactive disassembler (IDA).
|
|
* Copyright (c) 1990-2021 Hex-Rays
|
|
* ALL RIGHTS RESERVED.
|
|
*
|
|
*/
|
|
|
|
#include "ins.hpp"
|
|
|
|
const instruc_t Instructions[NEC850_LAST_INSTRUCTION] =
|
|
{
|
|
{ "", 0 }, // Unknown Operation
|
|
|
|
{ "breakpoint", CF_STOP }, // undefined instruction
|
|
{ "xori", CF_USE1|CF_USE2|CF_CHG3 }, // Exclusive Or Immediate
|
|
{ "xor", CF_USE1|CF_USE2|CF_CHG2 }, // Exclusive OR
|
|
{ "tst1", CF_USE1|CF_USE2 }, // Test bit
|
|
{ "tst", CF_USE1|CF_USE2 }, // Test
|
|
{ "trap", CF_USE1 }, // Software trap
|
|
{ "subr", CF_USE1|CF_USE2|CF_CHG2 }, // Substract reverse
|
|
{ "sub", CF_USE1|CF_USE2|CF_CHG2 }, // Substract
|
|
{ "stsr", CF_USE1|CF_CHG2 }, // Store Contents of System Register
|
|
{ "st.b", CF_USE1|CF_USE2|CF_CHG2 }, // Store byte
|
|
{ "st.h", CF_USE1|CF_USE2|CF_CHG2 }, // Store half-word
|
|
{ "st.w", CF_USE1|CF_USE2|CF_CHG2 }, // Store word
|
|
{ "sst.b", CF_USE1|CF_USE2|CF_CHG2 }, // Store byte (use EP)
|
|
{ "sst.h", CF_USE1|CF_USE2|CF_CHG2 }, // Store half-word (use EP)
|
|
{ "sst.w", CF_USE1|CF_USE2|CF_CHG2 }, // Store word (use EP)
|
|
{ "sld.b", CF_USE1|CF_CHG2 }, // Load byte (use EP)
|
|
{ "sld.h", CF_USE1|CF_CHG2 }, // Load half-word (use EP)
|
|
{ "sld.w", CF_USE1|CF_CHG2 }, // Load word (use EP)
|
|
{ "shr", CF_USE1|CF_USE2|CF_CHG2|CF_SHFT }, // Shift Logical Right
|
|
{ "shl", CF_USE1|CF_USE2|CF_CHG2|CF_SHFT }, // Shift Logical Left
|
|
{ "set1", CF_USE1|CF_USE2|CF_CHG2 }, // Set Bit
|
|
{ "setf", CF_USE1|CF_CHG2 }, // Set register to 1 if condition is satisfied
|
|
{ "satsubr", CF_USE1|CF_USE2|CF_CHG2 }, // Saturated Subtract Reverse
|
|
{ "satsubi", CF_USE1|CF_USE2|CF_CHG3 }, // Saturated Subtract Immediate
|
|
{ "satsub", CF_USE1|CF_USE2|CF_CHG2 }, // Saturated Subtract
|
|
{ "satadd", CF_USE1|CF_USE2|CF_CHG2 }, // Saturated Add
|
|
{ "sar", CF_USE1|CF_USE2|CF_CHG2|CF_SHFT }, // Shift Arithmetic Right
|
|
{ "reti", CF_STOP }, // Return from Trap or Interrupt
|
|
{ "ori", CF_USE1|CF_USE2|CF_CHG2 }, // OR immediate
|
|
{ "or", CF_USE1|CF_USE2|CF_CHG2 }, // OR
|
|
{ "not1", CF_USE1|CF_USE2|CF_CHG2 }, // Not Bit
|
|
{ "not", CF_USE1|CF_USE2|CF_CHG2 }, // Not
|
|
{ "nop", 0 }, // No Operation
|
|
{ "mulhi", CF_USE1|CF_USE2|CF_CHG3 }, // Multiply Half-Word Immediate
|
|
{ "mulh", CF_USE1|CF_USE2|CF_CHG2 }, // Multiply Half-Word
|
|
{ "movhi", CF_USE1|CF_USE2|CF_CHG3 }, // Move High Half-Word
|
|
{ "movea", CF_USE1|CF_USE2|CF_CHG3 }, // Move Effective Address
|
|
{ "mov", CF_USE1|CF_CHG2 }, // Move
|
|
{ "ldsr", CF_USE1|CF_CHG2 }, // Load to system register
|
|
{ "ld.b", CF_USE1|CF_CHG2 }, // Load byte
|
|
{ "ld.h", CF_USE1|CF_CHG2 }, // Load half-word
|
|
{ "ld.w", CF_USE1|CF_CHG2 }, // Load word
|
|
{ "jr", CF_USE1|CF_STOP }, // Jump Relative
|
|
{ "jmp", CF_USE1|CF_JUMP|CF_STOP }, // Jump Register
|
|
{ "jarl", CF_CALL|CF_USE1|CF_CHG2 }, // Jump and Register Link
|
|
{ "halt", CF_STOP }, // Halt
|
|
{ "ei", 0 }, // Enable interrupt
|
|
{ "divh", CF_USE1|CF_USE2|CF_CHG2 }, // Divide Half-Word
|
|
{ "di", 0 }, // Disable Interrupt
|
|
{ "cmp", CF_USE1|CF_USE2 }, // Compare
|
|
{ "clr1", CF_USE1|CF_USE2|CF_CHG2 }, // Clear bit
|
|
{ "bv", CF_USE1 }, // Branch if overflow
|
|
{ "bl", CF_USE1 }, // Branch if less
|
|
{ "bz", CF_USE1 }, // Branch if zero
|
|
{ "bnh", CF_USE1 }, // Branch if not higher
|
|
{ "bn", CF_USE1 }, // Branch if negative
|
|
{ "br", CF_USE1|CF_STOP }, // Branch if always
|
|
{ "blt", CF_USE1 }, // Branch if less than (signed)
|
|
{ "ble", CF_USE1 }, // Branch if less than or equal (signed)
|
|
{ "bnv", CF_USE1 }, // Branch if no overflow
|
|
{ "bnc", CF_USE1 }, // Branch if no carry
|
|
{ "bnz", CF_USE1 }, // Branch if not zero
|
|
{ "bh", CF_USE1 }, // Branch if higher than
|
|
{ "bp", CF_USE1 }, // Branch if positive
|
|
{ "bsa", CF_USE1 }, // Branch if saturated
|
|
{ "bge", CF_USE1 }, // Branch if greater than or equal (signed)
|
|
{ "bgt", CF_USE1 }, // Branch if greater than (signed)
|
|
{ "andi", CF_USE1|CF_USE2|CF_CHG3 }, // And immediate
|
|
{ "and", CF_USE1|CF_USE2|CF_CHG2 }, // And
|
|
{ "addi", CF_USE1|CF_USE2|CF_CHG3 }, // Add Immediate
|
|
{ "add", CF_USE1|CF_USE2|CF_CHG2 }, // Add
|
|
|
|
//
|
|
// V850E/E1/ES
|
|
//
|
|
{ "switch", CF_USE1|CF_STOP|CF_JUMP }, // Jump with table look up
|
|
{ "zxb", CF_USE1|CF_CHG1 }, //
|
|
{ "sxb", CF_USE1|CF_CHG1 }, //
|
|
{ "zxh", CF_USE1|CF_CHG1 }, //
|
|
{ "sxh", CF_USE1|CF_CHG1 }, //
|
|
{ "dispose", CF_USE1|CF_USE2 }, //
|
|
{ "dispose", CF_USE1|CF_USE2|CF_USE3|CF_STOP }, //
|
|
{ "callt", CF_USE1|CF_CALL }, //
|
|
{ "dbtrap", CF_STOP }, //
|
|
{ "dbret", CF_STOP }, //
|
|
{ "ctret", CF_STOP }, //
|
|
|
|
{ "sasf", CF_USE1|CF_USE2|CF_CHG2 }, // Shift and set flag condition
|
|
|
|
{ "prepare", CF_USE1|CF_USE2|CF_USE3 }, // Function prepare
|
|
{ "prepare", CF_USE1|CF_USE2 }, // Function prepare
|
|
|
|
{ "mul", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Multiply word
|
|
{ "mulu", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Multiply word unsigned
|
|
|
|
{ "divh", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide halfword
|
|
{ "divhu", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide halfword unsigned
|
|
{ "div", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide word
|
|
{ "divu", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide word unsigned
|
|
|
|
{ "bsw", CF_USE1|CF_CHG2 }, // Byte swap word
|
|
{ "bsh", CF_USE1|CF_CHG2 }, // Byte swap halfword
|
|
{ "hsw", CF_USE1|CF_CHG2 }, // Halfword swap word
|
|
|
|
{ "cmov", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Conditional move
|
|
|
|
{ "sld.bu", CF_USE1|CF_CHG2 }, // Short format load byte unsigned
|
|
{ "sld.hu", CF_USE1|CF_CHG2 }, // Short format load halfword unsigned
|
|
|
|
{ "ld.bu", CF_USE1|CF_CHG2 }, // load byte unsigned
|
|
{ "ld.hu", CF_USE1|CF_CHG2 }, // load halfword unsigned
|
|
|
|
//
|
|
// V850E2
|
|
//
|
|
{ "adf", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Add on condition flag
|
|
{ "hsh", CF_USE1|CF_CHG2 }, // Halfword swap halfword
|
|
{ "mac", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Multiply and add word
|
|
{ "macu", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Multiply and add word unsigned
|
|
|
|
{ "sbf", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Subtract on condition flag
|
|
|
|
{ "sch0l", CF_USE1|CF_CHG2 }, // Search zero from left
|
|
{ "sch0r", CF_USE1|CF_CHG2 }, // Search zero from right
|
|
{ "sch1l", CF_USE1|CF_CHG2 }, // Search one from left
|
|
{ "sch1r", CF_USE1|CF_CHG2 }, // Search one from right
|
|
|
|
//
|
|
// V850E2M
|
|
//
|
|
{ "caxi", CF_USE1|CF_USE2|CF_USE3 }, // Compare and exchange for interlock
|
|
{ "divq", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide word quickly
|
|
{ "divqu", CF_USE1|CF_USE2|CF_CHG2|CF_CHG3 }, // Divide word unsigned quickly
|
|
{ "eiret", CF_STOP }, // Return from EI level exception
|
|
{ "feret", CF_STOP }, // Return from FE level exception
|
|
{ "fetrap", CF_USE1 }, // FE-level Trap
|
|
{ "rmtrap", 0 }, // Runtime monitor trap
|
|
{ "rie", CF_STOP|CF_USE1|CF_USE2 }, // Reserved instruction exception
|
|
{ "synce", 0 }, // Synchronize exceptions
|
|
{ "syncm", 0 }, // Synchronize memory
|
|
{ "syncp", 0 }, // Synchronize pipeline
|
|
{ "syscall", CF_USE1 }, // System call
|
|
|
|
// floating point (E1F only)
|
|
{ "cvt.sw", CF_USE1|CF_CHG2 }, // Real to integer conversion
|
|
{ "trnc.sw", CF_USE1|CF_CHG2 }, // Real to integer conversion
|
|
{ "cvt.ws", CF_USE1|CF_CHG2 }, // Integer to real conversion
|
|
{ "ldfc", CF_USE1|CF_CHG2 }, // Load to Floating Controls
|
|
{ "ldff", CF_USE1|CF_CHG2 }, // Load to Floating Flags
|
|
{ "stfc", CF_USE1|CF_CHG2 }, // Store Floating Controls
|
|
{ "stff", CF_USE1|CF_CHG2 }, // Store Floating Flags
|
|
{ "trff", 0 }, // Transfer Floating Flags
|
|
|
|
// floating point (E2M+)
|
|
{ "absf.d", CF_USE1|CF_CHG2 }, // Floating-point Absolute Value (Double)
|
|
{ "absf.s", CF_USE1|CF_CHG2 }, // Floating-point Absolute Value (Single)
|
|
{ "addf.d", CF_USE1|CF_CHG2 }, // Floating-point Add (Double)
|
|
{ "addf.s", CF_USE1|CF_CHG2 }, // Floating-point Add (Single)
|
|
{ "divf.d", CF_USE1|CF_CHG2 }, // Floating-point Divide (Double)
|
|
{ "divf.s", CF_USE1|CF_CHG2 }, // Floating-point Divide (Single)
|
|
{ "maxf.d", CF_USE1|CF_CHG2 }, // Floating-point Maximum (Double)
|
|
{ "maxf.s", CF_USE1|CF_CHG2 }, // Floating-point Maximum (Single)
|
|
{ "minf.d", CF_USE1|CF_CHG2 }, // Floating-point Minimum (Double)
|
|
{ "minf.s", CF_USE1|CF_CHG2 }, // Floating-point Minimum (Single)
|
|
{ "mulf.d", CF_USE1|CF_CHG2 }, // Floating-point Multiply (Double)
|
|
{ "mulf.s", CF_USE1|CF_CHG2 }, // Floating-point Multiply (Single)
|
|
{ "negf.d", CF_USE1|CF_CHG2 }, // Floating-point Negate (Double)
|
|
{ "negf.s", CF_USE1|CF_CHG2 }, // Floating-point Negate (Single)
|
|
{ "recipf.d", CF_USE1|CF_CHG2 }, // Reciprocal of a floating-point value (Double)
|
|
{ "recipf.s", CF_USE1|CF_CHG2 }, // Reciprocal of a floating-point value (Single
|
|
|
|
{ "rsqrtf.d", CF_USE1|CF_CHG2 }, // Reciprocal of the square root of a floating-point value (Double)
|
|
{ "rsqrtf.s", CF_USE1|CF_CHG2 }, // Reciprocal of the square root of a floating-point value (Single)
|
|
{ "sqrtf.d", CF_USE1|CF_CHG2 }, // Floating-point Square Root (Double)
|
|
{ "sqrtf.s", CF_USE1|CF_CHG2 }, // Floating-point Square Root (Single)
|
|
{ "subf.d", CF_USE1|CF_CHG2 }, // Floating-point Subtract (Double)
|
|
{ "subf.s", CF_USE1|CF_CHG2 }, // Floating-point Subtract (Single)
|
|
{ "maddf.s", CF_USE1|CF_USE2|CF_USE3|CF_CHG4 }, // Floating-point Multiply-Add (Single)
|
|
{ "msubf.s", CF_USE1|CF_CHG2|CF_USE3|CF_CHG4 }, // Floating-point Multiply-Subtract (Single)
|
|
{ "nmaddf.s", CF_USE1|CF_CHG2|CF_USE3|CF_CHG4 }, // Floating-point Negate Multiply-Add (Single)
|
|
{ "nmsubf.s", CF_USE1|CF_CHG2|CF_USE3|CF_CHG4 }, // Floating-point Negate Multiply-Subtract (Single)
|
|
|
|
{ "ceilf.dl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded toward +inf (Double)
|
|
{ "ceilf.dw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded toward +inf (Double)
|
|
{ "ceilf.sl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded toward +inf (Single)
|
|
{ "ceilf.sw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded toward +inf (Single)
|
|
{ "ceilf.dul", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Long, rounded toward +inf (Double)
|
|
{ "ceilf.duw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Word, rounded toward +inf (Double)
|
|
{ "ceilf.sul", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Long, rounded toward +inf (Single)
|
|
{ "ceilf.suw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Word, rounded toward +inf (Single)
|
|
{ "cvtf.dl", CF_USE1|CF_CHG2 }, // Floating-point Convert to Long Fixed-point Format (Double)
|
|
{ "cvtf.ds", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Floating-point Format (Double)
|
|
{ "cvtf.dul", CF_USE1|CF_CHG2 }, // Floating-point Convert Double to Unsigned-Long (Double)
|
|
{ "cvtf.duw", CF_USE1|CF_CHG2 }, // Floating-point Convert Double to Unsigned-Word (Double)
|
|
{ "cvtf.dw", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Fixed-point Format (Double)
|
|
{ "cvtf.ld", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Floating-point Format (Double)
|
|
{ "cvtf.ls", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Floating-point Format (Single)
|
|
{ "cvtf.sd", CF_USE1|CF_CHG2 }, // Floating-point Convert to Double Floating-point Format (Double)
|
|
{ "cvtf.sl", CF_USE1|CF_CHG2 }, // Floating-point Convert to Long Fixed-point Format (Single)
|
|
{ "cvtf.sul", CF_USE1|CF_CHG2 }, // Floating-point Convert Single to Unsigned-Long (Single)
|
|
{ "cvtf.suw", CF_USE1|CF_CHG2 }, // Floating-point Convert Single to Unsigned-Word (Single)
|
|
{ "cvtf.sw", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Fixed-point Format (Single)
|
|
{ "cvtf.uld", CF_USE1|CF_CHG2 }, // Floating-point Convert Unsigned-Long to Double (Double)
|
|
{ "cvtf.uls", CF_USE1|CF_CHG2 }, // Floating-point Convert Unsigned-Long to Single (Single)
|
|
{ "cvtf.uwd", CF_USE1|CF_CHG2 }, // Floating-point Convert Unsigned-Word to Double (Double)
|
|
{ "cvtf.uws", CF_USE1|CF_CHG2 }, // Floating-point Convert Unsigned-Word to Single (Single)
|
|
{ "cvtf.wd", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Floating-point Format (Double)
|
|
{ "cvtf.ws", CF_USE1|CF_CHG2 }, // Floating-point Convert to Single Floating-point Format (Single)
|
|
{ "floorf.dl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded toward -inf (Double)
|
|
{ "floorf.dw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded toward -inf (Double)
|
|
{ "floorf.sl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded toward -inf (Single)
|
|
{ "floorf.sw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded toward -inf (Single)
|
|
{ "floorf.dul", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Long, rounded toward -inf (Double)
|
|
{ "floorf.duw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Word, rounded toward -inf (Double)
|
|
{ "floorf.sul", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Long, rounded toward -inf (Single)
|
|
{ "floorf.suw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Unsigned Word, rounded toward -inf (Single)
|
|
{ "trncf.dl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded to zero (Double)
|
|
{ "trncf.dul", CF_USE1|CF_CHG2 }, // Floating-point Truncate Double to Unsigned-Long (Double)
|
|
{ "trncf.duw", CF_USE1|CF_CHG2 }, // Floating-point Truncate Double to Unsigned-Word (Double)
|
|
{ "trncf.dw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded to zero (Double)
|
|
{ "trncf.sl", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Long Fixed-point Format, rounded to zero (Single)
|
|
{ "trncf.sul", CF_USE1|CF_CHG2 }, // Floating-point Truncate Single to Unsigned-Long (Single)
|
|
{ "trncf.suw", CF_USE1|CF_CHG2 }, // Floating-point Truncate Single to Unsigned-Word (Single)
|
|
{ "trncf.sw", CF_USE1|CF_CHG2 }, // Floating-point Truncate to Single Fixed-point Format, rounded to zero (Single)
|
|
{ "cmpf.s", CF_USE1|CF_CHG2 }, // Compares floating-point values (Single)
|
|
{ "cmpf.d", CF_USE1|CF_CHG2 }, // Compares floating-point values (Double)
|
|
{ "cmovf.s", CF_USE1|CF_CHG2 }, // Floating-point conditional move (Single)
|
|
{ "cmovf.d", CF_USE1|CF_CHG2 }, // Floating-point conditional move (Double)
|
|
{ "trfsr", CF_USE1|CF_CHG2 }, // Transfers specified CC bit to Zero flag in PSW (Single)
|
|
|
|
//
|
|
// RH850
|
|
//
|
|
{ "synci", 0 }, // Synchronize instruction pipeline
|
|
{ "snooze", 0 }, // Snooze
|
|
{ "bins", CF_USE1|CF_USE2|CF_USE3|CF_USE4|CF_CHG4 }, // Bitfield Insert
|
|
{ "rotl", CF_USE1|CF_USE2|CF_CHG3 }, // Rotate Left
|
|
{ "loop", CF_USE1|CF_USE2 }, // Loop
|
|
{ "ld.dw", CF_USE1|CF_CHG2 }, // Load Double Word
|
|
{ "st.dw", CF_USE1|CF_USE2|CF_CHG2 }, // Store Double Word
|
|
{ "ldl.w", CF_USE1|CF_CHG2 }, // Load Linked
|
|
{ "stc.w", CF_USE1|CF_USE2|CF_CHG2 }, // Store Conditional
|
|
{ "cll", 0 }, // Clear Load Link
|
|
{ "cache", CF_USE1|CF_USE2 }, // Cache operation
|
|
{ "pref", CF_USE1|CF_USE2 }, // Prefetch
|
|
{ "pushsp", CF_USE1 }, // Push registers to Stack
|
|
{ "popsp", CF_CHG1 }, // Pop registers from Stack
|
|
|
|
// new RH850 FP instructions
|
|
{ "cvtf.hs", CF_USE1|CF_CHG2 }, // Floating-point Convert Half to Single (Single)
|
|
{ "cvtf.sh", CF_USE1|CF_CHG2 }, // Floating-point Convert Single to Half (Single)
|
|
{ "fmaf.s", CF_USE1|CF_USE2|CF_CHG3 }, // Floating-point Fused-Multiply-add (Single)
|
|
{ "fmsf.s", CF_USE1|CF_USE2|CF_CHG3 }, // Floating-point Fused-Multiply-subtract (Single)
|
|
{ "fnmaf.s", CF_USE1|CF_USE2|CF_CHG3 }, // Floating-point Fused-Negate-Multiply-add (Single)
|
|
{ "fnmsf.s", CF_USE1|CF_USE2|CF_CHG3 }, // Floating-point Fused-Negate-Multiply-subtract (Single)
|
|
|
|
// debug instructions
|
|
{ "dbpush", CF_USE1 }, // Output registers as software trace data
|
|
{ "dbcp", 0 }, // Output current PC value as software trace data
|
|
{ "dbtag", CF_USE1 }, // Output immediate value as software trace data
|
|
{ "dbhvtrap", 0 }, // Debug hypervisor trap
|
|
|
|
{ "est", 0 }, //
|
|
{ "dst", 0 }, //
|
|
{ "hvtrap", CF_USE1 }, // Hypervisor trap
|
|
{ "hvcall", CF_USE1 }, // Hypervisor call
|
|
{ "ldvc.sr", CF_USE1|CF_USE2 }, //
|
|
{ "stvc.sr", CF_USE1|CF_USE2 }, //
|
|
{ "ldtc.gr", CF_USE1|CF_USE2 }, //
|
|
{ "sttc.gr", CF_USE1|CF_USE2 }, //
|
|
{ "ldtc.pc", CF_USE1|CF_USE2 }, //
|
|
{ "sttc.pc", CF_USE1|CF_USE2 }, //
|
|
{ "ldtc.sr", CF_USE1|CF_USE2 }, //
|
|
{ "sttc.sr", CF_USE1|CF_USE2 }, //
|
|
{ "ldtc.vr", CF_USE1|CF_USE2 }, //
|
|
{ "sttc.vr", CF_USE1|CF_USE2 }, //
|
|
|
|
// TLB instructions
|
|
{ "tlbai", 0 }, //
|
|
{ "tlbr", 0 }, //
|
|
{ "tlbs", 0 }, //
|
|
{ "tlbvi", 0 }, //
|
|
{ "tlbw", 0 }, //
|
|
};
|
|
|
|
CASSERT(qnumber(Instructions) == NEC850_LAST_INSTRUCTION);
|