String.st
changeset 4247 42504c49fe2a
parent 4205 56d69caa8f92
child 4388 b4ca5cf130c7
equal deleted inserted replaced
4246:23a662cb9b05 4247:42504c49fe2a
  1064 	}
  1064 	}
  1065 
  1065 
  1066 	if (l1 != l2) {
  1066 	if (l1 != l2) {
  1067 	    RETURN ( false );
  1067 	    RETURN ( false );
  1068 	}
  1068 	}
  1069 #undef FAST_STRNCMP
       
  1070 #ifdef FAST_STRNCMP
  1069 #ifdef FAST_STRNCMP
  1071 	RETURN ( (strncmp(cp1, cp2, l1) == 0) ? true : false );
  1070 	RETURN ( (strncmp(cp1, cp2, l1) == 0) ? true : false );
  1072 #else
  1071 #else
  1073 	addrDelta = cp2 - cp1;
  1072 	addrDelta = cp2 - cp1;
  1074 # ifdef UNROLL_LOOPS
  1073 # ifdef UNROLL_LOOPS
  1325 
  1324 
  1326 	if (l1 != l2) {
  1325 	if (l1 != l2) {
  1327 	    RETURN ( true );
  1326 	    RETURN ( true );
  1328 	}
  1327 	}
  1329 
  1328 
  1330 #undef FAST_STRNCMP
       
  1331 #ifdef FAST_STRNCMP
  1329 #ifdef FAST_STRNCMP
  1332 	RETURN ( (strncmp(cp1, cp2, l1) == 0) ? false : true );
  1330 	RETURN ( (strncmp(cp1, cp2, l1) == 0) ? false : true );
  1333 #else
  1331 #else
  1334 	addrDelta = cp2 - cp1;
  1332 	addrDelta = cp2 - cp1;
  1335 # ifdef UNROLL_LOOPS
  1333 # ifdef UNROLL_LOOPS
  2089 # ifdef FAST_MEMSET4 /* sorry intel: your stosd instruction is slower ... */
  2087 # ifdef FAST_MEMSET4 /* sorry intel: your stosd instruction is slower ... */
  2090 	    memset4(dst, v, l>>2);
  2088 	    memset4(dst, v, l>>2);
  2091 	    l = l & 3;
  2089 	    l = l & 3;
  2092 # else
  2090 # else
  2093 #  ifdef UINT64
  2091 #  ifdef UINT64
  2094 	    v = (v << 32) | v;
  2092 	    {
  2095 	    while (l >= 8) {
  2093 		UINT64 v64;
  2096 		((UINT64 *)dst)[0] = v;
  2094 
  2097 		dst += 8;
  2095 	        v64 = v;
  2098 		l -= 8;
  2096 		v64 = (v64 << 32) | v;
       
  2097 	        while (l >= 8) {
       
  2098 		    ((UINT64 *)dst)[0] = v64;
       
  2099 		    dst += 8;
       
  2100 		    l -= 8;
       
  2101 		}
  2099 	    }
  2102 	    }
  2100 #  else /* no UINT64 */
  2103 #  else /* no UINT64 */
  2101 	    while (l >= 16) {
  2104 	    while (l >= 16) {
  2102 		((int *)dst)[0] = v;
  2105 		((int *)dst)[0] = v;
  2103 		((int *)dst)[1] = v;
  2106 		((int *)dst)[1] = v;
  2910 	len2 = __qSize(aStringOrChar);
  2913 	len2 = __qSize(aStringOrChar);
  2911 	if (len1 < len2) {
  2914 	if (len1 < len2) {
  2912 	    RETURN ( false );
  2915 	    RETURN ( false );
  2913 	}
  2916 	}
  2914 
  2917 
  2915 # ifdef UINT64
  2918 #ifdef UINT64
  2916 	while (len2 > (OHDR_SIZE+sizeof(UINT64))) {
  2919 	while (len2 > (OHDR_SIZE+sizeof(UINT64))) {
  2917 	    if ( *((unsigned UINT64 *)src1) != *((unsigned UINT64 *)src2) ) {
  2920 	    if ( ((UINT64 *)src1)[0] != ((UINT64 *)src2)[0] ) {
  2918 		RETURN (false);
  2921 		RETURN (false);
  2919 	    }
  2922 	    }
  2920 	    len2 -= sizeof(UINT64);
  2923 	    len2 -= sizeof(UINT64);
  2921 	    src1 += sizeof(UINT64);
  2924 	    src1 += sizeof(UINT64);
  2922 	    src2 += sizeof(UINT64);
  2925 	    src2 += sizeof(UINT64);
  2923 	}
  2926 	}
  2924 # endif /* UINT64 */
  2927 #else
       
  2928 # ifdef UNROLL_LOOPS
       
  2929 	while (len2 > (OHDR_SIZE+sizeof(INT)*4)) {
       
  2930 	    if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
       
  2931 		RETURN (false);
       
  2932 	    }
       
  2933 	    if ( ((unsigned INT *)src1)[1] != ((unsigned INT *)src2)[1]) {
       
  2934 		RETURN (false);
       
  2935 	    }
       
  2936 	    if ( ((unsigned INT *)src1)[2] != ((unsigned INT *)src2)[2]) {
       
  2937 		RETURN (false);
       
  2938 	    }
       
  2939 	    if ( ((unsigned INT *)src1)[3] != ((unsigned INT *)src2)[3]) {
       
  2940 		RETURN (false);
       
  2941 	    }
       
  2942 	    len2 -= sizeof(INT)*4;
       
  2943 	    src1 += sizeof(INT)*4;
       
  2944 	    src2 += sizeof(INT)*4;
       
  2945 	}
       
  2946 # endif /* UNROLL_LOOPS */
       
  2947 #endif /* UINT64 */
  2925 
  2948 
  2926 	while (len2 > (OHDR_SIZE+sizeof(INT))) {
  2949 	while (len2 > (OHDR_SIZE+sizeof(INT))) {
  2927 	    if ( *((unsigned INT *)src1) != *((unsigned INT *)src2) ) {
  2950 	    if ( ((unsigned INT *)src1)[0] != ((unsigned INT *)src2)[0]) {
  2928 		RETURN (false);
  2951 		RETURN (false);
  2929 	    }
  2952 	    }
  2930 	    len2 -= sizeof(INT);
  2953 	    len2 -= sizeof(INT);
  2931 	    src1 += sizeof(INT);
  2954 	    src1 += sizeof(INT);
  2932 	    src2 += sizeof(INT);
  2955 	    src2 += sizeof(INT);
  2968 ! !
  2991 ! !
  2969 
  2992 
  2970 !String class methodsFor:'documentation'!
  2993 !String class methodsFor:'documentation'!
  2971 
  2994 
  2972 version
  2995 version
  2973     ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.137 1999-05-19 13:06:02 cg Exp $'
  2996     ^ '$Header: /cvs/stx/stx/libbasic/String.st,v 1.138 1999-06-01 15:07:18 cg Exp $'
  2974 ! !
  2997 ! !