The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Компиляция)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

htons(), gcc и типы :-/ нефкурю...  , pavlinux (ok), 08-Окт-09, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


4. "htons(), gcc и типы :-/ нефкурю...  "  +/
Сообщение от gpl77 (ok), 09-Окт-09, 10:25 
>[оверквотинг удален]
>int main() {
>
>        unsigned short int x,
>y;
>
>        x = y <<
>8;
>
>return 0;
>}

во freebsd i386
htons это __byte_swap_word и аргумент до int нигде по дороге не расширяется

Ответить | Правка | Наверх | Cообщить модератору

5. "htons(), gcc и типы :-/ нефкурю...  "  +/
Сообщение от pavlinux (ok), 09-Окт-09, 16:54 
>>[оверквотинг удален]
>>int main() {
>>
>>  unsigned short int x, y;
>>   x = y << 8;
>>return 0;
>>}
>
>во freebsd i386 htons это __byte_swap_word
> и аргумент до int нигде по дороге не расширяется

При -O0 это

extern uint16_t htons (uint16_t __hostshort);

но при -O2 и более это тоже макрось __swap_16(x), и далее  __bswap_constant_16(__x)

<in.h>

#ifdef __OPTIMIZE__

# if __BYTE_ORDER == __BIG_ENDIAN
...
# define htons(x)    (x)
# else
#  if __BYTE_ORDER == __LITTLE_ENDIAN
...
#   define htohs(x)    __bswap_16 (x)

в <bits/byteswap.h>

/* Swap bytes in 16 bit value.  */

#define __bswap_constant_16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))

# define __bswap_16(x) \
     (__extension__                                                           \
      ({ register unsigned short int __v, __x = (x);                          \
         if (__builtin_constant_p (__x))                                      \
           __v = __bswap_constant_16 (__x);                                   \
         else                                                                 \
           __asm__ ("rorw $8, %w0"                                            \
                    : "=r" (__v)                                              \
                    : "0" (__x)                                               \
                    : "cc");                                                  \
         __v; }))


if (__builtin_constant_p (__x))  

Где живёт __builtin_constant_p не нашёл

-fno-builtn не помогает, чтоб до asm дошло дело.

Ответить | Правка | Наверх | Cообщить модератору

6. "htons(), gcc и типы :-/ нефкурю...  "  +/
Сообщение от const86 (ok), 10-Окт-09, 00:20 
>Где живёт __builtin_constant_p не нашёл

Дык оно ж builtin, живёт в голове комплятора и ни в каком хедере не описано ;)

Ответить | Правка | Наверх | Cообщить модератору

7. "htons(), gcc и типы :-/ нефкурю...  "  +/
Сообщение от pavlinux (ok), 10-Окт-09, 01:47 
>>Где живёт __builtin_constant_p не нашёл
>
>Дык оно ж builtin, живёт в голове комплятора и ни в каком
>хедере не описано ;)

Это понятно, смысл работы искал... нашел...


__builtin_constant_p (x) - возвращает 1 если х константа и 0 если нет.

Дальше ещё веселее

Возвращение 0 не означает, что значение не является постоянным,
а лишь то, что GCC не может доказать, что она постоянно с указанным
значением опции -O.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру