Skip to content

Commit d843cd2

Browse files
committed
Optimise SAR to not use from/toTwos conversion
1 parent b90ba6e commit d843cd2

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

lib/opFns.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,16 @@ module.exports = {
179179
if (!runState._common.gteHardfork('constantinople')) {
180180
trap(ERROR.INVALID_OPCODE)
181181
}
182+
const isSigned = b.testn(255)
182183
if (a.gten(256)) {
183-
if (b.fromTwos(256).ltn(0)) {
184-
return new BN(-1).toTwos(256)
184+
if (isSigned) {
185+
return new BN(utils.MAX_INTEGER)
185186
} else {
186187
return new BN(0)
187188
}
188189
}
189190
const c = b.shrn(a.toNumber())
190-
if (b.testn(255)) {
191+
if (isSigned) {
191192
const shiftedOutWidth = 255 - a.toNumber()
192193
const mask = utils.MAX_INTEGER.shrn(shiftedOutWidth).shln(shiftedOutWidth)
193194
return c.ior(mask)

0 commit comments

Comments
 (0)