[Mesa-dev] [PATCH 2/7] glsl: Avoid aliasing violations.
Matt Turner
mattst88 at gmail.com
Mon Jun 27 22:28:22 UTC 2016
On Mon, Jun 27, 2016 at 3:27 PM, Brian Paul <brianp at vmware.com> wrote:
> On 06/27/2016 03:42 PM, Matt Turner wrote:
>>
>> ---
>> src/compiler/glsl/ir_constant_expression.cpp | 11 +++--------
>> src/compiler/glsl/link_uniform_initializers.cpp | 3 +--
>> 2 files changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/compiler/glsl/ir_constant_expression.cpp
>> b/src/compiler/glsl/ir_constant_expression.cpp
>> index e79d5ef..7c6a17d 100644
>> --- a/src/compiler/glsl/ir_constant_expression.cpp
>> +++ b/src/compiler/glsl/ir_constant_expression.cpp
>> @@ -1573,18 +1573,13 @@ ir_expression::constant_expression_value(struct
>> hash_table *variable_context)
>> data.f[c] = CLAMP(op[0]->value.f[c], 0.0f, 1.0f);
>> }
>> break;
>> - case ir_unop_pack_double_2x32: {
>> + case ir_unop_pack_double_2x32:
>> /* XXX needs to be checked on big-endian */
>> - uint64_t temp;
>> - temp = (uint64_t)op[0]->value.u[0] | ((uint64_t)op[0]->value.u[1]
>> << 32);
>> - data.d[0] = *(double *)&temp;
>> -
>> + memcpy(&data.d[0], &op[0]->value.u[0], sizeof(double));
>> break;
>> - }
>> case ir_unop_unpack_double_2x32:
>> /* XXX needs to be checked on big-endian */
>> - data.u[0] = *(uint32_t *)&op[0]->value.d[0];
>> - data.u[1] = *((uint32_t *)&op[0]->value.d[0] + 1);
>> + memcpy(&data.u[0], &op[0]->value.d[0], sizeof(double));
>> break;
>>
>> case ir_triop_bitfield_extract: {
>> diff --git a/src/compiler/glsl/link_uniform_initializers.cpp
>> b/src/compiler/glsl/link_uniform_initializers.cpp
>> index acf8222..98a2397 100644
>> --- a/src/compiler/glsl/link_uniform_initializers.cpp
>> +++ b/src/compiler/glsl/link_uniform_initializers.cpp
>> @@ -65,8 +65,7 @@ copy_constant_to_storage(union gl_constant_value
>> *storage,
>> break;
>> case GLSL_TYPE_DOUBLE:
>> /* XXX need to check on big-endian */
>> - storage[i * 2].u = *(uint32_t *)&val->value.d[i];
>> - storage[i * 2 + 1].u = *(((uint32_t *)&val->value.d[i]) + 1);
>> + memcpy(&storage[i * 2].u, &val->value.d[i], sizeof(double));
>> break;
>> case GLSL_TYPE_BOOL:
>> storage[i].b = val->value.b[i] ? boolean_true : 0;
>>
>
> For 2-7, Reviewed-by: Brian Paul <brianp at vmware.com>
Thank you.
> Though, in patch 6, as long as you're there, I wonder if we should use
> parenthesized (offset) in the macro bodies, just to be safe.
Oh! Sure. Thanks for the suggestion.
More information about the mesa-dev
mailing list