diff -rc aterm-2.3.1-orig/aterm/aterm.c aterm-2.3.1/aterm/aterm.c *** aterm-2.3.1-orig/aterm/aterm.c 2004-06-01 10:29:01.000000000 +0200 --- aterm-2.3.1/aterm/aterm.c 2005-05-02 18:32:52.000000000 +0200 *************** *** 191,196 **** --- 191,197 ---- /* that have char == 2 bytes, and sizeof(header_type) == 2 */ assert(sizeof(header_type) == sizeof(ATerm *)); assert(sizeof(header_type) >= 4); + assert(sizeof(ATerm) == sizeof(MachineWord)); /*}}} */ /*{{{ Initialize buffer */ diff -rc aterm-2.3.1-orig/aterm/memory.c aterm-2.3.1/aterm/memory.c *** aterm-2.3.1-orig/aterm/memory.c 2004-06-09 10:52:33.000000000 +0200 --- aterm-2.3.1/aterm/memory.c 2005-05-02 18:32:52.000000000 +0200 *************** *** 176,182 **** * Static arrays are not guaranteed to be sizeof(double)-aligned. */ static MachineWord *protoTerm = NULL; - static ATerm *arg_buffer = NULL; static ATerm protected_buffer[MAX_ARITY] = { NULL }; --- 176,181 ---- *************** *** 495,501 **** HashNumber hnr; protoTerm = (MachineWord *) calloc(MAX_TERM_SIZE, sizeof(MachineWord)); - arg_buffer = (ATerm *) (protoTerm + 2); /*{{{ Analyze arguments */ --- 494,499 ---- *************** *** 1032,1043 **** va_list args; protoAppl = (ATermAppl) protoTerm; - va_start(args, sym); for (i=0; i<arity; i++) { ! arg_buffer[i] = va_arg(args, ATerm); ! protected_buffer[i] = arg_buffer[i]; ! CHECK_TERM(arg_buffer[i]); } va_end(args); --- 1030,1040 ---- va_list args; protoAppl = (ATermAppl) protoTerm; va_start(args, sym); for (i=0; i<arity; i++) { ! protected_buffer[i] = va_arg(args, ATerm); ! protoTerm[ARG_OFFSET + i] = (MachineWord) protected_buffer[i]; ! CHECK_TERM(protected_buffer[i]); } va_end(args); *************** *** 1055,1061 **** appl = (ATermAppl)cur; found = ATtrue; for (i=0; i<arity; i++) { ! if (!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) { found = ATfalse; break; } --- 1052,1058 ---- appl = (ATermAppl)cur; found = ATtrue; for (i=0; i<arity; i++) { ! if (!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) { found = ATfalse; break; } *************** *** 1073,1079 **** cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = arg_buffer[i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; --- 1070,1076 ---- cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; *************** *** 1164,1170 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; hnr = HASHNUMBER3((ATerm) protoAppl); prev = NULL; --- 1161,1167 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; hnr = HASHNUMBER3((ATerm) protoAppl); prev = NULL; *************** *** 1225,1232 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; ! arg_buffer[1] = arg1; hnr = HASHNUMBER4((ATerm) protoAppl); prev = NULL; --- 1222,1229 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; hnr = HASHNUMBER4((ATerm) protoAppl); prev = NULL; *************** *** 1287,1295 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; ! arg_buffer[1] = arg1; ! arg_buffer[2] = arg2; hnr = hash_number((ATerm) protoAppl, 5); cur = hashtable[hnr & table_mask]; --- 1284,1292 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; hnr = hash_number((ATerm) protoAppl, 5); cur = hashtable[hnr & table_mask]; *************** *** 1347,1356 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; ! arg_buffer[1] = arg1; ! arg_buffer[2] = arg2; ! arg_buffer[3] = arg3; hnr = hash_number((ATerm) protoAppl, 6); cur = hashtable[hnr & table_mask]; --- 1344,1353 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; hnr = hash_number((ATerm) protoAppl, 6); cur = hashtable[hnr & table_mask]; *************** *** 1411,1421 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; ! arg_buffer[1] = arg1; ! arg_buffer[2] = arg2; ! arg_buffer[3] = arg3; ! arg_buffer[4] = arg4; hnr = hash_number((ATerm) protoAppl, 7); cur = hashtable[hnr & table_mask]; --- 1408,1418 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; ! protoTerm[ARG_OFFSET + 4] = (MachineWord) arg4; hnr = hash_number((ATerm) protoAppl, 7); cur = hashtable[hnr & table_mask]; *************** *** 1479,1490 **** protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! arg_buffer[0] = arg0; ! arg_buffer[1] = arg1; ! arg_buffer[2] = arg2; ! arg_buffer[3] = arg3; ! arg_buffer[4] = arg4; ! arg_buffer[5] = arg5; hnr = hash_number((ATerm) protoAppl, 8); cur = hashtable[hnr & table_mask]; --- 1476,1487 ---- protoAppl = (ATermAppl) protoTerm; protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! protoTerm[ARG_OFFSET + 0] = (MachineWord) arg0; ! protoTerm[ARG_OFFSET + 1] = (MachineWord) arg1; ! protoTerm[ARG_OFFSET + 2] = (MachineWord) arg2; ! protoTerm[ARG_OFFSET + 3] = (MachineWord) arg3; ! protoTerm[ARG_OFFSET + 4] = (MachineWord) arg4; ! protoTerm[ARG_OFFSET + 5] = (MachineWord) arg5; hnr = hash_number((ATerm) protoAppl, 8); cur = hashtable[hnr & table_mask]; *************** *** 1552,1558 **** CHECK_HEADER(protoAppl->header); for (i=0; i<arity; i++) { ! arg_buffer[i] = ATgetFirst(args); args = ATgetNext(args); } --- 1549,1555 ---- CHECK_HEADER(protoAppl->header); for (i=0; i<arity; i++) { ! protoTerm[ARG_OFFSET + i] = (MachineWord) ATgetFirst(args); args = ATgetNext(args); } *************** *** 1567,1573 **** found = ATtrue; for(i=0; i<arity; i++) { ! if(!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) { found = ATfalse; break; --- 1564,1570 ---- found = ATtrue; for(i=0; i<arity; i++) { ! if(!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) { found = ATfalse; break; *************** *** 1587,1593 **** cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = arg_buffer[i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; --- 1584,1590 ---- cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; *************** *** 1623,1632 **** protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! if (args != arg_buffer) { for (i=0; i<arity; i++) { CHECK_TERM(args[i]); ! arg_buffer[i] = args[i]; protected_buffer[i] = args[i]; } } --- 1620,1629 ---- protoAppl->header = header; CHECK_HEADER(protoAppl->header); ! if (args != (ATerm *) (protoTerm + ARG_OFFSET)) { for (i=0; i<arity; i++) { CHECK_TERM(args[i]); ! protoTerm[ARG_OFFSET + i] = (MachineWord) args[i]; protected_buffer[i] = args[i]; } } *************** *** 1639,1645 **** appl = (ATermAppl)cur; found = ATtrue; for(i=0; i<arity; i++) { ! if(!ATisEqual(ATgetArgument(appl, i), arg_buffer[i])) { found = ATfalse; break; } --- 1636,1642 ---- appl = (ATermAppl)cur; found = ATtrue; for(i=0; i<arity; i++) { ! if(!ATisEqual(ATgetArgument(appl, i), protoTerm[ARG_OFFSET + i])) { found = ATfalse; break; } *************** *** 1657,1670 **** cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = arg_buffer[i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; hashtable[hnr] = cur; } ! if (args != arg_buffer) { for (i=0; i<arity; i++) { protected_buffer[i] = NULL; } --- 1654,1667 ---- cur->header = header; CHECK_HEADER(cur->header); for (i=0; i<arity; i++) { ! ATgetArgument(cur, i) = (ATerm) protoTerm[ARG_OFFSET + i]; CHECK_ARGUMENT(cur, i); } cur->next = hashtable[hnr]; hashtable[hnr] = cur; } ! if (args != (ATerm *) (protoTerm + ARG_OFFSET)) { for (i=0; i<arity; i++) { protected_buffer[i] = NULL; } *************** *** 2122,2132 **** assert(n >= 0 && n < arity); for (i=0; i<arity; i++) { ! arg_buffer[i] = ATgetArgument(appl, i); } ! arg_buffer[n] = arg; ! result = ATmakeApplArray(sym, arg_buffer); annos = AT_getAnnotations((ATerm)appl); if (annos != NULL) { result = (ATermAppl)AT_setAnnotations((ATerm)result, annos); --- 2119,2129 ---- assert(n >= 0 && n < arity); for (i=0; i<arity; i++) { ! protoTerm[ARG_OFFSET + i] = (MachineWord) ATgetArgument(appl, i); } ! protoTerm[ARG_OFFSET + n] = (MachineWord) arg; ! result = ATmakeApplArray(sym, (ATerm *) (protoTerm + ARG_OFFSET)); annos = AT_getAnnotations((ATerm)appl); if (annos != NULL) { result = (ATermAppl)AT_setAnnotations((ATerm)result, annos); diff -rc aterm-2.3.1-orig/configure aterm-2.3.1/configure *** aterm-2.3.1-orig/configure 2004-12-01 23:03:59.000000000 +0100 --- aterm-2.3.1/configure 2005-05-02 18:36:24.000000000 +0200 *************** *** 2890,2896 **** INCL_PROF="" CC_NS=gcc ! CFLAGS_NS="-Wall -DNDEBUG -O -DXGC_VERBOSE -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs LFLAGS_NS="" DEFS_NS="\$(DEFS) -DNO_SHARING" INCL_NS="" --- 2890,2896 ---- INCL_PROF="" CC_NS=gcc ! CFLAGS_NS="-Wall -DNDEBUG -O3 -DXGC_VERBOSE -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs LFLAGS_NS="" DEFS_NS="\$(DEFS) -DNO_SHARING" INCL_NS="" *************** *** 3379,3385 **** CFLAGS=${withval} else if test "a${GCC}" = "ayes"; then ! CFLAGS="-Wall -DNDEBUG -O -DXGC_VERBOSE -DXHASHPEM -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs fi; fi; --- 3379,3385 ---- CFLAGS=${withval} else if test "a${GCC}" = "ayes"; then ! CFLAGS="-Wall -DNDEBUG -O3 -DXGC_VERBOSE -DXHASHPEM -DWITH_STATS" # " -O2" disabled due to gcc optimizer bugs fi; fi; diff -rc aterm-2.3.1-orig/README aterm-2.3.1/README *** aterm-2.3.1-orig/README 2002-01-16 14:19:35.000000000 +0100 --- aterm-2.3.1/README 2005-05-02 18:37:48.000000000 +0200 *************** *** 1,27 **** - ***NOTE on COMPILER OPTIMIZATIONS: - - (added Wed, 16 Jan 2002, <jong@cwi.nl>) - - Due to several pending issues with the optimizer in the GNU C Compiler - (most noticable to everyone using gcc version over 2.95), we strongly - advise AGAINST passing gcc any of its '-O' optimization flags. - - More information on GCC optimization bugs can be found at: - http://gcc.gnu.org/cgi-bin/gnatsweb.pl?database=gcc&cmd=query - - and subsequently selecting the Category: - "optimization -- Issues related to optimization" - - As a result, the default configuration of the ATerm Library does not - pass any optimizer flags to gcc anymore. Should you wish to experiment - with specific compiler flags anyway, you can use the "--with-cflags" - configure option. Your mileage may vary from the stress-test failing, - to coredumps and spontaneous aborts in your program. - - - - README with this version of the aterm library. ============================================== --- 1,4 ----