This was originally ported from rocm device libs in 2cf4d5f31204c873d76953bfe3c8b5602b29e789. Merge in more recent changes.