asm volatile issue
===

I try to understand code

    inline SInt32 smul32by16(SInt32 i32, SInt16 i16)
    {
    	register SInt32 r;
    	asm volatile("smulwb %0, %1, %2" : "=r"(r) : "r"(i32), "r"(i16));
    	return r;
    }
Do anybody know, what this asm volatile does?

**Update:**
P.S. I use objective C. and I should understand some code from assembly. That's why it's difficult for me to anderstand this code.