code_generator.odin 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Code Generator Intrinsics
  2. package sys_llvm
  3. @(default_calling_convention="none")
  4. foreign _ {
  5. @(link_name="llvm.returnaddress")
  6. return_address :: proc(#const level: u32 = 0) -> rawptr ---
  7. @(link_name="llvm.addressofreturnaddress")
  8. address_of_return_address :: proc() -> rawptr ---
  9. @(link_name="llvm.sponentry")
  10. stack_pointer_on_entry :: proc() -> rawptr ---
  11. @(link_name="llvm.frameaddress")
  12. frame_address :: proc(#const level: u32 = 0) -> rawptr ---
  13. @(link_name="llvm.stacksave")
  14. stack_save :: proc() -> rawptr ---
  15. @(link_name="llvm.stackrestore")
  16. stack_restore :: proc(ptr: rawptr) ---
  17. @(link_name="llvm.get.dynamic.area.offset.i32")
  18. get_dynamic_area_offset_i32 :: proc() -> i32 ---
  19. @(link_name="llvm.get.dynamic.area.offset.i64")
  20. get_dynamic_area_offset_i64 :: proc() -> i64 ---
  21. }
  22. Prefetch_Read_Write :: enum i32 {
  23. Read = 0,
  24. Write = 1,
  25. }
  26. Prefetch_Locality :: enum i32 {
  27. None = 0,
  28. Low = 1,
  29. Mid = 2,
  30. High = 3,
  31. }
  32. Prefetch_Cache :: enum i32 {
  33. Instruction = 0,
  34. Data = 1,
  35. }
  36. @(default_calling_convention="none")
  37. foreign _ {
  38. @(link_name="llvm.prefetch")
  39. prefetch :: proc(address: rawptr, #const rw: Prefetch_Read_Write, #const locality: Prefetch_Locality, #const cache: Prefetch_Cache) ---
  40. }
  41. @(default_calling_convention="none")
  42. foreign _ {
  43. @(link_name="llvm.pcmarker")
  44. pc_marker :: proc(id: i32) ---
  45. @(link_name="llvm.readcyclecounter")
  46. read_cycle_counter :: proc() -> u64 ---
  47. @(link_name="llvm.clear_cache")
  48. clear_cache :: proc(rawptr, rawptr) ---
  49. @(link_name="llvm.thread.pointer")
  50. thread_pointer :: proc() -> rawptr ---
  51. }