I know I'm kind of late to the party on this one but if any of you stumble across this, just remember that you can define a macro to mimic it. For example:
#if defined(__GNUC__)
#define MSFASTCALL __fastcall
#define GCCFASTCALL
#elif defined(_MSC_VER)
#define MSFASTCALL
#define GCCFASTCALL __attribute__((fastcall))
#endif
int MSFASTCALL magic() GCCFASTCALL;
Obviously, this looks kind of ugly, so you could just define 2 prototypes (which is what I do) to make it a little easier to read but there are people who prefer the route that requires less typing. I generally don't use calling conventions except for special cases. I just let the compiler optimize the rest away.
Now, there are some quirks to remember. For example, when you're targeting a 64 bit platforms, all functions utilize the fastcall convention in order to take advantage of the extra registers and improve speed and reduce indirection cost. Likewise, fastcall is implemented differently by different platforms as it is not standardized. There are some others but that's all I can pull off the top of my head.