fastcall is blocking, so can use temp vars