It seems there's (correctly) a check for multiplying an index register by 0.
But it is incorrectly rejecting any multiply of a constant by 0.
asm {lea EAX, [0*4+EAX]; } // fails ("bad operand").
asm {lea EAX, [4*0+EAX]; } // fails ("bad operand").
asm {lea EAX, [EAX+4*0]; } // fails ("bad operand").
asm {lea EAX, [0+EAX]; } // OK
asm {lea EAX, [7*7+EAX]; } // OK
Only known workaround is to replace 0*X with 0.
This is painful in autogenerated code