register.go 808 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package asm
  2. import (
  3. "fmt"
  4. )
  5. // Register is the source or destination of most operations.
  6. type Register uint8
  7. // R0 contains return values.
  8. const R0 Register = 0
  9. // Registers for function arguments.
  10. const (
  11. R1 Register = R0 + 1 + iota
  12. R2
  13. R3
  14. R4
  15. R5
  16. )
  17. // Callee saved registers preserved by function calls.
  18. const (
  19. R6 Register = R5 + 1 + iota
  20. R7
  21. R8
  22. R9
  23. )
  24. // Read-only frame pointer to access stack.
  25. const (
  26. R10 Register = R9 + 1
  27. RFP = R10
  28. )
  29. // Pseudo registers used by 64bit loads and jumps
  30. const (
  31. PseudoMapFD = R1 // BPF_PSEUDO_MAP_FD
  32. PseudoMapValue = R2 // BPF_PSEUDO_MAP_VALUE
  33. PseudoCall = R1 // BPF_PSEUDO_CALL
  34. PseudoFunc = R4 // BPF_PSEUDO_FUNC
  35. )
  36. func (r Register) String() string {
  37. v := uint8(r)
  38. if v == 10 {
  39. return "rfp"
  40. }
  41. return fmt.Sprintf("r%d", v)
  42. }