I'm so sure it's valid not because I've actually read the C standard, but because the whole Win16 API was called this way, and Win32 uses a slight variation that passes more things in registers.
Further reading:
http://blogs.msdn.com/b/oldnewthing/archive/2004/01/02/47184... http://en.wikipedia.org/wiki/X86_calling_conventions http://unixwiz.net/techtips/win32-callconv.html http://webster.cs.ucr.edu/Page_win32/IczelionTuts/tut1.html