perf_regs.c 449 B

123456789101112131415161718192021222324252627
  1. #include <errno.h>
  2. #include "perf_regs.h"
  3. #include "event.h"
  4. int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
  5. {
  6. int i, idx = 0;
  7. u64 mask = regs->mask;
  8. if (regs->cache_mask & (1 << id))
  9. goto out;
  10. if (!(mask & (1 << id)))
  11. return -EINVAL;
  12. for (i = 0; i < id; i++) {
  13. if (mask & (1 << i))
  14. idx++;
  15. }
  16. regs->cache_mask |= (1 << id);
  17. regs->cache_regs[id] = regs->regs[idx];
  18. out:
  19. *valp = regs->cache_regs[id];
  20. return 0;
  21. }