Обновить

Комментарии 6

А мы используем для генерации C кода Ivory eDSL для Haskell.

Вот насчет memcpy я бы поспорил, видимо автору чудесным образом удавалось избегать этой черной дыры, ожидая, правильного поведения, но:

  1. это законно с точки зрения сях, но там есть lifetime, и там есть проблемы

  2. компилятор может и оптимизирует это в «невыровненную загрузку», но чаще нет - ибо мемкопи для другого

Компилятор может распознать шаблон int32_t x; memcpy(&x, addr, sizeof x); и заменить его на невыровненную загрузку, если целевая архитектура такое поддерживает.

насколько я понял, такого поведения и хотят достичь

а в эпилоге функции храним все «избыточные» возвращаемые значения — кроме первого, если таковые есть — в глобальных переменных.

Добро поржаловать в многопоточность...

Да, поржал овал немного. :))

Насчёт 1-го примера, есть строчка:

char base = __builtin_assume_aligned((char ) m.base_addr, 4096);

Но в объявлении структуры m нет такого члена с таким именем base_addr. Видимо, там подразумевается base?...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации