Ok, I get it now.  I forgot that `return new TypeTuple(Type::tsize_t, Type::tvoidptr);` means 'two registers' not 'pass the same as a struct with these members'.  Ideally these would just forward to the struct code somehow and we wouldn't need these special cases.