Thread: [Gauche-devel] memcmp on s390
R7RS Scheme scripting engine
Status: Beta
Brought to you by:
shirok
From: NIIBE Y. <gn...@fs...> - 2011-02-14 06:28:14
|
s390 is interesting architecture. I saw a test failure on s390 for test/object.scm: ------------- This returns -2 on s390 (test* "object-compare" -1 (compare "abc" "abd")) ------------- I tested s390 system (Debian GNU/Linux) for memcmp to investigate the cause of the failure. It returns -2 when optimized. ----------------------------------------------- $ cat a.c #include <string.h> #include <stdio.h> int main (int argc, const char *argv[]) { printf ("%d\n", memcmp (argv[1], argv[2], 3)); return 0; } $ gcc -O0 -g a.c && ./a.out abc abd -1 $ gcc -O0 -g a.c && ./a.out abc abx -21 $ gcc -O1 -g a.c && ./a.out abc abd -2 $ gcc -O1 -g a.c && ./a.out abc abx -2 -- |
From: Shiro K. <sh...@la...> - 2011-02-27 11:12:54
|
How about this. I think originally I thought only the sign of the return value matters, but then changed my mind to make comparison routine returns -1, 0 or 1. This looks like an overlook. =================================================================== --- src/string.c (revision 7364) +++ src/string.c (working copy) @@ -406,8 +406,15 @@ sizy = SCM_STRING_BODY_SIZE(yb); siz = (sizx < sizy)? sizx : sizy; r = memcmp(SCM_STRING_BODY_START(xb), SCM_STRING_BODY_START(yb), siz); - if (r == 0) return (sizx - sizy); - else return r; + if (r == 0) { + if (sizx == sizy) return 0; + if (sizx < sizy) return -1; + else return 1; + } else if (r < 0) { + return -1; + } else { + return 1; + } } /* single-byte case insensitive comparison */ =================================================================== From: NIIBE Yutaka <gn...@fs...> Subject: [Gauche-devel] memcmp on s390 Date: Mon, 14 Feb 2011 15:11:36 +0900 > s390 is interesting architecture. I saw a test failure on s390 for > test/object.scm: > > ------------- This returns -2 on s390 > (test* "object-compare" -1 (compare "abc" "abd")) > ------------- > > I tested s390 system (Debian GNU/Linux) for memcmp to investigate the > cause of the failure. It returns -2 when optimized. > > ----------------------------------------------- > $ cat a.c > #include <string.h> > #include <stdio.h> > > int > main (int argc, const char *argv[]) > { > printf ("%d\n", memcmp (argv[1], argv[2], 3)); > return 0; > } > $ gcc -O0 -g a.c && ./a.out abc abd > -1 > $ gcc -O0 -g a.c && ./a.out abc abx > -21 > $ gcc -O1 -g a.c && ./a.out abc abd > -2 > $ gcc -O1 -g a.c && ./a.out abc abx > -2 > -- > > ------------------------------------------------------------------------------ > The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE: > Pinpoint memory and threading errors before they happen. > Find and fix more than 250 security defects in the development cycle. > Locate bottlenecks in serial and parallel code that limit performance. > http://p.sf.net/sfu/intel-dev2devfeb > _______________________________________________ > Gauche-devel mailing list > Gau...@li... > https://lists.sourceforge.net/lists/listinfo/gauche-devel |