Line 1... |
Line 1... |
/* Information about OR1K ISA. W/o this we can't generate or1k_isa_part.tex.
|
/* Information about OR1K ISA. W/o this we can't generate or1k_isa_part.tex.
|
|
*
|
|
* $Log: not supported by cvs2svn $
|
*/
|
*/
|
|
|
struct or1k_isa {
|
struct or1k_isa {
|
char *name;
|
char *name;
|
char *title;
|
char *title;
|
Line 181... |
Line 183... |
"register rA. The sum represents an effective address. The byte in memory "
|
"register rA. The sum represents an effective address. The byte in memory "
|
"addressed by EA is loaded into the low-order eight bits of "
|
"addressed by EA is loaded into the low-order eight bits of "
|
"general-purpose register rD. "
|
"general-purpose register rD. "
|
"High-order bits of general-purpose register rD are replaced with "
|
"High-order bits of general-purpose register rD are replaced with "
|
"bit 7 of the loaded value.",
|
"bit 7 of the loaded value.",
|
"EA <- exts(Immediate) + rA[31:0]\\rD[7:0] <- (EA)[7:0]\\rD[31:8] <- \{rD[7]\}",
|
"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] <- \{rD[7]\}",
|
"EA <- exts(Immediate) + rA[63:0]\\rD[7:0] <- (EA)[7:0]\\rD[63:8] <- (EA)[7]",
|
"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
|
"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
|
|
|
{"l.lhs", "Load Half Word and Extend with Sign",
|
{"l.lhs", "Load Half Word and Extend with Sign",
|
"The offset is sign-extended and added to the contents of general-purpose "
|
"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 "
|
"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 "
|
"addressed by EA is loaded into the low-order 16 bits of "
|
"general-purpose register rD. "
|
"general-purpose register rD. "
|
"High-order bits of general-purpose register rD are replaced with "
|
"High-order bits of general-purpose register rD are replaced with "
|
"bit 15 of the loaded value.",
|
"bit 15 of the loaded value.",
|
"EA <- exts(Immediate) + rA[31:0]\\rD[15:0] <- (EA)[15:0]\\rD[31:16] <- \{rD[15]\}",
|
"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] <- \{rD[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,},
|
"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
|
|
|
{"l.lws", "Load Single Word and Extend with Sign",
|
{"l.lws", "Load Single Word and Extend with Sign",
|
"The offset is sign-extended and added to the contents of general-purpose "
|
"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 "
|
"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 "
|
"addressed by EA is loaded into the low-order 32 bits of "
|
"general-purpose register rD. "
|
"general-purpose register rD. "
|
"High-order bits of general-purpose register rD are replaced with "
|
"High-order bits of general-purpose register rD are replaced with "
|
"bit 31 of the loaded value.",
|
"bit 31 of the loaded value.",
|
"EA <- exts(Immediate) + rA[31:0]\\rD[31:0] <- (EA)[31:0]",
|
"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] <- \{rD[31]\}",
|
"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,},
|
"TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
|
|
|
{"l.lbz", "Load Byte and Extend with Zero",
|
{"l.lbz", "Load Byte and Extend with Zero",
|
"The offset is sign-extended and added to the contents of general-purpose "
|
"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 "
|
"register rA. The sum represents an effective address. The byte in memory "
|
Line 631... |
Line 633... |
"None", ORBIS32II,},
|
"None", ORBIS32II,},
|
|
|
{"l.mtspr", "Move To Special-Purpose Register",
|
{"l.mtspr", "Move To Special-Purpose Register",
|
"The contents of general-purpose register rB are moved into the special register "
|
"The contents of general-purpose register rB are moved into the special register "
|
"identified by the sum of general-purpose register rA and the immediate value.",
|
"identified by the sum of general-purpose register rA and the immediate value.",
|
"spr(rA+Immediate) <- rB[31:0]",
|
"spr(rA OR Immediate) <- rB[31:0]",
|
"spr(rA+Immediate) <- rB[31:0]",
|
"spr(rA OR Immediate) <- rB[31:0]",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.mfspr", "Move From Special-Purpose Register",
|
{"l.mfspr", "Move From Special-Purpose Register",
|
"The contents of the special register are identified by the sum of general-purpose rA, and "
|
"The contents of the special register are identified by the sum of general-purpose rA, and "
|
"the immediate value are moved into general-purpose register rD.",
|
"the immediate value are moved into general-purpose register rD.",
|
"rD[31:0] <- spr(rA+Immediate)",
|
"rD[31:0] <- spr(rA OR Immediate)",
|
"rD[63:0] <- spr(rA+Immediate)",
|
"rD[63:0] <- spr(rA OR Immediate)",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.nop", "No Operation",
|
{"l.nop", "No Operation",
|
"This instruction does not do anything except that it takes at least one "
|
"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."
|
"clock cycle to complete. It is often used to fill delay slot gaps."
|
Line 659... |
Line 661... |
"rD[63:0] <- extz(Immediate) << 16",
|
"rD[63:0] <- extz(Immediate) << 16",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.bf", "Branch if Flag",
|
{"l.bf", "Branch if Flag",
|
"The immediate value is shifted left two bits, sign-extended to "
|
"The immediate value is shifted left two bits, sign-extended to "
|
"program counter width, and then added to the address of the delay slot. The result "
|
"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, "
|
"is the effective address of the branch. If the flag is set, "
|
"the program branches "
|
"the program branches "
|
"to EA with a delay of one instruction.",
|
"to EA with a delay of one instruction.",
|
"EA <- exts(Immediate << 2) + DelayInsnAddr\\PC <- EA if SR[F] set",
|
"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
|
"EA <- exts(Immediate << 2) + DelayInsnAddr\\PC <- EA if SR[F] set",
|
"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.bnf", "Branch if No Flag",
|
{"l.bnf", "Branch if No Flag",
|
"The immediate value is shifted left two bits, sign-extended to "
|
"The immediate value is shifted left two bits, sign-extended to "
|
"program counter width, and then added to the address of the delay slot. The result "
|
"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, "
|
"is the effective address of the branch. If the flag is cleared, "
|
"the program branches "
|
"the program branches "
|
"to EA with a delay of one instruction.",
|
"to EA with a delay of one instruction.",
|
"EA <- exts(Immediate << 2) + DelayInsnAddr\\PC <- EA if SR[F] cleared",
|
"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
|
"EA <- exts(Immediate << 2) + DelayInsnAddr\\PC <- EA if SR[F] cleared",
|
"EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.jal", "Jump and Link",
|
{"l.jal", "Jump and Link",
|
"The immediate value is shifted left two bits, sign-extended to "
|
"The immediate value is shifted left two bits, sign-extended to "
|
"program counter width, and then added to the address of the delay slot. The result "
|
"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 "
|
"is the effective address of the jump. The program unconditionally jumps "
|
"to EA with a delay of one instruction. The "
|
"to EA with a delay of one instruction. The "
|
"address of the instruction after the delay slot is placed in the "
|
"address of the instruction after the delay slot is placed in the "
|
"link register. ",
|
"link register. ",
|
"PC <- exts(Immediate << 2) + DelayInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + DelayInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.j", "Jump",
|
{"l.j", "Jump",
|
"The immediate value is shifted left two bits, sign-extended to "
|
"The immediate value is shifted left two bits, sign-extended to "
|
"program counter width, and then added to the address of the delay slot. The result "
|
"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 "
|
"is the effective address of the jump. The program unconditionally jumps "
|
"to EA with a delay of one instruction.",
|
"to EA with a delay of one instruction.",
|
"PC <- exts(Immediate << 2) + DelayInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + DelayInsnAddr\\LR <- DelayInsnAddr + 4",
|
"PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
|
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.jalr", "Jump and Link Register",
|
{"l.jalr", "Jump and Link Register",
|
"The contents of general-purpose register rB "
|
"The contents of general-purpose register rB "
|
"is the effective address of the jump. The program unconditionally jumps "
|
"is the effective address of the jump. The program unconditionally jumps "
|
Line 718... |
Line 720... |
"None", ORBIS32I,},
|
"None", ORBIS32I,},
|
|
|
{"l.sys", "System Call",
|
{"l.sys", "System Call",
|
"Execution of the system call instruction results in the 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 "
|
"exception. The system calls exception is a request to the operating system "
|
"to provide operating system services. The immediate value specifies which system service "
|
"to provide operating system services. The immediate value can be used to "
|
"is required.",
|
"specify which system service is requested, alternatively a GPR defined by "
|
"system-call-exception()",
|
"the ABI can be used to specify system service.",
|
"system-call-exception()",
|
"system-call-exception(K)",
|
|
"system-call-exception(K)",
|
"System Call", ORBIS32I,},
|
"System Call", ORBIS32I,},
|
|
|
{"l.msync", "Memory Syncronization",
|
{"l.msync", "Memory Syncronization",
|
"Execution of the memory synchronization instruction results in completion "
|
"Execution of the memory synchronization instruction results in completion "
|
"of all load/store operations before the RISC core continues.",
|
"of all load/store operations before the RISC core continues.",
|