git: kernel: Provide __udivti3() for intermediate 128-bit calculations.
Sascha Wildner
swildner at crater.dragonflybsd.org
Mon Sep 21 05:58:38 PDT 2020
commit 85f00d18bcc1ab1d11df7193b597e70a43e0896d
Author: Sascha Wildner <saw at online.de>
Date: Mon Sep 21 14:58:31 2020 +0200
kernel: Provide __udivti3() for intermediate 128-bit calculations.
The recent refactoring of sysclock_t from 32 to 64 bits added -lgcc
to the kernel for this purpose but this approach has a number of
issues:
* It prevents the kernel from linking with clang that does these
things differently.
* We don't generally want to link the kernel against any userspace
libraries. Even less if these are GPL licensed libraries.
So the best solution is to provide __udivti3() in the kernel, too.
The code of the __udivmodti4() function (of which __udivti3() is a
special case) was taken from an older LLVM/clang C runtime library
and is MIT licensed. I've added the (dual-)license and list of
contributors.
The commit also adds kernel specific _uint128_t and _int128_t
types. The choice of names is deliberate, in order to avoid
conflicting with internal types provided by compilers.
In-discussion-with: zrj
Summary of changes:
sys/conf/kern.pre.mk | 4 +-
sys/cpu/x86_64/include/stdint.h | 6 +
sys/platform/pc64/conf/files | 1 +
sys/platform/pc64/x86_64/__udivti3.c | 318 +++++++++++++++++++++++++++++++++++
sys/sys/systm.h | 9 +-
5 files changed, 331 insertions(+), 7 deletions(-)
create mode 100644 sys/platform/pc64/x86_64/__udivti3.c
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/85f00d18bcc1ab1d11df7193b597e70a43e0896d
--
DragonFly BSD source repository
More information about the Commits
mailing list