Arquivos
hhvm/hphp/util/cycles.h
T
Eric Caruso 97a23e5ea7 Support for yield k => v;
Updates continuations to allow yielding of a key-value
pair from a generator. Adds bytecode instructions (PackContK,
ContKey) for using the new feature, and adds IR instructions
(ContUpdateIdx, ContIncKey) to help get it down to the metal
(in particular, ContIncKey attempts to keep the current use-cases
as fast as possible).
2013-07-01 13:41:00 -07:00

55 linhas
1.7 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#ifndef incl_HPHP_TSC_H_
#define incl_HPHP_TSC_H_
#include "hphp/util/assertions.h"
namespace HPHP {
/*
* Return the underlying machine cycle counter. While this is slightly
* non-portable in theory, all the CPUs you're likely to care about support
* it in some way or another.
*/
inline uint64_t cpuCycles() {
#ifdef __x86_64__
uint64_t lo, hi;
asm volatile("rdtsc" : "=a"((lo)),"=d"(hi));
return lo | (hi << 32);
#else
not_implemented();
#endif
}
inline void cpuRelax() {
#ifdef __x86_64__
asm volatile("pause");
#endif
}
inline void cycleDelay(uint32_t numCycles) {
auto start = cpuCycles();
do {
if (numCycles > 100) cpuRelax();
} while (cpuCycles() - start > numCycles);
}
}
#endif