try to let architecture handle the shift mask for us