From nobody Sat Jul 09 19:27:02 2022 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 3BFD917D7381 for ; Sat, 9 Jul 2022 19:27:25 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from hz.grosbein.net (hz.grosbein.net [IPv6:2a01:4f8:c2c:26d8::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "hz.grosbein.net", Issuer "hz.grosbein.net" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LgKsl01m9z42F5 for ; Sat, 9 Jul 2022 19:27:22 +0000 (UTC) (envelope-from eugen@grosbein.net) Received: from eg.sd.rdtc.ru (root@eg.sd.rdtc.ru [62.231.161.221] (may be forged)) by hz.grosbein.net (8.16.1/8.16.1) with ESMTPS id 269JRCYQ074615 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 9 Jul 2022 19:27:13 GMT (envelope-from eugen@grosbein.net) X-Envelope-From: eugen@grosbein.net X-Envelope-To: marc@bumblingdork.com Received: from [10.58.0.11] (dadvw [10.58.0.11] (may be forged)) by eg.sd.rdtc.ru (8.16.1/8.16.1) with ESMTPS id 269JRBWN068482 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT); Sun, 10 Jul 2022 02:27:11 +0700 (+07) (envelope-from eugen@grosbein.net) Subject: Re: Canonical way / best practice for 128-bit integers To: Marc Veldman , freebsd-hackers@freebsd.org References: <86CB4C22-9CAB-4578-8F11-962B4B08F756@bumblingdork.com> From: Eugene Grosbein Message-ID: Date: Sun, 10 Jul 2022 02:27:02 +0700 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 In-Reply-To: <86CB4C22-9CAB-4578-8F11-962B4B08F756@bumblingdork.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT autolearn=disabled version=3.4.2 X-Spam-Report: * -0.0 SHORTCIRCUIT No description available. * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on hz.grosbein.net X-Rspamd-Queue-Id: 4LgKsl01m9z42F5 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=fail (mx1.freebsd.org: domain of eugen@grosbein.net does not designate 2a01:4f8:c2c:26d8::2 as permitted sender) smtp.mailfrom=eugen@grosbein.net X-Spamd-Result: default: False [-2.10 / 15.00]; R_SPF_FAIL(1.00)[-all]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-0.996]; MIME_GOOD(-0.10)[text/plain]; FROM_EQ_ENVFROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers]; ASN(0.00)[asn:24940, ipnet:2a01:4f8::/32, country:DE]; MIME_TRACE(0.00)[0:+]; R_DKIM_NA(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; ARC_NA(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; RCVD_TLS_ALL(0.00)[]; FREEFALL_USER(0.00)[eugen]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_HAS_DN(0.00)[]; DMARC_NA(0.00)[grosbein.net]; TO_DN_SOME(0.00)[]; MID_RHS_MATCH_FROM(0.00)[] X-ThisMailContainsUnwantedMimeParts: N 09.07.2022 23:26, Marc Veldman wrote: > Hello, > > I’m working on some bluetooth code, and that involves handling 128-bit uuids. > There are various ways to handle in the FreeBSD codebase, like in sdp.h: > > /* > * SDP int128/uint128 parameter > */ > > struct int128 { > int8_t b[16]; > }; > typedef struct int128 int128_t; > typedef struct int128 uint128_t; > > and in sys/dev/random/uint128.h > > #ifdef USE_REAL_UINT128_T > typedef __uint128_t uint128_t; > #define UINT128_ZERO 0ULL > #else > typedef struct { > /* Ignore endianness */ > uint64_t u128t_word0; > uint64_t u128t_word1; > } uint128_t; > static const uint128_t very_long_zero = {0UL,0UL}; > #define UINT128_ZERO very_long_zero > #endif > > Is there any recommended / standard way to handle 128 bit integers in a portable way? UUIDs are not integer numbers with arithmetic, so you should not look for 128 bit ints, if you need portability. For example, 32 bit i386 arch lacks hardware support for 128 bit ints, so FreeBSD does not support 128 bit ints with arithmetic for i386 but it does not mean that you cannot use 128 bit UUIDs there. We have uuid(3) manual for DCE 1.1 compliant UUID type uuid_t and functions.