superscalar execution vs pipelining