From 6a0dda313ee8f250cb746b59a3e353b357f502ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Mon, 30 Aug 2021 13:07:56 +0200 Subject: [PATCH] core/vm: unroll loops in analysis bitmap population Unroll loops in bitvec.setN(): first one can at most run 2 times, second one at most once. --- core/vm/analysis.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/vm/analysis.go b/core/vm/analysis.go index 4aa8cfe70f11d..fc7cc4fc153a6 100644 --- a/core/vm/analysis.go +++ b/core/vm/analysis.go @@ -81,13 +81,20 @@ func codeBitmapInternal(code, bits bitvec) bitvec { } numbits := op - PUSH1 + 1 if numbits >= 8 { - for ; numbits >= 16; numbits -= 16 { + if numbits >= 16 { bits.set16(pc) pc += 16 + numbits -= 16 } - for ; numbits >= 8; numbits -= 8 { + if numbits >= 16 { + bits.set16(pc) + pc += 16 + numbits -= 16 + } + if numbits >= 8 { bits.set8(pc) pc += 8 + numbits -= 8 } } switch numbits {