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

// This file defines the encoding for the cache prefetch instructions in the
// Zicbop extension.

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;
}

instruction group RiscVZicbop[32] : Inst32Format {
  prefetch_i : ZICBOP : func5 == 0b00000, func3 == 0b110, imm5 == 0b00000, op == 0b001'0011;
  prefetch_r : ZICBOP : func5 == 0b00001, func3 == 0b110, imm5 == 0b00000, op == 0b001'0010;
  prefetch_w : ZICBOP : func5 == 0b00011, func3 == 0b110, imm5 == 0b00000, op == 0b001'0001;
}
