Pull to refresh
215
0
gribozavr @gribozavr

Пользователь

Send message
Зачем пересобирать библиотеки? Вы же используете clang для автодополнения, а для компиляции — хоть borland c++ 3.0.

Кроме того, библиотеки, собранные clang и gcc совместимы по ABI.
Я не вижу никакой сложности скомпилировать clang.
Ну сделайте 16, 32 РОНа — тоже степень двойки.

> что регистра стека в общем случае может и не быть, а он заменяется фреймом вызова, адреса в котором заполняет компилятор

Я не понял что вы имеете ввиду, но если у вас есть своя идея на этот счёт — то ОК.

Регистр флагов — легко. Любая арифметическая команда в x86 обновляет регистр флагов. Это обеспечивает наличие цепочки зависимостей из-за регистра флагов для очень большого количества команд. Хотя на самом деле в подавляющем большинстве случаев все эти флаги от арифметики никому не нужны. Нужны условные переходы и условная пересылка, и если очень сильно хотите — то примитивы для арифметики произвольной точности (которые с carry in и carry out).
Сделайте больше РОНов! 8 РОНов это очень, очень мало.

Как это вы совместили rsp/rbp в одном регистре?!

Уберите регистр флагов. Простои конвейера из-за зависимостей команд по этому регистру — очень плохая вещь, которую принципиально никак не исправить.
Короче не значит быстрее.

Вот некоторым атомам вообще нужно в коротких функциях перед ret поставить пару nop и в результате будет быстрее.
> которую я писал когда-то и которая искала простые числа с помощью Решета Аткина.

Сделайте честное сравнение с одинаковыми алгоритмами.
Диванные аналитики в треде?

В FreeBSD уже ушли с GCC, Debian на подходе.
range-based for, C++11.
C11, 6.5 p2
If a side effect on a scalar object is unsequenced relative to either a different side effect
on the same scalar object or a value computation using the value of the same scalar
object, the behavior is undefined.

Извините, я использовал неправильную стандартную библиотеку и получил ложные срабатывания: habrahabr.ru/post/164567/#comment_5668261

Перепроверил ваше решение — всё ОК.
Я сильно извиняюсь, совсем забыл что для MemorySanitizer нужно использовать инструментированную стандартую библиотеку C++, а я использовал обычную — отсюда ложное срабатывание (считалось что n не инициализирована, но она инициализируется кодом в стандартной библиотеке во время чтения из cin). Перпроверил — в вашей программе всё ОК, остальные не перепроверял.
Clang ругался на две строчки, со многими символами в каждой. pastebin.com/t7L3q67H — он подчёркивает всё, что не UTF-8.

Термин «UTF-8 последовательность» — согласно спецификации Unicode (в версии 6.2 это определение D86 в главе 3).
Вы правы! Я вчера прогнал топовые решения под AddressSanitizer, Undefined Behavior Sanitizer — ничего не нашёл и совсем забыл про Memory Sanitizer. Как оказалось, зря — там всё плохо.

В решениях bklim, dark1ight, Icemore, madkite, MaSaK, Mrrl, ripatti, udalov, vbarinov, VladVR, ZhekSooN есть использование значений неинициализированных переменных.
Некорректных UTF-8 последовательностей нет в extended character set, в том-то и дело. На корректный UTF-8 Clang не выдаёт предупреждений.

Вообще-то, компилятор не придирается, а выдаёт полезные диагностики.

К чему ещё в вашей программе можно «придраться»?
Что такое Extended ASCII Codes? (Такого понятия нет в стандарте.) Я понимаю что ошибок не было, но это добрая воля компилятора (по стандарту он мог бы и отказаться это компилировать).
Строго говоря, компилятор не обязан допускать во входном коде символы за пределами extended character set. Clang ориентирован на UTF-8, поэтому на не-UTF-8 он ругается. (А мог бы и вообще ошибку кидать — и был бы прав.)
Видимо где-то опечатка, так как скобочка в хеше.
> в исполнении clang 3.1

А почему не 3.2?

Information

Rating
Does not participate
Location
Украина
Registered
Activity