[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
1. Ну, то что называется brain-damaged - little-endian.
2. Регистровый порядок байт (длинная переменная в регистре) вообще имеет веселый порядок байт.
3. Не реализованы некоторые команды сравнения
4. Нет команд сравнения с учетом переноса
5. Нет команд типа "neg" (a = -a)
6. Нет команд типа abs()
7. Компилятор конкретно задумывается и, на мой взгляд, выдает плохой код для команд типа (IAR я смотрел):
while(a&(1L<<30)){...}8. В IARe не совсем понятна стратегия распределения регистров - из того, что я нарыл следует, что эта последовательность глупая (r4-r15)
9. В ИАРе нет способов восстановления режима полной мощности после выхода из прерывания
10. Архитектура ядра такова, что если много однобайтовых переменных,
то их приходится размещать в памяти с дырками - выравнивать на двойку (иначе не понятна реакция на преобразование типов char -> int, etc)
11. В ИАРе вроде не IEE754 плавающая арифметика (точно не знаю)
... про другие компилеры сказать не могу...
... хотя про GCC тоже могу наговорить мнгого гадостей ....
E-mail: info@telesys.ru