; MP_BIT = 30 ; MP_NAIL = 32 - MP_BIT ; MP_MASK = 3FFFFFFFh ;base 30bit 28~30 ; mp_limb_t ; mpn_rshift (mp_ptr rp,mp_srcptr up,mp_size_t n,unsigned int cnt) ; assert (n >= 1); ; assert (cnt >= 1); ; assert (cnt < GMP_LIMB_BITS); align 16 mpn_rshift: label .cp dword at esp+4 label .ap dword at esp+8 label .n dword at esp+12 label .cnt dword at esp+16 label .tnc dword at esp-4 mov [esp-4 ],esi mov [esp-8 ],edi mov [esp-12],ebx mov [esp-16],ebp mov edi,[.cp] mov esi,[.ap] mov ebx,[.n] mov ecx,[.cnt] ;4 mov [.tnc],MP_BIT ;30 sub [.tnc],ecx ;tnc=26 xor eax,eax .loop: mov ebp,[esi+ebx*4-4] mov ecx,[.cnt] mov edx,ebp shr edx,cl and edx,MP_MASK or eax,edx mov [edi+ebx*4-4],eax mov eax,ebp mov ecx,[.tnc] shl eax,cl and eax,MP_MASK sub ebx,1 jnz .loop shr eax,cl mov esi,[esp-4 ] mov edi,[esp-8 ] mov ebx,[esp-12] mov ebp,[esp-16] ret 16
;--------------------------- ; ==|== ==...== == == |==== ; HSB LSB ;--------------------------- align 16 mpn_lshift: label .cp dword at esp+4 label .ap dword at esp+8 label .n dword at esp+12 label .cnt dword at esp+16 label .tnc dword at esp-4 mov [esp-4 ],ecx ;tnc=26 lea esi,[esi+ebx*4] lea edi,[edi+ebx*4] neg ebx xor eax,[esi+ebx*4] mov ecx,[.cnt] ;4 mov edx,ebp shl edx,cl or edx,eax and edx,MP_MASK mov eax,ebp mov [edi+ebx*4],edx mov ecx,[.tnc] shr eax,cl add ebx,1 jnz .loop mov esi,[esp-16] ret 16
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。