b97567a976
Prior to this change, the exponentiation operator was rewritten by the parser to a call of the Math.pow builtin. However, Math.pow does not accept BigInt arguments, while the exponentiation operator must accept them. This CL - removes the parser's special treatment of ** and **=, treating them like any other binary op instead. - adds a TFC builtin Exponentiate that does the right thing for all inputs. - adds interpreter bytecodes Exp and ExpSmi whose handlers call the Exponentiate builtin. For simplicity, they currently always collect kAny feedback. - adds a Turbofan operator JSExponentiate with a typed-lowering to the existing NumberPow and a generic-lowering to the Exponentiate builtin. There is currently no speculative lowering. Note that exponentiation for BigInts is actually not implemented yet, so we can't yet test it. Bug: v8:6791 Change-Id: Id90914c9c3fce310ce01e715c09eaa9f294f4f8a Reviewed-on: https://chromium-review.googlesource.com/785694 Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Reviewed-by: Mythri Alle <mythria@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Georg Neis <neis@chromium.org> Cr-Commit-Position: refs/heads/master@{#49696} |
||
---|---|---|
.. | ||
bytecode-array-builder-unittest.cc | ||
bytecode-array-iterator-unittest.cc | ||
bytecode-array-random-iterator-unittest.cc | ||
bytecode-array-writer-unittest.cc | ||
bytecode-decoder-unittest.cc | ||
bytecode-node-unittest.cc | ||
bytecode-operands-unittest.cc | ||
bytecode-register-allocator-unittest.cc | ||
bytecode-register-optimizer-unittest.cc | ||
bytecode-source-info-unittest.cc | ||
bytecode-utils.h | ||
bytecodes-unittest.cc | ||
constant-array-builder-unittest.cc | ||
interpreter-assembler-unittest.cc | ||
interpreter-assembler-unittest.h |