#! /usr/bin/env python
+# -*- encoding: utf-8 -*-
#
# Copyright (C) 2014 Intel Corporation
#
(('imul', a, 1), a),
(('fmul', a, -1.0), ('fneg', a)),
(('imul', a, -1), ('ineg', a)),
+ (('fdiv', a, b), ('fmul', a, ('frcp', b)), 'options->lower_fdiv'),
(('ffma', 0.0, a, b), b),
(('ffma', a, 0.0, b), b),
(('ffma', a, b, 0.0), ('fmul', a, b)),
# Misc. lowering
(('fmod', a, b), ('fsub', a, ('fmul', b, ('ffloor', ('fdiv', a, b)))), 'options->lower_fmod'),
+ (('frem', a, b), ('fsub', a, ('fmul', b, ('ftrunc', ('fdiv', a, b)))), 'options->lower_fmod'),
(('uadd_carry', a, b), ('b2i', ('ult', ('iadd', a, b), a)), 'options->lower_uadd_carry'),
(('usub_borrow', a, b), ('b2i', ('ult', a, b)), 'options->lower_usub_borrow'),
+ (('ldexp', 'x', 'exp'),
+ ('fmul', 'x', ('ishl', ('imin', ('imax', ('iadd', 'exp', 0x7f), 0), 0xff), 23))),
(('bitfield_insert', 'base', 'insert', 'offset', 'bits'),
('bcsel', ('ilt', 31, 'bits'), 'insert',
(('extract_u16', a, b),
('iand', ('ushr', a, ('imul', b, 16)), 0xffff),
'options->lower_extract_word'),
+
+ (('pack_unorm_2x16', 'v'),
+ ('pack_uvec2_to_uint',
+ ('f2u', ('fround_even', ('fmul', ('fsat', 'v'), 65535.0)))),
+ 'options->lower_pack_unorm_2x16'),
+
+ (('pack_unorm_4x8', 'v'),
+ ('pack_uvec4_to_uint',
+ ('f2u', ('fround_even', ('fmul', ('fsat', 'v'), 255.0)))),
+ 'options->lower_pack_unorm_4x8'),
+
+ (('pack_snorm_2x16', 'v'),
+ ('pack_uvec2_to_uint',
+ ('f2i', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 32767.0)))),
+ 'options->lower_pack_snorm_2x16'),
+
+ (('pack_snorm_4x8', 'v'),
+ ('pack_uvec4_to_uint',
+ ('f2i', ('fround_even', ('fmul', ('fmin', 1.0, ('fmax', -1.0, 'v')), 127.0)))),
+ 'options->lower_pack_snorm_4x8'),
+
+ (('unpack_unorm_2x16', 'v'),
+ ('fdiv', ('u2f', ('vec2', ('extract_u16', 'v', 0),
+ ('extract_u16', 'v', 1))),
+ 65535.0),
+ 'options->lower_unpack_unorm_2x16'),
+
+ (('unpack_unorm_4x8', 'v'),
+ ('fdiv', ('u2f', ('vec4', ('extract_u8', 'v', 0),
+ ('extract_u8', 'v', 1),
+ ('extract_u8', 'v', 2),
+ ('extract_u8', 'v', 3))),
+ 255.0),
+ 'options->lower_unpack_unorm_4x8'),
+
+ (('unpack_snorm_2x16', 'v'),
+ ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec2', ('extract_i16', 'v', 0),
+ ('extract_i16', 'v', 1))),
+ 32767.0))),
+ 'options->lower_unpack_snorm_2x16'),
+
+ (('unpack_snorm_4x8', 'v'),
+ ('fmin', 1.0, ('fmax', -1.0, ('fdiv', ('i2f', ('vec4', ('extract_i8', 'v', 0),
+ ('extract_i8', 'v', 1),
+ ('extract_i8', 'v', 2),
+ ('extract_i8', 'v', 3))),
+ 127.0))),
+ 'options->lower_unpack_snorm_4x8'),
]
# Add optimizations to handle the case where the result of a ternary is