Для чего нужен EM_SPARC32PLUS?

Я обнаружил, что Linux и GNU Binutils определяют специальный тип машины EM_SPARC32PLUS в заголовке ELF. Зачем это нужно? Что делает SPARC V8+ таким особенным, что он не может использовать EM_SPARC?

Я думаю, что должна быть важная причина для нового типа машины, потому что это нарушает совместимость со старыми программами, а все другие архитектуры стремятся использовать старый тип машины как можно дольше.


person Marat Dukhan    schedule 07.05.2014    source источник
comment
Я бы сразу заподозрил, что это новый, несовместимый с предыдущими версиями набор инструкций. По той же причине x86 и SPARC не имеют одного и того же типа машины.   -  person Jonathon Reinhart    schedule 07.05.2014
comment
Из википедии, SPARC Version 8 (V8), an enhanced SPARC architecture definition, was released in 1990. The main differences between V7 and V8 were the addition of integer multiply and divide instructions, and an upgrade from 80-bit "extended precision" floating-point arithmetic to 128-bit "quad-precision" arithmetic. SPARC V8 served as the basis for IEEE Standard 1754-1994, an IEEE standard for a 32-bit microprocessor architecture.. Не похоже на обратно несовместимую версию.   -  person Marat Dukhan    schedule 07.05.2014
comment
Это относится к V8, а не V8 plus.   -  person Jonathon Reinhart    schedule 07.05.2014
comment
Как по мне, v8+ (любой UltraSPARC) имеет полный набор атомарных операций (точнее, CAS), а настоящий чип v8 (SuperSparc/HyperSparc начала 1990-х) имеет только ограниченный 24-битный своп. Итак, v8 и v8+ — это разные наборы инструкций, а в v8+ доступно больше инструкций. Любой чип v9 может выполнять как код v8, так и код v8+, но древний SS10 может работать только с настоящим кодом v8, но не с v8+.   -  person osgx    schedule 01.12.2014


Ответы (1)


Начиная с elf-em.h, мы видим следующие (отборные) записи:

#define EM_SPARC        2
#define EM_SPARC32PLUS  18      /* Sun's "v8plus" */
#define EM_SPARCV9      43      /* SPARC v9 64-bit */

Поиск в Google привел меня на эту справочную страницу для Sun Studio 12, в котором говорится:

v8plus

Скомпилируйте для версии V8plus SPARC-V9 ISA. По определению, V8plus означает ISA V9, но ограниченный 32-битным подмножеством, определенным спецификацией ISA V8plus, без набора визуальных инструкций (VIS) и без других расширений ISA, зависящих от реализации.

Эта опция позволяет компилятору генерировать код для хорошей производительности на V8plus ISA.

Результирующий объектный код имеет формат SPARC-V8+ ELF32 и выполняется только в среде Solaris UltraSPARC — он не работает на процессорах V7 или V8.

Пример: любая система на основе архитектуры микросхем UltraSPARC.

По сути, это 32-разрядная версия архитектуры V9 для UltraSPARC.

Смотрите также:

person Jonathon Reinhart    schedule 07.05.2014
comment
Имеет смысл. Я думал, что v8plus означает v8 и новее. - person Marat Dukhan; 07.05.2014
comment
@MaratDukhan Я добавил ссылку, которая может быть вам интересна. - person Jonathon Reinhart; 07.05.2014
comment
Спасибо. v8plus выглядит как x32 ABI на x86-64, но в отличие от v8plus, x32 ABI использует тип машины EM_X86_64 (такой же, как x86-64) с классом файла ELFCLASS32 для указания 32-битного режима. - person Marat Dukhan; 07.05.2014
comment
@MaratDukhan Хороший вопрос. Основываясь на вашей аналогии, я склонен согласиться с вами в том, что определение другого типа машины кажется немного сложным. Я хотел бы найти сообщение в старом списке рассылки или что-то еще, указывающее, почему они пошли по этому пути. +1 кстати за интересный вопрос. - person Jonathon Reinhart; 07.05.2014