В информатике язык передачи регистров ( RTL ) — это разновидность промежуточного представления (IR), очень близкого к языку ассемблера , например , к тому, который используется в компиляторе . Он используется для описания потока данных на уровне передачи регистров архитектуры . [1] В научных работах и учебниках часто используется форма RTL как архитектурно-нейтральный язык ассемблера. RTL используется как название определенного промежуточного представления в нескольких компиляторах, включая GNU Compiler Collection (GCC), Zephyr и европейские проекты компиляторов CerCo и CompCert .
Идея RTL была впервые описана в книге «Проектирование и применение ретаргетингового оптимизатора Peephole» . [2]
В GCC RTL генерируется из представления GIMPLE , преобразуется с помощью различных проходов в средней части GCC , а затем преобразуется в язык ассемблера.
RTL GCC обычно записывается в форме, которая выглядит как S-выражение Lisp :
( набор ( рег.: SI 140 ) ( плюс:SI ( рег.:SI 138 ) ( рег .: SI 139 ) )))
Это выражение побочного эффекта говорит: «суммировать содержимое регистра 138 с содержимым регистра 139 и сохранить результат в регистре 140». SI определяет режим доступа для каждого регистра. В примере это «SImode», т.е. «доступ к регистру как к 32-битному целому числу».
Последовательность сгенерированных RTL имеет некоторую зависимость от характеристик процессора, для которого GCC генерирует код. Однако значение RTL более или менее независимо от цели: обычно можно прочитать и понять фрагмент RTL, не зная, для какого процессора он был сгенерирован. Аналогично, значение RTL обычно не зависит от исходного языка высокого уровня программы.
Язык передачи регистров — это система для выражения в символической форме последовательностей микроопераций среди регистров цифрового модуля. Это удобный инструмент для описания внутренней организации цифровых компьютеров в краткой и точной манере. Он также может быть использован для облегчения процесса проектирования цифровых систем. [3]