os/ossrv/genericopenlibs/liboil/src/c/copy_c.c
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2  * LIBOIL - Library of Optimized Inner Loops
     3  * Copyright (c) 2005 David A. Schleef <ds@schleef.org>
     4  * All rights reserved.
     5  *
     6  * Redistribution and use in source and binary forms, with or without
     7  * modification, are permitted provided that the following conditions
     8  * are met:
     9  * 1. Redistributions of source code must retain the above copyright
    10  *    notice, this list of conditions and the following disclaimer.
    11  * 2. Redistributions in binary form must reproduce the above copyright
    12  *    notice, this list of conditions and the following disclaimer in the
    13  *    documentation and/or other materials provided with the distribution.
    14  * 
    15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
    16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
    19  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    21  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    23  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    24  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    25  * POSSIBILITY OF SUCH DAMAGE.
    26  */
    27 //Portions Copyright (c)  2008-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. 
    28 
    29 #ifdef HAVE_CONFIG_H
    30 #include "config.h"
    31 #endif
    32 
    33 #include <liboil/liboil.h>
    34 #include <liboil/liboilfunction.h>
    35 #include <liboil/liboilclasses.h>
    36 
    37 #ifdef HAVE_UNISTD_H
    38 #include <unistd.h>
    39 #endif
    40 
    41 
    42 static void
    43 testzero_u8_1 (uint32_t *dest, uint8_t *src1, int n)
    44 {
    45   uint8_t *s = src1;
    46 
    47   while(n>0 && (((unsigned long)s)&0x3)) {
    48     if (*s == 0) {
    49       goto foundzero;
    50     }
    51     s++;
    52     n--;
    53   }
    54   while (n>3) {
    55     uint32_t x;
    56     x = *(uint32_t *)s;
    57     if ((x ^ (x - 0x01010101))& 0x80808080) {
    58       int i;
    59       /* there's either a 0x00 or 0x80 byte */
    60       for(i=0;i<4;i++){
    61         if (s[i] == 0) {
    62           s += i;
    63           goto foundzero;
    64         }
    65       }
    66     }
    67     s += 4;
    68     n -= 4;
    69   }
    70   while(n>0) {
    71     if (*s == 0) {
    72       goto foundzero;
    73     }
    74     s++;
    75     n--;
    76   }
    77 
    78   dest[0] = n;
    79 foundzero:
    80   dest[0] = s - src1;
    81 }
    82 OIL_DEFINE_IMPL (testzero_u8_1, testzero_u8);
    83 
    84 #ifdef HAVE_UNALIGNED_ACCESS
    85 static void
    86 testzero_u8_2 (uint32_t *dest, uint8_t *src1, int n)
    87 {
    88   int i;
    89 
    90   for(i=0;i<n-3;i+=4) {
    91     uint32_t x;
    92     x = *(uint32_t *)(src1 + i);
    93     if ((x ^ (x - 0x01010101))& 0x80808080) {
    94       int j;
    95       /* there's either a 0x00 or 0x80 byte */
    96       for(j=0;j<4;j++){
    97         if (src1[i + j] == 0) {
    98           dest[0] = i + j;
    99           return ;
   100         }
   101       }
   102     }
   103   }
   104   for(;i<n;i++){
   105     if (src1[i] == 0) {
   106       dest[0] = i;
   107       return;
   108     }
   109   }
   110   dest[0] = n;
   111 }
   112 OIL_DEFINE_IMPL (testzero_u8_2, testzero_u8);
   113 #endif
   114 
   115 
   116 
   117 #ifdef	__SYMBIAN32__
   118  
   119 OilFunctionImpl* __oil_function_impl_testzero_u8_1() {
   120 		return &_oil_function_impl_testzero_u8_1;
   121 }
   122 #endif
   123 
   124 #ifdef HAVE_UNALIGNED_ACCESS
   125 #ifdef	__SYMBIAN32__
   126  
   127 OilFunctionImpl* __oil_function_impl_testzero_u8_2() {
   128 		return &_oil_function_impl_testzero_u8_2;
   129 }
   130 #endif
   131 #endif
   132