mirror-llvm-project/libc/docs
Jeff Bailey 2705f4613a
[libc] Implement fast date conversion algorithm of Ben Joffe (#208312)
Replaced the loop-based year/month/day extraction in update_from_seconds
with Ben Joffe's "Very Fast 64-bit" date algorithm using multiply-shift
division (4 multiplications, 0 hardware divisions). Also replaced the
mktime inverse with Ben Joffe's inverse date algorithm.

Updated is_leap_year to use the Drepper-Neri-Schneider algorithm (% 25
instead of % 100). Replaced the O(n) yday month-length loop with a
constant-time cumulative-days table lookup.

Uses UInt128 for portable 128-bit support across 64-bit (native) and
32-bit (software fallback) targets.

Raman's benchmarks on x86-64 show a ~13% wall-time improvement:

  Before: real 2.215s, user 2.214s
  After:  real 1.919s, user 1.913s

Algorithm references:
  https://www.benjoffe.com/fast-date-64
  https://www.benjoffe.com/fast-date#inverse
  https://www.benjoffe.com/fast-leap-year#drepper-neri-schneider

---------

Co-authored-by: Raman Tenneti <rtenneti@google.com>
2026-07-10 21:04:22 +01:00
..
_static [libc][docs] Furo theme, new landing page, cleanups (#184303) 2026-03-09 20:48:42 +00:00
dev [libc] Implement fast date conversion algorithm of Ben Joffe (#208312) 2026-07-10 21:04:22 +01:00
gpu [libc][docs] Minor typos in Documentation (#196066) 2026-05-07 08:14:14 +01:00
headers [libc][stdfix] Fix idiv* doc table, rename idivfx test helpers and remove duplicate bitsuk source (#206729) 2026-07-07 11:21:36 -04:00
uefi [libc][docs][NFC] Remove dead files and consolidate check.rst (#194442) 2026-04-30 18:03:55 +01:00
arch_support.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
build_and_test.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
build_concepts.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
CMakeLists.txt Reland "[libc] Implement basename and dirname in libgen.h #204554" (#205352) 2026-06-23 15:59:59 +01:00
compiler_support.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
conf.py [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
contributing.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
full_cross_build.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
full_host_build.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
getting_started.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
hand_in_hand.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
index.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
Maintainers.md [libc][docs][NFC] Rename Maintainers.rst to Maintainers.md (#191882) 2026-04-22 18:02:29 +01:00
overlay_mode.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
platform_support.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
porting.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00
talks.md [docs] Rewrite libc docs from reST to markdown (#208802) 2026-07-10 11:45:43 -07:00