;Testname=nowarn; Arguments=-fbin -oimul.bin; Files=stdout stderr imul.bin ;Testname=warn; Arguments=-DWARN -fbin -oimul.bin; Files=stdout stderr imul.bin %macro test 1-3 5 -2 bits %1 %undef MEM %if %1 == 16 %define MEM [di] %elif %1 == 32 %define MEM [edi] %elif %1 == 64 %define MEM [rdi] %endif imul al imul byte MEM imul ax imul word MEM imul eax imul dword MEM %if %1 == 64 imul rdx imul qword MEM %endif imul ax,cx imul ax,MEM imul ax,word MEM imul eax,ecx imul eax,MEM imul eax,dword MEM %if %1 == 64 imul rax,rcx imul rax,MEM imul rax,qword MEM %endif imul ax,cx,%2 imul ax,cx,byte %2 imul ax,MEM,%2 imul ax,word MEM,%2 imul eax,ecx,%2 imul eax,ecx,byte %2 imul eax,MEM,%2 imul eax,dword MEM,%2 %if %1 == 64 imul rax,rcx,%2 imul rax,rcx,byte %2 imul rax,MEM,%2 imul rax,qword MEM,%2 %endif imul ax,%2 imul ax,byte %2 imul eax,%2 imul eax,byte %2 %if %1 == 64 imul rax,%2 imul rax,byte %2 %endif imul ax,cx,0x1234 imul ax,MEM,0x1234 imul ax,word MEM,0x1234 imul eax,ecx,0x12345678 imul eax,MEM,0x12345678 imul eax,dword MEM,0x12345678 %if %1 == 64 imul rax,rcx,0x12345678 imul rax,MEM,0x12345678 imul rax,qword MEM,0x12345678 %endif imul ax,0x1234 imul eax,0x12345678 %if %1 == 64 imul rax,0x12345678 %endif imul ax,cx,0xfffe imul ax,MEM,0xfffe imul ax,word MEM,0xfffe imul ax,cx,0xfe imul ax,MEM,0xfe imul ax,word MEM,0xfe imul eax,ecx,0xfffffffe imul eax,MEM,0xfffffffe imul eax,dword MEM,0xfffffffe imul eax,ecx,0xfffe imul eax,MEM,0xfffe imul eax,dword MEM,0xfffe %if %1 == 64 imul rax,rcx,%3 imul rax,MEM,%3 imul rax,qword MEM,%3 imul rax,rcx,0xfffe imul rax,MEM,0xfffe imul rax,qword MEM,0xfffe %endif imul ax,0xfffe imul eax,0xfffffffe %if %1 == 64 imul rax,%3 %endif %endmacro test 16 test 32 test 64 %ifdef WARN test 16,0x999 test 32,0x999999 test 64,0x999999999,0xfffffffe %endif