Skip to content

Commit

Permalink
update 64bit target flags
Browse files Browse the repository at this point in the history
Signed-off-by: xermicus <[email protected]>
  • Loading branch information
xermicus committed Nov 14, 2024
1 parent 4cce4a7 commit ae72103
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 10 deletions.
7 changes: 6 additions & 1 deletion crates/llvm-context/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ doctest = false

[features]
riscv-zbb = []
riscv-64 = []
riscv-64 = [
"revive-linker/riscv-64",
"revive-builtins/riscv-64",
"revive-runtime-api/riscv-64",
"revive-common/riscv-64",
]

[dependencies]
anyhow = { workspace = true }
Expand Down
2 changes: 1 addition & 1 deletion crates/llvm-context/src/polkavm/context/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ where
for import in revive_runtime_api::polkavm_imports::IMPORTS {
module
.get_function(import)
.expect("should be declared")
.unwrap_or_else(|| panic!("{import} import should be declared"))
.set_linkage(inkwell::module::Linkage::External);
}
}
Expand Down
8 changes: 6 additions & 2 deletions crates/runtime-api/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ const TARGET_FLAG: &str = "--target=riscv32";
const TARGET_FLAG: &str = "--target=riscv64";

#[cfg(not(feature = "riscv-64"))]
const TARGET_ARCH_FLAG: &str = "-march=rv32em";
const TARGET_ARCH_FLAG: &str = "-march=rv32emac";
#[cfg(feature = "riscv-64")]
const TARGET_ARCH_FLAG: &str = "-march=rv64em";
const TARGET_ARCH_FLAG: &str = "-march=rv64emac";

#[cfg(not(feature = "riscv-64"))]
const TARGET_ABI_FLAG: &str = "-mabi=ilp32e";
Expand All @@ -36,6 +36,10 @@ fn compile(source_path: &str, bitcode_path: &str) {
TARGET_TRIPLE_FLAG,
TARGET_ARCH_FLAG,
TARGET_ABI_FLAG,
"-Xclang",
"-target-feature",
"-Xclang",
"+fast-unaligned-access,+xtheadcondmov",
"-fno-exceptions",
"-ffreestanding",
"-Wall",
Expand Down
34 changes: 28 additions & 6 deletions crates/runtime-api/src/polkavm_guest.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@

#define POLKAVM_REGS_FOR_TY_void 0
#define POLKAVM_REGS_FOR_TY_i32 1
#define POLKAVM_REGS_FOR_TY_i64 2
#ifdef _LP64
#define POLKAVM_REGS_FOR_TY_i64 1
#else
#define POLKAVM_REGS_FOR_TY_i64 2
#endif

#define POLKAVM_REGS_FOR_TY_int8_t POLKAVM_REGS_FOR_TY_i32
#define POLKAVM_REGS_FOR_TY_uint8_t POLKAVM_REGS_FOR_TY_i32
Expand Down Expand Up @@ -107,6 +111,26 @@ struct PolkaVM_Metadata {
unsigned char output_regs;
} __attribute__ ((packed));

#ifdef _LP64
#define POLKAVM_EXPORT_DEF() \
".quad %[metadata]\n" \
".quad %[function]\n"
#else
#define POLKAVM_EXPORT_DEF() \
".word %[metadata]\n" \
".word %[function]\n"
#endif

#ifdef _LP64
#define POLKAVM_IMPORT_DEF() \
".word 0x0000000b\n" \
".quad %[metadata]\n"
#else
#define POLKAVM_IMPORT_DEF() \
".word 0x0000000b\n" \
".word %[metadata]\n"
#endif

#define POLKAVM_EXPORT(arg_return_ty, fn_name, ...) \
static struct PolkaVM_Metadata POLKAVM_JOIN(fn_name, __EXPORT_METADATA) __attribute__ ((section(".polkavm_metadata"))) = { \
1, 0, sizeof(#fn_name) - 1, #fn_name, POLKAVM_COUNT_REGS(__VA_ARGS__), POLKAVM_COUNT_REGS(arg_return_ty) \
Expand All @@ -115,8 +139,7 @@ static void __attribute__ ((naked, used)) POLKAVM_UNIQUE(polkavm_export_dummy)()
__asm__( \
".pushsection .polkavm_exports,\"R\",@note\n" \
".byte 1\n" \
".word %[metadata]\n" \
".word %[function]\n" \
POLKAVM_EXPORT_DEF() \
".popsection\n" \
: \
: \
Expand All @@ -130,10 +153,9 @@ static void __attribute__ ((naked, used)) POLKAVM_UNIQUE(polkavm_export_dummy)()
static struct PolkaVM_Metadata POLKAVM_JOIN(fn_name, __IMPORT_METADATA) __attribute__ ((section(".polkavm_metadata"))) = { \
1, 0, sizeof(#fn_name) - 1, #fn_name, POLKAVM_COUNT_REGS(__VA_ARGS__), POLKAVM_COUNT_REGS(arg_return_ty) \
}; \
static arg_return_ty __attribute__ ((naked, used)) fn_name(POLKAVM_IMPORT_ARGS_IMPL(__VA_ARGS__)) { \
static arg_return_ty __attribute__ ((used, naked)) fn_name(POLKAVM_IMPORT_ARGS_IMPL(__VA_ARGS__)) { \
__asm__( \
".word 0x0000000b\n" \
".word %[metadata]\n" \
POLKAVM_IMPORT_DEF() \
"ret\n" \
: \
: \
Expand Down

0 comments on commit ae72103

Please sign in to comment.