Default implementations for __ashldi3, __ashrdi3, __divdi3, __udivdi3, etc?

Are there existing "generic" implementations for these functions under the same license as LLVM? By generic I mean C or IR that doesn't use any particular HW intrinsics.

I read up on divides in Knuth's Seminumerical book, but decided to use base-2 long division on the first go-around for simplicity. I know it's not very efficient and I'm looking for shortcuts to something better.

Pointers to divide algo's could also be of use.

Thanks,

Dan

Dan,
For the shifts, check out chapter 2 of hacker's delight by Guy Steele.

http://www.hackersdelight.org/

Hi Daniel,

We're working on a complete ground-up implementation of the API vended by libgcc, including these routines, under the LLVM license. We need to finish it and get approval to release them as part of llvm.org, but I expect it to happen in the next month or two. I don't know if this will align with your needs or not, but I thought I would mention it.

-Chris

That's great; it will really fill out 64 bit integer support on 32 bit machines.

Thanks,

Dan