Source code

Revision control

Copy as Markdown

Other Tools

// Copyright 2023 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef jit_riscv64_constant_Constant_riscv64_b_h_
#define jit_riscv64_constant_Constant_riscv64_b_h_
#include "jit/riscv64/constant/Base-constant-riscv.h"
namespace js {
namespace jit {
enum OpcodeRISCVB : uint32_t {
#ifdef JS_CODEGEN_RISCV64
RO_ADDUW = OP_32 | (0b000 << kFunct3Shift) | (0b0000100 << kFunct7Shift),
RO_SH1ADDUW = OP_32 | (0b010 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
RO_SH2ADDUW = OP_32 | (0b100 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
RO_SH3ADDUW = OP_32 | (0b110 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
RO_SLLIUW = OP_IMM_32 | (0b001 << kFunct3Shift) | (0b000010 << kFunct6Shift),
#endif
RO_SH1ADD = OP | (0b010 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
RO_SH2ADD = OP | (0b100 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
RO_SH3ADD = OP | (0b110 << kFunct3Shift) | (0b0010000 << kFunct7Shift),
// Zbb
RO_ANDN = OP | (0b111 << kFunct3Shift) | (0b0100000 << kFunct7Shift),
RO_ORN = OP | (0b110 << kFunct3Shift) | (0b0100000 << kFunct7Shift),
RO_XNOR = OP | (0b100 << kFunct3Shift) | (0b0100000 << kFunct7Shift),
OP_COUNT = OP_IMM | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_CLZ = OP_COUNT | (0b00000 << kShamtShift),
RO_CTZ = OP_COUNT | (0b00001 << kShamtShift),
RO_CPOP = OP_COUNT | (0b00010 << kShamtShift),
#ifdef JS_CODEGEN_RISCV64
OP_COUNTW = OP_IMM_32 | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_CLZW = OP_COUNTW | (0b00000 << kShamtShift),
RO_CTZW = OP_COUNTW | (0b00001 << kShamtShift),
RO_CPOPW = OP_COUNTW | (0b00010 << kShamtShift),
#endif
RO_MAX = OP | (0b110 << kFunct3Shift) | (0b0000101 << kFunct7Shift),
RO_MAXU = OP | (0b111 << kFunct3Shift) | (0b0000101 << kFunct7Shift),
RO_MIN = OP | (0b100 << kFunct3Shift) | (0b0000101 << kFunct7Shift),
RO_MINU = OP | (0b101 << kFunct3Shift) | (0b0000101 << kFunct7Shift),
RO_SEXTB = OP_IMM | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift) |
(0b00100 << kShamtShift),
RO_SEXTH = OP_IMM | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift) |
(0b00101 << kShamtShift),
#ifdef JS_CODEGEN_RISCV64
RO_ZEXTH = OP_32 | (0b100 << kFunct3Shift) | (0b0000100 << kFunct7Shift) |
(0b00000 << kShamtShift),
#else
RO_ZEXTH = OP | (0b100 << kFunct3Shift) | (0b0000100 << kFunct7Shift) |
(0b00000 << kShamtShift),
#endif
// Zbb: bitwise rotation
RO_ROL = OP | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_ROR = OP | (0b101 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_ORCB = OP_IMM | (0b101 << kFunct3Shift) | (0b001010000111 << kImm12Shift),
#ifdef JS_CODEGEN_RISCV64
RO_RORI = OP_IMM | (0b101 << kFunct3Shift) | (0b011000 << kFunct6Shift),
#else
RO_RORI = OP_IMM | (0b101 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
#endif
#ifdef JS_CODEGEN_RISCV64
RO_ROLW = OP_32 | (0b001 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_RORIW = OP_IMM_32 | (0b101 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
RO_RORW = OP_32 | (0b101 << kFunct3Shift) | (0b0110000 << kFunct7Shift),
#endif
RO_REV8 = OP_IMM | (0b101 << kFunct3Shift) | (0b011010 << kFunct6Shift),
#ifdef JS_CODEGEN_RISCV64
RO_REV8_IMM12 = 0b011010111000,
#else
RO_REV8_IMM12 = 0b011010011000,
#endif
// Zbs
RO_BCLR = OP | (0b001 << kFunct3Shift) | (0b0100100 << kFunct7Shift),
RO_BCLRI = OP_IMM | (0b001 << kFunct3Shift) | (0b010010 << kFunct6Shift),
RO_BEXT = OP | (0b101 << kFunct3Shift) | (0b0100100 << kFunct7Shift),
RO_BEXTI = OP_IMM | (0b101 << kFunct3Shift) | (0b010010 << kFunct6Shift),
RO_BINV = OP | (0b001 << kFunct3Shift) | (0b0110100 << kFunct7Shift),
RO_BINVI = OP_IMM | (0b001 << kFunct3Shift) | (0b011010 << kFunct6Shift),
RO_BSET = OP | (0b001 << kFunct3Shift) | (0b0010100 << kFunct7Shift),
RO_BSETI = OP_IMM | (0b001 << kFunct3Shift) | (0b0010100 << kFunct7Shift),
};
} // namespace jit
} // namespace js
#endif