Ticket #24: sha.cpp.patch

File sha.cpp.patch, 1.2 KB (added by weidai, at 2009-07-04T17:51:39Z)

fix for sha.cpp

  • sha.cpp

     
    273273#endif
    274274        AS2(    mov             STATE_SAVE, WORD_REG(cx))
    275275        AS2(    mov             DATA_SAVE, WORD_REG(dx))
    276         AS2(    add             WORD_REG(di), WORD_REG(dx))
    277         AS2(    mov             DATA_END, WORD_REG(di))
     276        AS2(    lea             WORD_REG(ax), [WORD_REG(di) + WORD_REG(dx)])
     277        AS2(    mov             DATA_END, WORD_REG(ax))
    278278        AS2(    mov             K_END, WORD_REG(si))
    279279
    280280#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
    281281#if CRYPTOPP_BOOL_X86
    282282        AS2(    test    edi, 1)
    283283        ASJ(    jnz,    2, f)
     284        AS1(    dec             DWORD PTR K_END)
    284285#endif
    285286        AS2(    movdqa  xmm0, XMMWORD_PTR [WORD_REG(cx)+0*16])
    286287        AS2(    movdqa  xmm1, XMMWORD_PTR [WORD_REG(cx)+1*16])
     
    355356        ROUND(14, 1, eax, ecx, edi, edx)
    356357        ROUND(15, 1, ecx, eax, edx, edi)
    357358        AS2(    cmp             WORD_REG(si), K_END)
    358         ASJ(    jne,    1, b)
     359        ASJ(    jl,             1, b)
    359360
    360361        AS2(    mov             WORD_REG(dx), DATA_SAVE)
    361362        AS2(    add             WORD_REG(dx), 64)
     
    364365
    365366#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE
    366367#if CRYPTOPP_BOOL_X86
    367         AS2(    test    DWORD PTR DATA_END, 1)
    368         ASJ(    jnz,    4, f)
     368        AS2(    test    DWORD PTR K_END, 1)
     369        ASJ(    jz,             4, f)
    369370#endif
    370371        AS2(    movdqa  xmm1, XMMWORD_PTR [AS_REG_7+1*16])
    371372        AS2(    movdqa  xmm0, XMMWORD_PTR [AS_REG_7+0*16])