|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 10, 2003 15:14:36 Black_mirror а во втором куске кода, при умножении ecx на 10 теряется старшая часть произведения. Возможно я не дописал всё таки "е" jnae |
|
|
Дата: Сен 10, 2003 15:16:44 2Edmond По поводу ошибок: проверка на переполнение ессно нужна, на пустую строку тоже. А вот действительно-ли необходимо проверять соответствие цифр десятичным, нельзя просто считать 0h концом строки? Это заметно ускорит процесс. |
|
|
Дата: Сен 10, 2003 15:47:56 boozook Большое спасибо. работает... Ну раз моя первая программа под SSE2 работает, значит нужно проц апгрейдить 8) Новые Атлоны SSE2 понимают? А то мой не понимает 8( небольшие баги: Да, пожалуй директиву стоит добавить, слово убрать, и это: movdqu [esp],xmm0 movdqu [esp+16],xmm0 movdqu [esp],xmm0 заменить на movqda А также add eax,[esp+4] исправить на add eax,[esp+8] |
|
|
Дата: Сен 10, 2003 16:03:59 Black_mirror Новые АтлоныХП понимают тока SSE1 А вообще это все команды MMX, тока у пня четвертого появилась возможность использовать с ними 128-битные регистры |
|
|
Дата: Сен 10, 2003 16:04:20 Edmond Возможно я не дописал всё таки "е" jnae Один баг исправлен. Осталось только придумать, как умножать ecx на 10, чтоб не потерать старшие разряды. А то 18-значные числа будут неправильно преобразовываться. |
|
|
Дата: Сен 10, 2003 16:10:41 По поводу ошибок: проверка на переполнение ессно нужна, на пустую строку тоже. А вот действительно-ли необходимо проверять соответствие цифр десятичным, нельзя просто считать 0h концом строки? Это заметно ускорит процесс. ОК, я всё проверю. Если ускорит!!! Тогда ОК. Только опишите всё подробно. А пока я буду думать... |
|
|
Дата: Сен 10, 2003 16:26:50 Black_mirror Мне интересно бы как это по скорости улучшить.. ОК буду думать.. как только почищю код от багов.. |
|
|
Дата: Сен 10, 2003 16:33:21 Edmond Это заметно ускорит процесс Это я про SSE-версию имел ввиду... ) По логике - если известно, что число десятичное - следовательно это уже проверено. Ну а ноль в конце - это вроде стандартно.. Хотя, я пожалуй тоже подумаю... |
|
|
Дата: Сен 10, 2003 16:45:37 boozook Я могу сделать ДВЕ АРХИТЕКТУРЫ ЛИБЫ,. Вообще уже очень навароченно выходит.. Но у меня выйдет :))) То есть смотри, строка всё равно будет попадать на вход парсеру. Я вот думаю, может сделать потоковый вариант? То есть, 1. Делается сканер строки 2. Делается отдельно конвертер (отдельно) А потом они соединяются. |
|
|
Дата: Сен 10, 2003 17:27:39 Edmond Можно вообще сделать лексический анализатор, который будет сам определять систему счисления (по конечному символу) и по ней считать результат |
|
|
Дата: Сен 10, 2003 17:30:31 На моем процессоре замена lodsb на mov al,[esi]/inc esi дает прирост в скорости почти в два раза! |
|
|
Дата: Сен 10, 2003 17:51:01 boozook :)На моем процессоре замена lodsb на mov al,[esi]/inc esi дает прирост в скорости почти в два раза! Я уже учёл это :) Ещё лучше сделать хочется :) Я правдо развернул цикл.. Но нет ли у кого идеи поизворотливей.. моей.. Можно вообще сделать лексический анализатор, который будет сам определять систему счисления (по конечному символу) и по ней считать результат Ну это и так понятно. Но Се зависит от того, для чего буедт использоваться.. Для шаблонизатора -- да. Но для простых IntToXX это ненужно. |
|
|
Дата: Сен 10, 2003 18:32:23 · Поправил: boozook По аналогии.. так вроде быстрее получается: xor eax,eax xor edx,edx xor ecx,ecx @@: mov eax,[esi] add esi,4 sub eax,30303030h cmp al,9 ja end1 mov cl,al lea edx,[edx+edx*4] lea edx,[ecx+edx*2] cmp ah,9 ja end2 mov cl,ah lea edx,[edx+edx*4] lea edx,[ecx+edx*2] shr eax,16 cmp al,9 ja end3 mov cl,al lea edx,[edx+edx*4] lea edx,[ecx+edx*2] cmp ah,9 ja end4 mov cl,ah lea edx,[edx+edx*4] lea edx,[ecx+edx*2] jmp short @B end1: dec esi end2: dec esi end3: dec esi end4: dec esi ret |
|
|
Дата: Сен 11, 2003 13:17:46 boozook Замечательно!!!!! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.038 |