Add package sys/llvm to expose some of the LLVM intrinsics

This commit is contained in:
gingerBill
2020-06-06 14:52:22 +01:00
parent 1a4e2196bd
commit a3fa647bfd
3 changed files with 331 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
// Code Generator Intrinsics
package sys_llvm
@(default_calling_convention="none")
foreign _ {
@(link_name="llvm.returnaddress")
return_address :: proc(#const level: u32 = 0) -> rawptr ---
@(link_name="llvm.addressofreturnaddress")
address_of_return_address :: proc() -> rawptr ---
@(link_name="llvm.sponentry")
stack_pointer_on_entry :: proc() -> rawptr ---
@(link_name="llvm.frameaddress")
frame_address :: proc(#const level: u32 = 0) -> rawptr ---
@(link_name="llvm.stacksave")
stack_save :: proc() -> rawptr ---
@(link_name="llvm.stackrestore")
stack_restore :: proc(ptr: rawptr) ---
@(link_name="llvm.get.dynamic.area.offset.i32")
get_dynamic_area_offset_i32 :: proc() -> i32 ---
@(link_name="llvm.get.dynamic.area.offset.i64")
get_dynamic_area_offset_i64 :: proc() -> i64 ---
}
Prefetch_Read_Write :: enum i32 {
Read = 0,
Write = 1,
}
Prefetch_Locality :: enum i32 {
None = 0,
Low = 1,
Mid = 2,
High = 3,
}
Prefetch_Cache :: enum i32 {
Instruction = 0,
Data = 1,
}
@(default_calling_convention="none")
foreign _ {
@(link_name="llvm.prefetch")
prefetch :: proc(address: rawptr, #const rw: Prefetch_Read_Write, #const locality: Prefetch_Locality, #const cache: Prefetch_Cache) ---
}
@(default_calling_convention="none")
foreign _ {
@(link_name="llvm.pcmarker")
pc_marker :: proc(id: i32) ---
@(link_name="llvm.readcyclecounter")
read_cycle_counter :: proc() -> u64 ---
@(link_name="llvm.clear_cache")
clear_cache :: proc(rawptr, rawptr) ---
@(link_name="llvm.thread.pointer")
thread_pointer :: proc() -> rawptr ---
}