Mike Gibson <mike.gibson(a)storagecraft.com> writes:
@@ -144,8 +144,23 @@ LONGLONG WINAPI RtlLargeIntegerShiftRight( LONGLONG a, INT count ) */ LONGLONG WINAPI RtlLargeIntegerArithmeticShift( LONGLONG a, INT count ) { - /* FIXME: gcc does arithmetic shift here, but it may not be true on all platforms */ - return a >> count; +#ifdef HAVE_SIMPLE_ARITHMETIC_RIGHT_SHIFT + return a >> count; +#else + /* create mask to extend the sign bit */ + LONGLONG mask; + mask = ( LONGLONG ) 1 << 63; + mask &= a; + mask >>= count;
That's an arithmetic shift, you are only moving the problem. Also your calling convention for the _allsh* functions isn't correct, as a simple test case demonstrates. Do you really have an app that uses this? -- Alexandre Julliard julliard(a)winehq.org