summaryrefslogtreecommitdiff
path: root/integer.cpp
diff options
context:
space:
mode:
authorweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2003-10-31 02:40:42 +0000
committerweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2003-10-31 02:40:42 +0000
commitda0f264557c2eb8ba12926f0ef6baa9ca0a1c734 (patch)
tree0529b6d836a13d8f203c2ece1e0b1e22a3eb446d /integer.cpp
parent37ef6f4f467be4fcc5d8e366316271b103bab285 (diff)
downloadcryptopp-da0f264557c2eb8ba12926f0ef6baa9ca0a1c734.tar.gz
avoid read-ahead into invalid memory in P4Optimized::Add
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@141 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'integer.cpp')
-rw-r--r--integer.cpp52
1 files changed, 16 insertions, 36 deletions
diff --git a/integer.cpp b/integer.cpp
index 1fee33b..575b431 100644
--- a/integer.cpp
+++ b/integer.cpp
@@ -1205,46 +1205,36 @@ CRYPTOPP_NAKED word P4Optimized::Add(word *C, const word *A, const word *B, unsi
AS2( mov edi, [edx])
AS2( mov ebp, [ebx])
+ AS1( jmp carry1AddP4)
AS1(loopstartAddP4:)
+ AS2( mov edi, [edx+8])
+ AS2( add ecx, 8)
+ AS2( add edx, 8)
+ AS2( mov ebp, [ebx])
AS2( add edi, eax)
AS1( jc carry1AddP4)
-
AS2( xor eax, eax)
- AS1(carry1continueAddP4:)
+ AS1(carry1AddP4:)
AS2( add edi, ebp)
AS2( mov ebp, 1)
AS2( mov [ecx], edi)
AS2( mov edi, [edx+4])
AS2( cmovc eax, ebp)
AS2( mov ebp, [ebx+4])
- AS2( lea ebx, [ebx+8])
+ AS2( add ebx, 8)
AS2( add edi, eax)
AS1( jc carry2AddP4)
-
AS2( xor eax, eax)
- AS1(carry2continueAddP4:)
+ AS1(carry2AddP4:)
AS2( add edi, ebp)
AS2( mov ebp, 1)
AS2( cmovc eax, ebp)
AS2( mov [ecx+4], edi)
- AS2( add ecx, 8)
- AS2( mov edi, [edx+8])
- AS2( add edx, 8)
AS2( add esi, 2)
- AS2( mov ebp, [ebx])
AS1( jnz loopstartAddP4)
- AS1( jmp loopendAddP4)
-
- AS1(carry1AddP4:)
- AS2( mov eax, 1)
- AS1( jmp carry1continueAddP4)
-
- AS1(carry2AddP4:)
- AS2( mov eax, 1)
- AS1( jmp carry2continueAddP4)
AS1(loopendAddP4:)
@@ -1262,46 +1252,36 @@ CRYPTOPP_NAKED word P4Optimized::Subtract(word *C, const word *A, const word *B,
AS2( mov edi, [edx])
AS2( mov ebp, [ebx])
+ AS1( jmp carry1SubP4)
AS1(loopstartSubP4:)
+ AS2( mov edi, [edx+8])
+ AS2( add edx, 8)
+ AS2( add ecx, 8)
+ AS2( mov ebp, [ebx])
AS2( sub edi, eax)
AS1( jc carry1SubP4)
-
AS2( xor eax, eax)
- AS1(carry1continueSubP4:)
+ AS1(carry1SubP4:)
AS2( sub edi, ebp)
AS2( mov ebp, 1)
AS2( mov [ecx], edi)
AS2( mov edi, [edx+4])
AS2( cmovc eax, ebp)
AS2( mov ebp, [ebx+4])
- AS2( lea ebx, [ebx+8])
+ AS2( add ebx, 8)
AS2( sub edi, eax)
AS1( jc carry2SubP4)
-
AS2( xor eax, eax)
- AS1(carry2continueSubP4:)
+ AS1(carry2SubP4:)
AS2( sub edi, ebp)
AS2( mov ebp, 1)
AS2( cmovc eax, ebp)
AS2( mov [ecx+4], edi)
- AS2( add ecx, 8)
- AS2( mov edi, [edx+8])
- AS2( add edx, 8)
AS2( add esi, 2)
- AS2( mov ebp, [ebx])
AS1( jnz loopstartSubP4)
- AS1( jmp loopendSubP4)
-
- AS1(carry1SubP4:)
- AS2( mov eax, 1)
- AS1( jmp carry1continueSubP4)
-
- AS1(carry2SubP4:)
- AS2( mov eax, 1)
- AS1( jmp carry2continueSubP4)
AS1(loopendSubP4:)