Этот союз нарушает строгий псевдоним? Как насчет регистров с плавающей запятой

union
{
    Uint32 Integer;
    Float32 Real;
} Field;    

Я должен использовать этот союз для небольшого трюка IEEE, это нарушает строгий псевдоним? GCC не выдает никаких предупреждений (пробовал с GCC 4.5 и 4.6 даже с педантичным строгим алиасом, но, насколько я знаю, GCC не очень хорошо ловит строгие нарушения правил алиасинга (много ложных срабатываний / негативов).

Field A;
A.Integer = (Value1 & B) || Value2;
return A.Real;

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

Также я предполагаю, что этот фрагмент кода потребует перемещения данных из стандартных регистров в плавающие регистры указателей на большинстве современных процессоров (просто любопытно), включая некоторые дополнительные циклы относительно старых процессоров, верно?

Код выше нене собираюсь быть оптимизацией, так что просто нене умаляя меня за злоупотребление оптимизацией, приведенный выше код был для меня самым простым способом получения определенного результата (и, к счастью, самый простой способ, по-видимому, самый быстрый в моем случае!), если результат может 'не будь в безопасности, тогда яЯ буду использовать более медленный путь.

заранее спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос