Это MSVC и intrinsics. SIMD intrinsics поддерживаются всеми приличными компиляторами одинаково, а вот не-SIMD тоже поддерживаются, но у каждого компилера называются по-своему.
У Radeon 5850 всего 18 независимых процессоров (simd cores). Учитывая их частоту в 725 MHz они едва ли выигрывают у 6-ядерного Phenom на 3.2 GHz только за счёт числа.
GetExceptionCode()->ExceptionRecord->ExceptionAddress будет содержать адрес инструкции, следующей за инструкцией, которая вызвала исключение. Отмапить его в имя функции (и даже номер строчки кода) можно с помощью Debug Help Library. Естественно, программа должна быть собрана с отладочной инфой.
Приведённый вами код, конечно, лучше, чем версия автора поста, но тоже работает неправильно, т.к. не обрабатывает модификаторы букв. Например, он выдаст strrev(«über») = «reb̈u» если исходная строка была в денормализованной форме. Но даже если вы всё же научите алгоритм не переворачивать модификаторы, останутся другие проблемы. Например, должна ли концевая буква мем 'ם' преобразовываться в обычную мем 'מ', если мы переворачиваем слово и эта буква становится первой? Или что делать с модификаторами направления письма (слева-направо/справо-налево) при обращении строки? Чтобы ответить на эти вопросы нужно ответить на вопрос «Зачем на переворачивать строку». И когда вы пытаетесь ответить на этот вопрос, вы понимаете, что на самом деле операция переворачивания строки вам не нужна, просто в вашем классе String нет метода lastIndexOf и вы думали сделать что-то вроде string.reverse().indexOf(substring.reverse()). Так вот, не стоит этого делать. Просто добавьте в класс String метод, которые делает действительно то, что вам нужно.
Звучит как «640 килобайт хватит всем!». Если вам не нужно много ресурсов, то виртуальный сервер обойдётся вам дешевле выделенного на ARM, так что последние смысла не имеют.
#include <intrin.h> const char* find_digit(const char* str) { static const __m128i str_mask[16] = { _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x000000FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x000000FF, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x00FFFFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x0000FFFF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x000000FF, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0x00FFFFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0x0000FFFF), _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0x000000FF) }; static const __m128i str_offset = _mm_set1_epi8(127 - '9'); static const __m128i str_threshold = _mm_set1_epi8(127 - 10); const size_t str_misalignment = ((size_t)str) & ((size_t)15); const __m128i* str_aligned = (const __m128i*)(((size_t)str) - str_misalignment); __m128i str_vector = _mm_load_si128(str_aligned); str_vector = _mm_and_si128(str_vector, str_mask[str_misalignment]); str_vector = _mm_add_epi8(str_vector, str_offset); int str_bitmask = _mm_movemask_epi8(_mm_cmpgt_epi8(str_vector, str_threshold)); unsigned long index; _BitScanForward(&index, str_bitmask); while (str_bitmask == 0) { str_aligned += 1; str_vector = _mm_load_si128(str_aligned); str_vector = _mm_add_epi8(str_vector, str_offset); str_bitmask = _mm_movemask_epi8(_mm_cmpgt_epi8(str_vector, str_threshold)); _BitScanForward(&index, str_bitmask); } return ((const char*)str_aligned) + index; }Integer.toString(x)GetExceptionCode()->ExceptionRecord->ExceptionAddressбудет содержать адрес инструкции, следующей за инструкцией, которая вызвала исключение. Отмапить его в имя функции (и даже номер строчки кода) можно с помощью Debug Help Library. Естественно, программа должна быть собрана с отладочной инфой.Юникод? Не, не слышали.