GCC встраивают ассемблер, смешивая размеры регистра (x86)

Вы можете отключить переменную сеанса, используя:

  1. session_unset - освобождает все переменные сеанса (она равна использованию: $_SESSION = array();)
  2. unset($_SESSION['Products']); - Отменить только индекс продуктов в переменной сеанса. ( Помните : вы должны использовать как функцию, а не как вы использовали)
  3. session_destroy - уничтожает все данные, зарегистрированные на сеанс

Чтобы узнать разницу между использованием session_unset и session_destroy, прочитайте этот ответ SO . Это помогает.

12
задан ire_and_curses 27 March 2011 в 19:59
поделиться

4 ответа

Можно использовать %w0 если я помню право. Я просто протестировал его, также.:-)

int
test(int x)
{
    int y;
    asm ("rorw $8, %w0" : "=q" (y) : "0" (x));
    return y;
}

Править: В ответ на OP, да, можно сделать следующее также:

int
test(int x)
{
    int y;
    asm ("xchg %b0, %h0" : "=Q" (y) : "0" (x));
    return y;
}

В настоящее время единственное место (что я знаю о) это документируется в, gcc/config/i386/i386.md, не в любой стандартной документации.

19
ответ дан 2 December 2019 в 05:16
поделиться

В то время как я думаю об этом... необходимо заменить "q" ограничение капиталом "Q" ограничение во втором решении Chris:

int
test(int x)
{
    int y;
    asm ("xchg %b0, %h0" : "=Q" (y) : "0" (x));
    return y;
}

"q" и "Q" немного отличаются в 64-разрядном режиме, где можно получить самый низкий байт для всех целочисленных регистров (топор, основной обмен, cx, дуплекс, СИ, di, SP, BP, r8-r15). Но можно только получить второй самый низкий байт (например, ах) для четырех исходных 386 регистров (топор, основной обмен, cx, дуплекс).

1
ответ дан 2 December 2019 в 05:16
поделиться

Так, по-видимому, существуют приемы, чтобы сделать это..., но это не может быть настолько эффективно. 32-разрядные x86 процессоры являются обычно медленными при управлении 16-разрядными данными в регистрах общего назначения. Необходимо сравнить его, если производительность важна.

Если это не (a) очень важная производительность и (b) оказывается намного быстрее, я сохранил бы меня некоторая стычка обслуживания и просто сделал бы это в C:

uint32_t y, hi=(x&~0xffff), lo=(x&0xffff);
y = hi + (((lo >> 8) + (lo << 8))&0xffff);

С GCC 4.2 и-O2 это оптимизировано вниз к шести инструкциям...

0
ответ дан 2 December 2019 в 05:16
поделиться

Глюк. Хорошо, если это - примитивная стандартная программа, что Вы собираетесь быть многократным использованием много раз, у меня нет спора с ним... прием именования регистра, что Chris, на которого указывают, является хорошим, которого я оказываюсь перед необходимостью помнить.

Было бы хорошо, если бы это превратило его в стандартные документы GCC также!

0
ответ дан 2 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: