Change in libosmocore[master]: bitvec_read_field(): optimize by expanding bytenum_from_bitnum()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

fixeria gerrit-no-reply at lists.osmocom.org
Wed Nov 17 03:38:30 UTC 2021


fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/26309 )


Change subject: bitvec_read_field(): optimize by expanding bytenum_from_bitnum()
......................................................................

bitvec_read_field(): optimize by expanding bytenum_from_bitnum()

The bitvec_read_field() is used in performance critical places,
such as the CSN.1 decoder in osmo-pcu.  Thus the less conditional
statements we have in the parsing loop, the better.

The bitvec_get_bit_pos() alone is quite a complex function, which
does check the boundaries and even supports the L/H syntax.  Even
if it gets inlined by the compiler, we don't really want to run
redundant checks and run bitval2mask() on each iteration.

Change-Id: I438fc82d33ab2edbabd4215ec7bc46afb07d50ab
---
M src/bitvec.c
1 file changed, 4 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/09/26309/1

diff --git a/src/bitvec.c b/src/bitvec.c
index 2303a0d..13deeff 100644
--- a/src/bitvec.c
+++ b/src/bitvec.c
@@ -491,8 +491,10 @@
 	errno = 0;
 
 	for (i = 0; i < len; i++) {
-		int bit = bitvec_get_bit_pos((const struct bitvec *)bv, bv->cur_bit);
-		if (bit)
+		unsigned int bytenum = bytenum_from_bitnum(bv->cur_bit);
+		unsigned int bitnum = 7 - (bv->cur_bit % 8);
+
+		if (bv->data[bytenum] & (1 << bitnum))
 			ui |= ((uint64_t)1 << (len - i - 1));
 		bv->cur_bit++;
 	}

-- 
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/26309
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I438fc82d33ab2edbabd4215ec7bc46afb07d50ab
Gerrit-Change-Number: 26309
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211117/c018a9d0/attachment.htm>


More information about the gerrit-log mailing list