- Notifications
You must be signed in to change notification settings - Fork 4k
/
Copy pathmy_rdtsc.h
143 lines (124 loc) · 4.62 KB
/
my_rdtsc.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* Copyright (c) 2008, 2025, Oracle and/or its affiliates.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2.0,
as published by the Free Software Foundation.
This program is designed to work with certain software (including
but not limited to OpenSSL) that is licensed under separate terms,
as designated in a particular file or component or in included license
documentation. The authors of MySQL hereby grant you an additional
permission to link the program and your derivative works with the
separately licensed software that they have either included with
the program or referenced in the documentation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License, version 2.0, for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
@file include/my_rdtsc.h
Multi-platform timer code.
*/
#ifndefMY_RDTSC_H
#defineMY_RDTSC_H
#include"my_inttypes.h"
#include"my_macros.h"
/**
Characteristics of a timer.
*/
structmy_timer_unit_info {
/** Routine used for the timer. */
ulonglongroutine;
/** Overhead of the timer. */
ulonglongoverhead;
/** Frequency of the timer. */
ulonglongfrequency;
/** Resolution of the timer. */
ulonglongresolution;
};
/**
Characteristics of all the supported timers.
@sa my_timer_init().
*/
structmy_timer_info {
/** Characteristics of the cycle timer. */
structmy_timer_unit_infocycles;
/** Characteristics of the nanosecond timer. */
structmy_timer_unit_infonanoseconds;
/** Characteristics of the microsecond timer. */
structmy_timer_unit_infomicroseconds;
/** Characteristics of the millisecond timer. */
structmy_timer_unit_infomilliseconds;
/** Characteristics of the tick timer. */
structmy_timer_unit_infoticks;
/** Characteristics of the thread cpu timer. */
structmy_timer_unit_infothread_cpu;
};
typedefstructmy_timer_infoMY_TIMER_INFO;
/**
A cycle timer.
@return the current timer value, in cycles.
*/
ulonglongmy_timer_cycles(void);
/**
A namoseconds timer.
@return the current timer value, in nanoseconds.
*/
ulonglongmy_timer_nanoseconds(void);
/**
A microseconds timer.
@return the current timer value, in microseconds.
*/
ulonglongmy_timer_microseconds(void);
/**
A millisecond timer.
@return the current timer value, in milliseconds.
*/
ulonglongmy_timer_milliseconds(void);
/**
A ticks timer.
@return the current timer value, in ticks.
*/
ulonglongmy_timer_ticks(void);
/**
A THREAD CPU timer.
@return the current timer value, in thread cpu.
*/
ulonglongmy_timer_thread_cpu(void);
/**
Timer initialization function.
@param [out] mti the timer characteristics.
*/
voidmy_timer_init(MY_TIMER_INFO*mti);
#defineMY_TIMER_ROUTINE_ASM_X86 1
#defineMY_TIMER_ROUTINE_ASM_X86_64 2
/* #define MY_TIMER_ROUTINE_RDTSCLL 3 - No longer used */
/* #define MY_TIMER_ROUTINE_ASM_X86_WIN 4 - No longer used */
#defineMY_TIMER_ROUTINE_RDTSC 5
#defineMY_TIMER_ROUTINE_ASM_IA64 6
#defineMY_TIMER_ROUTINE_ASM_PPC 7
/* #define MY_TIMER_ROUTINE_SGI_CYCLE 8 - No longer used */
#defineMY_TIMER_ROUTINE_GETHRTIME 9
/* #define MY_TIMER_ROUTINE_READ_REAL_TIME 10 - No longer used */
#defineMY_TIMER_ROUTINE_CLOCK_GETTIME 11
#defineMY_TIMER_ROUTINE_NXGETTIME 12
#defineMY_TIMER_ROUTINE_GETTIMEOFDAY 13
#defineMY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER 14
#defineMY_TIMER_ROUTINE_GETTICKCOUNT 15
/* #define MY_TIMER_ROUTINE_TIME 16 - No longer used */
#defineMY_TIMER_ROUTINE_TIMES 17
/* #define MY_TIMER_ROUTINE_FTIME 18 - No longer used */
#defineMY_TIMER_ROUTINE_ASM_PPC64 19
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC64 20 - No longer used */
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC32 21 - No longer used */
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_I386 22 - No longer used */
#defineMY_TIMER_ROUTINE_ASM_GCC_SPARC64 23
/* #define MY_TIMER_ROUTINE_ASM_GCC_SPARC32 24 - No longer used */
#defineMY_TIMER_ROUTINE_MACH_ABSOLUTE_TIME 25
#defineMY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64 27 - No longer used */
#defineMY_TIMER_ROUTINE_ASM_AARCH64 28
#defineMY_TIMER_ROUTINE_GET_THREAD_TIMES 29
#defineMY_TIMER_ROUTINE_ASM_S390X 30
#endif