Files
GmSSL/crypto/sm2/miracl/mrmuldv.c
2017-07-06 19:27:07 +08:00

58 lines
1.6 KiB
C

/*
* Borland C++ 32-bit compiler (BCC32). Use with mirdef.h32
* Uses inline assembly feature. Suitable for Win32 Apps
* Also compatible with Microsoft Visual C++ 32-bit compiler
*/
#define ASM __asm__
int muldiv(a,b,c,m,rp)
int a,b,c,m,*rp;
{
ASM ("mov eax,DWORD PTR a");
ASM ("mul DWORD PTR b");
ASM ("add eax,DWORD PTR c");
ASM ("adc edx,0h");
ASM ("div DWORD PTR m");
ASM ("mov ebx,DWORD PTR rp");
ASM ("mov [ebx],edx");
}
int muldvm(a,c,m,rp)
int a,c,m,*rp;
{
ASM ("mov edx,DWORD PTR a");
ASM ("mov eax,DWORD PTR c");
ASM ("div DWORD PTR m");
ASM ("mov ebx,DWORD PTR rp");
ASM ("mov [ebx],edx");
}
int muldvd(a,b,c,rp)
int a,b,c,*rp;
{
ASM ("mov eax,DWORD PTR a");
ASM ("mul DWORD PTR b");
ASM ("add eax,DWORD PTR c");
ASM ("adc edx,0h");
ASM ("mov ebx,DWORD PTR rp");
ASM ("mov [ebx],eax");
ASM ("mov eax,edx");
}
void muldvd2(a,b,c,rp)
int a,b,*c,*rp;
{
ASM ("mov eax,DWORD PTR a");
ASM ("mul DWORD PTR b");
ASM ("mov ebx,DWORD PTR c");
ASM ("add eax,[ebx]");
ASM ("adc edx,0h");
ASM ("mov esi,DWORD PTR rp");
ASM ("add eax,[esi]");
ASM ("adc edx,0h");
ASM ("mov [esi],eax");
ASM ("mov [ebx],edx");
}