Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. /*
  2. * Prove that the compiler is doing pointer operations
  3. * for references.
  4. */
  5.  
  6. struct integer {
  7. i: u32,
  8. }
  9.  
  10. fn main() {
  11. /*
  12. * Note: generated asm is not-optimized.
  13. *
  14. * Because of compiler alignment preferences,
  15. * 4 + 8 + 4 (=16) sized locals are given 24 bytes.
  16. */
  17.  
  18. /*
  19. * i1 goes on the stack at 4(rsp)
  20. * movl $1, 4(rsp)
  21. */
  22. let i1: integer = integer { i: 1 };
  23. /*
  24. * pointer copy
  25. * the address of i1 goes on the stack
  26. * at 8(rsp).
  27. * leaq 4(rsp), rax)
  28. * movq rax, 8(rsp)
  29. */
  30. let i2: &integer = &i1;
  31. /*
  32. * value copy
  33. * the 'long' value on the stack at
  34. * 4(rsp) gets copied to 12(rsp).
  35. * movl 4(rsp), ecx
  36. * movl ecx, 20(rsp)
  37. */
  38. let i3: integer = i1;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement