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

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)

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