/*
This file is part of jpcsp.
Jpcsp is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Jpcsp is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Jpcsp. If not, see <http://www.gnu.org/licenses/>.
*/
package jpcsp.Allegrex;
/**
*
* @author hli
*/
public class Opcodes {
// CPU: encoded by opcode field.
//
// 31---------26---------------------------------------------------0
// | opcode | |
// ------6----------------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | *1 | *2 | J | JAL | BEQ | BNE | BLEZ | BGTZ |
// 001 | ADDI | ADDIU | SLTI | SLTIU | ANDI | ORI | XORI | LUI |
// 010 | *3 | *4 | VFPU2 | --- | BEQL | BNEL | BLEZL | BGTZL |
// 011 | VFPU0 | VFPU1 | --- | VFPU3 | * 5 | --- | --- | *6 |
// 100 | LB | LH | LWL | LW | LBU | LHU | LWR | --- |
// 101 | SB | SH | SWL | SW | --- | --- | SWR | CACHE |
// 110 | LL | LWC1 | LVS | --- | VFPU4 | ULVQ | LVQ | VFPU5 |
// 111 | SC | SWC1 | SVS | --- | VFPU6 | USVQ | SVQ | VFPU7 |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
//
// *1 = SPECIAL, see SPECIAL list *2 = REGIMM, see REGIMM list
// *3 = COP0 *4 = COP1
// *5 = SPECIAL2 , see SPECIAL2 *6 = SPECAIL3 , see SPECIAL 3
// *ULVQ is buggy on PSP1000 PSP
// *VFPU0 check VFPU0 table
// *VFPU1 check VFPU1 table
// *VFPU2 check VFPU2 table
// *VFPU3 check VFPU3 table
// *VFPU4 check VFPU4 table
// *VFPU5 check VFPU5 table
// *VFPU6 check VFPU6 table
// *VFPU7 check VFPU7 table
public static final byte SPECIAL = 0x0;
public static final byte REGIMM = 0x1;
public static final byte J = 0x2; // Jump
public static final byte JAL = 0x3; // Jump And Link
public static final byte BEQ = 0x4; // Branch on Equal
public static final byte BNE = 0x5; // Branch on Not Equal
public static final byte BLEZ = 0x6; // Branch on Less Than or Equal to Zero
public static final byte BGTZ = 0x7; // Branch on Greater Than Zero
public static final byte ADDI = 0x8; // Add Immediate
public static final byte ADDIU = 0x9; // Add Immediate Unsigned
public static final byte SLTI = 0xa; // Set on Less Than Immediate
public static final byte SLTIU = 0xb; // Set on Less Than Immediate Unsigned
public static final byte ANDI = 0xc; // AND Immediate
public static final byte ORI = 0xd; // OR Immediate
public static final byte XORI = 0xe; // Exclusive OR Immediate
public static final byte LUI = 0xf; // Load Upper Immediate
public static final byte COP0 = 0x10; // Coprocessor Operation
public static final byte COP1 = 0x11; // Coprocessor Operation
public static final byte VFPU2 = 0x12;
/* 0x13 reserved or unsupported */
public static final byte BEQL = 0x14; // Branch on Equal Likely
public static final byte BNEL = 0x15; // Branch on Not Equal Likely
public static final byte BLEZL = 0x16; // Branch on Less Than or Equal to Zero Likely
public static final byte BGTZL = 0x17; // Branch on Greater Than Zero Likely
public static final byte VFPU0 = 0x18;
public static final byte VFPU1 = 0x19;
/* 0x1a reserved or unsupported */
public static final byte VFPU3 = 0x1b;
public static final byte SPECIAL2 = 0x1c; // Allegrex table
/* 0x1d reserved or unsupported */
/* 0x1e reserved or unsupported */
public static final byte SPECIAL3 = 0x1f; //special3 table
public static final byte LB = 0x20; //Load Byte
public static final byte LH = 0x21; // Load Halfword
public static final byte LWL = 0x22; // Load Word Left
public static final byte LW = 0x23; // Load Word
public static final byte LBU = 0x24; // Load Byte Unsigned
public static final byte LHU = 0x25; // Load Halfword Unsigned
public static final byte LWR = 0x26; // Load Word Right
/* 0x27 reserved or unsupported */
public static final byte SB = 0x28; // Store Byte
public static final byte SH = 0x29; // Store Halfword
public static final byte SWL = 0x2A; // Store Word Left
public static final byte SW = 0x2B; // Store Word
/* 0x2c reserved or unsupported */
/* 0x2d reserved or unsupported */
public static final byte SWR = 0x2E; // Store Word Right
public static final byte CACHE = 0x2f; // Allegrex Cache Operation
public static final byte LL = 0x30; // Load Linked
public static final byte LWC1 = 0x31; // Load FPU Register
public static final byte LVS = 0x32; // Load Scalar VFPU Register
/* 0x32 reserved or unsupported */
/* 0x33 reserved or unsupported */
public static final byte VFPU4 = 0x34;
public static final byte ULVQ = 0x35; // Load Quad VFPU Register (Unaligned)
public static final byte LVQ = 0x36; // Load Quad VFPU Register
public static final byte VFPU5 = 0x37;
public static final byte SC = 0x38; // Store Conditionaly
public static final byte SWC1 = 0x39; // Store FPU Register
public static final byte SVS = 0x3a; // Store Scalar VFPU Register
/* 0x3b reserved or unsupported */
public static final byte VFPU6 = 0x3c;
public static final byte USVQ = 0x3d; // Store Quad VFPU Register (Unaligned)
public static final byte SVQ = 0x3e; // Store Quad VFPU Register
public static final byte VFPU7 = 0x3f;// SPECIAL: encoded by function field when opcode field = SPECIAL
//
// 31---------26------------------------------------------5--------0
// |= SPECIAL| | function|
// ------6----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | SLL | --- |SRLROR | SRA | SLLV | --- |SRLRORV| SRAV |
// 001 | JR | JALR | MOVZ | MOVN |SYSCALL| BREAK | --- | SYNC |
// 010 | MFHI | MTHI | MFLO | MTLO | --- | --- | CLZ | CLO |
// 011 | MULT | MULTU | DIV | DIVU | MADD | MADDU | ---- | ----- |
// 100 | ADD | ADDU | SUB | SUBU | AND | OR | XOR | NOR |
// 101 | --- | --- | SLT | SLTU | MAX | MIN | MSUB | MSUBU |
// 110 | --- | --- | --- | --- | --- | --- | --- | --- |
// 111 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte SLL = 0x0; // Shift Left Logical
/* 0x1 reserved or unsupported */
public static final byte SRLROR = 0x2; // Shift/Rotate Right Logical
public static final byte SRA = 0x3; // Shift Right Arithmetic
public static final byte SLLV = 0x4; // Shift Left Logical Variable
/* 0x5 reserved or unsupported */
public static final byte SRLRORV = 0x6; // Shift/Rotate Right Logical Variable
public static final byte SRAV = 0x7; // Shift Right Arithmetic Variable
public static final byte JR = 0x8; // Jump Register
public static final byte JALR = 0x9; // Jump And Link Register
public static final byte MOVZ = 0xa; // Move If Zero
public static final byte MOVN = 0xb; // Move If Non-zero
public static final byte SYSCALL = 0xc; // System Call
public static final byte BREAK = 0xd; // Break
/* 0xe reserved or unsupported */
public static final byte SYNC = 0xf; // Sync
public static final byte MFHI = 0x10; // Move From HI
public static final byte MTHI = 0x11; // Move To HI
public static final byte MFLO = 0x12; // Move From LO
public static final byte MTLO = 0x13; // Move To LO
/* 0x14 reserved or unsupported */
/* 0x15 reserved or unsupported */
public static final byte CLZ = 0x16; // Count Leading Zero
public static final byte CLO = 0x17; // Count Leading One
public static final byte MULT = 0x18; // Multiply
public static final byte MULTU = 0x19; // Multiply Unsigned
public static final byte DIV = 0x1a; // Divide
public static final byte DIVU = 0x1b; // Divide Unsigned
public static final byte MADD = 0x1c; // Multiply And Add
public static final byte MADDU = 0x1d; // Multiply And Add Unsigned
/* 0x1e reserved or unsupported */
/* 0x1f reserved or unsupported */
public static final byte ADD = 0x20; // Add
public static final byte ADDU = 0x21; // Add Unsigned
public static final byte SUB = 0x22; // Subtract
public static final byte SUBU = 0x23; // Subtract Unsigned
public static final byte AND = 0x24; // AND
public static final byte OR = 0x25; // OR
public static final byte XOR = 0x26; // Exclusive OR
public static final byte NOR = 0x27; // NOR
/* 0x28 reserved or unsupported */
/* 0x29 reserved or unsupported */
public static final byte SLT = 0x2a; // Set on Less Than
public static final byte SLTU = 0x2b; // Set on Less Than Unsigned
public static final byte MAX = 0x2c; // Move Max
public static final byte MIN = 0x2d; // Move Min
public static final byte MSUB = 0x2e; // Multiply And Substract
public static final byte MSUBU = 0x2f; // Multiply And Substract
// SPECIAL rs : encoded by rs field when opcode/func field = SPECIAL/SRLROR
//
// 31---------26-----21-----------------------------------5--------0
// |= SPECIAL| rs | |= SRLROR|
// ------6--------5-------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | SRL | ROTR | --- | --- | --- | --- | --- | --- |
// 001 | --- | --- | --- | --- | --- | --- | --- | --- |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte SRL = 0x0;
public static final byte ROTR = 0x1;// SPECIAL sa : encoded by sa field when opcode/func field = SPECIAL/SRLRORV
//
// 31---------26------------------------------------10----5--------0
// |= SPECIAL| | sa |=SRLRORV|
// ------6---------------------------------------------5------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | SRLV | ROTRV | --- | --- | --- | --- | --- | --- |
// 001 | --- | --- | --- | --- | --- | --- | --- | --- |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte SRLV = 0x0;
public static final byte ROTRV = 0x1; //
// REGIMM: encoded by the rt field when opcode field = REGIMM.
// 31---------26----------20-------16------------------------------0
// |= REGIMM| | rt | |
// ------6---------------------5------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | BLTZ | BGEZ | BLTZL | BGEZL | --- | --- | --- | --- |
// 01 | --- | --- | --- | --- | --- | --- | --- | --- |
// 10 | BLTZAL| BGEZAL|BLTZALL|BGEZALL| --- | --- | --- | --- |
// 11 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte BLTZ = 0x0; // Branch on Less Than Zero
public static final byte BGEZ = 0x1; // Branch on Greater Than or Equal to Zero
public static final byte BLTZL = 0x2; // Branch on Less Than Zero Likely
public static final byte BGEZL = 0x3; // Branch on Greater Than or Equal to Zero Likely
/* 0x4 reserved or unsupported */
/* 0x5 reserved or unsupported */
/* 0x6 reserved or unsupported */
/* 0x7 reserved or unsupported */
/* 0x8 reserved or unsupported */
/* 0x9 reserved or unsupported */
/* 0xa reserved or unsupported */
/* 0xb reserved or unsupported */
/* 0xc reserved or unsupported */
/* 0xd reserved or unsupported */
/* 0xe reserved or unsupported */
/* 0xf reserved or unsupported */
public static final byte BLTZAL = 0x10; // Branch on Less Than Zero And Link
public static final byte BGEZAL = 0x11; // Branch on Greater Than or Equal to Zero And Link
public static final byte BLTZALL = 0x12; // Branch on Less Than Zero And Link Likely
public static final byte BGEZALL = 0x13; // Branch on Greater Than or Equal to Zero And Link Likely
// COP0: encoded by the rs field when opcode field = COP0.
// 31---------26----------23-------31------------------------------0
// |= COP0| | rs | |
// ------6---------------------5------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | MFC0 | --- | CFC0 | --- | MTC0 | --- | CTC0 | --- |
// 01 | --- | --- | --- | --- | --- | --- | --- | --- |
// 10 | *1 | --- | --- | --- | --- | --- | --- | --- |
// 11 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
//
// *1 COP0 func
public static final byte MFC0 = 0x0; // Move from Coprocessor 0
public static final byte CFC0 = 0x2; // Move from Coprocessor 0
public static final byte MTC0 = 0x4; // Move to Coprocessor 0
public static final byte CTC0 = 0x6; // Move to Coprocessor 0
public static final byte COP0ERET = 0x10;// COP0: encoded by the func field when opcode/rs field = COP0/10000.
// 31---------26------------------------------------------5--------0
// |= COP0| | function|
// ------6----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | --- | --- | --- | --- | --- | --- | --- | --- |
// 01 | --- | --- | --- | --- | --- | --- | --- | --- |
// 10 | ERET | --- | --- | --- | --- | --- | --- | --- |
// 11 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte ERET = 0x10; // Exception Return */
// SPECIAL2 : encoded by function field when opcode field = SPECIAL2
// 31---------26------------------------------------------5--------0
// |= SPECIAL2| | function|
// ------6----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | HALT | --- | --- | --- | --- | --- | --- | --- |
// 001 | --- | --- | --- | --- | --- | --- | --- | --- |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// 100 | --- | --- | --- | --- | MFIC | --- | MTIC | --- |
// 101 | --- | --- | --- | --- | --- | --- | --- | --- |
// 110 | --- | --- | --- | --- | --- | --- | --- | --- |
// 111 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte HALT = 0x0; // halt execution until next interrupt
public static final byte MFIC = 0x24; // move from IC (Interrupt) register
public static final byte MTIC = 0x26; // move to IC (Interrupt) register
// SPECIAL3: encoded by function field when opcode field = SPECIAL3
// 31---------26------------------------------------------5--------0
// |= SPECIAL3| | function|
// ------6----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | EXT | --- | --- | --- | INS | --- | --- | --- |
// 001 | --- | --- | --- | --- | --- | --- | --- | --- |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// 100 | *1 | --- | --- | --- | --- | --- | --- | --- |
// 101 | --- | --- | --- | --- | --- | --- | --- | --- |
// 110 | --- | --- | --- | --- | --- | --- | --- | --- |
// 111 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
// * 1 BSHFL encoding based on sa field
public static final byte EXT = 0x0; // extract bit field
public static final byte INS = 0x4; // insert bit field
public static final byte BSHFL = 0x20; //BSHFL table
// BSHFL: encoded by the sa field.
// 31---------26----------20-------16--------------8---6-----------0
// | | | | | sa| |
// ------6---------------------5------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | --- | --- | WSBH | WSBW | --- | --- | --- | --- |
// 01 | --- | --- | --- | --- | --- | --- | --- | --- |
// 10 | SEB | --- | --- | --- |BITREV | --- | --- | --- |
// 11 | SEH | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte WSBH = 0x02; // Swap Bytes In Each Half Word
public static final byte WSBW = 0x03; // Swap Bytes In Word
public static final byte SEB = 0x10; // Sign-Extend Byte
public static final byte BITREV = 0x14; // Revert Bits In Word
public static final byte SEH = 0x18; // Sign-Extend HalfWord
// COP1: encoded by the rs field when opcode field = COP1.
// 31-------26------21---------------------------------------------0
// |= COP1| rs | |
// -----6-------5---------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | MFC1 | --- | CFC1 | --- | MTC1 | --- | CTC1 | --- |
// 01 | *1 | --- | --- | --- | --- | --- | --- | --- |
// 10 | *2 | --- | --- | --- | *3 | --- | --- | --- |
// 11 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
// *1 check COP1BC table
// *2 check COP1S table;
// *2 check COP1W table;
public static final byte MFC1 = 0x00;
public static final byte CFC1 = 0x02;
public static final byte MTC1 = 0x04;
public static final byte CTC1 = 0x06;
public static final byte COP1BC = 0x08;
public static final byte COP1S = 0x10;
public static final byte COP1W = 0x14; //
// COP1BC: encoded by the rt field
// 31---------21-------16------------------------------------------0
// |= COP1BC| rt | |
// ------11---------5-----------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 00 | BC1F | BC1T | BC1FL | BC1TL | --- | --- | --- | --- |
// 01 | --- | --- | --- | --- | --- | --- | --- | --- |
// 10 | --- | --- | --- | --- | --- | --- | --- | --- |
// 11 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte BC1F = 0x00;
public static final byte BC1T = 0x01;
public static final byte BC1FL = 0x02;
public static final byte BC1TL = 0x03; //
// COP1S: encoded by function field
// 31---------21------------------------------------------5--------0
// |= COP1S | | function|
// -----11----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | add.s | sub.s | mul.s | div.s |sqrt.s | abs.s | mov.s | neg.s |
// 001 | --- | --- | --- | --- | <*1>.w.s |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// 100 | --- | --- | --- | --- |cvt.w.s| --- | --- | --- |
// 101 | --- | --- | --- | --- | --- | --- | --- | --- |
// 110 | c.<*2>.s |
// 110 | c.<*3>.s |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
//
// *1 : round.w.s | trunc.w.s | ceil.w.s | floor.w.s
// *2 : c.f.s | c.un.s | c.eq.s | c.ueq.s | c.olt.s | c.ult.s | c.ole.s | c.ule.s
// *3 : c.sf.s | c.ngle.s | c.seq.s | c.ngl.s | c.lt.s | c.nge.s | c.le.s | c.ngt.s
//
public static final byte ADDS = 0x00;
public static final byte SUBS = 0x01;
public static final byte MULS = 0x02;
public static final byte DIVS = 0x03;
public static final byte SQRTS = 0x04;
public static final byte ABSS = 0x05;
public static final byte MOVS = 0x06;
public static final byte NEGS = 0x07;
public static final byte ROUNDWS = 0xc;
public static final byte TRUNCWS = 0xd;
public static final byte CEILWS = 0xe;
public static final byte FLOORWS = 0xf;
public static final byte CVTWS = 0x24;
public static final byte CCONDS = 0x30;
public static final byte CF = 0x0;
public static final byte CUN = 0x1;
public static final byte CEQ = 0x2;
public static final byte CUEQ = 0x3;
public static final byte COLT = 0x4;
public static final byte CULT = 0x5;
public static final byte COLE = 0x6;
public static final byte CULE = 0x7;
public static final byte CSF = 0x8;
public static final byte CNGLE = 0x9;
public static final byte CSEQ = 0xa;
public static final byte CNGL = 0xb;
public static final byte CLT = 0xc;
public static final byte CNGE = 0xd;
public static final byte CLE = 0xe;
public static final byte CNGT = 0xf; //
// COP1W: encoded by function field
// 31---------21------------------------------------------5--------0
// |= COP1W | | function|
// -----11----------------------------------------------------6-----
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
// 000 | --- | --- | --- | --- | --- | --- | --- | --- |
// 001 | --- | --- | --- | --- | --- | --- | --- | --- |
// 010 | --- | --- | --- | --- | --- | --- | --- | --- |
// 011 | --- | --- | --- | --- | --- | --- | --- | --- |
// 100 |cvt.s.w| --- | --- | --- | --- | --- | --- | --- |
// 101 | --- | --- | --- | --- | --- | --- | --- | --- |
// 110 | --- | --- | --- | --- | --- | --- | --- | --- |
// 110 | --- | --- | --- | --- | --- | --- | --- | --- |
// hi |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte CVTSW = 0x20; //
// VFPU2: /* known as COP2 */
public static final byte MFVMFVC = 0x00;
public static final byte MTVMTVC = 0x04;
public static final byte VFPU2BC = 0x08; //
public static final byte MFV = 0x0;
public static final byte MFVC = 0x1;
public static final byte MTV = 0x0;
public static final byte MTVC = 0x1;
// VFPU0:
//
// 31---------26-----23--------------------------------------------0
// |= VFPU0| VOP | |
// ------6--------3-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | VADD | VSUB | VSBN | --- | --- | --- | --- | VDIV |
// |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte VADD = 0x00; //
public static final byte VSUB = 0x01; //
public static final byte VSBN = 0x02; //
public static final byte VDIV = 0x07; //
// VFPU1:
//
// 31---------26-----23--------------------------------------------0
// |= VFPU1| VOP | |
// ------6--------3-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | VMUL | VDOT | VSCL | --- | VHDP | VCRS | VDET | --- |
// |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte VMUL = 0x00; //
public static final byte VDOT = 0x01; //
public static final byte VSCL = 0x02; //
public static final byte VHDP = 0x04; //
public static final byte VCRS = 0x05; //
public static final byte VDET = 0x06; //
// VFPU3:
//
// 31---------26-----23--------------------------------------------0
// |= VFPU3| VOP | |
// ------6--------3-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | VCMP | --- | VMIN | VMAX | --- | VSCMP | VSGE | VSLT |
// |-------|-------|-------|-------|-------|-------|-------|-------|
public static final byte VCMP = 0x00; //
public static final byte VMIN = 0x02; //
public static final byte VMAX = 0x03; //
public static final byte VSCMP = 0x05; //
public static final byte VSGE = 0x06; //
public static final byte VSLT = 0x07; //
// VFPU4:
// 31---------26-----24--------------------------------------------0
// |= VFPU4| VOP | |
// ------6--------2-------------------------------------------------
// |-------00-------|-------01-------|------10------|------11------|
// | VFPU4_0 | --- | VFPU4_2 | VWBN |
// |----------------|----------------|--------------|--------------|
public static final byte VFPU4_0 = 0x0; //
public static final byte VFPU4_1 = 0x1; //
public static final byte VFPU4_2 = 0x2; //
public static final byte VWBN = 0x3; //
// VFPU4_0:
// 31---------26-----24--------------------------------------------0
// |= VFPU4| 00 | |
// ------6--------2-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | --- | --- | --- | --- | --- | --- | --- | --- |
// |-------|-------|-------|-------|-------|-------|-------|-------|
//
// VFPU4_2:
// 31---------26-----24--------------------------------------------0
// |= VFPU4| 10 | |
// ------6--------2-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | VF2IN | VF2IZ | VF2IU | VF2ID | VI2F | 1* | --- | --- |
// |-------|-------|-------|-------|-------|-------|-------|-------|
// *1 : VCMOVF/VCMOVT
public static final byte VF2IN = 0x0; //
public static final byte VF2IZ = 0x1; //
public static final byte VF2IU = 0x2; //
public static final byte VF2ID = 0x3; //
public static final byte VI2F = 0x4; //
public static final byte VFPU4_2_2 = 0x5; //
// VFPU4_2_2:
// 31---------26----24----19---------------------------------------0
// |= VFPU4| 10 | 101 | |
// ------6--------2----3--------------------------------------------
// |-------00-------|-------01-------|------10------|------11------|
// | VCMOVF | VCMOVT | ---- | ---- |
// |----------------|----------------|--------------|--------------|
public static final byte VCMOVF = 0x0; //
public static final byte VCMOVT = 0x1; //
// VFPU5:
//
// 31---------26----24---------------------------------------------0
// |= VFPU5| VOP | |
// ------6--------2-------------------------------------------------
// |-------00-------|-------01-------|-------10-----|------11------|
// | VPFXS | VPFXT | VPFXD | VIIM/VFIM |
// |----------------|----------------|--------------|--------------|
public static final byte VPFXS = 0x00;
public static final byte VPFXT = 0x01;
public static final byte VPFXD = 0x02;
public static final byte VFPU5_3 = 0x03; //
// 31---------------23---------------------------------------------0
// |= VFPU5/VIFM | |
// ---------8-------------------------------------------------------
// |----------------0----------------|--------------1--------------|
// | VIIM | VFIM |
// |---------------------------------|-----------------------------|
public static final byte VIIM = 0x0;
public static final byte VFIM = 0x1; // VFPU6:
//
// 31---------26-----23--------------------------------------------0
// |= VFPU6| VOP | |
// ------6--------3-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | --- | --- | --- | --- | --- | --- | --- | --- |
// |-------|-------|-------|-------|-------|-------|-------|-------|
//
// VFPU7:
//
// 31---------26-----23--------------------------------------------0
// |= VFPU6| VOP | |
// ------6--------3-------------------------------------------------
// |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--|
// | --- | --- | --- | --- | --- | --- | --- | --- |
// |-------|-------|-------|-------|-------|-------|-------|-------|
//
}