I don't have the particular hardware in front of me at the moment, but as I recall: The problem wasn't in the runtime, it was during compilation. There was a particular pragma or definition required which was dependent on the version of glib installed. It was explicitly mentioned in a thread here on PM which I found while googling. I didn't have the time to deep-dive into it at the time.
I'll update this node once I get back on the system in question and give you the specific reference. Perhaps you can save me some time with the deep-diving.
update: Okay, found it. It's this business regarding how TI gets manipulated with __attribute__ and __mode__. Salient details:
- Math::Int128 version 0.05
- linux 2.6.32-36 (Ubuntu 10.04, yeah yeah)
- gcc v 4.4.3
- you specifically reference this in your comments: http://gcc.gnu.org/gcc-4.4/changes.html which would seem to apply to my version of gcc
I didn't pursue it much further because the project I was working on has to be very portable (mostly across linuxes, some solaris) across 32 and 64 bit architectures. I'm not saying your code isn't portable, but I'd like to avoid exceptional cases if possible.
On a more general note, for both Math::Int64 and Math::Int128, I would very much like a way to catch overflow conditions at the XS level; without this I have to punt to Math::BigInt when I'd really rather have the speed of your modules.