procs_windows_amd64.odin 1.1 KB

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