diff options
author | isaacs <i@izs.me> | 2012-05-15 19:53:16 -0700 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-05-16 14:22:33 -0700 |
commit | 3f3f958c14cf4e963a73d6f037ac381c77fe78bb (patch) | |
tree | 391e35b59e76d038534fbd375f1bbe0dc55076cf /deps/v8/src/utils.h | |
parent | 4099d1eebae4e78864a6879c0b9e08f31d48d8cb (diff) | |
download | node-3f3f958c14cf4e963a73d6f037ac381c77fe78bb.tar.gz |
Upgrade V8 to 3.11.1
Diffstat (limited to 'deps/v8/src/utils.h')
-rw-r--r-- | deps/v8/src/utils.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/deps/v8/src/utils.h b/deps/v8/src/utils.h index 1d40c98b9..f116c14db 100644 --- a/deps/v8/src/utils.h +++ b/deps/v8/src/utils.h @@ -85,6 +85,32 @@ inline int WhichPowerOf2(uint32_t x) { } +// Magic numbers for integer division. +// These are kind of 2's complement reciprocal of the divisors. +// Details and proofs can be found in: +// - Hacker's Delight, Henry S. Warren, Jr. +// - The PowerPC Compiler Writer’s Guide +// and probably many others. +// See details in the implementation of the algorithm in +// lithium-codegen-arm.cc : LCodeGen::TryEmitSignedIntegerDivisionByConstant(). +struct DivMagicNumbers { + unsigned M; + unsigned s; +}; + +const DivMagicNumbers InvalidDivMagicNumber= {0, 0}; +const DivMagicNumbers DivMagicNumberFor3 = {0x55555556, 0}; +const DivMagicNumbers DivMagicNumberFor5 = {0x66666667, 1}; +const DivMagicNumbers DivMagicNumberFor7 = {0x92492493, 2}; +const DivMagicNumbers DivMagicNumberFor9 = {0x38e38e39, 1}; +const DivMagicNumbers DivMagicNumberFor11 = {0x2e8ba2e9, 1}; +const DivMagicNumbers DivMagicNumberFor25 = {0x51eb851f, 3}; +const DivMagicNumbers DivMagicNumberFor125 = {0x10624dd3, 3}; +const DivMagicNumbers DivMagicNumberFor625 = {0x68db8bad, 8}; + +const DivMagicNumbers DivMagicNumberFor(int32_t divisor); + + // The C++ standard leaves the semantics of '>>' undefined for // negative signed operands. Most implementations do the right thing, // though. |