// Copyright 2023 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.

isa DisasmFormats {
  namespace sim::disasm_formats;
  slots {
    slot_a;
    slot_b;
  }
}

slot slot_a {
  default opcode =
    semfunc: "[](Instruction *) {}";
  opcodes {
    zero{},
      disasm: "%(()";  // Error: unexpected end of expression.
    one{a:b:c},
      disasm: "%()";  // Error: empty expression.
    two{},
      disasm: "%(@*)";  // Error: @ must be followed by + or - expression.
    three{},
      disasm: "%(@-)";  // Error: Malformed expression @-.
    four{},
      disasm: "%(@+(5a))";  // Error: Invalid character in operand name.
    five{},
      disasm: "%(@+5a)";  // Error: Invalid character in operand name.
    six{},
      disasm: "%(@+rs1)";  // Error: Invalid operand 'rs1' used in format.
    seven{: rs1 :},
      disasm: "%(@+rs1 x)";  // Error: Malformed expression.
    eight{: rs1 : },
      disasm: "%(@+(rs1 +-))"; // Error: Missing shift in expression.
    nine{: rs1 : },
      disasm: "%(@+(rs1 << 5x))"; // Error: Malformed expression.
    ten{: rs1 : },
      disasm: "%(@+(rs1 >> ))"; // Error: Malformed expression.
    eleven{: rs1 : },
      disasm: "%(@+(rs1 << 5 x))"; // Error: Malformed expression.
    twelve{: rs1 : },
      disasm: "%(@+(rs1 << 5) x)"; // Error: Malformed expression.
  }
}

slot slot_b {
  default opcode =
    semfunc: "[](Instruction *) {}";
  opcodes {
    b_one{: rs1 : },
      disasm: "%(rs1:0x)";  // Error: must specify field width.
    b_two{: rs1 : },
      disasm: "%(rs1:0123x)";  // Error: width can't be more than 3 digits.
    b_three{: rs1 : },
      disasm: "%(rs1:08Y)"; // Error: wrong format specifier 'Y'.
    b_four{: rs1 : },
      disasm: "%(rs1:08xY)"; // Error: too many letters in format specifier.
    b_five{: rs1 : },
      disasm: "%2rs";  // Error:
    b_six{: rs1 : },
      disasm: "%rs2";  // Error:
  }
}