// 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 32 bit instruction formats for the RISC-V encodings.

format Inst32Format[32] {
  fields:
    unsigned bits[25];
    unsigned opcode[7];
};

format RType[32] : Inst32Format {
  fields:
    unsigned func7[7];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    unsigned r_uimm5[5] = rs2;
};

// Format for shift immediate for RV64, note 6 bit immediate.
format RSType[32] : Inst32Format {
  fields:
    unsigned func6[6];
    unsigned r_uimm6[6];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
};

format R4Type[32] : Inst32Format {
  fields:
    unsigned rs3[5];
    unsigned func2[2];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
};

format IType[32] : Inst32Format {
  fields:
    signed imm12[12];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    unsigned u_imm12[12] = imm12;
    unsigned i_uimm5[5] = rs1;
};

format SType[32] : Inst32Format {
  fields:
    unsigned imm7[7];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned imm5[5];
    unsigned opcode[7];
  overlays:
    signed s_imm[12] = imm7, imm5;
};

format BType[32] : Inst32Format {
  fields:
    unsigned imm7[7];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned imm5[5];
    unsigned opcode[7];
  overlays:
    signed b_imm[13] = imm7[6], imm5[0], imm7[5..0], imm5[4..1], 0b0;
};

format UType[32] : Inst32Format {
  fields:
    unsigned imm20[20];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    unsigned u_imm[32] = imm20, 0b0000'0000'0000;
};

format JType[32] : Inst32Format {
  fields:
    unsigned imm20[20];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    signed j_imm[21] = imm20[19, 7..0, 8, 18..9], 0b0;
};

format Fence[32] : Inst32Format {
  fields:
    unsigned fm[4];
    unsigned pred[4];
    unsigned succ[4];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
};

format AType[32] : Inst32Format {
  fields:
    unsigned func5[5];
    unsigned aq[1];
    unsigned rl[1];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
};

format F12Type[32] : Inst32Format {
  fields:
    unsigned func12[12];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
};

format ZICBOP[32] : Inst32Format {
  fields:
    unsigned offset[7];
    unsigned func5[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned imm5[5];
    unsigned op[7];
  overlays:
    unsigned bop_uimm12[12] = offset, 0b00000;
}

format MopRType[32] : Inst32Format {
  fields:
    unsigned func1[1];
    unsigned n_hi[1];
    unsigned func2[2];
    unsigned n_mid[2];
    unsigned func4[4];
    unsigned n_lo[2];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    unsigned mop_no[5] = n_hi, n_mid, n_lo;
};

format MopRRType[32] : Inst32Format {
  fields:
    unsigned func1h[1];
    unsigned n_hi[1];
    unsigned func2[2];
    unsigned n_lo[2];
    unsigned func1l[1];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
  overlays:
    unsigned mop_no[3] = n_hi, n_lo;
};

// Vector instruction formats.

format VMem[32] : Inst32Format {
  fields:
    unsigned nf[3];
    unsigned mew[1];
    unsigned mop[2];
    unsigned vm[1];
    unsigned rs2[5];
    unsigned rs1[5];
    unsigned width[3];
    unsigned vd[5];
    unsigned opcode[7];
  overlays:
    unsigned lumop[5] = rs2;
    unsigned sumop[5] = rs2;
    unsigned vs2[5] = rs2;
    unsigned vs3[5] = vd;
};

format VArith[32] : Inst32Format {
  fields:
    unsigned func6[6];
    unsigned vm[1];
    unsigned vs2[5];
    unsigned vs1[5];
    unsigned func3[3];
    unsigned vd[5];
    unsigned opcode[7];
  overlays:
    unsigned uimm5[5] = vs1;
    unsigned uimm6[6] = func6[0], vs1;
    unsigned func5[5] = func6[5..1];
    signed simm5[5] = vs1;
    unsigned rd[5] = vd;
    unsigned rs1[5] = vs1;
    unsigned vd_mask[5] = vd;
};

format VConfig[32] : Inst32Format {
  fields:
    unsigned top12[12];
    unsigned rs1[5];
    unsigned func3[3];
    unsigned rd[5];
    unsigned opcode[7];
   overlays:
    signed zimm11[11] = top12[10..0];
    unsigned func1[1] = top12[11];
    unsigned func2[2] = top12[11..10];
    unsigned func7[7] = top12[11..5];
    signed zimm10[10] = top12[9..0];
    unsigned uimm5[5] = rs1;
    unsigned rs2[5] = top12[4..0];
};
