Войти
ФлеймФорумПрограммирование

Имеет ли смысл вводить следующие изменения в С? (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
#165
9:52, 9 мая 2019

1 frag / 2 deaths
А я все ждал когда ты на личности перейдешь. Классические обитатели гд.ру держат планку токсичности.


#166
(Правка: 10:21) 10:20, 9 мая 2019

Васян
> Выхлоп LLVM с clang под Linux. Я в в llvm не разбираюсь. Расскажите мне, что
> тут происходит.
Копирование структуры на стек тут происходит.

Васян
> i64 %9, i32 %11
Ну да, эти 24 байта пришлось порезать на 2 числа...

Под виндой видишь же, что call @Petuh по другому себя ведёт же, да?
И ллвм тут намного нагляднее асма, ну, это если включить мозг и понимать, что ллвм тут лишь как детектор.

mr.DIMAS
> Классические обитатели гд.ру держат планку токсичности.
Проспать 10 страниц а потом потребовать чтоб лично тебе повторили суть - это классическое поведение обитателя гд.ру. Проспал пруфы - твои проблемы.

#167
10:23, 9 мая 2019

1 frag / 2 deaths
> И ллвм тут намного нагляднее асма, ну, это если включить мозг и понимать, что
> ллвм тут лишь как детектор.

Понес в перлы.

#168
10:26, 9 мая 2019

Васян
> Вот почитать.
> https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=vs-2017
и судя по ней в винде структуры теперь всегда передаются по указателю, неважно первые они 4 аргумента (и тогда указатель будет в регистре) или нет (и тогда указатель будет на стеке).
А в линуксе
https://software.intel.com/sites/default/files/article/402129/mpx… nux64-abi.pdf
я так понимаю наоборот структуры (класс MEMORY) никогда не передаются через регистр, а всегда через стек.

#169
13:49, 9 мая 2019

Olaf85
> Нет. Потому что структуру сначало нужно копировать куда то. Ну а потом
> поднимать оттуда. То же самое
Речь не о копировании структуры. Чисто теоретически (потому что на практике оптимизатор поездит катком), взвесим коня в вакууме.

Перед тем как с ней работать ее адрес (обычно) нужно загрузить в РОН. В первом случае (упрощенно) нужно значение стека + константа смещения засунуть в РОН, во втором случае готовый адрес уже лежит в РОН готовый к употреблению. Примерно такими же рассуждения пользовались люди изобретая thiscall и fastcall для х86

#170
14:03, 9 мая 2019

exchg
> Перед тем как с ней работать ее адрес (обычно) нужно загрузить в РОН
Он и так хранится в esp с каким-то смещением, это если честно класть структуру на стек, не передавая указатель.

#171
(Правка: 14:32) 14:20, 9 мая 2019

1 frag / 2 deaths
> Он и так хранится в esp с каким-то смещением, это если честно класть структуру
> на стек, не передавая указатель.

Следующее же предложение:
exchg
> В первом случае (упрощенно) нужно значение стека + константа смещения засунуть
> в РОН

Т.е. так то оно да, но нужно сложить базу и смешение и засунуть результат в целевой регистр против сразу готовый адрес.

На кстати к вопросу о том как наплевали на железо при передаче структур:

MEMORYThis class consists of types that will be passed and returned in mem-ory via the stack. If the size of an object is larger than four eightbytes, or it contains unalignedfields, it has class MEMORY. The post merger clean up described later ensures that, for the processors that do not supportthe__m256type, if the size of an object is larger than two eightbytes and the first eightbyte is notSSE or any other eightbyte is not SSEUP, it still has class MEMORY. This in turn ensures that forprocessors that do support the__m256type, if the size of an object is four eightbytes and the firsteightbyte is SSE and all other eightbytes are SSEUP, it can be passed in a register.

kipar
> я так понимаю наоборот структуры (класс MEMORY) никогда не передаются через
> регистр, а всегда через стек.

Точнее всегда, но не всегда очевидно почему структура будет или не будет MEMORY.

#172
18:34, 9 мая 2019

1 frag / 2 deaths
> Он и так хранится в esp с каким-то смещением, это если честно класть структуру на стек, не передавая указатель.
Тебе не нравиться, что помимо скидывания копии на стек еще надо дополнительно передавать ее адрес?
Причина этого проста: выравнивание.

Если структура требует выравнивания больше, чем у стека, то ее положение может плавать относительно вершины.
В принципе, это можно разрулить, потребовав перманентного или локального выравнивания вершины стека, но решили не извращаться и добавить гибкости, передавая адрес копии явно (заодно добавив потенциала оптимизации).

#173
19:05, 9 мая 2019

}:+()___ [Smile]
> Причина этого проста: выравнивание.
Такое же, как у инт64 же.

}:+()___ [Smile]
> но решили не извращаться и добавить гибкости
Похерив "кроссплатформенный ассемблер" как идею, и добавив большое WTF при попытке прилинковать чужую функцию из другого языка.

#174
19:09, 9 мая 2019

1 frag / 2 deaths
> "кроссплатформенный ассемблер"
Опять в перлы?

#175
(Правка: 19:22) 19:20, 9 мая 2019

1 frag / 2 deaths
> Такое же, как у инт64 же.
У какого-нибудь __m256i?

> Похерив "кроссплатформенный ассемблер" как идею, и добавив большое WTF при попытке прилинковать чужую функцию из другого языка.
Не выдумывай. Если другой язык поддерживает cdecl (а они обычно поддерживают), то никаких проблем с линковкой нет. Не важно, какие конкретно требования, важно чтобы все их соблюдали. А так как они стандартизованы на уровне OS, то с этим, обычно, проблем нет.

А "кроссплатформенный ассемблер" обычно делается с помощью макросов.

#176
19:33, 9 мая 2019

}:+()___ [Smile]
> Не выдумывай. Если другой язык поддерживает cdecl (а они обычно поддерживают),
> то никаких проблем с линковкой нет
Если сам пишешь ллвм, то есть. И это дикая хрень.

}:+()___ [Smile]
> У какого-нибудь __m256i?
Ну хз, как линух такое передаёт?

#177
(Правка: 20:00) 19:59, 9 мая 2019

1 frag / 2 deaths
> Похерив "кроссплатформенный ассемблер" как идею

А как же быть с :

• Make it fast, even if it is not guaranteed to be portable.

Насколько я помню в оригинале была фраза про высокоуровневый ассемблер, и то не как идею, а как констатацию факта, что раскладка команд похожа на ассемблер для PDP-11.

#178
20:03, 9 мая 2019

exchg
> кроссплатформенный
и
> not guaranteed to be portable
это, как бы, противоречие. Не?

#179
(Правка: 20:11) 20:09, 9 мая 2019

gudleifr
> это, как бы, противоречие. Не?
Я именно это и имею в виду. Что идеи такой не было. По крайней мере уже к 89 году. А про ассемблер было сравнение в духе - "высокоуровневый ассемблер" и то не как идея/цель а как констатация факта.

Страницы: 18 9 10 11 12 13 Следующая »
ФлеймФорумПрограммирование