v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
extension-riscv-c.h
Go to the documentation of this file.
1// Copyright 2022 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_CODEGEN_RISCV_EXTENSION_RISCV_C_H_
6#define V8_CODEGEN_RISCV_EXTENSION_RISCV_C_H_
7
12
13namespace v8 {
14namespace internal {
16 // RV64C Standard Extension
17 public:
18 void c_nop();
19 void c_addi(Register rd, int8_t imm6);
20
21 void c_addi16sp(int16_t imm10);
22 void c_addi4spn(Register rd, int16_t uimm10);
23 void c_li(Register rd, int8_t imm6);
24 void c_lui(Register rd, int8_t imm6);
25 void c_slli(Register rd, uint8_t shamt6);
26 void c_lwsp(Register rd, uint16_t uimm8);
27 void c_jr(Register rs1);
28 void c_mv(Register rd, Register rs2);
29 void c_ebreak();
30 void c_jalr(Register rs1);
31 void c_j(int16_t imm12);
32 void c_add(Register rd, Register rs2);
33 void c_sub(Register rd, Register rs2);
34 void c_and(Register rd, Register rs2);
35 void c_xor(Register rd, Register rs2);
36 void c_or(Register rd, Register rs2);
37 void c_swsp(Register rs2, uint16_t uimm8);
38 void c_lw(Register rd, Register rs1, uint16_t uimm7);
39 void c_sw(Register rs2, Register rs1, uint16_t uimm7);
40 void c_bnez(Register rs1, int16_t imm9);
41 void c_beqz(Register rs1, int16_t imm9);
42 void c_srli(Register rs1, int8_t shamt6);
43 void c_srai(Register rs1, int8_t shamt6);
44 void c_andi(Register rs1, int8_t imm6);
45
46 void c_fld(FPURegister rd, Register rs1, uint16_t uimm8);
47 void c_fsd(FPURegister rs2, Register rs1, uint16_t uimm8);
48 void c_fldsp(FPURegister rd, uint16_t uimm9);
49 void c_fsdsp(FPURegister rs2, uint16_t uimm9);
50#ifdef V8_TARGET_ARCH_RISCV64
51 void c_ld(Register rd, Register rs1, uint16_t uimm8);
52 void c_sd(Register rs2, Register rs1, uint16_t uimm8);
53 void c_subw(Register rd, Register rs2);
54 void c_addw(Register rd, Register rs2);
55 void c_addiw(Register rd, int8_t imm6);
56 void c_ldsp(Register rd, uint16_t uimm9);
57 void c_sdsp(Register rs2, uint16_t uimm9);
58#endif
59
61
62 static bool IsCBranch(Instr instr);
63 static bool IsCJal(Instr instr);
64
65 inline int16_t cjump_offset(Label* L) {
67 }
68 inline int32_t cbranch_offset(Label* L) {
70 }
71
72 void c_j(Label* L) { c_j(cjump_offset(L)); }
73 void c_bnez(Register rs1, Label* L) { c_bnez(rs1, cbranch_offset(L)); }
74 void c_beqz(Register rs1, Label* L) { c_beqz(rs1, cbranch_offset(L)); }
75};
76} // namespace internal
77} // namespace v8
78#endif // V8_CODEGEN_RISCV_EXTENSION_RISCV_C_H_
void c_fsdsp(FPURegister rs2, uint16_t uimm9)
void c_li(Register rd, int8_t imm6)
void c_srli(Register rs1, int8_t shamt6)
static bool IsCBranch(Instr instr)
void c_addi4spn(Register rd, int16_t uimm10)
void c_add(Register rd, Register rs2)
void c_sub(Register rd, Register rs2)
void c_xor(Register rd, Register rs2)
void c_mv(Register rd, Register rs2)
void c_fld(FPURegister rd, Register rs1, uint16_t uimm8)
void c_or(Register rd, Register rs2)
void c_fsd(FPURegister rs2, Register rs1, uint16_t uimm8)
void c_lw(Register rd, Register rs1, uint16_t uimm7)
void c_bnez(Register rs1, Label *L)
void c_beqz(Register rs1, Label *L)
void c_and(Register rd, Register rs2)
void c_swsp(Register rs2, uint16_t uimm8)
void c_slli(Register rd, uint8_t shamt6)
void c_andi(Register rs1, int8_t imm6)
void c_bnez(Register rs1, int16_t imm9)
void c_lwsp(Register rd, uint16_t uimm8)
void c_beqz(Register rs1, int16_t imm9)
static bool IsCJal(Instr instr)
void c_srai(Register rs1, int8_t shamt6)
void c_lui(Register rd, int8_t imm6)
void c_fldsp(FPURegister rd, uint16_t uimm9)
void c_sw(Register rs2, Register rs1, uint16_t uimm7)
void c_addi(Register rd, int8_t imm6)
virtual int32_t branch_offset_helper(Label *L, OffsetSize bits)=0
Instruction * instr
constexpr int L