This logically-equivalent function appears to compile correctly.
static void proper_function(unsigned short param) { unsigned int data = __builtin_inl(0);
switch (data) { case 0: param = 12; break;
case 4: param = 42; break;
default: die(); break; }
__builtin_outl(param, 0); }