Поддерживаемые типы данных

Компилятор поддерживает обычные для С/С++ простые типы данных (табл.1), однако их реализация в объектном коде выполняется с учетом архитектуры процессоры, т.е. 32-разрядных регистров. Компилятор не поддерживает типы данных меньшие, чем адресуемая ячейка памяти процессора. Хотя это приводит к необычной эквивалентности размерности переменных типа short int, int, long int и char (все по 32 бита), но не противоречит стандарту ISO/IEC.

Таблица 1

Тип Размер в битах Результат, возвращаемый оператором sizeof
int 32 (ФЗ знаковый)  
unsigned int 32 (ФЗ беззнаковый)  
long 32 (ФЗ знаковый)  
unsigned long 32 (ФЗ беззнаковый)  
char 32 (ФЗ знаковый)  
unsigned char 32 (ФЗ беззнаковый)  
short 32 (ФЗ знаковый)  
unsigned short 32 (ФЗ беззнаковый)  
pointer    
float 32 (ПЗ)  
double 32 или 64 (ПЗ) 1 или 2 (по умолчанию 1)
long double 64 (ПЗ)  
fract 32 (в С++ - ФЗ дробный знаковый, в С – эмуляция через ПЗ)  

Несколько слов следует сказать особо о представлении дробных операндов и операндов в формате с плавающей запятой (ПЗ). Тип данных float представляет собой 32-битовое значение в формате IEEE-1985. Тип double может быть либо 32-х, либо 64-битовым. Обработка 64-битовых ПЗ-данных выполняется с использованием программной эмуляции ПЗ-арифметики, что приводит к существенному снижению производительности вычислений. Поэтому более предпочтительным является использование данных в формате float или 32-битовых double, поскольку в этом случае обработка ведется в "родном" для ADSP формате.

Для обработки дробных данных в поддерживаемом компиляторе языка С++ типе fract (32-битовые ФЗ-числа в диапазоне [-1…1) должен быть подключен соответствующий класс путем использования заголовочного файла <fract>. Чтобы компилятор мог отличить константу в дробном ФЗ-формате от ПЗ-константы, она должна иметь суффикс "r", например 0.5r. При этом поддерживаются операции преобразования типов между дробным и целыми типами и между дробным и ПЗ-типами, а также стандартный набор арифметических операций: сложение, вычитание, умножение, сдвиги, сравнения.

Варианты оптимизации генерируемого программного кода при компиляции

Компилятор cc21k поддерживает следующие режимы оптимизации в порядке "возрастания степени оптимизации":

- "Debugging" – компилятор генерирует полную отладочную информацию с целью обеспечения возможности сопоставления исходного и дизассемблированного кода при отладке;

- "Default" – выполняется высокоуровневая оптимизация, такая как вставка функций, явно объявленных как inline;

- "Procedural Optimization" – компилятор выполняет более агрессивную оптимизацию в пределах каждой компилируемой процедуры, при этом некоторые отладочные возможности могут быть ограничены;

- "Interprocedural Optimization" – выполняется оптимизация в пределах всей компилируемой программы (проекта) дополнительно к внутримодульной оптимизации.

2.4. Расширения языка С/С++

Компилятор cc21k поддерживает ряд расширений стандарта ANSI C/C++. Эти расширения введены как с учетом архитектуры DSP-процессоров, так и для того, чтобы позволить программисту использовать некоторые возможности С++ при программировании на С.

К основным расширениям относится поддержка:

- inline-функций;

- вставок на ассемблере;

- двух пространств памяти pm и dm;

- явного указания сегментов для размещения данных и кода;

- булевских типов данных (bool, true, false);

- ограничения перекрытий указателей

и другие.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: