changed: small optimization in ttmath_subindexed_x64()

(asm for x86_64 on MS VC)
changed: removed some MS VC warnings
changed: if TTMATH_DEBUG_LOG is defined then UInt::UInt()
         constructor fills the table with special values
added:   macro: TTMATH_BITS(min_bits)
         which returns the number of machine words
         capable to hold min_bits bits


git-svn-id: svn://ttmath.org/publicrep/ttmath/trunk@201 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2009-09-20 20:10:29 +00:00
parent 01a86e40d9
commit 4c0d8c26ff
6 changed files with 46 additions and 11 deletions

View File

@ -1,4 +1,4 @@
Version 0.9.0 prerelease (2009.09.13):
Version 0.9.0 prerelease (2009.09.20):
* fixed: Big::operator>>(std::istream&, Big<> &) didn't recognize values
in scientific mode (with 'e' character)
* added: support for wide characters (wchar_t, std::wstring)
@ -25,6 +25,9 @@ Version 0.9.0 prerelease (2009.09.13):
Big::SetInfoBit(unsigned char)
Big::IsInfoBit(unsigned char)
some methods for manipulating the info flags
* added: macro: TTMATH_BITS(min_bits)
which returns the number of machine words
capable to hold min_bits bits
* changed: Factorial() is using the Gamma() function now
* changed: Big::Div(ss2)
Big::Mod(ss2)

View File

@ -46,10 +46,13 @@
*/
#ifdef _MSC_VER
//warning C4127: conditional expression is constant
#pragma warning( disable: 4127 )
//warning C4127: conditional expression is constant
#pragma warning( disable: 4702 )
//warning C4702: unreachable code
#endif
#include "ttmathbig.h"
#include "ttmathobjects.h"
@ -2788,6 +2791,8 @@ namespace ttmath
#ifdef _MSC_VER
#pragma warning( default: 4127 )
//warning C4127: conditional expression is constant
#pragma warning( disable: 4702 )
//warning C4702: unreachable code
#endif
#endif

View File

@ -157,6 +157,13 @@ namespace ttmath
*/
#define TTMATH_BUILTIN_VARIABLES_SIZE 256u
/*!
this macro returns the number of machine words
capable to hold min_bits bits
e.g. TTMATH_BITS(128) returns 4
*/
#define TTMATH_BITS(min_bits) ((min_bits-1)/32 + 1)
#else
/*!
@ -203,6 +210,13 @@ namespace ttmath
*/
#define TTMATH_BUILTIN_VARIABLES_SIZE 128ul
/*!
this macro returns the number of machine words
capable to hold min_bits bits
e.g. TTMATH_BITS(128) returns 2
*/
#define TTMATH_BITS(min_bits) ((min_bits-1)/64 + 1)
#endif
}
@ -279,6 +293,7 @@ namespace ttmath
namespace ttmath
{

View File

@ -2594,6 +2594,18 @@ public:
*/
UInt()
{
// when macro TTMATH_DEBUG_LOG is defined
// we set special values to the table
// in order to be everywhere the same value of the UInt object
#ifdef TTMATH_DEBUG_LOG
#ifdef TTMATH_PLATFORM32
for(uint i=0 ; i<value_size ; ++i)
table[i] = 0xc1c1c1c1;
#else
for(uint i=0 ; i<value_size ; ++i)
table[i] = 0xc1c1c1c1c1c1c1c1;
#endif
#endif
}

View File

@ -390,7 +390,7 @@ namespace ttmath
#endif
TTMATH_LOG("UInt::AddVector")
// TTMATH_LOG("UInt::AddVector")
return c;
}
@ -613,7 +613,7 @@ namespace ttmath
#endif
TTMATH_LOG("UInt::SubVector")
// TTMATH_LOG("UInt::SubVector")
return c;
}

View File

@ -44,11 +44,11 @@
PUBLIC ttmath_adc_x64
PUBLIC ttmath_addindexed_x64
PUBLIC ttmath_addindexed2_x64
PUBLIC ttmath_addvector_x64
PUBLIC ttmath_addvector_x64
PUBLIC ttmath_sbb_x64
PUBLIC ttmath_subindexed_x64
PUBLIC ttmath_subvector_x64
PUBLIC ttmath_subvector_x64
PUBLIC ttmath_rcl_x64
PUBLIC ttmath_rcr_x64
@ -58,6 +58,8 @@ PUBLIC ttmath_rcr2_x64
PUBLIC ttmath_div_x64
;
; Microsoft x86_64 convention: http://msdn.microsoft.com/en-us/library/9b372w95.aspx
;
; "rax, rcx, rdx, r8-r11 are volatile."
; "rbx, rbp, rdi, rsi, r12-r15 are nonvolatile."
@ -289,16 +291,14 @@ loop1:
mov r9, 1
dec rdx
jnz loop1
jc return_1 ; most of the times, there will be NO carry (I hope)
mov rax, 1
ret
done:
xor rax, rax
ret
return_1:
mov rax, 1
ret
ttmath_subindexed_x64 ENDP