Mike Gibson mike.gibson@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?