mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Remove conditional from inside decompress module
This commit is contained in:
parent
0a011f4548
commit
d1839b6db2
@ -42,36 +42,32 @@ module decompress (
|
|||||||
logic [5:0] immSH;
|
logic [5:0] immSH;
|
||||||
logic [1:0] op;
|
logic [1:0] op;
|
||||||
|
|
||||||
// if the system handles compressed instructions, decode appropriately
|
// Extrac op and register source/destination fields
|
||||||
if (!(`C_SUPPORTED)) begin:decompress // no compressed mode
|
assign instr16 = InstrRawD[15:0]; // instruction is already aligned
|
||||||
assign InstrD = InstrRawD;
|
assign op = instr16[1:0];
|
||||||
assign IllegalCompInstrD = 0;
|
assign rds1 = instr16[11:7];
|
||||||
end else begin : decompress // COMPRESSED mode supported
|
assign rs2 = instr16[6:2];
|
||||||
assign instr16 = InstrRawD[15:0]; // instruction is already aligned
|
assign rs1p = {2'b01, instr16[9:7]};
|
||||||
assign op = instr16[1:0];
|
assign rds1p = {2'b01, instr16[9:7]};
|
||||||
assign rds1 = instr16[11:7];
|
assign rs2p = {2'b01, instr16[4:2]};
|
||||||
assign rs2 = instr16[6:2];
|
assign rdp = {2'b01, instr16[4:2]};
|
||||||
assign rs1p = {2'b01, instr16[9:7]};
|
|
||||||
assign rds1p = {2'b01, instr16[9:7]};
|
|
||||||
assign rs2p = {2'b01, instr16[4:2]};
|
|
||||||
assign rdp = {2'b01, instr16[4:2]};
|
|
||||||
|
|
||||||
// many compressed immediate formats
|
// many compressed immediate formats
|
||||||
assign immCILSP = {4'b0000, instr16[3:2], instr16[12], instr16[6:4], 2'b00};
|
assign immCILSP = {4'b0000, instr16[3:2], instr16[12], instr16[6:4], 2'b00};
|
||||||
assign immCILSPD = {3'b000, instr16[4:2], instr16[12], instr16[6:5], 3'b000};
|
assign immCILSPD = {3'b000, instr16[4:2], instr16[12], instr16[6:5], 3'b000};
|
||||||
assign immCSS = {4'b0000, instr16[8:7], instr16[12:9], 2'b00};
|
assign immCSS = {4'b0000, instr16[8:7], instr16[12:9], 2'b00};
|
||||||
assign immCSSD = {3'b000, instr16[9:7], instr16[12:10], 3'b000};
|
assign immCSSD = {3'b000, instr16[9:7], instr16[12:10], 3'b000};
|
||||||
assign immCL = {5'b0, instr16[5], instr16[12:10], instr16[6], 2'b00};
|
assign immCL = {5'b0, instr16[5], instr16[12:10], instr16[6], 2'b00};
|
||||||
assign immCLD = {4'b0, instr16[6:5], instr16[12:10], 3'b000};
|
assign immCLD = {4'b0, instr16[6:5], instr16[12:10], 3'b000};
|
||||||
assign immCS = {5'b0, instr16[5], instr16[12:10], instr16[6], 2'b00};
|
assign immCS = {5'b0, instr16[5], instr16[12:10], instr16[6], 2'b00};
|
||||||
assign immCSD = {4'b0, instr16[6:5], instr16[12:10], 3'b000};
|
assign immCSD = {4'b0, instr16[6:5], instr16[12:10], 3'b000};
|
||||||
assign immCJ = {instr16[12], instr16[8], instr16[10:9], instr16[6], instr16[7], instr16[2], instr16[11], instr16[5:3], {9{instr16[12]}}};
|
assign immCJ = {instr16[12], instr16[8], instr16[10:9], instr16[6], instr16[7], instr16[2], instr16[11], instr16[5:3], {9{instr16[12]}}};
|
||||||
assign immCB = {{4{instr16[12]}}, instr16[6:5], instr16[2], instr16[11:10], instr16[4:3], instr16[12]};
|
assign immCB = {{4{instr16[12]}}, instr16[6:5], instr16[2], instr16[11:10], instr16[4:3], instr16[12]};
|
||||||
assign immCI = {{7{instr16[12]}}, instr16[6:2]};
|
assign immCI = {{7{instr16[12]}}, instr16[6:2]};
|
||||||
assign immCILUI = {{15{instr16[12]}}, instr16[6:2]};
|
assign immCILUI = {{15{instr16[12]}}, instr16[6:2]};
|
||||||
assign immCIASP = {{3{instr16[12]}}, instr16[4:3], instr16[5], instr16[2], instr16[6], 4'b0000};
|
assign immCIASP = {{3{instr16[12]}}, instr16[4:3], instr16[5], instr16[2], instr16[6], 4'b0000};
|
||||||
assign immCIW = {2'b00, instr16[10:7], instr16[12:11], instr16[5], instr16[6], 2'b00};
|
assign immCIW = {2'b00, instr16[10:7], instr16[12:11], instr16[5], instr16[6], 2'b00};
|
||||||
assign immSH = {instr16[12], instr16[6:2]};
|
assign immSH = {instr16[12], instr16[6:2]};
|
||||||
|
|
||||||
// only for RV128
|
// only for RV128
|
||||||
// assign immCILSPQ = {2{instr16[5]}, instr16[5:2], instr16[12], instr16[6], 4'b0000};
|
// assign immCILSPQ = {2{instr16[5]}, instr16[5:2], instr16[12], instr16[6], 4'b0000};
|
||||||
@ -79,103 +75,102 @@ module decompress (
|
|||||||
// assign immCLQ = {4{instr16[10]}, instr16[6:5], instr16[12:11], 4'b0000};
|
// assign immCLQ = {4{instr16[10]}, instr16[6:5], instr16[12:11], 4'b0000};
|
||||||
// assign immCSQ = {4{instr16[10]}, instr16[6:5], instr16[12:11], 4'b0000};
|
// assign immCSQ = {4{instr16[10]}, instr16[6:5], instr16[12:11], 4'b0000};
|
||||||
|
|
||||||
always_comb
|
always_comb
|
||||||
if (op == 2'b11) begin // noncompressed instruction
|
if (op == 2'b11) begin // noncompressed instruction
|
||||||
InstrD = InstrRawD;
|
InstrD = InstrRawD;
|
||||||
IllegalCompInstrD = 0;
|
IllegalCompInstrD = 0;
|
||||||
end else begin // convert compressed instruction into uncompressed
|
end else begin // convert compressed instruction into uncompressed
|
||||||
IllegalCompInstrD = 0;
|
IllegalCompInstrD = 0;
|
||||||
case ({op, instr16[15:13]})
|
case ({op, instr16[15:13]})
|
||||||
5'b00000: if (immCIW != 0) InstrD = {immCIW, 5'b00010, 3'b000, rdp, 7'b0010011}; // c.addi4spn
|
5'b00000: if (immCIW != 0) InstrD = {immCIW, 5'b00010, 3'b000, rdp, 7'b0010011}; // c.addi4spn
|
||||||
else begin // illegal instruction
|
else begin // illegal instruction
|
||||||
|
IllegalCompInstrD = 1;
|
||||||
|
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
||||||
|
end
|
||||||
|
5'b00001: InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000111}; // c.fld
|
||||||
|
5'b00010: InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000011}; // c.lw
|
||||||
|
5'b00011: if (`XLEN==32)
|
||||||
|
InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000111}; // c.flw
|
||||||
|
else
|
||||||
|
InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000011}; // c.ld;
|
||||||
|
5'b00101: InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100111}; // c.fsd
|
||||||
|
5'b00110: InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100011}; // c.sw
|
||||||
|
5'b00111: if (`XLEN==32)
|
||||||
|
InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100111}; // c.fsw
|
||||||
|
else
|
||||||
|
InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100011}; //c.sd
|
||||||
|
5'b01000: InstrD = {immCI, rds1, 3'b000, rds1, 7'b0010011}; // c.addi
|
||||||
|
5'b01001: if (`XLEN==32)
|
||||||
|
InstrD = {immCJ, 5'b00001, 7'b1101111}; // c.jal
|
||||||
|
else
|
||||||
|
InstrD = {immCI, rds1, 3'b000, rds1, 7'b0011011}; // c.addiw
|
||||||
|
5'b01010: InstrD = {immCI, 5'b00000, 3'b000, rds1, 7'b0010011}; // c.li
|
||||||
|
5'b01011: if (rds1 != 5'b00010)
|
||||||
|
InstrD = {immCILUI, rds1, 7'b0110111}; // c.lui
|
||||||
|
else
|
||||||
|
InstrD = {immCIASP, rds1, 3'b000, rds1, 7'b0010011}; // c.addi16sp
|
||||||
|
5'b01100: if (instr16[11:10] == 2'b00)
|
||||||
|
InstrD = {6'b000000, immSH, rds1p, 3'b101, rds1p, 7'b0010011}; // c.srli
|
||||||
|
else if (instr16[11:10] == 2'b01)
|
||||||
|
InstrD = {6'b010000, immSH, rds1p, 3'b101, rds1p, 7'b0010011}; // c.srai
|
||||||
|
else if (instr16[11:10] == 2'b10)
|
||||||
|
InstrD = {immCI, rds1p, 3'b111, rds1p, 7'b0010011}; // c.andi
|
||||||
|
else if (instr16[12:10] == 3'b011)
|
||||||
|
if (instr16[6:5] == 2'b00)
|
||||||
|
InstrD = {7'b0100000, rs2p, rds1p, 3'b000, rds1p, 7'b0110011}; // c.sub
|
||||||
|
else if (instr16[6:5] == 2'b01)
|
||||||
|
InstrD = {7'b0000000, rs2p, rds1p, 3'b100, rds1p, 7'b0110011}; // c.xor
|
||||||
|
else if (instr16[6:5] == 2'b10)
|
||||||
|
InstrD = {7'b0000000, rs2p, rds1p, 3'b110, rds1p, 7'b0110011}; // c.or
|
||||||
|
else // if (instr16[6:5] == 2'b11)
|
||||||
|
InstrD = {7'b0000000, rs2p, rds1p, 3'b111, rds1p, 7'b0110011}; // c.and
|
||||||
|
else if (instr16[12:10] == 3'b111 & `XLEN > 32)
|
||||||
|
if (instr16[6:5] == 2'b00)
|
||||||
|
InstrD = {7'b0100000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.subw
|
||||||
|
else if (instr16[6:5] == 2'b01)
|
||||||
|
InstrD = {7'b0000000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.addw
|
||||||
|
else begin // reserved
|
||||||
IllegalCompInstrD = 1;
|
IllegalCompInstrD = 1;
|
||||||
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
||||||
end
|
end
|
||||||
5'b00001: InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000111}; // c.fld
|
else begin // illegal instruction
|
||||||
5'b00010: InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000011}; // c.lw
|
IllegalCompInstrD = 1;
|
||||||
5'b00011: if (`XLEN==32)
|
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
||||||
InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000111}; // c.flw
|
end
|
||||||
|
5'b01101: InstrD = {immCJ, 5'b00000, 7'b1101111}; // c.j
|
||||||
|
5'b01110: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b000, immCB[4:0], 7'b1100011}; // c.beqz
|
||||||
|
5'b01111: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b001, immCB[4:0], 7'b1100011}; // c.bnez
|
||||||
|
5'b10000: InstrD = {6'b000000, immSH, rds1, 3'b001, rds1, 7'b0010011}; // c.slli
|
||||||
|
5'b10001: InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000111}; // c.fldsp
|
||||||
|
5'b10010: InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000011}; // c.lwsp
|
||||||
|
5'b10011: if (`XLEN == 32)
|
||||||
|
InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000111}; // c.flwsp
|
||||||
|
else
|
||||||
|
InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000011}; // c.ldsp
|
||||||
|
5'b10100: if (instr16[12] == 0)
|
||||||
|
if (instr16[6:2] == 5'b00000)
|
||||||
|
InstrD = {7'b0000000, 5'b00000, rds1, 3'b000, 5'b00000, 7'b1100111}; // c.jr
|
||||||
else
|
else
|
||||||
InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000011}; // c.ld;
|
InstrD = {7'b0000000, rs2, 5'b00000, 3'b000, rds1, 7'b0110011}; // c.mv
|
||||||
5'b00101: InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100111}; // c.fsd
|
else
|
||||||
5'b00110: InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100011}; // c.sw
|
if (rs2 == 5'b00000)
|
||||||
5'b00111: if (`XLEN==32)
|
if (rds1 == 5'b00000)
|
||||||
InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100111}; // c.fsw
|
InstrD = {12'b1, 5'b00000, 3'b000, 5'b00000, 7'b1110011}; // c.ebreak
|
||||||
else
|
|
||||||
InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100011}; //c.sd
|
|
||||||
5'b01000: InstrD = {immCI, rds1, 3'b000, rds1, 7'b0010011}; // c.addi
|
|
||||||
5'b01001: if (`XLEN==32)
|
|
||||||
InstrD = {immCJ, 5'b00001, 7'b1101111}; // c.jal
|
|
||||||
else
|
|
||||||
InstrD = {immCI, rds1, 3'b000, rds1, 7'b0011011}; // c.addiw
|
|
||||||
5'b01010: InstrD = {immCI, 5'b00000, 3'b000, rds1, 7'b0010011}; // c.li
|
|
||||||
5'b01011: if (rds1 != 5'b00010)
|
|
||||||
InstrD = {immCILUI, rds1, 7'b0110111}; // c.lui
|
|
||||||
else
|
|
||||||
InstrD = {immCIASP, rds1, 3'b000, rds1, 7'b0010011}; // c.addi16sp
|
|
||||||
5'b01100: if (instr16[11:10] == 2'b00)
|
|
||||||
InstrD = {6'b000000, immSH, rds1p, 3'b101, rds1p, 7'b0010011}; // c.srli
|
|
||||||
else if (instr16[11:10] == 2'b01)
|
|
||||||
InstrD = {6'b010000, immSH, rds1p, 3'b101, rds1p, 7'b0010011}; // c.srai
|
|
||||||
else if (instr16[11:10] == 2'b10)
|
|
||||||
InstrD = {immCI, rds1p, 3'b111, rds1p, 7'b0010011}; // c.andi
|
|
||||||
else if (instr16[12:10] == 3'b011)
|
|
||||||
if (instr16[6:5] == 2'b00)
|
|
||||||
InstrD = {7'b0100000, rs2p, rds1p, 3'b000, rds1p, 7'b0110011}; // c.sub
|
|
||||||
else if (instr16[6:5] == 2'b01)
|
|
||||||
InstrD = {7'b0000000, rs2p, rds1p, 3'b100, rds1p, 7'b0110011}; // c.xor
|
|
||||||
else if (instr16[6:5] == 2'b10)
|
|
||||||
InstrD = {7'b0000000, rs2p, rds1p, 3'b110, rds1p, 7'b0110011}; // c.or
|
|
||||||
else // if (instr16[6:5] == 2'b11)
|
|
||||||
InstrD = {7'b0000000, rs2p, rds1p, 3'b111, rds1p, 7'b0110011}; // c.and
|
|
||||||
else if (instr16[12:10] == 3'b111 & `XLEN > 32)
|
|
||||||
if (instr16[6:5] == 2'b00)
|
|
||||||
InstrD = {7'b0100000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.subw
|
|
||||||
else if (instr16[6:5] == 2'b01)
|
|
||||||
InstrD = {7'b0000000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.addw
|
|
||||||
else begin // reserved
|
|
||||||
IllegalCompInstrD = 1;
|
|
||||||
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
|
||||||
end
|
|
||||||
else begin // illegal instruction
|
|
||||||
IllegalCompInstrD = 1;
|
|
||||||
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
|
||||||
end
|
|
||||||
5'b01101: InstrD = {immCJ, 5'b00000, 7'b1101111}; // c.j
|
|
||||||
5'b01110: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b000, immCB[4:0], 7'b1100011}; // c.beqz
|
|
||||||
5'b01111: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b001, immCB[4:0], 7'b1100011}; // c.bnez
|
|
||||||
5'b10000: InstrD = {6'b000000, immSH, rds1, 3'b001, rds1, 7'b0010011}; // c.slli
|
|
||||||
5'b10001: InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000111}; // c.fldsp
|
|
||||||
5'b10010: InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000011}; // c.lwsp
|
|
||||||
5'b10011: if (`XLEN == 32)
|
|
||||||
InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000111}; // c.flwsp
|
|
||||||
else
|
|
||||||
InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000011}; // c.ldsp
|
|
||||||
5'b10100: if (instr16[12] == 0)
|
|
||||||
if (instr16[6:2] == 5'b00000)
|
|
||||||
InstrD = {7'b0000000, 5'b00000, rds1, 3'b000, 5'b00000, 7'b1100111}; // c.jr
|
|
||||||
else
|
else
|
||||||
InstrD = {7'b0000000, rs2, 5'b00000, 3'b000, rds1, 7'b0110011}; // c.mv
|
InstrD = {12'b0, rds1, 3'b000, 5'b00001, 7'b1100111}; // c.jalr
|
||||||
else
|
else
|
||||||
if (rs2 == 5'b00000)
|
InstrD = {7'b0000000, rs2, rds1, 3'b000, rds1, 7'b0110011}; // c.add
|
||||||
if (rds1 == 5'b00000)
|
5'b10101: InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100111}; // c.fsdsp
|
||||||
InstrD = {12'b1, 5'b00000, 3'b000, 5'b00000, 7'b1110011}; // c.ebreak
|
5'b10110: InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100011}; // c.swsp
|
||||||
else
|
5'b10111: if (`XLEN==32)
|
||||||
InstrD = {12'b0, rds1, 3'b000, 5'b00001, 7'b1100111}; // c.jalr
|
InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100111}; // c.fswsp
|
||||||
else
|
else
|
||||||
InstrD = {7'b0000000, rs2, rds1, 3'b000, rds1, 7'b0110011}; // c.add
|
InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100011}; // c.sdsp
|
||||||
5'b10101: InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100111}; // c.fsdsp
|
default: begin // illegal instruction
|
||||||
5'b10110: InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100011}; // c.swsp
|
IllegalCompInstrD = 1;
|
||||||
5'b10111: if (`XLEN==32)
|
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
||||||
InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100111}; // c.fswsp
|
end
|
||||||
else
|
endcase
|
||||||
InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100011}; // c.sdsp
|
|
||||||
default: begin // illegal instruction
|
|
||||||
IllegalCompInstrD = 1;
|
|
||||||
InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap
|
|
||||||
end
|
|
||||||
endcase
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
@ -87,7 +87,6 @@ module ifu (
|
|||||||
);
|
);
|
||||||
(* mark_debug = "true" *) logic [`XLEN-1:0] PCNextF;
|
(* mark_debug = "true" *) logic [`XLEN-1:0] PCNextF;
|
||||||
logic BranchMisalignedFaultE;
|
logic BranchMisalignedFaultE;
|
||||||
logic IllegalCompInstrD;
|
|
||||||
logic [`XLEN-1:0] PCPlus2or4F, PCLinkD;
|
logic [`XLEN-1:0] PCPlus2or4F, PCLinkD;
|
||||||
logic [`XLEN-1:2] PCPlus4F;
|
logic [`XLEN-1:2] PCPlus4F;
|
||||||
logic CompressedF;
|
logic CompressedF;
|
||||||
@ -340,8 +339,14 @@ module ifu (
|
|||||||
flopenrc #(`XLEN) PCDReg(clk, reset, FlushD, ~StallD, PCF, PCD);
|
flopenrc #(`XLEN) PCDReg(clk, reset, FlushD, ~StallD, PCF, PCD);
|
||||||
|
|
||||||
// expand 16-bit compressed instructions to 32 bits
|
// expand 16-bit compressed instructions to 32 bits
|
||||||
decompress decomp(.InstrRawD, .InstrD, .IllegalCompInstrD); // *** move the config logic outside
|
if (`C_SUPPORTED) begin
|
||||||
assign IllegalIEUInstrFaultD = IllegalBaseInstrFaultD | IllegalCompInstrD; // illegal if bad 32 or 16-bit instr
|
logic IllegalCompInstrD;
|
||||||
|
decompress decomp(.InstrRawD, .InstrD, .IllegalCompInstrD);
|
||||||
|
assign IllegalIEUInstrFaultD = IllegalBaseInstrFaultD | IllegalCompInstrD; // illegal if bad 32 or 16-bit instr
|
||||||
|
end else begin
|
||||||
|
assign InstrD = InstrRawD;
|
||||||
|
assign IllegalIEUInstrFaultD = IllegalBaseInstrFaultD;
|
||||||
|
end
|
||||||
|
|
||||||
// Misaligned PC logic
|
// Misaligned PC logic
|
||||||
// Instruction address misalignement only from br/jal(r) instructions.
|
// Instruction address misalignement only from br/jal(r) instructions.
|
||||||
|
Loading…
Reference in New Issue
Block a user