124
124
#if CRYPTOPP_BOOL_X64
125
#define REG_output %4
125
#define REG_output %1
127
127
#define REG_iterationCount %2
129
#define REG_rounds %0
128
#define REG_state %4 /* constant */
129
#define REG_rounds %3 /* constant */
130
130
#define REG_roundsLeft eax
131
131
#define REG_temp32 edx
132
132
#define REG_temp rdx
133
#define SSE2_WORKSPACE %5
133
#define SSE2_WORKSPACE %5 /* constant */
135
FixedSizeAlignedSecBlock<byte, 32*16> workspace;
135
CRYPTOPP_ALIGN_DATA(16) byte workspace[16*32];
137
137
#define REG_output edi
138
138
#define REG_input eax
459
459
".att_syntax prefix;"
461
460
#if CRYPTOPP_BOOL_X64
462
: "r" (m_rounds), "r" (input), "r" (iterationCount), "r" (m_state.data()), "r" (output), "r" (workspace.m_ptr)
463
: "%eax", "%edx", "memory", "cc", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15"
461
: "+r" (input), "+r" (output), "+r" (iterationCount)
462
: "r" (m_rounds), "r" (m_state.m_ptr), "r" (workspace)
463
: "%eax", "%rdx", "memory", "cc", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15"
465
: "d" (m_rounds), "a" (input), "c" (iterationCount), "S" (m_state.data()), "D" (output)
465
: "+a" (input), "+D" (output), "+c" (iterationCount)
466
: "d" (m_rounds), "S" (m_state.m_ptr)