diff --git a/ttmath/ttmathbig.h b/ttmath/ttmathbig.h index be385b7..7b619e8 100644 --- a/ttmath/ttmathbig.h +++ b/ttmath/ttmathbig.h @@ -394,7 +394,7 @@ public: // (TTMATH_BUILTIN_VARIABLES_SIZE on 32bit platform should have the value 256, // and on 64bit platform value 128 (256/2=128)) - mantissa.SetFromTable(temp_table, sizeof(temp_table) / sizeof(int)); + mantissa.SetFromTable(temp_table, sizeof(temp_table) / sizeof(unsigned int)); exponent = -sint(man)*sint(TTMATH_BITS_PER_UINT); info = 0; } @@ -659,7 +659,7 @@ public: // there shouldn't be a carry here because // (1) (2) guarantee that the mantissa of this // is greater than or equal to the mantissa of the ss2 - TTMATH_ASSERT( mantissa.Sub(ss2.mantissa) == 0 ) + TTMATH_VERIFY( mantissa.Sub(ss2.mantissa) == 0 ) } c += Standardizing(); diff --git a/ttmath/ttmathconfig.h b/ttmath/ttmathconfig.h index 76208a8..9b51dfa 100644 --- a/ttmath/ttmathconfig.h +++ b/ttmath/ttmathconfig.h @@ -1,10 +1,10 @@ -/* - * This file is a part of TTMath Bignum Library - * and is distributed under the PNG licence. - * Author: Christian Kaiser - */ - -/* +/* + * This file is a part of TTMath Bignum Library + * and is distributed under the PNG licence. + * Author: Christian Kaiser + */ + +/* Copyright (c) 2009 Christian Kaiser This software is provided 'as-is', without any express or implied @@ -25,12 +25,12 @@ 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef headerfilettmathmathttconfig -#define headerfilettmathmathttconfig -#pragma once - + */ + +#ifndef headerfilettmathmathttconfig +#define headerfilettmathmathttconfig +#pragma once + #include namespace ttmath diff --git a/ttmath/ttmathtypes.h b/ttmath/ttmathtypes.h index 0d25a09..72d54ec 100644 --- a/ttmath/ttmathtypes.h +++ b/ttmath/ttmathtypes.h @@ -135,20 +135,20 @@ namespace ttmath /*! the mask for the highest bit in the unsigned 32bit word (2^31) */ - #define TTMATH_UINT_HIGHEST_BIT 0x80000000ul + const uint TTMATH_UINT_HIGHEST_BIT = 0x80000000ul; /*! the max value of the unsigned 32bit word (2^32 - 1) (all bits equal one) */ - #define TTMATH_UINT_MAX_VALUE 0xfffffffful + const uint TTMATH_UINT_MAX_VALUE = 0xfffffffful; /*! the number of words (32bit words on 32bit platform) which are kept in built-in variables for a Big<> type (these variables are defined in ttmathbig.h) */ - #define TTMATH_BUILTIN_VARIABLES_SIZE 256u + const uint TTMATH_BUILTIN_VARIABLES_SIZE = 256u; #else @@ -174,24 +174,25 @@ namespace ttmath /*! the mask for the highest bit in the unsigned 64bit word (2^63) */ - #define TTMATH_UINT_HIGHEST_BIT 0x8000000000000000ul + const uint TTMATH_UINT_HIGHEST_BIT = 0x8000000000000000ul; /*! the max value of the unsigned 64bit word (2^64 - 1) (all bits equal one) */ - #define TTMATH_UINT_MAX_VALUE 0xfffffffffffffffful + const uint TTMATH_UINT_MAX_VALUE = 0xfffffffffffffffful; /*! the number of words (64bit words on 64bit platforms) which are kept in built-in variables for a Big<> type (these variables are defined in ttmathbig.h) */ - #define TTMATH_BUILTIN_VARIABLES_SIZE 128ul + const uint TTMATH_BUILTIN_VARIABLES_SIZE = 128ul; #endif - #define TTMATH_BITS_PER_UINT (sizeof(uint)*8) + const uint TTMATH_BITS_PER_UINT = (sizeof(uint)*8); + } @@ -343,7 +344,7 @@ namespace ttmath foo.Add(foo); but there are only few methods which can do that */ - class ReferenceError : public std::logic_error, ExceptionInfo + class ReferenceError : public std::logic_error, public ExceptionInfo { public: @@ -375,7 +376,7 @@ namespace ttmath the name and the line of a file where the macro TTMATH_ASSERT was used) */ - class RuntimeError : public std::runtime_error, ExceptionInfo + class RuntimeError : public std::runtime_error, public ExceptionInfo { public: @@ -409,6 +410,9 @@ namespace ttmath #define TTMATH_ASSERT(expression) \ if( !(expression) ) throw ttmath::RuntimeError(TTMATH_TEXT(__FILE__), __LINE__); + #define TTMATH_VERIFY(expression) \ + if( !(expression) ) throw ttmath::RuntimeError(TTMATH_TEXT(__FILE__), __LINE__); + #else #define TTMATH_REFERENCE_ASSERT(expression) \ @@ -416,19 +420,32 @@ namespace ttmath #define TTMATH_ASSERT(expression) \ if( !(expression) ) throw RuntimeError(); + + #define TTMATH_VERIFY(expression) \ + if( !(expression) ) throw RuntimeError(); #endif #else #define TTMATH_REFERENCE_ASSERT(expression) #define TTMATH_ASSERT(expression) + #define TTMATH_VERIFY(expression) (void)(expression); #endif - + #if !defined(LOG_PRINTF) + #define LOG_PRINTF printf + #endif #ifdef TTMATH_DEBUG_LOG + + #define TTMATH_LOG(pszMsg) \ + { \ + ttmath::tostrstrm_t ss; \ + PrintLog(TTMATH_TEXT(pszMsg),ss); \ + LOG_PRINTF(TTMATH_TEXT("%s"),ss.str().c_str()); \ + } - #define TTMATH_LOG(msg) \ - PrintLog(msg, std::cout); + //#define TTMATH_LOG(msg) \ + // PrintLog(msg, std::cout); #else diff --git a/ttmath/ttmathuint.h b/ttmath/ttmathuint.h index 8604e00..e9f1f7d 100644 --- a/ttmath/ttmathuint.h +++ b/ttmath/ttmathuint.h @@ -1923,7 +1923,7 @@ public: */ bool IsTheLowestBitSet() const { - return (*table & 1) != 0; + return (table[0] & 1) != 0; } @@ -2017,12 +2017,12 @@ public: 10 -> A 15 -> F */ - static uint DigitToChar(uint digit) + static tchar_t DigitToChar(uint digit) { if( digit < 10 ) - return digit + '0'; + return (tchar_t)(digit + '0'); - return digit - 10 + 'A'; + return((tchar_t)(digit - 10 + 'A')); } diff --git a/ttmath/ttmathuint_x86_64.h b/ttmath/ttmathuint_x86_64.h index 412fd23..e52c96a 100644 --- a/ttmath/ttmathuint_x86_64.h +++ b/ttmath/ttmathuint_x86_64.h @@ -54,7 +54,7 @@ namespace ttmath { - #if defined(_M_IX64) + #if defined(_M_X64) #include extern "C" @@ -100,7 +100,7 @@ namespace ttmath // this algorithm doesn't require it #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = adc_x64(p1,p2,b,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -170,7 +170,7 @@ namespace ttmath TTMATH_ASSERT( index < value_size ) #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = addindexed_x64(p1,b,index,value); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -252,7 +252,7 @@ namespace ttmath TTMATH_ASSERT( index < value_size - 1 ) #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = addindexed2_x64(p1,b,index,x2,x1); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -319,7 +319,7 @@ namespace ttmath // this algorithm doesn't require it #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = sbb_x64(p1,p2,b,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -386,7 +386,7 @@ namespace ttmath TTMATH_ASSERT( index < value_size ) #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = subindexed_x64(p1,b,index,value); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -446,7 +446,7 @@ namespace ttmath uint * p1 = table; #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = rcl_x64(p1,b,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -503,7 +503,7 @@ namespace ttmath uint * p1 = table; #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = rcr_x64(p1,b,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -561,7 +561,7 @@ namespace ttmath uint * p1 = table; #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = rcl2_x64(p1,b,bits,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -637,7 +637,7 @@ namespace ttmath uint * p1 = table; #ifndef __GNUC__ - #if defined(_M_IX64) + #if defined(_M_X64) c = rcr2_x64(p1,b,bits,c); #else #error "another compiler than GCC is currently not supported in 64bit mode" @@ -761,7 +761,11 @@ namespace ttmath #ifndef __GNUC__ #if defined(_MSC_VER) - old_bit = _bittestandset((long*)&value,bit) != 0; + #if defined(TTMATH_PLATFORM64) + old_bit = _bittestandset64((__int64*)&value,bit) != 0; + #else + old_bit = _bittestandset((long*)&value,bit) != 0; + #endif #else #error "another compiler than GCC is currently not supported in 64bit mode" #endif diff --git a/ttmath/ttmathuint_x86_amd64_msvc.asm b/ttmath/ttmathuint_x86_amd64_msvc.asm index f94c7d0..4f246e7 100644 --- a/ttmath/ttmathuint_x86_amd64_msvc.asm +++ b/ttmath/ttmathuint_x86_amd64_msvc.asm @@ -11,7 +11,7 @@ PUBLIC rcr_x64 PUBLIC rcl2_x64 PUBLIC rcr2_x64 -public div_x64 +PUBLIC div_x64 ; ; "rax, rcx, rdx, r8-r11 are volatile."