Re[8]: Антипаттерн, противоположный Primitive Obsession
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 24.03.23 18:54
Оценка:
Здравствуйте, Patalog, Вы писали:

N>>Да, и вдогонку — а действительно, почему у тебя они в u8? Это же тип скорее для упаковки в структуру, чем для манипулирования. Во всех современных ABI всё равно будет один регистр занят, так что u8 или i32 — одномайственно.


P>Хм, я что-то пропустил и (в x86-64 например) из RAX куда-то исчезли AL/AX/EAX и команды умеющие с ними работать?


Команды — есть. Упаковка разных параметров в один регистр в ABI — нет (с редкими особыми исключениями). Хранение в процессе использования внутри функции разных параметров, например, рядом в AL и AH — тоже нет, компиляторы такое не делают — им это ломает логику распределения регистров.
В ARM/32 регистры векторов и плавучки устроены так, что, например, D0 состоит из S0 и S1. В MIPS/64 регистры для 64-битных значений это пара 32-битных. Количество и кривость костылей для поддержки этого оказались такими, что повторять этот гимор никто не хочет. В ARM/64, RISC-V это тоже не повторили.

Преимущества манипулирования 8-битным значением в AL вместо 32-битного в EAX или 64-битного в RAX давно нет. Скорее наоборот — из-за проблемы, что комбинирование со старым значением сокращает возможности параллеления на переименовании регистров.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.