diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-04-06 20:54:21 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2018-05-01 03:34:43 +0800 |
commit | 52c94418795f829c4a225fdf4742eec7a1961232 (patch) | |
tree | a62269e946982a1aaad47131390fedaf9478d99f /libsolidity/codegen/ABIFunctions.cpp | |
parent | c3608eaf90b49771b2785d86bb0c73dca6e61046 (diff) | |
download | dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar.gz dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar.bz2 dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar.lz dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar.xz dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.tar.zst dexon-solidity-52c94418795f829c4a225fdf4742eec7a1961232.zip |
Do not use SAR instead of SDIV in shifts because it rounds differently
Diffstat (limited to 'libsolidity/codegen/ABIFunctions.cpp')
-rw-r--r-- | libsolidity/codegen/ABIFunctions.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libsolidity/codegen/ABIFunctions.cpp b/libsolidity/codegen/ABIFunctions.cpp index f6aa714d..6c4ddc02 100644 --- a/libsolidity/codegen/ABIFunctions.cpp +++ b/libsolidity/codegen/ABIFunctions.cpp @@ -1439,17 +1439,18 @@ string ABIFunctions::shiftRightFunction(size_t _numBits, bool _signed) solAssert(_numBits < 256, ""); string functionName = "shift_right_" + to_string(_numBits) + (_signed ? "_signed" : "_unsigned"); - if (m_evmVersion.hasBitwiseShifting()) + + // NOTE: SAR rounds differently than SDIV + if (m_evmVersion.hasBitwiseShifting() && !_signed) { return createFunction(functionName, [&]() { return Whiskers(R"( function <functionName>(value) -> newValue { - newValue := <shiftOp>(<numBits>, value) + newValue := shr(<numBits>, value) } )") ("functionName", functionName) - ("shiftOp", _signed ? "sar" : "shr") ("numBits", to_string(_numBits)) .render(); }); |