sl@0: #!/usr/bin/perl sl@0: # sl@0: sl@0: sl@0: sl@0: print < sl@0: * All rights reserved. sl@0: * sl@0: * Redistribution and use in source and binary forms, with or without sl@0: * modification, are permitted provided that the following conditions sl@0: * are met: sl@0: * 1. Redistributions of source code must retain the above copyright sl@0: * notice, this list of conditions and the following disclaimer. sl@0: * 2. Redistributions in binary form must reproduce the above copyright sl@0: * notice, this list of conditions and the following disclaimer in the sl@0: * documentation and/or other materials provided with the distribution. sl@0: * sl@0: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR sl@0: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED sl@0: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE sl@0: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, sl@0: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES sl@0: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR sl@0: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) sl@0: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, sl@0: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING sl@0: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE sl@0: * POSSIBILITY OF SUCH DAMAGE. sl@0: */ sl@0: sl@0: #ifdef HAVE_CONFIG_H sl@0: #include "config.h" sl@0: #endif sl@0: sl@0: #include sl@0: sl@0: #include sl@0: #include sl@0: sl@0: EOF sl@0: ; sl@0: sl@0: sl@0: sub clamp_pointer sl@0: { sl@0: my $kernel = shift; sl@0: my $type = shift; sl@0: my $low = 1; sl@0: my $high = 1; sl@0: sl@0: ($kernel eq "clamphigh") and $low = 0; sl@0: ($kernel eq "clamplow") and $high = 0; sl@0: sl@0: print < *high) x = *high;\n"); sl@0: sl@0: print <>= 2; sl@0: while (n) { sl@0: x = src[0]; sl@0: $clamp sl@0: dest[0] = x; sl@0: x = src[1]; sl@0: $clamp sl@0: dest[1] = x; sl@0: x = src[2]; sl@0: $clamp sl@0: dest[2] = x; sl@0: x = src[3]; sl@0: $clamp sl@0: dest[3] = x; sl@0: dest+=4; sl@0: src+=4; sl@0: n--; sl@0: } sl@0: } sl@0: OIL_DEFINE_IMPL (${kernel}_${type}_unroll4, ${kernel}_${type}); sl@0: sl@0: EOF sl@0: ; sl@0: } sl@0: sl@0: sub clamp_trick sl@0: { sl@0: my $kernel = shift; sl@0: my $type = shift; sl@0: my $low = 1; sl@0: my $high = 1; sl@0: sl@0: ($kernel eq "clamphigh") and $low = 0; sl@0: ($kernel eq "clamplow") and $high = 0; sl@0: sl@0: $proto = ""; sl@0: $low and $proto .= ", oil_type_${type} *low"; sl@0: $high and $proto .= ", oil_type_${type} *high"; sl@0: sl@0: $clamp = ""; sl@0: $low and $clamp .= " x = x - (((x-*low)>>31)&(x-*low));\n"; sl@0: $high and $clamp .= " x = x + (((*high-x)>>31)&(*high-x));\n"; sl@0: sl@0: print <>= 2; sl@0: while (n) { sl@0: x = src[0]; sl@0: $clamp sl@0: dest[0] = x; sl@0: x = src[1]; sl@0: $clamp sl@0: dest[1] = x; sl@0: x = src[2]; sl@0: $clamp sl@0: dest[2] = x; sl@0: x = src[3]; sl@0: $clamp sl@0: dest[3] = x; sl@0: dest+=4; sl@0: src+=4; sl@0: n--; sl@0: } sl@0: } sl@0: OIL_DEFINE_IMPL (${kernel}_${type}_trick, ${kernel}_${type}); sl@0: sl@0: EOF sl@0: ; sl@0: } sl@0: sl@0: sl@0: clamp_pointer("clamp", "s8"); sl@0: clamp_pointer("clamp", "u8"); sl@0: clamp_pointer("clamp", "s16"); sl@0: clamp_pointer("clamp", "u16"); sl@0: clamp_pointer("clamp", "s32"); sl@0: clamp_pointer("clamp", "u32"); sl@0: sl@0: clamp_unroll4("clamp", "s8"); sl@0: clamp_unroll4("clamp", "u8"); sl@0: clamp_unroll4("clamp", "s16"); sl@0: clamp_unroll4("clamp", "u16"); sl@0: clamp_unroll4("clamp", "s32"); sl@0: clamp_unroll4("clamp", "u32"); sl@0: sl@0: clamp_trick("clamp", "s8"); sl@0: clamp_trick("clamp", "u8"); sl@0: clamp_trick("clamp", "s16"); sl@0: clamp_trick("clamp", "u16"); sl@0: sl@0: clamp_pointer("clamphigh", "s8"); sl@0: clamp_pointer("clamphigh", "u8"); sl@0: clamp_pointer("clamphigh", "s16"); sl@0: clamp_pointer("clamphigh", "u16"); sl@0: clamp_pointer("clamphigh", "s32"); sl@0: clamp_pointer("clamphigh", "u32"); sl@0: sl@0: clamp_unroll4("clamphigh", "s8"); sl@0: clamp_unroll4("clamphigh", "u8"); sl@0: clamp_unroll4("clamphigh", "s16"); sl@0: clamp_unroll4("clamphigh", "u16"); sl@0: clamp_unroll4("clamphigh", "s32"); sl@0: clamp_unroll4("clamphigh", "u32"); sl@0: sl@0: clamp_trick("clamphigh", "s8"); sl@0: clamp_trick("clamphigh", "u8"); sl@0: clamp_trick("clamphigh", "s16"); sl@0: clamp_trick("clamphigh", "u16"); sl@0: sl@0: clamp_pointer("clamplow", "s8"); sl@0: clamp_pointer("clamplow", "u8"); sl@0: clamp_pointer("clamplow", "s16"); sl@0: clamp_pointer("clamplow", "u16"); sl@0: clamp_pointer("clamplow", "s32"); sl@0: clamp_pointer("clamplow", "u32"); sl@0: sl@0: clamp_unroll4("clamplow", "s8"); sl@0: clamp_unroll4("clamplow", "u8"); sl@0: clamp_unroll4("clamplow", "s16"); sl@0: clamp_unroll4("clamplow", "u16"); sl@0: clamp_unroll4("clamplow", "s32"); sl@0: clamp_unroll4("clamplow", "u32"); sl@0: sl@0: clamp_trick("clamplow", "s8"); sl@0: clamp_trick("clamplow", "u8"); sl@0: clamp_trick("clamplow", "s16"); sl@0: clamp_trick("clamplow", "u16"); sl@0: sl@0: exit 0; sl@0: