128-битный атомный оператор x86 - PullRequest
6 голосов
/ 04 ноября 2010

Как бы вы достигли 128-разрядных атомарных операций в x86?

Руководство по системному программированию Intel, часть 1, 8.1 В заблокированных атомарных операциях определены гарантированные 16-, 32- и 64-битные атомарные операции.Итак, можете ли вы выполнить 128-битные атомарные операции, выполнив 2 64-битных операции с префиксом LOCK?Что-то вроде ...

LOCK mov 64bits->addr
LOCK mov 64bits->addr+64bits

По-видимому, SSE имеет 128-битные регистры XMM.Можете ли вы просто выполнить 128-битное сравнение и обмен с использованием этих регистров?

1 Ответ

10 голосов
/ 16 февраля 2011

Префикс LOCK нельзя использовать в сочетании с инструкцией MOV.

Префикс LOCK может добавляться только к следующим инструкциям и только к тем формам инструкций, где операндом-адресатом является операнд памяти: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC , NEG, НЕ, ИЛИ, SBB, SUB, XOR, XADD и XCHG. Справочник по набору инструкций Intel

В результате будет сгенерировано недопустимое исключение кода операции . Так что LOCK CMPXCHG16B единственный путь сюда.

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