ooo, I havent had a chance to post this monster in a while!
1 2 3 4 5 6 7 8 9 10 11 12 13 14
inlinelonglong ipow(longlong p, unsignedlonglong e)
{
constlonglong one = 1;
constlonglong *lut[2] = {&p,&one};
registerlonglong result = 1;
result *= lut[!(e&1)][0]; p *= p;
result *= lut[!(e&2)][0]; p *= p;
result *= lut[!(e&4)][0]; p *= p;
result *= lut[!(e&8)][0]; p *= p;
result *= lut[!(e&16)][0]; p *= p;
result *= lut[!(e&32)][0]; p *= p;
result *= lut[!(e&64)][0];
return result;
}