OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gen_or1k_isa/] [sources/] [or1k_isadesc.h] - Rev 1773

Go to most recent revision | Compare with Previous | Blame | View Log

/* Information about OR1K ISA. W/o this we can't generate or1k_isa_part.tex.
*
* $Log: not supported by cvs2svn $
* Revision 1.14  2005/11/03 19:06:00  lampret
* Added l.fl1, fixed desc of l.ff1
*
* Revision 1.13  2005/03/16 12:27:17  nogj
* Fix description of the l.mac/l.msb/l.maci instructions
*
* Revision 1.12  2004/06/27 22:56:48  lampret
* Updated instruction set descriptions. Changed FP instructions encoding.
*
* Revision 1.11  2003/01/28 03:43:04  lampret
* Typos by Maria Bolado
*
*/
 
struct or1k_isa {
	char *name;
	char *title;
	char *desc;
	char *oper32;
	char *oper64;
	char *except;
	int  class;
	int  printed;
};
 
#define ORBIS32I	1
#define ORBIS32II	2
#define ORBIS64I	3
#define ORBIS64II	4
#define ORFPX32I	5
#define ORFPX32II	6
#define ORFPX64I	7
#define ORFPX64II	8
#define ORVDX64I	9
#define ORVDX64II	10
 
static struct or1k_isa or1k_isa_info[] =
{
 
/*** ORBIS32 ***/
 
{"l.addi", "Add Immediate Signed",
	"The immediate value is sign-extended and added to the contents of general-purpose"
	"register rA to form the result. The result is placed into general-purpose"
	"register rD.",
	"rD[31:0] <- rA[31:0] + exts(Immediate)\\SR[CY] <- carry\\SR[OV] <- overflow",
	"rD[63:0] <- rA[63:0] + exts(Immediate)\\SR[CY] <- carry\\SR[OV] <- overflow",
	"Range Exception", ORBIS32I,},
 
{"l.addic", "Add Immediate Signed and Carry",
	"The immediate value is sign-extended and added to the contents of general-purpose"
	"register rA and carry SR[CY] to form the result. "
	"The result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] + exts(Immediate) + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"rD[63:0] <- rA[63:0] + exts(Immediate) + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"Range Exception", ORBIS32I,},
 
{"l.andi", "And with Immediate Half Word",
	"The immediate value is zero-extended and combined with the contents "
	"of general-purpose register rA in a bit-wise logical AND operation. The "
	"result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] AND extz(Immediate)",
	"rD[63:0] <- rA[63:0] AND extz(Immediate)",
	"None", ORBIS32I,},
 
{"l.ori", "Or with Immediate Half Word",
	"The immediate value is zero-extended and combined with the contents "
	"of general-purpose register rA in a bit-wise logical OR operation. The "
	"result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] OR extz(Immediate)",
	"rD[63:0] <- rA[63:0] OR extz(Immediate)",
	"None", ORBIS32I,},
 
{"l.xori", "Exclusive Or with Immediate Half Word",
	"The immediate value is sign-extended and combined with the contents of general-purpose "
	"register rA in a bit-wise logical XOR operation. The result is "
	"placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] XOR exts(Immediate)",
	"rD[63:0] <- rA[63:0] XOR exts(Immediate)",
	"None", ORBIS32I,},
 
{"l.slli", "Shift Left Logical with Immediate",
	"The immediate value specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted left, "
	"inserting zeros into the low-order bits. The result is written into general-purpose "
	"register rD. In 32-bit implementations bit 5 of immediate is ignored.",
	"rD[31:L] <- rA[31-L:0]\\rD[L-1:0] <- 0",
	"rD[63:L] <- rA[63-L:0]\\rD[L-1:0] <- 0",
	"None", ORBIS32I,},
 
{"l.srai", "Shift Right Arithmetic with Immediate",
	"The 6-bit immediate value specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted right, "
	"sign-extending the high-order bits. The result is written into "
	"general-purpose register rD. In 32-bit implementations bit 5 of immediate is ignored.",
	"rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- \{rA[31]\}",
	"rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- \{rA[63]\}",
	"None", ORBIS32I,},
 
{"l.srli", "Shift Right Logical with Immediate",
	"The 6-bit immediate value specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted right, "
	"inserting zeros into the high-order bits. The result is written into general-purpose "
	"register rD. In 32-bit implementations bit 5 of immediate is ignored.",
	"rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- 0",
	"rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- 0",
	"None", ORBIS32I,},
 
{"l.rori", "Rotate Right with Immediate",
	"The 6-bit immediate value specifies the number of "
	"bit positions; the contents of general-purpose register rA are rotated right. "
	"The result is written into general-purpose register rD. In 32-bit implementations bit 5 of immediate is ignored.",
	"rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- rA[L-1:0]",
	"rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- rA[L-1:0]",
	"None", ORBIS32II,},
 
{"l.muli", "Multiply Immediate Signed",
	"The immediate value and the contents of general-purpose register rA are "
	"multiplied, and the result is truncated to destination register width and placed into "
	"general-purpose register rD.",
	"rD[31:0] <- rA[31:0] * Immediate\\SR[OV] <- overflow\\SR[CY] <- carry",
	"rD[63:0] <- rA[63:0] * Immediate\\SR[OV] <- overflow\\SR[CY] <- carry",
	"Range Exception", ORBIS32I,},
 
{"l.exths", "Extend Half Word with Sign",
	"Bit 15 of general-purpose register rA is placed in high-order bits of "
	"general-purpose register rD. The low-order 16 bits of general-purpose register rA "
	"are copied into the low-order 16 bits of general-purpose register rD.",
	"rD[31:16] <- \{rA[15]\}\\rD[15:0] <- rA[15:0]",
	"rD[63:16] <- \{rA[15]\}\\rD[15:0] <- rA[15:0]",
	"None", ORBIS32II,},
 
{"l.extbs", "Extend Byte with Sign",
	"Bit 7 of general-purpose register rA is placed in high-order bits of "
	"general-purpose register rD. The low-order eight bits of general-purpose register rA "
	"are copied into the low-order eight bits of general-purpose register rD.",
	"rD[31:8] <- \{rA[7]\}\\rD[7:0] <- rA[7:0]",
	"rD[63:8] <- \{rA[7]\}\\rD[7:0] <- rA[7:0]",
	"None", ORBIS32II,},
 
{"l.extbz", "Extend Byte with Zero",
	"Zero is placed in high-order bits of "
	"general-purpose register rD. The low-order eight bits of general-purpose register rA "
	"are copied into the low-order eight bits of general-purpose register rD.",
	"rD[31:8] <- 0\\rD[7:0] <- rA[7:0]",
	"rD[63:8] <- 0\\rD[7:0] <- rA[7:0]",
	"None", ORBIS32II,},
 
{"l.exthz", "Extend Half Word with Zero",
	"Zero is placed in high-order bits of "
	"general-purpose register rD. The low-order 16 bits of general-purpose register rA "
	"are copied into the low-order 16 bits of general-purpose register rD.",
	"rD[31:16] <- 0\\rD[15:0] <- rA[15:0]",
	"rD[63:16] <- 0\\rD[15:0] <- rA[15:0]",
	"None", ORBIS32II,},
 
{"l.extwz", "Extend Word with Zero",
	"Zero is placed in high-order bits of "
	"general-purpose register rD. The low-order 32 bits of general-purpose register rA "
	"are copied into the low-order 32 bits of general-purpose register rD.",
	"rD[31:0] <- rA[31:0]",
	"rD[63:32] <- 0\\rD[31:0] <- rA[31:0]",
	"None", ORBIS64II,},
 
{"l.extws", "Extend Word with Sign",
	"Bit 31 of general-purpose register rA is placed in high-order bits of "
	"general-purpose register rD. The low-order 32 bits of general-purpose register rA "
	"are copied from low-order 32 bits of general-purpose register rD.",
	"rD[31:0] <- rA[31:0]",
	"rD[63:32] <- \{rA[31]\}\\rD[31:0] <- rA[31:0]",
	"None", ORBIS64II,},
 
{"l.cmov", "Conditional Move",
	"If SR[F] is set, general-purpose register rA is placed in "
	"general-purpose register rD. If SR[F] is cleared, general-purpose register rB "
	"is placed in general-purpose register rD.",
	"rD[31:0] <- SR[F] ? rA[31:0] : rB[31:0]",
	"rD[63:0] <- SR[F] ? rA[63:0] : rB[63:0]",
	"None", ORBIS32II,},
 
{"l.trap", "Trap",
	"Execution of trap instruction results in the trap exception if specified bit in SR"
	" is set. Trap exception is a request to the operating system or to the debug facility"
	" to execute certain debug services. Immediate value is used to select which SR bit"
	" is tested by trap instruction.",
	"if SR[K] = 1 then trap-exception()",
	"if SR[K] = 1 then trap-exception()",
	"Trap exception", ORBIS32II,},
 
{"l.ff1", "Find First 1",
	"Position of the first '1' bit is written into general-purpose register rD. Checking for "
	"bit '1' starts with bit 0 (LSB), and counting is incremented for every zero bit. If first '1' bit is "
	"discovered in bit 0 (LSB), one is written into rD. If there is no '1' bit, zero is written in rD.",
	"rD[31:0] <- rA[0] ? 1 : rA[1] ? 2 ... rA[31] ? 32 : 0",
	"rD[63:0] <- rA[0] ? 1 : rA[2] ? 2 ... rA[63] ? 64 : 0",
	"None", ORBIS32II,},
 
{"l.fl1", "Find Last 1",
	"Position of the last '1' bit is written into general-purpose register rD. Checking for "
	"bit '1' starts with bit 0 (LSB), and counting is incremented for every bit until the last '1' bit is found nearing the MSB. If last '1' bit is "
	"discovered in bit 31(63) (MSB), 32(64) is written into rD. If there is no '1' bit, zero is written in rD.",
	"rD[31:0] <- rA[31] ? 32 : rA[31] ? 32 ... rA[0] ? 1 : 0",
	"rD[63:0] <- rA[63] ? 64 : rA[62] ? 63 ... rA[0] ? 1 : 0",
	"None", ORBIS32II,},
 
{"l.lbs", "Load Byte and Extend with Sign",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The byte in memory "
	"addressed by EA is loaded into the low-order eight bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"bit 7 of the loaded value.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[7:0] <- (EA)[7:0]\\rD[31:8] <- (EA)[7]",
	"EA <- exts(Immediate) + rA[63:0]\\rD[7:0] <- (EA)[7:0]\\rD[63:8] <- (EA)[7]",
	"TLB miss\\Page fault\\Bus error", ORBIS32I,},
 
{"l.lhs", "Load Half Word and Extend with Sign",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The half word in memory "
	"addressed by EA is loaded into the low-order 16 bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"bit 15 of the loaded value.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[15:0] <- (EA)[15:0]\\rD[31:16] <- (EA)[15]",
	"EA <- exts(Immediate) + rA[63:0]\\rD[15:0] <- (EA)[15:0]\\rD[63:16] <- (EA)[15]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.lws", "Load Single Word and Extend with Sign",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The single word in memory "
	"addressed by EA is loaded into the low-order 32 bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"bit 31 of the loaded value.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[31:0] <- (EA)[31:0]",
	"EA <- exts(Immediate) + rA[63:0]\\rD[31:0] <- (EA)[31:0]\\rD[63:32] <- (EA)[31]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.lbz", "Load Byte and Extend with Zero",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The byte in memory "
	"addressed by EA is loaded into the low-order eight bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"zero.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[7:0] <- (EA)[7:0]\\rD[31:8] <- 0",
	"EA <- exts(Immediate) + rA[63:0]\\rD[7:0] <- (EA)[7:0]\\rD[63:8] <- 0",
	"TLB miss\\Page fault\\Bus error", ORBIS32I,},
 
{"l.lhz", "Load Half Word and Extend with Zero",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The half word in memory "
	"addressed by EA is loaded into the low-order 16 bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"zero.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[15:0] <- (EA)[15:0]\\rD[31:16] <- 0",
	"EA <- exts(Immediate) + rA[63:0]\\rD[15:0] <- (EA)[15:0]\\rD[63:16] <- 0",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.lwz", "Load Single Word and Extend with Zero",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The single word in memory "
	"addressed by EA is loaded into the low-order 32 bits of "
	"general-purpose register rD. "
	"High-order bits of general-purpose register rD are replaced with "
	"zero.",
	"EA <- exts(Immediate) + rA[31:0]\\rD[31:0] <- (EA)[31:0]",
	"EA <- exts(Immediate) + rA[63:0]\\rD[31:0] <- (EA)[31:0]\\rD[63:32] <- 0",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.ld", "Load Double Word",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The double word in memory "
	"addressed by EA is loaded into general-purpose register rD. ",
	"N/A",
	"EA <- exts(Immediate) + rA[63:0]\\rD[63:0] <- (EA)[63:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS64I,},
 
{"l.sd", "Store Double Word",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The double word in "
	"general-purpose register rB is stored to memory location addressed by EA. ",
	"N/A",
	"EA <- exts(Immediate) + rA[63:0]\\(EA)[63:0] <- rB[63:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS64I,},
 
{"l.sw", "Store Single Word",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The low-order 32 bits of "
	"general-purpose register rB are stored to memory location addressed by EA. ",
	"EA <- exts(Immediate) + rA[31:0]\\(EA)[31:0] <- rB[31:0]",
	"EA <- exts(Immediate) + rA[63:0]\\(EA)[31:0] <- rB[31:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.sh", "Store Half Word",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The low-order 16 bits "
	"of general-purpose register rB are stored to memory location addressed by EA. ",
	"EA <- exts(Immediate) + rA[31:0]\\(EA)[15:0] <- rB[15:0]",
	"EA <- exts(Immediate) + rA[63:0]\\(EA)[15:0] <- rB[15:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
 
{"l.sb", "Store Byte",
	"The offset is sign-extended and added to the contents of general-purpose "
	"register rA. The sum represents an effective address. The low-order 8 bits "
	"of general-purpose register rB are stored to memory location addressed by EA. ",
	"EA <- exts(Immediate) + rA[31:0]\\(EA)[7:0] <- rB[7:0]",
	"EA <- exts(Immediate) + rA[63:0]\\(EA)[7:0] <- rB[7:0]",
	"TLB miss\\Page fault\\Bus error", ORBIS32I,},
 
{"l.add", "Add Signed",
	"The contents of general-purpose register rA are added to the contents "
	"of general-purpose register rB to form the result. The result is placed into "
	"general-purpose register rD.",
	"rD[31:0] <- rA[31:0] + rB[31:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"rD[63:0] <- rA[63:0] + rB[63:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"Range Exception", ORBIS32I,},
 
{"l.addc", "Add Signed and Carry",
	"The contents of general-purpose register rA are added to the contents "
	"of general-purpose register rB and carry SR[CY] to form the result. "
	"The result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] + rB[31:0] + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"rD[63:0] <- rA[63:0] + rB[63:0] + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"Range Exception", ORBIS32I,},
 
{"l.sub", "Subtract Signed",
	"The contents of general-purpose register rB are subtracted from the contents "
	"of general-purpose register rA to form the result. The result is placed into "
	"general-purpose register rD. This isntruction does not change carry SR[CY] flag.",
	"rD[31:0] <- rA[31:0] - rB[31:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"rD[63:0] <- rA[63:0] - rB[63:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
	"Range Exception", ORBIS32I,},
 
{"l.sll", "Shift Left Logical",
	"General-purpose register rB specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted left, "
	"inserting zeros into the low-order bits. The result is written into general-purpose "
	"rD. In 32-bit implementations bit 5 of rB is ignored.",
	"rD[31:rB[4:0]] <- rA[31-rB[4:0]:0]\\rD[rB[4:0]-1:0] <- 0",
	"rD[63:rB[5:0]] <- rA[63-rB[5:0]:0]\\rD[rB[5:0]-1:0] <- 0",
	"None", ORBIS32I,},
 
{"l.sra", "Shift Right Arithmetic",
	"General-purpose register rB specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted right, "
	"sign-extending the high-order bits. The result is written into "
	"general-purpose register rD. In 32-bit implementations bit 5 of rB is ignored.",
	"rD[31-rB[4:0]:0] <- rA[31:rB[4:0]]\\rD[31:32-rB[4:0]] <- \{rA[31]\}",
	"rD[63-rB[5:0]:0] <- rA[63:rB[5:0]]\\rD[63:64-rB[5:0]] <- \{rA[63]\}",
	"None", ORBIS32I,},
 
{"l.srl", "Shift Right Logical",
	"General-purpose register rB specifies the number of "
	"bit positions; the contents of general-purpose register rA are shifted right, "
	"inserting zeros into the high-order bits. The result is written into general-purpose "
	"register rD. In 32-bit implementations bit 5 of rB is ignored.",
	"rD[31-rB[4:0]:0] <- rA[31:rB[4:0]]\\rD[31:32-rB[4:0]] <- 0",
	"rD[63-rB[5:0]:0] <- rA[63:rB[5:0]]\\rD[63:64-rB[5:0]] <- 0",
	"None", ORBIS32I,},
 
{"l.ror", "Rotate Right",
	"General-purpose register rB specifies the number of "
	"bit positions; the contents of general-purpose register rA are rotated right. "
	"The result is written into general-purpose register rD. In 32-bit implementations bit 5 of rB is ignored.",
	"rD[31-rB[4:0]:0] <- rA[31:rB]\\rD[31:32-rB[4:0]] <- rA[rB[4:0]-1:0]",
	"rD[63-rB[5:0]:0] <- rA[63:rB]\\rD[63:64-rB[5:0]] <- rA[rB[5:0]-1:0]",
	"None", ORBIS32II,},
 
{"l.and", "And",
	"The contents of general-purpose register rA are combined with the contents "
	"of general-purpose register rB in a bit-wise logical AND operation. The "
	"result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] AND rB[31:0]",
	"rD[63:0] <- rA[63:0] AND rB[63:0]",
	"None", ORBIS32I,},
 
{"l.or", "Or",
	"The contents of general-purpose register rA are combined with the contents "
	"of general-purpose register rB in a bit-wise logical OR operation. The "
	"result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] OR rB[31:0]",
	"rD[63:0] <- rA[63:0] OR rB[63:0]",
	"None", ORBIS32I,},
 
{"l.xor", "Exclusive Or",
	"The contents of general-purpose register rA are combined with the contents "
	"of general-purpose register rB in a bit-wise logical XOR operation. The "
	"result is placed into general-purpose register rD.",
	"rD[31:0] <- rA[31:0] XOR rB[31:0]",
	"rD[63:0] <- rA[63:0] XOR rB[63:0]",
	"None", ORBIS32I,},
 
{"l.mac0", "Multiply Signed",
	"The contents of general-purpose register rA and the contents of general-purpose "
	"register rB are multiplied, and the result is truncated to 32 bits and stored "
	"into the special-purpose registers MACHI and MACLO. "
	"All operands are treated as signed integers.",
	"temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
	"temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
	"None", ORBIS32II,},
 
{"l.maci0", "Multiply Immediate Signed",
	"The immediate value and the contents of general-purpose register rA are "
	"multiplied, and the result is truncated to 32 bits and stored "
	"into the special-purpose registers MACHI and MACLO. "
	"All operands are treated as signed integers.",
	"temp[31:0] <- rA[31:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
	"temp[31:0] <- rA[63:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
	"None", ORBIS32II,},
 
{"l.mac", "Multiply Signed and Accumulate",
	"The contents of general-purpose register rA and the contents of general-purpose "
	"register rB are multiplied, and then added to the special-purpose registers "
	"MACHI and MACLO. All operands are treated as signed integers.",
	"temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
	"temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
	"None", ORBIS32II,},
 
{"l.msb", "Multiply Signed and Subtract",
	"The contents of general-purpose register rA and the contents of general-purpose "
	"register rB are multiplied and then subtracted from the special-purpose registers "
	"MACHI and MACLO. The result of the subtraction is placed into the MACHI and MACLO "
	"registers. All operands are treated as signed integers.",
	"temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- MACHI[31:0]MACLO[31:0] - temp[31:0]\\",
	"temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- MACHI[31:0]MACLO[31:0] - temp[31:0]\\",
	"None", ORBIS32II,},
 
{"l.maci", "Multiply Immediate Signed and Accumulate",
	"The immediate value and the contents of general-purpose register rA are "
	"multiplied, and then added to the special-purpose registers MACHI and "
	"MACLO. All operands are treated as signed integers.",
	"temp[31:0] <- rA[31:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
	"temp[31:0] <- rA[63:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
	"None", ORBIS32II,},
 
{"l.macrc", "MAC Read and Clear",
	"Once all instructions in MAC pipeline are completed, the contents of MAC is placed into "
        "general-purpose register rD and MAC accumulator is cleared.",
        "synchronize-mac\\"
        "rD[31:0] <- MACLO[31:0]\\"
        "MACHI[31:0]MACLO[31:0] <- 0\\",
        "synchronize-mac\\"
        "rD[63:0] <- MACHI[31:0]MACLO[31:0]\\"
        "MACHI[31:0]MACLO[31:0] <- 0\\",
	"None", ORBIS32II,},
 
{"l.mul", "Multiply Signed",
	"The contents of general-purpose register rA and the contents of general-purpose "
	"register rB are multiplied, and the result is truncated to destination register width "
	"and placed into general-purpose register rD. "
	"Both operands are treated as signed integers.",
	"rD[31:0] <- rA[31:0] * rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"rD[63:0] <- rA[63:0] * rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"Range Exception", ORBIS32I,},
 
{"l.mulu", "Multiply Unsigned",
	"The contents of general-purpose register rA and the contents of general-purpose "
	"register rB are multiplied, and the result is truncated to destination register width "
	"and placed into general-purpose register rD. "
	"Both operands are treated as unsigned integers.",
	"rD[31:0] <- rA[31:0] * rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"rD[63:0] <- rA[63:0] * rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"Range Exception", ORBIS32I,},
 
{"l.div", "Divide Signed",
	"The content of general-purpose register rA are divided by the content of "
	"general-purpose register rB, and the result is placed into general-purpose register "
	"rD. Both operands are treated as signed integers. A carry "
	"flag is set when the divisor is zero (if carry SR[CY] is implemented).",
	"rD[31:0] <- rA[31:0] / rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"rD[63:0] <- rA[63:0] / rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"Range Exception", ORBIS32II,},
 
{"l.divu", "Divide Unsigned",
	"The content of general-purpose register rA are divided by the content of "
	"general-purpose register rB, and the result is placed into general-purpose register "
	"rD. Both operands are treated as unsigned integers. A carry "
	"flag is set when the divisor is zero (if carry SR[CY] is implemented).",
	"rD[31:0] <- rA[31:0] / rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"rD[63:0] <- rA[63:0] / rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
	"Range Exception", ORBIS32II,},
 
{"l.sfeq", "Set Flag if Equal",
	"The contents of general-purpose registers rA and rB "
	"are compared. If the contents are equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] == rB[31:0]",
	"SR[F] <- rA[63:0] == rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfne", "Set Flag if Not Equal",
	"The contents of general-purpose registers rA and "
	"rB are compared. If the contents are not equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] != rB[31:0]",
	"SR[F] <- rA[63:0] != rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfgts", "Set Flag if Greater Than Signed",
	"The contents of general-purpose registers rA and "
	"rB are compared as signed integers. If the contents "
	"of the first register are greater than the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] > rB[31:0]",
	"SR[F] <- rA[63:0] > rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfges", "Set Flag if Greater or Equal Than Signed",
	"The contents of general-purpose registers rA and "
	"rB are compared as signed integers. If the contents "
	"of the first register are greater than or equal to the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] >= rB[31:0]",
	"SR[F] <- rA[63:0] >= rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sflts", "Set Flag if Less Than Signed",
	"The contents of general-purpose registers rA and "
	"rB are compared as signed integers. If the contents "
	"of the first register are less than the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] < rB[31:0]",
	"SR[F] <- rA[63:0] < rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfles", "Set Flag if Less or Equal Than Signed",
	"The contents of general-purpose registers rA and "
	"rB are compared as signed integers. If the contents "
	"of the first register are less than or equal to the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] <= rB[31:0]",
	"SR[F] <- rA[63:0] <= rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfgtu", "Set Flag if Greater Than Unsigned",
	"The contents of general-purpose registers rA and "
	"rB are compared as unsigned integers. If the contents "
	"of the first register are greater than the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] > rB[31:0]",
	"SR[F] <- rA[63:0] > rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfgeu", "Set Flag if Greater or Equal Than Unsigned",
	"The contents of general-purpose registers rA and "
	"rB are compared as unsigned integers. If the contents "
	"of the first register are greater than or equal to the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] >= rB[31:0]",
	"SR[F] <- rA[63:0] >= rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfltu", "Set Flag if Less Than Unsigned",
	"The contents of general-purpose registers rA and "
	"rB are compared as unsigned integers. If the contents "
	"of the first register are less than the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] < rB[31:0]",
	"SR[F] <- rA[63:0] < rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfleu", "Set Flag if Less or Equal Than Unsigned",
	"The contents of general-purpose registers rA and "
	"rB are compared as unsigned integers. If the contents "
	"of the first register are less than or equal to the contents of the second "
	"register, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] <= rB[31:0]",
	"SR[F] <- rA[63:0] <= rB[63:0]",
	"None", ORBIS32I,},
 
{"l.sfeqi", "Set Flag if Equal Immediate",
	"The contents of general-purpose register rA and the sign-extended immediate value "
	"are compared. If the two values are equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] == exts(Immediate)",
	"SR[F] <- rA[63:0] == exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfnei", "Set Flag if Not Equal Immediate",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared. If the two values are not equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] != exts(Immediate)",
	"SR[F] <- rA[63:0] != exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfgtsi", "Set Flag if Greater Than Immediate Signed",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as signed integers. If the contents "
	"of the first register are greater than the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] > exts(Immediate)",
	"SR[F] <- rA[63:0] > exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfgesi", "Set Flag if Greater or Equal Than Immediate Signed",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as signed integers. If the contents "
	"of the first register are greater than or equal to the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] >= exts(Immediate)",
	"SR[F] <- rA[63:0] >= exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfltsi", "Set Flag if Less Than Immediate Signed",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as signed integers. If the contents "
	"of the first register are less than the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] < exts(Immediate)",
	"SR[F] <- rA[63:0] < exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sflesi", "Set Flag if Less or Equal Than Immediate Signed",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as signed integers. If the contents "
	"of the first register are less than or equal to the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] <= exts(Immediate)",
	"SR[F] <- rA[63:0] <= exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfgtui", "Set Flag if Greater Than Immediate Unsigned",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as unsigned integers. If the contents "
	"of the first register are greater than the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] > exts(Immediate)",
	"SR[F] <- rA[63:0] > exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfgeui", "Set Flag if Greater or Equal Than Immediate Unsigned",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as unsigned integers. If the contents "
	"of the first register are greater than or equal to the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] >= exts(Immediate)",
	"SR[F] <- rA[63:0] >= exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfltui", "Set Flag if Less Than Immediate Unsigned",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as unsigned integers. If the contents "
	"of the first register are less than the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] < exts(Immediate)",
	"SR[F] <- rA[63:0] < exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.sfleui", "Set Flag if Less or Equal Than Immediate Unsigned",
	"The contents of general-purpose register rA and "
	"the sign-extended immediate value are compared as unsigned integers. If the contents "
	"of the first register are less than or equal to the immediate value "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- rA[31:0] <= exts(Immediate)",
	"SR[F] <- rA[63:0] <= exts(Immediate)",
	"None", ORBIS32II,},
 
{"l.mtspr", "Move To Special-Purpose Register",
	"The contents of general-purpose register rB are moved into the special register "
	"defined by contents of general-purpose register rA logically ORed with the immediate value.",
	"spr(rA OR Immediate) <- rB[31:0]",
	"spr(rA OR Immediate) <- rB[31:0]",
	"None", ORBIS32I,},
 
{"l.mfspr", "Move From Special-Purpose Register",
	"The contents of the special register, defined by contents of general-purpose rA logically ORed "
	"with immediate value, are moved into general-purpose register rD.",
	"rD[31:0] <- spr(rA OR Immediate)",
	"rD[63:0] <- spr(rA OR Immediate)",
	"None", ORBIS32I,},
 
{"l.nop", "No Operation",
	"This instruction does not do anything except that it takes at least one "
	"clock cycle to complete. It is often used to fill delay slot gaps."
	"Immediate value can be used for simulation purposes.",
	"\\",
	"\\",
	"None", ORBIS32I,},
 
{"l.movhi", "Move Immediate High",
	"The 16-bit immediate value is zero-extended, shifted left by 16 bits, and placed "
	"into general-purpose register rD.",
	"rD[31:0] <- extz(Immediate) << 16",
	"rD[63:0] <- extz(Immediate) << 16",
	"None", ORBIS32I,},
 
{"l.bf", "Branch if Flag",
	"The immediate value is shifted left two bits, sign-extended to "
	"program counter width, and then added to the address of the branch instruction. The result "
	"is the effective address of the branch. If the flag is set, "
	"the program branches "
	"to EA with a delay of one instruction.",
	"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
	"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
	"None", ORBIS32I,},
 
{"l.bnf", "Branch if No Flag",
	"The immediate value is shifted left two bits, sign-extended to "
	"program counter width, and then added to the address of the branch instruction. The result "
	"is the effective address of the branch. If the flag is cleared, "
	"the program branches "
	"to EA with a delay of one instruction.",
	"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
	"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
	"None", ORBIS32I,},
 
{"l.jal", "Jump and Link",
	"The immediate value is shifted left two bits, sign-extended to "
	"program counter width, and then added to the address of the jump instruction. The result "
	"is the effective address of the jump. The program unconditionally jumps "
	"to EA with a delay of one instruction. The "
	"address of the instruction after the delay slot is placed in the "
	"link register. ",
	"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
	"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
	"None", ORBIS32I,},
 
{"l.j", "Jump",
	"The immediate value is shifted left two bits, sign-extended to "
	"program counter width, and then added to the address of the jump instruction. The result "
	"is the effective address of the jump. The program unconditionally jumps "
	"to EA with a delay of one instruction.",
	"PC <- exts(Immediate << 2) + JumpInsnAddr",
	"PC <- exts(Immediate << 2) + JumpInsnAddr",
	"None", ORBIS32I,},
 
{"l.jalr", "Jump and Link Register",
	"The contents of general-purpose register rB "
	"is the effective address of the jump. The program unconditionally jumps "
	"to EA with a delay of one instruction. The "
	"address of the instruction after the delay slot is placed in the "
	"link register. It is not allowed to specify link register as rB.",
	"PC <- rB\\LR <- DelayInsnAddr + 4",
	"PC <- rB\\LR <- DelayInsnAddr + 4",
	"None", ORBIS32I,},
 
{"l.jr", "Jump Register",
	"The contents of general-purpose register rB "
	"is the effective address of the jump. The program unconditionally jumps "
	"to EA with a delay of one instruction.",
	"PC <- rB",
	"PC <- rB",
	"None", ORBIS32I,},
 
{"l.sys", "System Call",
	"Execution of the system call instruction results in the system call "
	"exception. The system calls exception is a request to the operating system "
	"to provide operating system services. The immediate value can be used to "
	"specify which system service is requested, alternatively a GPR defined by "
	"the ABI can be used to specify system service.",
	"system-call-exception(K)",
	"system-call-exception(K)",
	"System Call", ORBIS32I,},
 
{"l.msync", "Memory Syncronization",
	"Execution of the memory synchronization instruction results in completion "
	"of all load/store operations before the RISC core continues.",
	"memory-synchronization",
	"memory-synchronization",
	"None", ORBIS32II,},
 
{"l.psync", "Pipeline Syncronization",
	"Execution of pipeline synchronization instruction results in completion "
	"of all instructions that were fetched before l.psync instruction. Once all "
	"instructions are completed, instructions fetched after l.psync are flushed from the "
	" pipeline and fetched again.",
	"pipeline-synchronization",
	"pipeline-synchronization",
	"None", ORBIS32II,},
 
{"l.csync", "Context Syncronization",
	"Execution of context synchronization instruction results in completion "
	"of all operations inside the processor and a flush of the instruction pipelines. "
	"When all operations are complete, the RISC core resumes with an empty instruction pipeline and "
	"fresh context in all units (MMU for example).",
	"context-synchronization",
	"context-synchronization",
	"None", ORBIS32II,},
 
{"l.rfe", "Return From Exception",
	"Execution of this instruction partially restores the state of the processor prior to "
	"the exception. This instruction does not have a delay slot.",
	"PC <- EPCR\\SR <- ESR",
	"PC <- EPCR\\SR <- ESR",
	"None", ORBIS32I,},
 
{"l.cust1", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust2", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust3", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust4", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust5", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust6", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust7", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
{"l.cust8", "Reserved for ORBIS32/64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but rather "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORBIS32II,},
 
/*** ORFPX32 ***/
 
{"lf.add.s", "Add Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA are added to the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"vfrD[31:0] <- vfrA[31:0] + vfrB[31:0]",
	"vfrD[31:0] <- vfrA[31:0] + vfrB[31:0]\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32I,},
 
{"lf.sub.s", "Subtract Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrB are subtracted from the contents "
	"of vector/floating-point register vfrA to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"vfrD[31:0] <- vfrA[31:0] - vfrB[31:0]",
	"vfrD[31:0] <- vfrA[31:0] - vfrB[31:0]\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32I,},
 
{"lf.mul.s", "Multiply Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA are multiplied by the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"vfrD[31:0] <- vfrA[31:0] * vfrB[31:0]",
	"vfrD[31:0] <- vfrA[31:0] * vfrB[31:0]\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32I,},
 
{"lf.div.s", "Divide Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA are divided by the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"vfrD[31:0] <- vfrA[31:0] / vfrB[31:0]",
	"vfrD[31:0] <- vfrA[31:0] / vfrB[31:0]\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32II,},
 
{"lf.rem.s", "Remainder Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA are divided by the contents "
	"of vector/floating-point register vfrB, and remainder is used as the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"vfrD[31:0] <- vfrA[31:0] % vfrB[31:0]",
	"vfrD[31:0] <- vfrA[31:0] % vfrB[31:0]\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32II,},
 
{"lf.madd.s", "Multiply and Add Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA are multiplied by the contents "
	"of vector/floating-point register vfrB, and added to special-purpose register "
	"FPMADDLO/FPMADDHI.",
	"FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[31:0] * vfrB[31:0] + FPMADDHI[31:0]FPMADDLO[31:0]",
	"FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[31:0] * vfrB[31:0] + FPMADDHI[31:0]FPMADDLO[31:0]\\FPMADDHI <- 0\\FPMADDLO <- 0",
	"Floating Point", ORFPX32II,},
 
{"lf.sfeq.s", "Set Flag if Equal Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the two registers are equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] == vfrB[31:0]",
	"SR[F] <- vfrA[31:0] == vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.sfne.s", "Set Flag if Not Equal Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the two registers are not equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] != vfrB[31:0]",
	"SR[F] <- vfrA[31:0] != vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.sfgt.s", "Set Flag if Greater Than Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is greater than "
	"the second register, the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] > vfrB[31:0]",
	"SR[F] <- vfrA[31:0] > vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.sfge.s", "Set Flag if Greater or Equal Than Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is greater than "
	"or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] >= vfrB[31:0]",
	"SR[F] <- vfrA[31:0] >= vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.sflt.s", "Set Flag if Less Than Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is less than the "
	"second register, the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] < vfrB[31:0]",
	"SR[F] <- vfrA[31:0] < vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.sfle.s", "Set Flag if Less or Equal Than Floating-Point Single-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is less than "
	"or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
	"SR[F] <- vfrA[31:0] <= vfrB[31:0]",
	"SR[F] <- vfrA[31:0] <= vfrB[31:0]",
	"None", ORFPX32I,},
 
{"lf.ftoi.s", "Floating-Point Single-Precision To Integer",
	"The contents of vector/floating-point register vfrA are converted to an integer "
	"and stored into general-purpose register rD.",
	"rD[31:0] <- ftoi(vfrA[31:0])",
	"rD[31:0] <- ftoi(vfrA[31:0])\\rD[63:32] <- 0",
	"Floating Point", ORFPX32I,},
 
{"lf.itof.s", "Integer To Floating-Point Single-Precision",
	"The contents of general-purpose register rA are converted to a single-precision "
	"floating-point number and stored into vector/floating-point register vfrD.",
	"vfrD[31:0] <- itof(rA[31:0])",
	"vfrD[31:0] <- itof(rA[31:0])\\vfrD[63:32] <- 0",
	"Floating Point", ORFPX32I,},
 
{"lf.cust1.s", "Reserved for ORFPX32 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORFPX32II,},
 
/*** ORFPX64 ***/
 
{"lf.add.d", "Add Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA are added to the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] + vfrB[63:0]",
	"Floating Point", ORFPX64I,},
 
{"lf.sub.d", "Subtract Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrB are subtracted from the contents "
	"of vector/floating-point register vfrA to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] - vfrB[63:0]",
	"Floating Point", ORFPX64I,},
 
{"lf.mul.d", "Multiply Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA are multiplied by the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] * vfrB[63:0]",
	"Floating Point", ORFPX64I,},
 
{"lf.div.d", "Divide Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA are divided by the contents "
	"of vector/floating-point register vfrB to form the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] / vfrB[63:0]",
	"Floating Point", ORFPX64II,},
 
{"lf.rem.d", "Remainder Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA are divided by the contents "
	"of vector/floating-point register vfrB, and remainder is used as the result. The result is placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] % vfrB[63:0]",
	"Floating Point", ORFPX64II,},
 
{"lf.madd.d", "Multiply and Add Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA are multiplied by the contents "
	"of vector/floating-point register vfrB, and added to special-purpose register "
	"FPMADDLO/FPMADDHI.",
	"N/A",
	"FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[63:0] * vfrB[63:0] + FPMADDHI[31:0]FPMADDLO[31:0]",
	"Floating Point", ORFPX64II,},
 
{"lf.sfeq.d", "Set Flag if Equal Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the two registers are equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[63:0] == vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.sfne.d", "Set Flag if Not Equal Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the two registers are not equal, "
	"the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[63:0] != vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.sfgt.d", "Set Flag if Greater Than Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is greater than the "
	"second register, the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[63:0] > vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.sfge.d", "Set Flag if Greater or Equal Than Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is greater than "
	"or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[63:0] >= vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.sflt.d", "Set Flag if Less Than Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is less than the "
	"second register, the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[63:0] < vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.sfle.d", "Set Flag if Less or Equal Than Floating-Point Double-Precision",
	"The contents of vector/floating-point register vfrA and the contents of "
	"vector/floating-point register vfrB are compared. If the first register is less than "
	"or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
	"N/A",
	"SR[F] <- vfrA[363:0] <= vfrB[63:0]",
	"None", ORFPX64I,},
 
{"lf.ftoi.d", "Floating-Point Double-Precision To Integer",
	"The contents of vector/floating-point register vfrA are converted to an integer "
	"and stored in general-purpose register rD.",
	"N/A",
	"rD[63:0] <- ftoi(vfrA[63:0])",
	"Floating Point", ORFPX64I,},
 
{"lf.itof.d", "Integer To Floating-Point Double-Precision",
	"The contents of general-purpose register rA are converted to a double-precision "
	"floating-point number and stored in vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- itof(rA[63:0])",
	"Floating Point", ORFPX64I,},
 
{"lf.cust1.d", "Reserved for ORFPX64 Custom Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORFPX64II,},
 
/*** ORVDX64 ***/
 
{"lv.all_eq.b", "Vector Byte Elements All Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all corresponding elements are equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] == vfrB[7:0] \\"
	"\tvfrA[15:8] == vfrB[15:8] &&\\"
	"\tvfrA[23:16] == vfrB[23:16] &&\\"
	"\tvfrA[31:24] == vfrB[31:24] &&\\"
	"\tvfrA[39:32] == vfrB[39:32] &&\\"
	"\tvfrA[47:40] == vfrB[47:40] &&\\"
	"\tvfrA[55:48] == vfrB[55:48] &&\\"
	"\tvfrA[63:56] == vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_eq.h", "Vector Half-Word Elements All Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all corresponding elements are equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] == vfrB[15:0] &&\\"
	"\tvfrA[31:16] == vfrB[31:16] &&\\"
	"\tvfrA[47:32] == vfrB[47:32] &&\\"
	"\tvfrA[63:48] == vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_ge.b", "Vector Byte Elements All Greater Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are greater than or equal to the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] >= vfrB[7:0] &&\\"
	"\tvfrA[15:8] >= vfrB[15:8] &&\\"
	"\tvfrA[23:16] >= vfrB[23:16] &&\\"
	"\tvfrA[31:24] >= vfrB[31:24] &&\\"
	"\tvfrA[39:32] >= vfrB[39:32] &&\\"
	"\tvfrA[47:40] >= vfrB[47:40] &&\\"
	"\tvfrA[55:48] >= vfrB[55:48] &&\\"
	"\tvfrA[63:56] >= vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_ge.h", "Vector Half-Word Elements All Greater Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are greater than or equal to the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] >= vfrB[15:0] &&\\"
	"\tvfrA[31:16] >= vfrB[31:16] &&\\"
	"\tvfrA[47:32] >= vfrB[47:32] &&\\"
	"\tvfrA[63:48] >= vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_gt.b", "Vector Byte Elements All Greater Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are greater than the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] > vfrB[7:0] &&\\"
	"\tvfrA[15:8] > vfrB[15:8] &&\\"
	"\tvfrA[23:16] > vfrB[23:16] &&\\"
	"\tvfrA[31:24] > vfrB[31:24] &&\\"
	"\tvfrA[39:32] > vfrB[39:32] &&\\"
	"\tvfrA[47:40] > vfrB[47:40] &&\\"
	"\tvfrA[55:48] > vfrB[55:48] &&\\"
	"\tvfrA[63:56] > vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_gt.h", "Vector Half-Word Elements All Greater Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are greater than the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] > vfrB[15:0] &&\\"
	"\tvfrA[31:16] > vfrB[31:16] &&\\"
	"\tvfrA[47:32] > vfrB[47:32] &&\\"
	"\tvfrA[63:48] > vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_lt.b", "Vector Byte Elements All Less Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are less than the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] < vfrB[7:0] &&\\"
	"\tvfrA[15:8] < vfrB[15:8] &&\\"
	"\tvfrA[23:16] < vfrB[23:16] &&\\"
	"\tvfrA[31:24] < vfrB[31:24] &&\\"
	"\tvfrA[39:32] < vfrB[39:32] &&\\"
	"\tvfrA[47:40] < vfrB[47:40] &&\\"
	"\tvfrA[55:48] < vfrB[55:48] &&\\"
	"\tvfrA[63:56] < vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_lt.h", "Vector Half-Word Elements All Less Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are less than the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] < vfrB[15:0] &&\\"
	"\tvfrA[31:16] < vfrB[31:16] &&\\"
	"\tvfrA[47:32] < vfrB[47:32] &&\\"
	"\tvfrA[63:48] < vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_le.b", "Vector Byte Elements All Less Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are less than or equal to the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] <= vfrB[7:0] &&\\"
	"\tvfrA[15:8] <= vfrB[15:8] &&\\"
	"\tvfrA[23:16] <= vfrB[23:16] &&\\"
	"\tvfrA[31:24] <= vfrB[31:24] &&\\"
	"\tvfrA[39:32] <= vfrB[39:32] &&\\"
	"\tvfrA[47:40] <= vfrB[47:40] &&\\"
	"\tvfrA[55:48] <= vfrB[55:48] &&\\"
	"\tvfrA[63:56] <= vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_le.h", "Vector Half-Word Elements All Less Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all elements of vfrA are less than or equal to the elements of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] <= vfrB[15:0] &&\\"
	"\tvfrA[31:16] <= vfrB[31:16] &&\\"
	"\tvfrA[47:32] <= vfrB[47:32] &&\\"
	"\tvfrA[63:48] <= vfrB[63:48]"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_ne.b", "Vector Byte Elements All Not Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if all corresponding elements are not equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] != vfrB[7:0] &&\\"
	"\tvfrA[15:8] != vfrB[15:8] &&\\"
	"\tvfrA[23:16] != vfrB[23:16] &&\\"
	"\tvfrA[31:24] != vfrB[31:24] &&\\"
	"\tvfrA[39:32] != vfrB[39:32] &&\\"
	"\tvfrA[47:40] != vfrB[47:40] &&\\"
	"\tvfrA[55:48] != vfrB[55:48] &&\\"
	"\tvfrA[63:56] != vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.all_ne.h", "Vector Half-Word Elements All Not Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if all corresponding elements are not equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] != vfrB[15:0] &&\\"
	"\tvfrA[31:16] != vfrB[31:16] &&\\"
	"\tvfrA[47:32] != vfrB[47:32] &&\\"
	"\tvfrA[63:48] != vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_eq.b", "Vector Byte Elements Any Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any two corresponding elements are equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] == vfrB[7:0] ||\\"
	"\tvfrA[15:8] == vfrB[15:8] ||\\"
	"\tvfrA[23:16] == vfrB[23:16] ||\\"
	"\tvfrA[31:24] == vfrB[31:24] ||\\"
	"\tvfrA[39:32] == vfrB[39:32] ||\\"
	"\tvfrA[47:40] == vfrB[47:40] ||\\"
	"\tvfrA[55:48] == vfrB[55:48] ||\\"
	"\tvfrA[63:56] == vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_eq.h", "Vector Half-Word Elements Any Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any two corresponding elements are equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] == vfrB[15:0] ||\\"
	"\tvfrA[31:16] == vfrB[31:16] ||\\"
	"\tvfrA[47:32] == vfrB[47:32] ||\\"
	"\tvfrA[63:48] == vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_ge.b", "Vector Byte Elements Any Greater Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is greater than or equal to the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] >= vfrB[7:0] ||\\"
	"\tvfrA[15:8] >= vfrB[15:8] ||\\"
	"\tvfrA[23:16] >= vfrB[23:16] ||\\"
	"\tvfrA[31:24] >= vfrB[31:24] ||\\"
	"\tvfrA[39:32] >= vfrB[39:32] ||\\"
	"\tvfrA[47:40] >= vfrB[47:40] ||\\"
	"\tvfrA[55:48] >= vfrB[55:48] ||\\"
	"\tvfrA[63:56] >= vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_ge.h", "Vector Half-Word Elements Any Greater Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is greater than or equal to the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] >= vfrB[15:0] ||\\"
	"\tvfrA[31:16] >= vfrB[31:16] ||\\"
	"\tvfrA[47:32] >= vfrB[47:32] ||\\"
	"\tvfrA[63:48] >= vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_gt.b", "Vector Byte Elements Any Greater Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is greater than the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] > vfrB[7:0] ||\\"
	"\tvfrA[15:8] > vfrB[15:8] ||\\"
	"\tvfrA[23:16] > vfrB[23:16] ||\\"
	"\tvfrA[31:24] > vfrB[31:24] ||\\"
	"\tvfrA[39:32] > vfrB[39:32] ||\\"
	"\tvfrA[47:40] > vfrB[47:40] ||\\"
	"\tvfrA[55:48] > vfrB[55:48] ||\\"
	"\tvfrA[63:56] > vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_gt.h", "Vector Half-Word Elements Any Greater Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is greater than the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] > vfrB[15:0] ||\\"
	"\tvfrA[31:16] > vfrB[31:16] ||\\"
	"\tvfrA[47:32] > vfrB[47:32] ||\\"
	"\tvfrA[63:48] > vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_lt.b", "Vector Byte Elements Any Less Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is less than the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] < vfrB[7:0] ||\\"
	"\tvfrA[15:8] < vfrB[15:8] ||\\"
	"\tvfrA[23:16] < vfrB[23:16] ||\\"
	"\tvfrA[31:24] < vfrB[31:24] ||\\"
	"\tvfrA[39:32] < vfrB[39:32] ||\\"
	"\tvfrA[47:40] < vfrB[47:40] ||\\"
	"\tvfrA[55:48] < vfrB[55:48] ||\\"
	"\tvfrA[63:56] < vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_lt.h", "Vector Half-Word Elements Any Less Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is less than the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] < vfrB[15:0] ||\\"
	"\tvfrA[31:16] < vfrB[31:16] ||\\"
	"\tvfrA[47:32] < vfrB[47:32] ||\\"
	"\tvfrA[63:48] < vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_le.b", "Vector Byte Elements Any Less Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is less than or equal to the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] <= vfrB[7:0] ||\\"
	"\tvfrA[15:8] <= vfrB[15:8] ||\\"
	"\tvfrA[23:16] <= vfrB[23:16] ||\\"
	"\tvfrA[31:24] <= vfrB[31:24] ||\\"
	"\tvfrA[39:32] <= vfrB[39:32] ||\\"
	"\tvfrA[47:40] <= vfrB[47:40] ||\\"
	"\tvfrA[55:48] <= vfrB[55:48] ||\\"
	"\tvfrA[63:56] <= vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_le.h", "Vector Half-Word Elements Any Less Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any element of vfrA is less than or equal to the corresponding element of vfrB;"
	" otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] ,= vfrB[15:0] ||\\"
	"\tvfrA[31:16] <= vfrB[31:16] ||\\"
	"\tvfrA[47:32] <= vfrB[47:32] ||\\"
	"\tvfrA[63:48] <= vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_ne.b", "Vector Byte Elements Any Not Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. The compare flag is "
	"set if any two corresponding elements are not equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[7:0] != vfrB[7:0] ||\\"
	"\tvfrA[15:8] != vfrB[15:8] ||\\"
	"\tvfrA[23:16] != vfrB[23:16] ||\\"
	"\tvfrA[31:24] != vfrB[31:24] ||\\"
	"\tvfrA[39:32] != vfrB[39:32] ||\\"
	"\tvfrA[47:40] != vfrB[47:40] ||\\"
	"\tvfrA[55:48] != vfrB[55:48] ||\\"
	"\tvfrA[63:56] != vfrB[63:56]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.any_ne.h", "Vector Half-Word Elements Any Not Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. The compare flag is "
	"set if any two corresponding elements are not equal; otherwise the compare flag is cleared. "
	"\\The compare flag is replicated into all bit positions of vector/floating-point "
	"register vfrD.",
	"N/A",
	"flag <- vfrA[15:0] != vfrB[15:0] ||\\"
	"\tvfrA[31:16] != vfrB[31:16] ||\\"
	"\tvfrA[47:32] != vfrB[47:32] ||\\"
	"\tvfrA[63:48] != vfrB[63:48]\\"
	"vfrD[63:0] <- repl(flag)",
	"None", ORVDX64I,},
 
{"lv.cmp_eq.b", "Vector Byte Elements Compare Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the two corresponding compared "
	"elements are equal; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] == vfrB[7:0]\\"
	"vfrD[15:8] <- repl(vfrA[15:8] == vfrB[15:8]\\"
	"vfrD[23:16] <- repl(vfrA[23:16] == vfrB[23:16]\\"
	"vfrD[31:24] <- repl(vfrA[31:24] == vfrB[31:24]\\"
	"vfrD[39:32] <- repl(vfrA[39:32] == vfrB[39:32]\\"
	"vfrD[47:40] <- repl(vfrA[47:40] == vfrB[47:40]\\"
	"vfrD[55:48] <- repl(vfrA[55:48] == vfrB[55:48]\\"
	"vfrD[63:56] <- repl(vfrA[63:56] == vfrB[63:56]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_eq.h", "Vector Half-Word Elements Compare Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the two corresponding compared "
	"elements are equal; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] == vfrB[7:0]\\"
	"vfrD[31:16] <- repl(vfrA[23:16] == vfrB[23:16]\\"
	"vfrD[47:32] <- repl(vfrA[39:32] == vfrB[39:32]\\"
	"vfrD[63:48] <- repl(vfrA[55:48] == vfrB[55:48]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_ge.b", "Vector Byte Elements Compare Greater Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"greater than or equal to the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] >= vfrB[7:0]\\"
	"vfrD[15:8] <- repl(vfrA[15:8] >= vfrB[15:8]\\"
	"vfrD[23:16] <- repl(vfrA[23:16] >= vfrB[23:16]\\"
	"vfrD[31:24] <- repl(vfrA[31:24] >= vfrB[31:24]\\"
	"vfrD[39:32] <- repl(vfrA[39:32] >= vfrB[39:32]\\"
	"vfrD[47:40] <- repl(vfrA[47:40] >= vfrB[47:40]\\"
	"vfrD[55:48] <- repl(vfrA[55:48] >= vfrB[55:48]\\"
	"vfrD[63:56] <- repl(vfrA[63:56] >= vfrB[63:56]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_ge.h", "Vector Half-Word Elements Compare Greater Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"greater than or equal to the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] >= vfrB[7:0]\\"
	"vfrD[31:16] <- repl(vfrA[23:16] >= vfrB[23:16]\\"
	"vfrD[47:32] <- repl(vfrA[39:32] >= vfrB[39:32]\\"
	"vfrD[63:48] <- repl(vfrA[55:48] >= vfrB[55:48]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_gt.b", "Vector Byte Elements Compare Greater Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"greater than the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] > vfrB[7:0]\\"
	"vfrD[15:8] <- repl(vfrA[15:8] > vfrB[15:8]\\"
	"vfrD[23:16] <- repl(vfrA[23:16] > vfrB[23:16]\\"
	"vfrD[31:24] <- repl(vfrA[31:24] > vfrB[31:24]\\"
	"vfrD[39:32] <- repl(vfrA[39:32] > vfrB[39:32]\\"
	"vfrD[47:40] <- repl(vfrA[47:40] > vfrB[47:40]\\"
	"vfrD[55:48] <- repl(vfrA[55:48] > vfrB[55:48]\\"
	"vfrD[63:56] <- repl(vfrA[63:56] > vfrB[63:56]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_gt.h", "Vector Half-Word Elements Compare Greater Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"greater than the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] > vfrB[7:0]\\"
	"vfrD[31:16] <- repl(vfrA[23:16] > vfrB[23:16]\\"
	"vfrD[47:32] <- repl(vfrA[39:32] > vfrB[39:32]\\"
	"vfrD[63:48] <- repl(vfrA[55:48] > vfrB[55:48]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_le.b", "Vector Byte Elements Compare Less Than or Equal To",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"less than or equal to the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
	"vfrD[15:8] <- repl(vfrA[15:8] <= vfrB[15:8]\\"
	"vfrD[23:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
	"vfrD[31:24] <- repl(vfrA[31:24] <= vfrB[31:24]\\"
	"vfrD[39:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
	"vfrD[47:40] <- repl(vfrA[47:40] <= vfrB[47:40]\\"
	"vfrD[55:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\"
	"vfrD[63:56] <- repl(vfrA[63:56] <= vfrB[63:56]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_le.h", "Vector Half-Word Elements Compare Less Than or Equal To",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"less than or equal to the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
	"vfrD[31:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
	"vfrD[47:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
	"vfrD[63:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_lt.b", "Vector Byte Elements Compare Less Than",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"less than the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
	"vfrD[15:8] <- repl(vfrA[15:8] <= vfrB[15:8]\\"
	"vfrD[23:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
	"vfrD[31:24] <- repl(vfrA[31:24] <= vfrB[31:24]\\"
	"vfrD[39:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
	"vfrD[47:40] <- repl(vfrA[47:40] <= vfrB[47:40]\\"
	"vfrD[55:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\"
	"vfrD[63:56] <- repl(vfrA[63:56] <= vfrB[63:56]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_lt.h", "Vector Half-Word Elements Compare Less Than",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the element in vfrA is "
	"less than the element in vfrB; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
	"vfrD[31:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
	"vfrD[47:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
	"vfrD[63:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\",
	"None", ORVDX64I,},
 
{"lv.cmp_ne.b", "Vector Byte Elements Compare Not Equal",
	"All byte elements of vector/floating-point register vfrA are compared "
	"to the byte elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the two corresponding compared "
	"elements are not equal; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[7:0] <- repl(vfrA[7:0] != vfrB[7:0])\\"
	"vfrD[15:8] <- repl(vfrA[15:8] != vfrB[15:8])\\"
	"vfrD[23:16] <- repl(vfrA[23:16] != vfrB[23:16])\\"
	"vfrD[31:24] <- repl(vfrA[31:24] != vfrB[31:24])\\"
	"vfrD[39:32] <- repl(vfrA[39:32] != vfrB[39:32])\\"
	"vfrD[47:40] <- repl(vfrA[47:40] != vfrB[47:40])\\"
	"vfrD[55:48] <- repl(vfrA[55:48] != vfrB[55:48])\\"
	"vfrD[63:56] <- repl(vfrA[63:56] != vfrB[63:56])\\",
	"None", ORVDX64I,},
 
{"lv.cmp_ne.h", "Vector Half-Word Elements Compare Not Equal",
	"All half-word elements of vector/floating-point register vfrA are compared "
	"to the half-word elements of vector/floating-point register vfrB. Bits of the element "
	"in vector/floating-point register vfrD are set if the two corresponding compared "
	"elements are not equal; otherwise the element bits are cleared. ",
	"N/A",
	"vfrD[15:0] <- repl(vfrA[7:0] != vfrB[7:0])\\"
	"vfrD[31:16] <- repl(vfrA[23:16] != vfrB[23:16])\\"
	"vfrD[47:32] <- repl(vfrA[39:32] != vfrB[39:32])\\"
	"vfrD[63:48] <- repl(vfrA[55:48] != vfrB[55:48])\\",
	"None", ORVDX64I,},
 
{"lv.and", "Vector And",
	"The contents of vector/floating-point register vfrA are combined with the contents "
	"of vector/floating-point register vfrB in a bit-wise logical AND operation. The "
	"result is placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] AND vfrB[63:0]",
	"None", ORVDX64I,},
 
{"lv.nand", "Vector Not And",
	"The contents of vector/floating-point register vfrA are combined with the contents "
	"of vector/floating-point register vfrB in a bit-wise logical NAND operation. The "
	"result is placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] NAND vfrB[63:0]",
	"None", ORVDX64I,},
 
{"lv.nor", "Vector Not Or",
	"The contents of vector/floating-point register vfrA are combined with the contents "
	"of vector/floating-point register vfrB in a bit-wise logical NOR operation. The "
	"result is placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] NOR vfrB[63:0]",
	"None", ORVDX64I,},
 
{"lv.or", "Vector Or",
	"The contents of vector/floating-point register vfrA are combined with the contents "
	"of vector/floating-point register vfrB in a bit-wise logical OR operation. The "
	"result is placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] OR vfrB[63:0]",
	"None", ORVDX64I,},
 
{"lv.xor", "Vector Exclusive Or",
	"The contents of vector/floating-point register vfrA are combined with the contents "
	"of vector/floating-point register vfrB in a bit-wise logical XOR operation. The "
	"result is placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] XOR vfrB[63:0]",
	"None", ORVDX64I,},
 
{"lv.add.b", "Vector Byte Elements Add Signed",
	"The byte elements of vector/floating-point register vfrA are added to the byte elements "
	"of vector/floating-point register vfrB to form the result elements. The result "
	"elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] + vfrB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] + vfrB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] + vfrB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] + vfrB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] + vfrB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] + vfrB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] + vfrB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] + vfrB[63:56]",
	"None", ORVDX64I,},
 
{"lv.add.h", "Vector Half-Word Elements Add Signed",
	"The half-word elements of vector/floating-point register vfrA are added to the "
	"half-word elements of vector/floating-point register vfrB to form the result "
	"elements. The result elements are placed into vector/floating-point "
	"register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] + vfrB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] + vfrB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] + vfrB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] + vfrB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.sub.b", "Vector Byte Elements Subtract Signed",
	"The byte elements of vector/floating-point register vfrB are subtracted from the "
	"byte elements of vector/floating-point register vfrA to form the result elements. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] - vfrB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] - vfrB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] - vfrB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] - vfrB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] - vfrB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] - vfrB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] - vfrB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] - vfrB[63:56]",
	"None", ORVDX64I,},
 
{"lv.sub.h", "Vector Half-Word Elements Subtract Signed",
	"The half-word elements of vector/floating-point register vfrB are subtracted from the "
	"half-word elements of vector/floating-point register vfrA to form the result "
	"elements. The result elements are placed into vector/floating-point "
	"register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] - vfrB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] - vfrB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] - vfrB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] - vfrB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.adds.b", "Vector Byte Elements Add Signed Saturated",
	"The byte elements of vector/floating-point register vfrA are added to the byte elements "
	"of vector/floating-point register vfrB to form the result elements. If the result "
	"exceeds the min/max value for the destination data type, it is saturated to the min/max value "
	"and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8s(vfrA[7:0] + vfrB[7:0])\\"
	"vfrD[15:8] <- sat8s(vfrA[15:8] + vfrB[15:8])\\"
	"vfrD[23:16] <- sat8s(vfrA[23:16] + vfrB[23:16])\\"
	"vfrD[31:24] <- sat8s(vfrA[31:24] + vfrB[31:24])\\"
	"vfrD[39:32] <- sat8s(vfrA[39:32] + vfrB[39:32])\\"
	"vfrD[47:40] <- sat8s(vfrA[47:40] + vfrB[47:40])\\"
	"vfrD[55:48] <- sat8s(vfrA[55:48] + vfrB[55:48])\\"
	"vfrD[63:56] <- sat8s(vfrA[63:56] + vfrB[63:56])",
	"None", ORVDX64I,},
 
{"lv.adds.h", "Vector Half-Word Elements Add Signed Saturated",
	"The half-word elements of vector/floating-point register vfrA are added to the "
	"half-word elements of vector/floating-point register vfrB to form the result "
	"elements. If the result exceeds the min/max value for the destination data type, "
	"it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- sat16s(vfrA[15:0] + vfrB[15:0])\\"
	"vfrD[31:16] <- sat16s(vfrA[31:16] + vfrB[31:16])\\"
	"vfrD[47:32] <- sat16s(vfrA[47:32] + vfrB[47:32])\\"
	"vfrD[63:48] <- sat16s(vfrA[63:48] + vfrB[63:48])",
	"None", ORVDX64I,},
 
{"lv.subs.b", "Vector Byte Elements Subtract Signed Saturated",
	"The byte elements of vector/floating-point register vfrB are subtracted from the byte elements "
	"of vector/floating-point register vfrA to form the result elements. If the result "
	"exceeds the min/max value for the destination data type, it is saturated to the min/max value "
	"and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8s(vfrA[7:0] + vfrB[7:0])\\"
	"vfrD[15:8] <- sat8s(vfrA[15:8] + vfrB[15:8])\\"
	"vfrD[23:16] <- sat8s(vfrA[23:16] + vfrB[23:16])\\"
	"vfrD[31:24] <- sat8s(vfrA[31:24] + vfrB[31:24])\\"
	"vfrD[39:32] <- sat8s(vfrA[39:32] + vfrB[39:32])\\"
	"vfrD[47:40] <- sat8s(vfrA[47:40] + vfrB[47:40])\\"
	"vfrD[55:48] <- sat8s(vfrA[55:48] + vfrB[55:48])\\"
	"vfrD[63:56] <- sat8s(vfrA[63:56] + vfrB[63:56])",
	"None", ORVDX64I,},
 
{"lv.subs.h", "Vector Half-Word Elements Subtract Signed Saturated",
	"The half-word elements of vector/floating-point register vfrB are subtracted from the "
	"half-word elements of vector/floating-point register vfrA to form the result "
	"elements. If the result exceeds the min/max value for the destination data type, "
	"it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- sat16s(vfrA[15:0] - vfrB[15:0])\\"
	"vfrD[31:16] <- sat16s(vfrA[31:16] - vfrB[31:16])\\"
	"vfrD[47:32] <- sat16s(vfrA[47:32] - vfrB[47:32])\\"
	"vfrD[63:48] <- sat16s(vfrA[63:48] - vfrB[63:48])",
	"None", ORVDX64I,},
 
{"lv.addu.b", "Vector Byte Elements Add Unsigned",
	"The unsigned byte elements of vector/floating-point register vfrA are added to "
	"the unsigned byte elements of vector/floating-point register vfrB to form the "
	"result elements. The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] + vfrB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] + vfrB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] + vfrB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] + vfrB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] + vfrB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] + vfrB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] + vfrB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] + vfrB[63:56]",
	"None", ORVDX64I,},
 
{"lv.addu.h", "Vector Half-Word Elements Add Unsigned",
	"The unsigned half-word elements of vector/floating-point register vfrA are added to the "
	"unsigned half-word elements of vector/floating-point register vfrB to form the result "
	"elements. The result elements are placed into vector/floating-point "
	"register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] + vfrB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] + vfrB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] + vfrB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] + vfrB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.subu.b", "Vector Byte Elements Subtract Unsigned",
	"The unsigned byte elements of vector/floating-point register vfrB are subtracted from the "
	"unsigned byte elements of vector/floating-point register vfrA to form the result elements. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] - vfrB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] - vfrB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] - vfrB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] - vfrB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] - vfrB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] - vfrB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] - vfrB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] - vfrB[63:56]",
	"None", ORVDX64I,},
 
{"lv.subu.h", "Vector Half-Word Elements Subtract Unsigned",
	"The unsigned half-word elements of vector/floating-point register vfrB are subtracted from the "
	"unsigned half-word elements of vector/floating-point register vfrA to form the result "
	"elements. The result elements are placed into vector/floating-point "
	"register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] - vfrB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] - vfrB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] - vfrB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] - vfrB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.addus.b", "Vector Byte Elements Add Unsigned Saturated",
	"The unsigned byte elements of vector/floating-point register vfrA are added to the "
	"unsigned byte elements of vector/floating-point register vfrB to form the result "
	"elements. If the result exceeds the min/max value for the destination data type, "
	"it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8u(vfrA[7:0] + vfrB[7:0])\\"
	"vfrD[15:8] <- sat8u(vfrA[15:8] + vfrB[15:8])\\"
	"vfrD[23:16] <- sat8u(vfrA[23:16] + vfrB[23:16])\\"
	"vfrD[31:24] <- sat8u(vfrA[31:24] + vfrB[31:24])\\"
	"vfrD[39:32] <- sat8u(vfrA[39:32] + vfrB[39:32])\\"
	"vfrD[47:40] <- sat8u(vfrA[47:40] + vfrB[47:40])\\"
	"vfrD[55:48] <- sat8u(vfrA[55:48] + vfrB[55:48])\\"
	"vfrD[63:56] <- sat8u(vfrA[63:56] + vfrB[63:56])",
	"None", ORVDX64I,},
 
{"lv.addus.h", "Vector Half-Word Elements Add Unsigned Saturated",
	"The unsigned half-word elements of vector/floating-point register vfrA are added to the "
	"unsigned half-word elements of vector/floating-point register vfrB to form the result "
	"elements. If the result exceeds the min/max value for the destination data type, "
	"it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- sat16s(vfrA[15:0] + vfrB[15:0])\\"
	"vfrD[31:16] <- sat16s(vfrA[31:16] + vfrB[31:16])\\"
	"vfrD[47:32] <- sat16s(vfrA[47:32] + vfrB[47:32])\\"
	"vfrD[63:48] <- sat16s(vfrA[63:48] + vfrB[63:48])",
	"None", ORVDX64I,},
 
{"lv.subus.b", "Vector Byte Elements Subtract Unsigned Saturated",
	"The unsigned byte elements of vector/floating-point register vfrB are subtracted from "
	"the unsigned byte elements of vector/floating-point register vfrA to form the result "
	"elements. If the result exceeds the min/max value for the destination data type, it is "
	"saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8u(vfrA[7:0] + vfrB[7:0])\\"
	"vfrD[15:8] <- sat8u(vfrA[15:8] + vfrB[15:8])\\"
	"vfrD[23:16] <- sat8u(vfrA[23:16] + vfrB[23:16])\\"
	"vfrD[31:24] <- sat8u(vfrA[31:24] + vfrB[31:24])\\"
	"vfrD[39:32] <- sat8u(vfrA[39:32] + vfrB[39:32])\\"
	"vfrD[47:40] <- sat8u(vfrA[47:40] + vfrB[47:40])\\"
	"vfrD[55:48] <- sat8u(vfrA[55:48] + vfrB[55:48])\\"
	"vfrD[63:56] <- sat8u(vfrA[63:56] + vfrB[63:56])",
	"None", ORVDX64I,},
 
{"lv.subus.h", "Vector Half-Word Elements Subtract Unsigned Saturated",
	"The unsigned half-word elements of vector/floating-point register vfrB are subtracted "
	"from the unsigned half-word elements of vector/floating-point register vfrA to form "
	"the result elements. If the result exceeds the min/max value for the destination data type, "
	"it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- sat16u(vfrA[15:0] - vfrB[15:0])\\"
	"vfrD[31:16] <- sat16u(vfrA[31:16] - vfrB[31:16])\\"
	"vfrD[47:32] <- sat16u(vfrA[47:32] - vfrB[47:32])\\"
	"vfrD[63:48] <- sat16u(vfrA[63:48] - vfrB[63:48])",
	"None", ORVDX64I,},
 
{"lv.avg.b", "Vector Byte Elements Average",
	"The byte elements of vector/floating-point register vfrA are added to the byte elements "
	"of vector/floating-point register vfrB, and the sum is shifted right by one to form the "
	"result elements. The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- (vfrA[7:0] + vfrB[7:0]) >> 1\\"
	"vfrD[15:8] <- (vfrA[15:8] + vfrB[15:8]) >> 1\\"
	"vfrD[23:16] <- (vfrA[23:16] + vfrB[23:16]) >> 1\\"
	"vfrD[31:24] <- (vfrA[31:24] + vfrB[31:24]) >> 1\\"
	"vfrD[39:32] <- (vfrA[39:32] + vfrB[39:32]) >> 1\\"
	"vfrD[47:40] <- (vfrA[47:40] + vfrB[47:40]) >> 1\\"
	"vfrD[55:48] <- (vfrA[55:48] + vfrB[55:48]) >> 1\\"
	"vfrD[63:56] <- (vfrA[63:56] + vfrB[63:56]) >> 1",
	"None", ORVDX64I,},
 
{"lv.avg.h", "Vector Half-Word Elements Average",
	"The half-word elements of vector/floating-point register vfrA are added to the "
	"half-word elements of vector/floating-point register vfrB, and the sum is shifted "
	"right by one to form the result elements. The result elements are placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- (vfrA[15:0] + vfrB[15:0]) >> 1\\"
	"vfrD[31:16] <- (vfrA[31:16] + vfrB[31:16]) >> 1\\"
	"vfrD[47:32] <- (vfrA[47:32] + vfrB[47:32]) >> 1\\"
	"vfrD[63:48] <- (vfrA[63:48] + vfrB[63:48]) >> 1\\",
	"None", ORVDX64I,},
 
{"lv.max.b", "Vector Byte Elements Maximum",
	"The byte elements of vector/floating-point register vfrA are compared to the byte elements "
	"of vector/floating-point register vfrB, and the larger elements are selected to form the "
	"result elements. The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] > vfrB[7:0] ? vfrA[7:0] : vrfB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] > vfrB[15:8] ? vfrA[15:8] : vrfB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] > vfrB[23:16] ? vfrA[23:16] : vrfB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] > vfrB[31:24] ? vfrA[31:24] : vrfB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] > vfrB[39:32] ? vfrA[39:32] : vrfB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] > vfrB[47:40] ? vfrA[47:40] : vrfB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] > vfrB[55:48] ? vfrA[55:48] : vrfB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] > vfrB[63:56] ? vfrA[63:56] : vrfB[63:56]",
	"None", ORVDX64I,},
 
{"lv.max.h", "Vector Half-Word Elements Maximum",
	"The half-word elements of vector/floating-point register vfrA are compared to the "
	"half-word elements of vector/floating-point register vfrB, and the larger elements "
	"are selected to form the result elements. The result elements are placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] > vfrB[15:0] ? vfrA[15:0] : vrfB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] > vfrB[31:16] ? vfrA[31:16] : vrfB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] > vfrB[47:32] ? vfrA[47:32] : vrfB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] > vfrB[63:48] ? vfrA[63:48] : vrfB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.min.b", "Vector Byte Elements Minimum",
	"The byte elements of vector/floating-point register vfrA are compared to the byte elements "
	"of vector/floating-point register vfrB, and the smaller elements are selected to form the "
	"result elements. The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] < vfrB[7:0] ? vfrA[7:0] : vrfB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8] < vfrB[15:8] ? vfrA[15:8] : vrfB[15:8]\\"
	"vfrD[23:16] <- vfrA[23:16] < vfrB[23:16] ? vfrA[23:16] : vrfB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24] < vfrB[31:24] ? vfrA[31:24] : vrfB[31:24]\\"
	"vfrD[39:32] <- vfrA[39:32] < vfrB[39:32] ? vfrA[39:32] : vrfB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40] < vfrB[47:40] ? vfrA[47:40] : vrfB[47:40]\\"
	"vfrD[55:48] <- vfrA[55:48] < vfrB[55:48] ? vfrA[55:48] : vrfB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56] < vfrB[63:56] ? vfrA[63:56] : vrfB[63:56]",
	"None", ORVDX64I,},
 
{"lv.min.h", "Vector Half-Word Elements Minimum",
	"The half-word elements of vector/floating-point register vfrA are compared to the "
	"half-word elements of vector/floating-point register vfrB, and the smaller elements "
	"are selected to form the result elements. The result elements are placed into "
	"vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] < vfrB[15:0] ? vfrA[15:0] : vrfB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16] < vfrB[31:16] ? vfrA[31:16] : vrfB[31:16]\\"
	"vfrD[47:32] <- vfrA[47:32] < vfrB[47:32] ? vfrA[47:32] : vrfB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48] < vfrB[63:48] ? vfrA[63:48] : vrfB[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.sll.b", "Vector Byte Elements Shift Left Logical",
	"The contents of byte elements of vector/floating-point register vfrA are "
	"shifted left by the number of bits specified in the lower 3 bits in each byte element "
	"of vector/floating-point register vfrB, inserting zeros into the low-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] << vfrB[2:0]\\"
	"vfrD[15:8] <- vfrA[15:8] << vfrB[10:8]\\"
	"vfrD[23:16] <- vfrA[23:16] << vfrB[18:16]\\"
	"vfrD[31:24] <- vfrA[31:24] << vfrB[26:24]\\"
	"vfrD[39:32] <- vfrA[39:32] << vfrB[34:32]\\"
	"vfrD[47:40] <- vfrA[47:40] << vfrB[42:40]\\"
	"vfrD[55:48] <- vfrA[55:48] << vfrB[50:48]\\"
	"vfrD[63:56] <- vfrA[63:56] << vfrB[58:56]",
	"None", ORVDX64I,},
 
{"lv.sll.h", "Vector Half-Word Elements Shift Left Logical",
	"The contents of half-word elements of vector/floating-point register vfrA are "
	"shifted left by the number of bits specified in the lower 4 bits in each half-word element "
	"of vector/floating-point register vfrB, inserting zeros into the low-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] << vfrB[3:0]\\"
	"vfrD[31:16] <- vfrA[31:16] << vfrB[19:16]\\"
	"vfrD[47:32] <- vfrA[47:32] << vfrB[35:32]\\"
	"vfrD[63:48] <- vfrA[63:48] << vfrB[51:48]\\",
	"None", ORVDX64I,},
 
{"lv.srl.b", "Vector Byte Elements Shift Right Logical",
	"The contents of byte elements of vector/floating-point register vfrA are "
	"shifted right by the number of bits specified in the lower 3 bits in each byte element "
	"of vector/floating-point register vfrB, inserting zeros into the high-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] >> vfrB[2:0]\\"
	"vfrD[15:8] <- vfrA[15:8] >> vfrB[10:8]\\"
	"vfrD[23:16] <- vfrA[23:16] >> vfrB[18:16]\\"
	"vfrD[31:24] <- vfrA[31:24] >> vfrB[26:24]\\"
	"vfrD[39:32] <- vfrA[39:32] >> vfrB[34:32]\\"
	"vfrD[47:40] <- vfrA[47:40] >> vfrB[42:40]\\"
	"vfrD[55:48] <- vfrA[55:48] >> vfrB[50:48]\\"
	"vfrD[63:56] <- vfrA[63:56] >> vfrB[58:56]",
	"None", ORVDX64I,},
 
{"lv.srl.h", "Vector Half-Word Elements Shift Right Logical",
	"The contents of half-word elements of vector/floating-point register vfrA are "
	"shifted right by the number of bits specified in the lower 4 bits in each half-word element "
	"of vector/floating-point register vfrB, inserting zeros into the high-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] >> vfrB[3:0]\\"
	"vfrD[31:16] <- vfrA[31:16] >> vfrB[19:16]\\"
	"vfrD[47:32] <- vfrA[47:32] >> vfrB[35:32]\\"
	"vfrD[63:48] <- vfrA[63:48] >> vfrB[51:48]\\",
	"None", ORVDX64I,},
 
{"lv.sra.b", "Vector Byte Elements Shift Right Arithmetic",
	"The contents of byte elements of vector/floating-point register vfrA are "
	"shifted right by the number of bits specified in the lower 3 bits in each byte element "
	"of vector/floating-point register vfrB, inserting the most significant bit of each "
	"element into the high-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] sra vfrB[2:0]\\"
	"vfrD[15:8] <- vfrA[15:8] sra vfrB[10:8]\\"
	"vfrD[23:16] <- vfrA[23:16] sra vfrB[18:16]\\"
	"vfrD[31:24] <- vfrA[31:24] sra vfrB[26:24]\\"
	"vfrD[39:32] <- vfrA[39:32] sra vfrB[34:32]\\"
	"vfrD[47:40] <- vfrA[47:40] sra vfrB[42:40]\\"
	"vfrD[55:48] <- vfrA[55:48] sra vfrB[50:48]\\"
	"vfrD[63:56] <- vfrA[63:56] sra vfrB[58:56]",
	"None", ORVDX64I,},
 
{"lv.sra.h", "Vector Half-Word Elements Shift Right Arithmetic",
	"The contents of half-word elements of vector/floating-point register vfrA are "
	"shifted right by the number of bits specified in the lower 4 bits in each half-word element "
	"of vector/floating-point register vfrB, inserting the most significant bit of each element "
	"into the high-order bits. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] sra vfrB[3:0]\\"
	"vfrD[31:16] <- vfrA[31:16] sra vfrB[19:16]\\"
	"vfrD[47:32] <- vfrA[47:32] sra vfrB[35:32]\\"
	"vfrD[63:48] <- vfrA[63:48] sra vfrB[51:48]\\",
	"None", ORVDX64I,},
 
{"lv.rl.b", "Vector Byte Elements Rotate Left",
	"The contents of byte elements of vector/floating-point register vfrA are "
	"rotated left by the number of bits specified in the lower 3 bits in each byte element "
	"of vector/floating-point register vfrB. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrA[7:0] rl vfrB[2:0]\\"
	"vfrD[15:8] <- vfrA[15:8] rl vfrB[10:8]\\"
	"vfrD[23:16] <- vfrA[23:16] rl vfrB[18:16]\\"
	"vfrD[31:24] <- vfrA[31:24] rl vfrB[26:24]\\"
	"vfrD[39:32] <- vfrA[39:32] rl vfrB[34:32]\\"
	"vfrD[47:40] <- vfrA[47:40] rl vfrB[42:40]\\"
	"vfrD[55:48] <- vfrA[55:48] rl vfrB[50:48]\\"
	"vfrD[63:56] <- vfrA[63:56] rl vfrB[58:56]",
	"None", ORVDX64I,},
 
{"lv.rl.h", "Vector Half-Word Elements Rotate Left",
	"The contents of half-word elements of vector/floating-point register vfrA are "
	"rotated left by the number of bits specified in the lower 4 bits in each half-word element "
	"of vector/floating-point register vfrB. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrA[15:0] rl vfrB[3:0]\\"
	"vfrD[31:16] <- vfrA[31:16] rl vfrB[19:16]\\"
	"vfrD[47:32] <- vfrA[47:32] rl vfrB[35:32]\\"
	"vfrD[63:48] <- vfrA[63:48] rl vfrB[51:48]\\",
	"None", ORVDX64I,},
 
{"lv.sll", "Vector Shift Left Logical",
	"The contents of vector/floating-point register vfrA are "
	"shifted left by the number of bits specified in the lower 4 bits in each byte element "
	"of vector/floating-point register vfrB, inserting zeros into the low-order bits of "
	"vfrD. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] << vfrB[2:0]",
	"None", ORVDX64I,},
 
{"lv.srl", "Vector Shift Right Logical",
	"The contents of vector/floating-point register vfrA are "
	"shifted right by the number of bits specified in the lower 4 bits in each byte element "
	"of vector/floating-point register vfrB, inserting zeros into the high-order bits of "
	"vfrD. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[63:0] <- vfrA[63:0] >> vfrB[2:0]",
	"None", ORVDX64I,},
 
{"lv.merge.b", "Vector Byte Elements Merge",
	"The byte elements of the lower half of the vector/floating-point register vfrA are "
	"combined with the byte elements of the lower half of vector/floating-point "
	"register vfrB in such a way that the lowest element is from vfrB, the second element "
	"from vfrA, the third again from vfrB etc. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrB[7:0]\\"
	"vfrD[15:8] <- vfrA[15:8]\\"
	"vfrD[23:16] <- vfrB[23:16]\\"
	"vfrD[31:24] <- vfrA[31:24]\\"
	"vfrD[39:32] <- vfrB[39:32]\\"
	"vfrD[47:40] <- vfrA[47:40]\\"
	"vfrD[55:48] <- vfrB[55:48]\\"
	"vfrD[63:56] <- vfrA[63:56]",
	"None", ORVDX64I,},
 
{"lv.merge.h", "Vector Half-Word Elements Merge",
	"The half-word elements of the lower half of the vector/floating-point register vfrA are "
	"combined with the half-word elements of the lower half of vector/floating-point "
	"register vfrB in such a way that the lowest element is from vfrB, the second element "
	"from vfrA, the third again from vfrB etc. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- vfrB[15:0]\\"
	"vfrD[31:16] <- vfrA[31:16]\\"
	"vfrD[47:32] <- vfrB[47:32]\\"
	"vfrD[63:48] <- vfrA[63:48]",
	"None", ORVDX64I,},
 
{"lv.pack.b", "Vector Byte Elements Pack",
	"The lower half of the byte elements of the vector/floating-point register vfrA are "
	"truncated and combined with the lower half of the byte truncated elements of the "
	"vector/floating-point register vfrB in such a way that the lowest elements are from "
	"vfrB, and the highest elements from vfrA. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[3:0] <- vfrB[3:0]\\"
	"vfrD[7:4] <- vfrB[11:8]\\"
	"vfrD[11:8] <- vfrB[19:16]\\"
	"vfrD[15:12] <- vfrB[27:24]\\"
	"vfrD[19:16] <- vfrB[35:32]\\"
	"vfrD[23:20] <- vfrB[43:40]\\"
	"vfrD[27:24] <- vfrB[51:48]\\"
	"vfrD[31:28] <- vfrB[59:56]\\"
	"vfrD[35:32] <- vfrA[3:0]\\"
	"vfrD[39:36] <- vfrA[11:8]\\"
	"vfrD[43:40] <- vfrA[19:16]\\"
	"vfrD[47:44] <- vfrA[27:24]\\"
	"vfrD[51:48] <- vfrA[35:32]\\"
	"vfrD[55:52] <- vfrA[43:40]\\"
	"vfrD[59:56] <- vfrA[51:48]\\"
	"vfrD[63:60] <- vfrA[59:56]",
	"None", ORVDX64I,},
 
{"lv.pack.h", "Vector Half-word Elements Pack",
	"The lower half of the half-word elements of the vector/floating-point register vfrA are "
	"truncated and combined with the lower half of the half-word truncated elements of the "
	"vector/floating-point register vfrB in such a way that the lowest elements are from vfrB, and the highest elements "
	"from vfrA. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- vfrB[15:0]\\"
	"vfrD[15:8] <- vfrB[31:16]\\"
	"vfrD[23:16] <- vfrB[47:32]\\"
	"vfrD[31:24] <- vfrB[63:48]\\"
	"vfrD[39:32] <- vfrA[15:0]\\"
	"vfrD[47:40] <- vfrA[31:16]\\"
	"vfrD[55:48] <- vfrA[47:32]\\"
	"vfrD[63:56] <- vfrA[63:48]\\",
	"None", ORVDX64I,},
 
{"lv.packs.b", "Vector Byte Elements Pack Signed Saturated",
	"The lower half of the signed byte elements of the vector/floating-point register vfrA are "
	"truncated and combined with the lower half of the signed byte truncated elements of "
	"the vector/floating-point register vfrB in such a way that the lowest elements are from "
	"vfrB, and the highest elements from vfrA. "
	"If any truncated element exceeds a signed 4-bit value, it is saturated. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[3:0] <- sat4s(vfrB[7:0]\\"
	"vfrD[7:4] <- sat4s(vfrB[15:8]\\"
	"vfrD[11:8] <- sat4s(vfrB[23:16]\\"
	"vfrD[15:12] <- sat4s(vfrB[31:24]\\"
	"vfrD[19:16] <- sat4s(vfrB[39:32]\\"
	"vfrD[23:20] <- sat4s(vfrB[47:40]\\"
	"vfrD[27:24] <- sat4s(vfrB[55:48]\\"
	"vfrD[31:28] <- sat4s(vfrB[63:56]\\"
	"vfrD[35:32] <- sat4s(vfrA[7:0]\\"
	"vfrD[39:36] <- sat4s(vfrA[15:8]\\"
	"vfrD[43:40] <- sat4s(vfrA[23:16]\\"
	"vfrD[47:44] <- sat4s(vfrA[31:24]\\"
	"vfrD[51:48] <- sat4s(vfrA[39:32]\\"
	"vfrD[55:52] <- sat4s(vfrA[47:40]\\"
	"vfrD[59:56] <- sat4s(vfrA[55:48]\\"
	"vfrD[63:60] <- sat4s(vfrA[63:56]",
	"None", ORVDX64I,},
 
{"lv.packs.h", "Vector Half-word Elements Pack Signed Saturated",
	"The lower half of the signed halfword elements of the vector/floating-point register "
	"vfrA are truncated and combined with the lower half of the signed half-word "
	"truncated elements of the vector/floating-point register vfrB in such a way "
	"that the lowest elements are from vfrB, and the highest elements from vfrA. "
	"If any truncated element exceeds a signed 8-bit value, it is saturated. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8s(vfrB[15:0])\\"
	"vfrD[15:8] <- sat8s(vfrB[31:16])\\"
	"vfrD[23:16] <- sat8s(vfrB[47:32])\\"
	"vfrD[31:24] <- sat8s(vfrB[63:48])\\"
	"vfrD[39:32] <- sat8s(vfrA[15:0])\\"
	"vfrD[47:40] <- sat8s(vfrA[31:16])\\"
	"vfrD[55:48] <- sat8s(vfrA[47:32])\\"
	"vfrD[63:56] <- sat8s(vfrA[63:48])\\",
	"None", ORVDX64I,},
 
{"lv.packus.b", "Vector Byte Elements Pack Unsigned Saturated",
	"The lower half of the unsigned byte elements of the vector/floating-point register vfrA are "
	"truncated and combined with the lower half of the unsigned byte truncated elements of "
	"the vector/floating-point register vfrB in such a way that the lowest elements are from "
	"vfrB, and the highest elements from vfrA. "
	"If any truncated element exceeds an unsigned 4-bit value, it is saturated. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[3:0] <- sat4u(vfrB[7:0]\\"
	"vfrD[7:4] <- sat4u(vfrB[15:8]\\"
	"vfrD[11:8] <- sat4u(vfrB[23:16]\\"
	"vfrD[15:12] <- sat4u(vfrB[31:24]\\"
	"vfrD[19:16] <- sat4u(vfrB[39:32]\\"
	"vfrD[23:20] <- sat4u(vfrB[47:40]\\"
	"vfrD[27:24] <- sat4u(vfrB[55:48]\\"
	"vfrD[31:28] <- sat4u(vfrB[63:56]\\"
	"vfrD[35:32] <- sat4u(vfrA[7:0]\\"
	"vfrD[39:36] <- sat4u(vfrA[15:8]\\"
	"vfrD[43:40] <- sat4u(vfrA[23:16]\\"
	"vfrD[47:44] <- sat4u(vfrA[31:24]\\"
	"vfrD[51:48] <- sat4u(vfrA[39:32]\\"
	"vfrD[55:52] <- sat4u(vfrA[47:40]\\"
	"vfrD[59:56] <- sat4u(vfrA[55:48]\\"
	"vfrD[63:60] <- sat4u(vfrA[63:56]",
	"None", ORVDX64I,},
 
{"lv.packus.h", "Vector Half-word Elements Pack Unsigned Saturated",
	"The lower half of the unsigned halfword elements of the vector/floating-point register "
	"vfrA are truncated and combined with the lower half of the unsigned half-word "
	"truncated elements of the vector/floating-point register vfrB in such a way "
	"that the lowest elements are from vfrB, and the highest elements from vfrA. "
	"If any truncated element exceeds an unsigned 8-bit value, it is saturated. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- sat8u(vfrB[15:0])\\"
	"vfrD[15:8] <- sat8u(vfrB[31:16])\\"
	"vfrD[23:16] <- sat8u(vfrB[47:32])\\"
	"vfrD[31:24] <- sat8u(vfrB[63:48])\\"
	"vfrD[39:32] <- sat8u(vfrA[15:0])\\"
	"vfrD[47:40] <- sat8u(vfrA[31:16])\\"
	"vfrD[55:48] <- sat8u(vfrA[47:32])\\"
	"vfrD[63:56] <- sat8u(vfrA[63:48])\\",
	"None", ORVDX64I,},
 
{"lv.unpack.b", "Vector Byte Elements Unpack",
	"The lower half of the 4-bit elements in vector/floating-point register "
	"vfrA are sign-extended and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[7:0] <- exts(vfrA[3:0])\\"
	"vfrD[15:8] <- exts(vfrA[7:4])\\"
	"vfrD[23:16] <- exts(vfrA[11:8])\\"
	"vfrD[31:24] <- exts(vfrA[15:12])\\"
	"vfrD[39:32] <- exts(vfrA[19:16])\\"
	"vfrD[47:40] <- exts(vfrA[23:20])\\"
	"vfrD[55:48] <- exts(vfrA[27:24])\\"
	"vfrD[63:56] <- exts(vfrA[31:28])",
	"None", ORVDX64I,},
 
{"lv.unpack.h", "Vector Half-Word Elements Unpack",
	"The lower half of the 8-bit elements in vector/floating-point register "
	"vfrA are sign-extended and placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[15:0] <- exts(vfrA[7:0])\\"
	"vfrD[31:16] <- exts(vfrA[15:8])\\"
	"vfrD[47:32] <- exts(vfrA[23:16])\\"
	"vfrD[63:48] <- exts(vfrA[31:24])\\",
	"None", ORVDX64I,},
 
{"lv.perm.n", "Vector Nibble Elements Permute",
	"The 4-bit elements of vector/floating-point register vfrA are "
	"permuted according to the corresponding 4-bit values in vector/floating-point "
	"register vfrB. "
	"The result elements are placed into vector/floating-point register vfrD.",
	"N/A",
	"vfrD[3:0] <- vfrA[vfrB[3:0]*4+3:vfrB[3:0]*4]\\"
	"vfrD[7:4] <- vfrA[vfrB[7:4]*4+3:vfrB[7:4]*4]\\"
	"vfrD[11:8] <- vfrA[vfrB[11:8]*4+3:vfrB[11:8]*4]\\"
	"vfrD[15:12] <- vfrA[vfrB[15:12]*4+3:vfrB[15:12]*4]\\"
	"vfrD[19:16] <- vfrA[vfrB[19:16]*4+3:vfrB[19:16]*4]\\"
	"vfrD[23:20] <- vfrA[vfrB[23:20]*4+3:vfrB[23:20]*4]\\"
	"vfrD[27:24] <- vfrA[vfrB[27:24]*4+3:vfrB[27:24]*4]\\"
	"vfrD[31:28] <- vfrA[vfrB[31:28]*4+3:vfrB[31:28]*4]\\"
	"vfrD[35:32] <- vfrA[vfrB[35:32]*4+3:vfrB[35:32]*4]\\"
	"vfrD[39:36] <- vfrA[vfrB[39:36]*4+3:vfrB[39:36]*4]\\"
	"vfrD[43:40] <- vfrA[vfrB[43:40]*4+3:vfrB[43:40]*4]\\"
	"vfrD[47:44] <- vfrA[vfrB[47:44]*4+3:vfrB[47:44]*4]\\"
	"vfrD[51:48] <- vfrA[vfrB[51:48]*4+3:vfrB[51:48]*4]\\"
	"vfrD[55:52] <- vfrA[vfrB[55:52]*4+3:vfrB[55:52]*4]\\"
	"vfrD[59:56] <- vfrA[vfrB[59:56]*4+3:vfrB[59:56]*4]\\"
	"vfrD[63:60] <- vfrA[vfrB[63:60]*4+3:vfrB[63:60]*4]",
	"None", ORVDX64I,},
 
{"lv.madds.h", "Vector Half-Word Elements Multiply Add Signed Saturated",
	"The signed half-word elements of vector/floating-point register vfrA are multiplied "
	"by the signed half-word elements of vector/floating-point register vfrB to form "
	"intermediate results. They are then added to the signed half-word VMAC elements to "
	"form the final results that are placed again in the VMAC registers. "
	"The intermediate result is placed into vector/floating-point register vfrD. "
	"If any of the final results exceeds the min/max value, it is saturated.",
	"N/A",
	"vfrD[15:0] <- sat32s(vfrA[15:0] * vfrB[15:0] + VMACLO[31:0])\\"
	"vfrD[31:16] <- sat32s(vfrA[31:16] * vfrB[31:16] + VMACLO[63:32])\\"
	"vfrD[47:32] <- sat32s(vfrA[47:32] * vfrB[47:32] + VMACHI[31:0])\\"
	"vfrD[63:48] <- sat32s(vfrA[63:48] * vfrB[63:48] + VMACHI[63:32])\\",
	"None", ORVDX64I,},
 
{"lv.msubs.h", "Vector Half-Word Elements Multiply Subtract Signed Saturated",
	"The signed half-word elements of vector/floating-point register vfrA are multiplied "
	"by the signed half-word elements of vector/floating-point register vfrB to form "
	"intermediate results. They are then subtracted from the signed half-word VMAC elements to "
	"form the final results that are placed again in the VMAC registers. "
	"The intermediate result is placed into vector/floating-point register vfrD. "
	"If any of the final results exceeds the min/max value, it is saturated.",
	"N/A",
	"vfrD[15:0] <- sat32s(VMACLO[31:0] - vfrA[15:0] * vfrB[15:0])\\"
	"vfrD[31:16] <- sat32s(VMACLO[63:32] - vfrA[31:16] * vfrB[31:16])\\"
	"vfrD[47:32] <- sat32s(VMACHI[31:0] - vfrA[47:32] * vfrB[47:32])\\"
	"vfrD[63:48] <- sat32s(VMACHI[63:32] - vfrA[63:48] * vfrB[63:48])\\",
	"None", ORVDX64I,},
 
{"lv.muls.h", "Vector Half-Word Elements Multiply Signed Saturated",
	"The signed half-word elements of vector/floating-point register vfrA are multiplied "
	"by the signed half-word elements of vector/floating-point register vfrB to form "
	"the results. "
	"The result is placed into vector/floating-point register vfrD. "
	"If any of the final results exceeds the min/max value, it is saturated.",
	"N/A",
	"vfrD[15:0] <- sat32s(vfrA[15:0] * vfrB[15:0])\\"
	"vfrD[31:16] <- sat32s(vfrA[31:16] * vfrB[31:16])\\"
	"vfrD[47:32] <- sat32s(vfrA[47:32] * vfrB[47:32])\\"
	"vfrD[63:48] <- sat32s(vfrA[63:48] * vfrB[63:48])\\",
	"None", ORVDX64II,},
 
{"lv.cust1", "Reserved for Custom Vector Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORVDX64II,},
 
{"lv.cust2", "Reserved for Custom Vector Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORVDX64II,},
 
{"lv.cust3", "Reserved for Custom Vector Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORVDX64II,},
 
{"lv.cust4", "Reserved for Custom Vector Instructions",
	"This fake instruction only allocates instruction set space for custom instructions. "
	"Custom instructions are those that are not defined by the architecture but instead "
	"by the implementation itself.",
	"N/A",
	"N/A",
	"N/A", ORVDX64II,},
 
/**** L/S for ORFPX/ORVDX ***/
 
{"lvf.ld", "Load Vector/Floating-Point Double Word",
	"The contents of vector/floating-point "
	"register vfrA are used as an effective address. The double word in memory "
	"addressed by EA is loaded into vector/floating-point register vfrD. ",
	"N/A",
	"EA <- vfrA[63:0]\\vfrD[63:0] <- (EA)[63:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORFPX64I,},
 
{"lvf.lw", "Load Vector/Floating-Point Single Word",
	"The contents of vector/floating-point "
	"register vfrA are used as an effective address. The double word in memory "
	"addressed by EA is loaded into vector/floating-point register vfrD. ",
	"EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
	"EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORFPX32I,},
 
{"lvf.sd", "Store Vector/Floating-Point Double Word",
	"The contents of vector/floating-point "
	"register vfrA are used as an effective address. The double word in vector/floating-point "
	"register vrfB is stored to the memory location addressed by EA. ",
	"N/A",
	"EA <- vfrA[63:0]\\vfrD[63:0] <- (EA)[63:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORFPX64I,},
 
{"lvf.sw", "Store Vector/Floating-Point Single Word",
	"The contents of vector/floating-point "
	"register vfrA are used as an effective address. The single word in vector/floating-point "
	"register vrfB is stored to the memory location addressed by EA. ",
	"EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
	"EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
	"TLB miss\\Page fault\\Bus error\\Alignment", ORFPX32I,},
 
{"", "", "", "", "", "", 0}
 
};
 
struct or1k_isa_classes {
	char *title;
	char *desc;
	char *table;
} or1k_isa_classes[] = {
 
{ "", "x", "-&-\\", },
{ "", "x", "ORBIS32 I& \\", },
{ "", "x", "ORBIS32 II& \\", },
{ "", "x", "ORBIS64 I& \\", },
{ "", "x", "ORBIS64 II& \\", },
{ "", "x", "ORFPX32 I& \\", },
{ "", "x", "ORFPX32 II& \\", },
{ "", "x", "ORFPX64 I& \\", },
{ "", "x", "ORFPX64 II& \\", },
{ "", "x", "ORVDX64 I& \\", },
{ "", "x", "ORVDX64 II& \\", },
{ "", "x", "&\\", },
 
};
 
struct or1k_order {
	char *title;
	unsigned long classes;
} or1k_order[] = {
 
{ "ORBIS32/64", (1<<ORBIS32I)>>1 | (1<<ORBIS32II)>>1 | (1<<ORBIS64I)>>1 | (1<<ORBIS64II)>>1, },
{ "ORFPX32/64", (1<<ORFPX32I)>>1 | (1<<ORFPX32II)>>1 | (1<<ORFPX64I)>>1 | (1<<ORFPX64II)>>1, },
{ "ORVDX64", (1<<ORVDX64I)>>1 | (1<<ORVDX64II)>>1, },
{ "", 0, },
 
};
 
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.