procs_windows_386.odin 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package runtime
  2. foreign import kernel32 "system:Kernel32.lib"
  3. @private
  4. @(link_name="_tls_index")
  5. _tls_index: u32;
  6. @private
  7. @(link_name="_fltused")
  8. _fltused: i32 = 0x9875;
  9. @(link_name="memcpy")
  10. memcpy :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
  11. foreign kernel32 {
  12. RtlCopyMemory :: proc "c" (dst, src: rawptr, len: int) ---
  13. }
  14. RtlCopyMemory(dst, src, len);
  15. return dst;
  16. }
  17. @(link_name="memmove")
  18. memmove :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
  19. foreign kernel32 {
  20. RtlMoveMemory :: proc "c" (dst, src: rawptr, len: int) ---
  21. }
  22. RtlMoveMemory(dst, src, len);
  23. return dst;
  24. }
  25. @(link_name="memset")
  26. memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
  27. d := uintptr(ptr);
  28. b := byte(val);
  29. for i in 0..<uintptr(len) {
  30. (^byte)(d+i)^ = b;
  31. }
  32. return ptr;
  33. }
  34. // @(link_name="memcmp")
  35. // memcmp :: proc "c" (dst, src: rawptr, len: int) -> i32 {
  36. // if dst == nil || src == nil {
  37. // return 0;
  38. // }
  39. // if dst == src {
  40. // return 0;
  41. // }
  42. // d, s := uintptr(dst), uintptr(src);
  43. // n := uintptr(len);
  44. // for i := uintptr(0); i < n; i += 1 {
  45. // x, y := (^byte)(d+i)^, (^byte)(s+i)^;
  46. // if x != y {
  47. // return x < y ? -1 : +1;
  48. // }
  49. // }
  50. // return 0;
  51. // }