Целевой компилятор для произвольной архитектуры - PullRequest
1 голос
/ 02 ноября 2008

Существуют ли компиляторы для языков высокого уровня (например, C), которые могут быть нацелены на различные архитектуры путем указания аппаратных ресурсов цели?

Мне интересно, существуют ли компиляторы, которые могут ориентироваться на архитектуру, указывая такие функции, как доступные регистры и набор команд процессора (то есть, как каждая команда меняет состояние процессора), и расположение памяти в архитектуре.

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

Ответы [ 3 ]

3 голосов
/ 02 ноября 2008

Фундаментальная проблема заключается в том, что характеристики различных процессоров не особенно одинаковы. Посмотрите на связывание на IA64, двойные наборы команд на ARM / Thumb, регистры окна на SPARC, регистр счета на PPC. Даже функции, которые могут быть на множественных архитектурах (например, предопределение в ARM и Itanium), могут быть достаточно разными, чтобы вы не делили реализацию. Это все уникальные особенности, которые вам нужно понять, чтобы написать хороший компилятор, это не просто разные конфигурации, которые выбрали дизайнеры. Учитывая тот факт, что они имеют тенденцию быть уникальными для данного процессора, любое переключение, которое вы бы имели в компиляторе, чтобы включить их, фактически было бы специфическим кодом в компиляторе для поддержки этого процессора, скрывая его за некоторой опцией конфигурации, чтобы позволить вам включить его это просто запутанность этого.

Сказав это, есть ряд общих особенностей, с которыми приходится сталкиваться многим процессорам. Таким образом, вы обнаружите, что большинство современных компиляторов определяют такие вещи, как кодировки команд, файлы регистров (и псевдонимы) и различные другие лакомые кусочки в файлах конфигурации, которые они затем используют для генерации части исходного кода компилятора, которая интегрируется с рукописными битами.

Глядя на серверную часть LLVM X86, значительную часть (~ 30%) составляют файлы .td (определение цели)

Phoenix:X86 louis$ ls -al | grep cpp 
-rw-r--r--   1 louis  louis    27627 Nov  1 03:32 X86CodeEmitter.cpp
-rw-r--r--   1 louis  louis      661 Oct 29 18:56 X86ELFWriterInfo.cpp
-rw-r--r--   1 louis  louis    46558 Oct 29 18:56 X86FastISel.cpp
-rw-r--r--   1 louis  louis    43660 Oct 29 18:56 X86FloatingPoint.cpp
-rw-r--r--   1 louis  louis    59915 Oct 29 18:56 X86ISelDAGToDAG.cpp
-rw-r--r--   1 louis  louis   312709 Nov  1 03:32 X86ISelLowering.cpp
-rw-r--r--   1 louis  louis   109229 Oct 29 18:56 X86InstrInfo.cpp
-rw-r--r--   1 louis  louis    17396 Oct 29 18:56 X86JITInfo.cpp
-rw-r--r--   1 louis  louis    44111 Nov  1 03:32 X86RegisterInfo.cpp
-rw-r--r--   1 louis  louis    10369 Oct 29 18:56 X86Subtarget.cpp
-rw-r--r--   1 louis  louis    15265 Oct 29 18:56 X86TargetAsmInfo.cpp
-rw-r--r--   1 louis  louis     9365 Oct 29 18:56 X86TargetMachine.cpp
Phoenix:X86 louis$ ls -al | grep td  
-rw-r--r--   1 louis  louis     6870 Oct 29 18:56 X86.td
-rw-r--r--   1 louis  louis    13480 Oct 29 18:56 X86CallingConv.td
-rw-r--r--   1 louis  louis    77361 Nov  1 03:32 X86Instr64bit.td
-rw-r--r--   1 louis  louis    31517 Oct 29 18:56 X86InstrFPStack.td
-rw-r--r--   1 louis  louis    11690 Oct 29 18:56 X86InstrFormats.td
-rw-r--r--   1 louis  louis   156188 Oct 29 18:56 X86InstrInfo.td
-rw-r--r--   1 louis  louis    32971 Oct 29 18:56 X86InstrMMX.td
-rw-r--r--   1 louis  louis   183502 Oct 29 18:56 X86InstrSSE.td
-rw-r--r--   1 louis  louis    23653 Nov  1 03:32 X86RegisterInfo.td
1 голос
/ 02 ноября 2008

AFAIK, gcc работает именно так. отметьте «Описания машин» в gcc docs. Конечно, создание этих .md файлов - это серьезное программирование.

0 голосов
/ 02 ноября 2008

Некоторое время назад я слушал подкаст, в котором говорилось о виртуальной машине Java, написанной (в основном) на Java, которая предназначена для нескольких различных платформ с каким-то файлом определения платформы. Я думаю Я слушал Java Posse , а я думаю это могла быть Maxine Research Virtual Machine .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...