Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 761715 | Differences between
and this patch

Collapse All | Expand All

(-)a/include/my_rdtsc.h (+1 lines)
Lines 128-132 void my_timer_init(MY_TIMER_INFO *mti); Link Here
128
#define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26
128
#define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26
129
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64       27  - No longer used */
129
/* #define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64       27  - No longer used */
130
#define MY_TIMER_ROUTINE_ASM_AARCH64 28
130
#define MY_TIMER_ROUTINE_ASM_AARCH64 28
131
#define MY_TIMER_ROUTINE_ASM_RISCV 29
131
132
132
#endif
133
#endif
(-)a/mysys/my_rdtsc.cc (-1 / +24 lines)
Lines 168-173 ulonglong my_timer_cycles(void) { Link Here
168
    __asm __volatile__("mrs %[rt],cntvct_el0" : [ rt ] "=r"(result));
168
    __asm __volatile__("mrs %[rt],cntvct_el0" : [ rt ] "=r"(result));
169
    return result;
169
    return result;
170
  }
170
  }
171
#elif defined(__GNUC__) && defined(__riscv)  // RISC-V
172
  // Use RDCYCLE (and RDCYCLEH on riscv32)
173
  {
174
#if __riscv_xlen == 32
175
  ulong result_lo, result_hi0, result_hi1;
176
  // Implemented in assembly because Clang insisted on branching.
177
  __asm __volatile__(
178
      "rdcycleh %0\n"
179
      "rdcycle %1\n"
180
      "rdcycleh %2\n"
181
      "sub %0, %0, %2\n"
182
      "seqz %0, %0\n"
183
      "sub %0, zero, %0\n"
184
      "and %1, %1, %0\n"
185
      : "=r"(result_hi0), "=r"(result_lo), "=r"(result_hi1));
186
  return (static_cast<ulonglong>(result_hi1) << 32) | result_lo;
187
#else
188
  ulonglong result;
189
  __asm __volatile__("rdcycle %0" : "=r"(result));
190
  return result;
191
  }
192
#endif
171
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
193
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
172
  /* gethrtime may appear as either cycle or nanosecond counter */
194
  /* gethrtime may appear as either cycle or nanosecond counter */
173
  return (ulonglong)gethrtime();
195
  return (ulonglong)gethrtime();
Lines 453-458 void my_timer_init(MY_TIMER_INFO *mti) { Link Here
453
  mti->cycles.routine = MY_TIMER_ROUTINE_ASM_GCC_SPARC64;
475
  mti->cycles.routine = MY_TIMER_ROUTINE_ASM_GCC_SPARC64;
454
#elif defined(__GNUC__) && defined(__aarch64__)
476
#elif defined(__GNUC__) && defined(__aarch64__)
455
  mti->cycles.routine = MY_TIMER_ROUTINE_ASM_AARCH64;
477
  mti->cycles.routine = MY_TIMER_ROUTINE_ASM_AARCH64;
478
#elif defined(__GNUC__) && defined(__riscv)
479
  mti->cycles.routine = MY_TIMER_ROUTINE_ASM_RISCV;
456
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
480
#elif defined(HAVE_SYS_TIMES_H) && defined(HAVE_GETHRTIME)
457
  mti->cycles.routine = MY_TIMER_ROUTINE_GETHRTIME;
481
  mti->cycles.routine = MY_TIMER_ROUTINE_GETHRTIME;
458
#else
482
#else
459
- 

Return to bug 761715