/*** *divhelp.c - Div/Rem helpers for IA64 * * Copyright (c) 2001, Microsoft Corporation. All rights reserved. * *Purpose: * Define a number of IA64 compiler support functions used to implement * integral divide and remainder in code compiled -Os. * *Revision History: * 11-30-01 EVN Created. * *******************************************************************************/ /* ** First, turn on global optimizations and optimize for speed, ** so that compiler generates division/reminder inline. */ #pragma optimize ("gt", on) /* ** Now proper helper functions. */ unsigned char __udiv8 (unsigned char i, unsigned char j) { return i / j; } unsigned char __urem8 (unsigned char i, unsigned char j) { return i % j; } signed char __div8 (signed char i, signed char j) { return i / j; } signed char __rem8 (signed char i, signed char j) { return i % j; } unsigned short __udiv16 (unsigned short i, unsigned short j) { return i / j; } unsigned short __urem16 (unsigned short i, unsigned short j) { return i % j; } signed short __div16 (signed short i, signed short j) { return i / j; } signed short __rem16 (signed short i, signed short j) { return i % j; } unsigned int __udiv32 (unsigned int i, unsigned int j) { return i / j; } unsigned int __urem32 (unsigned int i, unsigned int j) { return i % j; } signed int __div32 (signed int i, signed int j) { return i / j; } signed int __rem32 (signed int i, signed int j) { return i % j; } unsigned __int64 __udiv64 (unsigned __int64 i, unsigned __int64 j) { return i / j; } unsigned __int64 __urem64 (unsigned __int64 i, unsigned __int64 j) { return i % j; } signed __int64 __div64 (signed __int64 i, signed __int64 j) { return i / j; } signed __int64 __rem64 (signed __int64 i, signed __int64 j) { return i % j; } struct udivrem { unsigned __int64 div; unsigned __int64 rem; }; struct divrem { signed __int64 div; signed __int64 rem; }; struct udivrem __udivrem8 (unsigned char i, unsigned char j) { struct udivrem s; s.div = i / j; s.rem = i % j; return s; } struct divrem __divrem8 (signed char i, signed char j) { struct divrem s; s.div = i / j; s.rem = i % j; return s; } struct udivrem __udivrem16 (unsigned short i, unsigned short j) { struct udivrem s; s.div = i / j; s.rem = i % j; return s; } struct divrem __divrem16 (signed short i, signed short j) { struct divrem s; s.div = i / j; s.rem = i % j; return s; } struct udivrem __udivrem32 (unsigned int i, unsigned int j) { struct udivrem s; s.div = i / j; s.rem = i % j; return s; } struct divrem __divrem32 (signed int i, signed int j) { struct divrem s; s.div = i / j; s.rem = i % j; return s; } struct udivrem __udivrem64 (unsigned __int64 i, unsigned __int64 j) { struct udivrem s; s.div = i / j; s.rem = i % j; return s; } struct divrem __divrem64 (signed __int64 i, signed __int64 j) { struct divrem s; s.div = i / j; s.rem = i % j; return s; }