Pushing the limits of generic and domain-specific hardware data prefetching