Would it perhaps be easier to modify the macro arg to decide whether to set cgpu->* or data->*?