diff options
| author | gingerBill <bill@gingerbill.org> | 2020-06-06 14:52:22 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-06-06 14:52:22 +0100 |
| commit | a3fa647bfd579e38337cff173a672159d42f7fd6 (patch) | |
| tree | bd7013533feebe5d17481e5961d10132ce8760d6 /core/sys/llvm/code_generator.odin | |
| parent | 1a4e2196bd6c76e89a41ac7f124b28462e695146 (diff) | |
Add `package sys/llvm` to expose some of the LLVM intrinsics
Diffstat (limited to 'core/sys/llvm/code_generator.odin')
| -rw-r--r-- | core/sys/llvm/code_generator.odin | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/core/sys/llvm/code_generator.odin b/core/sys/llvm/code_generator.odin new file mode 100644 index 000000000..7d41ed67b --- /dev/null +++ b/core/sys/llvm/code_generator.odin @@ -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 --- +} |