Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102617482
D44651.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D44651.diff
View Options
diff --git a/sbin/nvmecontrol/Makefile b/sbin/nvmecontrol/Makefile
--- a/sbin/nvmecontrol/Makefile
+++ b/sbin/nvmecontrol/Makefile
@@ -1,4 +1,3 @@
-
.include <src.opts.mk>
PACKAGE=nvme-tools
diff --git a/sbin/nvmecontrol/nvmecontrol.h b/sbin/nvmecontrol/nvmecontrol.h
--- a/sbin/nvmecontrol/nvmecontrol.h
+++ b/sbin/nvmecontrol/nvmecontrol.h
@@ -91,22 +91,33 @@
/* Utility Routines */
/*
- * 128-bit integer augments to standard values. On i386 this
- * doesn't exist, so we use 64-bit values. So, on 32-bit systems,
- * you'll get truncated values until someone implement 128bit
- * ints in software.
+ * C23 supports 128-bit integers via _BitInt(128). clang 16 and gcc 13 support
+ * this. Older compilers will support 128-bit ints on 64-bit
+ * platforms. Otherwise we truncate this to 64-bit on 32-bit systems with older
+ * compilers. We also check for > C18 instead of >= C23 because clang 17 was
+ * released before the the __STDC_VERSION__ was defined.
*/
#define UINT128_DIG 39
-#ifdef __ILP32__
-typedef uint64_t uint128_t;
-#else
+#if __STDC_VERSION__ >= 202311L
+typedef unsigned _BitInt(128) uint128_t;
+#elif defined(__SIZEOF_INT128__)
typedef __uint128_t uint128_t;
+#else
+typedef uint64_t uint128_t;
#endif
static __inline uint128_t
to128(void *p)
{
- return *(uint128_t *)p;
+#if __STDC_VERSION__ >= 202311L || defined(__SIZEOF_INT128__)
+ uint64_t lo, hi;
+
+ lo = le64dec(p);
+ hi = le64dec((const char *)p + 8);
+ return ((uint128_t)hi << 64 | lo);
+#else
+ return (le64dec(p));
+#endif
}
uint64_t le48dec(const void *pp);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Nov 15, 9:11 PM (19 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14648004
Default Alt Text
D44651.diff (1 KB)
Attached To
Mode
D44651: nvmecontrol: Fix to128 for big endian targets
Attached
Detach File
Event Timeline
Log In to Comment