/* * Copyright (c) 2009-2010, ERICSSON AB All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of the ERICSSON AB nor the names of its * contributors * may be used to endorse or promote products derived from this * software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "feldspar.h" int mod_fun_signed_int( int a, int b ) { if ((a > 0 && b > 0) || (a < 0 && b < 0)) return a % b; return (a % b) * (-1); } int mod_fun_unsigned_int( unsigned int a, unsigned int b ) { return a % b; } long mod_fun_signed_long( long a, long b ) { if ((a > 0 && b > 0) || (a < 0 && b < 0)) return a % b; return (a % b) * (-1); } long mod_fun_unsigned_long( unsigned long a, unsigned long b ) { return a % b; } int pow_fun_signed_int( int a, int b) { int out = 1; int i; for(i=0; i> -i; if (i > 0) return x << i; return x; } int bit_rotate_fun_signed_int( int x, int i ) { if (i < 0 && x < 0) { int left = i + sizeof(x) * 8; return ((x >> -i) & ~bit_shift_fun_signed_int(-1, left)) ^ bit_shift_fun_signed_int(x, left); } if (i < 0) return x >> -i ^ bit_shift_fun_signed_int(x, i + sizeof(x) * 8); else if (i == 0) return x; else return x << i ^ bit_shift_fun_signed_int(x, i - sizeof(x) * 8); } int rotateL_fun_signed_int( int x, int i ) { return bit_rotate_fun_signed_int(x, i); } int rotateR_fun_signed_int( int x, int i ) { return bit_rotate_fun_signed_int(x, -i); } int bitSize_fun_signed_int( int x ) { return sizeof x * 8; } int isSigned_fun_signed_int( int x ) { (void) x; return 1; } int abs_fun_signed_int( int a ) { if (a < 0) return a*(-1); return a; } int abs_fun_unsigned_int( unsigned int a ) { return a; } long abs_fun_signed_long( long a ) { if (a < 0) return a*(-1); return a; } long abs_fun_unsigned_long( unsigned long a ) { return a; } double abs_fun_float( float a ) { if (a < 0) return a*(-1); return a; } double abs_fun_double( double a ) { if (a < 0) return a*(-1); return a; } int signum_fun_signed_int( int a ) { if (a < 0) return -1; if (a > 0) return 1; return 0; } int signum_fun_unsigned_int( unsigned int a ) { if (a > 0) return 1; return 0; } long signum_fun_signed_long( long a ) { if (a < 0) return -1; if (a > 0) return 1; return 0; } long signum_fun_unsigned_long( unsigned long a ) { if (a > 0) return 1; return 0; } double signum_fun_float( float a ) { if (a < 0) return -1; if (a > 0) return 1; return 0; } double signum_fun_double( double a ) { if (a < 0) return -1; if (a > 0) return 1; return 0; } void copy_arrayOf_signed_int( int* a, int a1, int* b) { int i; for( i=0; i