blob: 9873929ad8f87263ddf68d30f3c43b99cb2f3352 [file]
// 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.
disasm widths = {-18};
isa Generator {
namespace sim::generator::isa;
slots { branches; }
}
slot branches {
default size = 4;
default latency = 0;
default opcode =
disasm: "Illegal instruction at 0x%(@:08x)",
semfunc: "[](Instruction *) {}";
opcodes {
// This should generate entries for beq, bne, blt, bltu, be, bgeu, along
// with the "W" types with the appropriate string substitutions for
// $(btype), $(w) and $(fcn_w).
GENERATE( btype = [ "eq", "ne", "lt", ltu, ge, geu],
[w, fcn_w, unused] = [{"", "", 1}, {".w", _w, 2}] ) {
b$(btype)$(fcn_w){: rs1, rs2, B_imm12 : next_pc},
resources: { next_pc, rs1, rs2 : next_pc[0..]},
disasm: "b$(btype)$(w)", "%rs1, %rs2, %(@+B_imm12:08x)",
semfunc: "&sem_func_b$(btype)$(fcn_w)";
};
}
}