perf: Move to dev-utils/perf
[akaros.git] / tools / dev-util / perf / xlib.h
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  */
5
6 #pragma once
7
8 #include <ros/common.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <stdint.h>
12 #include <stdio.h>
13 #include <string.h>
14 #include <stdlib.h>
15 #include <unistd.h>
16 #include <fcntl.h>
17
18 #define min(a, b)                                                               \
19         ({ __typeof__(a) _a = (a);                                      \
20                 __typeof__(b) _b = (b);                                 \
21                 _a < _b ? _a : _b; })
22 #define max(a, b)                                                               \
23         ({ __typeof__(a) _a = (a);                                      \
24                 __typeof__(b) _b = (b);                                 \
25                 _a > _b ? _a : _b; })
26 #define always_assert(c)                                                                                                \
27         do {                                                                                                                            \
28                 if (!(c))                                                                                                               \
29                         fprintf(stderr, "%s: %d: Assertion failed: " #c "\n",           \
30                                         __FILE__, __LINE__);                                                            \
31         } while (0)
32
33 int xopen(const char *path, int flags, mode_t mode);
34 void xwrite(int fd, const void *data, size_t size);
35 void xread(int fd, void *data, size_t size);
36 void xpwrite(int fd, const void *data, size_t size, off_t off);
37 void xpread(int fd, void *data, size_t size, off_t off);
38 FILE *xfopen(const char *path, const char *mode);
39 FILE *xfdopen(int fd, const char *mode);
40 off_t xfsize(FILE *file);
41 void xfwrite(const void *data, size_t size, FILE *file);
42 void xfseek(FILE *file, off_t offset, int whence);
43 void *xmalloc(size_t size);
44 void *xzmalloc(size_t size);
45 char *xstrdup(const char *str);
46 const char *vb_decode_uint64(const char *data, uint64_t *pval);
47 int vb_fdecode_uint64(FILE *file, uint64_t *pval);
48 uint8_t nibble_to_num(char c);
49
50 static inline void cpuid(uint32_t ieax, uint32_t iecx, uint32_t *eaxp,
51                          uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
52 {
53         uint32_t eax, ebx, ecx, edx;
54
55         asm volatile("cpuid"
56                                  : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
57                                  : "a" (ieax), "c" (iecx));
58         if (eaxp)
59                 *eaxp = eax;
60         if (ebxp)
61                 *ebxp = ebx;
62         if (ecxp)
63                 *ecxp = ecx;
64         if (edxp)
65                 *edxp = edx;
66 }
67
68 static inline void set_bitno(void *data, size_t bitno)
69 {
70         ((char *) data)[bitno / 8] |= 1 << (bitno % 8);
71 }