blob: 87e9518d25e454c0d3f99032657a8ad63702142e [file]
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#once
// This file defines the 16 bit instruction formats for the RISC-V encodings.
format Inst16Format[16] {
fields:
unsigned func3[3];
unsigned bits[11];
unsigned op[2];
};
format CSS[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm6[6];
unsigned rs2[5];
unsigned op[2];
overlays:
unsigned css_imm_w[8] = imm6[1..0], imm6[5..2], 0b00;
unsigned css_imm_d[9] = imm6[2..0], imm6[5..3], 0b000;
};
format CL[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm3[3];
unsigned rs1p[3];
unsigned imm2[2];
unsigned rdp[3];
unsigned op[2];
overlays:
unsigned cl_rs1[5] = 0b01, rs1p;
unsigned cl_rd[5] = 0b01, rdp;
unsigned cl_imm_w[7] = imm2[0], imm3, imm2[1], 0b00;
unsigned cl_imm_d[8] = imm2, imm3, 0b000;
};
format CS[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm3[3];
unsigned rs1p[3];
unsigned imm2[2];
unsigned rs2p[3];
unsigned op[2];
overlays:
unsigned cs_rs1[5] = 0b01, rs1p;
unsigned cs_rs2[5] = 0b01, rs2p;
unsigned cs_imm_w[7] = imm2[0], imm3, imm2[1], 0b00;
unsigned cs_imm_d[8] = imm2, imm3, 0b000;
};
format CJ[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm11[11];
unsigned op[2];
overlays:
signed jimm[12] = imm11[10, 6, 8..7, 4, 5, 0, 9, 3..1], 0b0;
};
format CR[16] : Inst16Format {
fields:
unsigned func4[4];
unsigned rs1[5];
unsigned rs2[5];
unsigned op[2];
};
format CB[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm3[3];
unsigned rs1p[3];
unsigned imm5[5];
unsigned op[2];
overlays:
unsigned func2[2] = [11, 10];
unsigned func5[5] = [12..10, 6..5];
unsigned shamt[6] = [12, 6..2];
unsigned rs2p[3] = [4..2];
unsigned rs2[5] = 0b10, [4..2];
signed bimm[9] = imm3[2], imm5[4..3, 0], imm3[1..0], imm5[2..1], 0b0;
};
format CI[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm1[1];
unsigned rs1[5];
unsigned imm5[5];
unsigned op[2];
overlays:
unsigned rd[5] = rs1;
signed imm6[6] = imm1, imm5;
unsigned uimm6[6] = imm1, imm5;
signed imm18[18] = imm1, imm5, 0b0000'0000'0000;
signed ci_imm10[10] = imm1, imm5[2..1, 3, 0, 4], 0b0000;
unsigned ci_imm_w[8] = imm5[1..0], imm1, imm5[4..2], 0b00;
unsigned ci_imm_d[9] = imm5[2..0], imm1, imm5[4..3], 0b000;
};
format CIW[16] : Inst16Format {
fields:
unsigned func3[3];
unsigned imm8[8];
unsigned rdp[3];
unsigned op[2];
overlays:
unsigned rd[5] = 0b01, rdp;
unsigned ciw_imm10[10] = imm8[5..2, 7..6, 0, 1], 0b00;
};
format CA[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned func2[2];
unsigned fs2p[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rs2[5] = 0b01, fs2p;
unsigned rd[5] = 0b01, rs1p;
};
format CLB[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned uimm2[2];
unsigned rdp[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rd[5] = 0b01, rdp;
};
format CLH[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned func1[1];
unsigned uimm1[1];
unsigned rdp[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rd[5] = 0b01, rdp;
unsigned uimm2[2] = uimm1, 0b0;
};
format CMMV[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned func2[2];
unsigned rs2p[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rs2[5] = 0b01, rs2p;
};
format CMPP[16] : Inst16Format {
fields:
unsigned func8[8];
unsigned rlist[4];
unsigned spimm[2];
unsigned op[2];
};
format CSB[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned uimm2[2];
unsigned rs2p[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rs2[5] = 0b01, rs2p;
};
format CSH[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned func1[1];
unsigned uimm1[1];
unsigned rs2p[3];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rs2[5] = 0b01, rs2p;
unsigned uimm2[2] = uimm1, 0b0;
};
format CU[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned rs1p[3];
unsigned func5[5];
unsigned op[2];
overlays:
unsigned rs1[5] = 0b01, rs1p;
unsigned rd[5] = 0b01, rs1p;
};
format CMJT[16] : Inst16Format {
fields:
unsigned func6[6];
unsigned index[8];
unsigned op[2];
}
format CMopType[16] : Inst16Format {
fields:
unsigned func4[4];
unsigned num[5];
unsigned rd[5];
unsigned op[2];
};