diff -urN aterm-2.4.2-old/aterm/gc.c aterm-2.4.2/aterm/gc.c --- aterm-2.4.2-old/aterm/gc.c 2004-06-01 10:29:02.000000000 +0200 +++ aterm-2.4.2/aterm/gc.c 2006-08-17 15:17:28.000000000 +0200 @@ -230,71 +230,17 @@ AFun oddSym; #endif -#ifdef WIN32 - - unsigned int r_eax, r_ebx, r_ecx, r_edx, \ - r_esi, r_edi, r_esp, r_ebp; - ATerm reg[8], *real_term; - - __asm { - /* Get the registers into local variables to check them - for aterms later. */ - mov r_eax, eax - mov r_ebx, ebx - mov r_ecx, ecx - mov r_edx, edx - mov r_esi, esi - mov r_edi, edi - mov r_esp, esp - mov r_ebp, ebp - } - /* Put the register-values into an array */ - reg[0] = (ATerm) r_eax; - reg[1] = (ATerm) r_ebx; - reg[2] = (ATerm) r_ecx; - reg[3] = (ATerm) r_edx; - reg[4] = (ATerm) r_esi; - reg[5] = (ATerm) r_edi; - reg[6] = (ATerm) r_esp; - reg[7] = (ATerm) r_ebp; - - for(i=0; i<8; i++) { - real_term = AT_isInsideValidTerm(reg[i]); - if (real_term != NULL) { - AT_markTerm(real_term); - } - if (AT_isValidSymbol((Symbol)reg[i])) { - AT_markSymbol((Symbol)reg[i]); - } - } - - /* The register variables are on the stack aswell - I set them to zero so they won't be processed again when - the stack is traversed. The reg-array is also in the stack - but that will be adjusted later */ - r_eax = 0; - r_ebx = 0; - r_ecx = 0; - r_edx = 0; - r_esi = 0; - r_edi = 0; - r_esp = 0; - r_ebp = 0; - -#else - sigjmp_buf env; + jmp_buf env; /* Traverse possible register variables */ - sigsetjmp(env,0); + setjmp(env); start = (ATerm *)env; - stop = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf))); + stop = ((ATerm *)(((char *)env) + sizeof(jmp_buf))); mark_memory(start, stop); -#endif stackTop = stack_top(); - start = MIN(stackTop, stackBot); stop = MAX(stackTop, stackBot); @@ -343,67 +289,14 @@ AFun oddSym; #endif -#ifdef WIN32 - - unsigned int r_eax, r_ebx, r_ecx, r_edx, \ - r_esi, r_edi, r_esp, r_ebp; - ATerm reg[8], *real_term; - - __asm { - /* Get the registers into local variables to check them - for aterms later. */ - mov r_eax, eax - mov r_ebx, ebx - mov r_ecx, ecx - mov r_edx, edx - mov r_esi, esi - mov r_edi, edi - mov r_esp, esp - mov r_ebp, ebp - } - /* Put the register-values into an array */ - reg[0] = (ATerm) r_eax; - reg[1] = (ATerm) r_ebx; - reg[2] = (ATerm) r_ecx; - reg[3] = (ATerm) r_edx; - reg[4] = (ATerm) r_esi; - reg[5] = (ATerm) r_edi; - reg[6] = (ATerm) r_esp; - reg[7] = (ATerm) r_ebp; - - for(i=0; i<8; i++) { - real_term = AT_isInsideValidTerm(reg[i]); - if (real_term != NULL) { - AT_markTerm_young(real_term); - } - if (AT_isValidSymbol((Symbol)reg[i])) { - AT_markSymbol_young((Symbol)reg[i]); - } - } - - /* The register variables are on the stack aswell - I set them to zero so they won't be processed again when - the stack is traversed. The reg-array is also in the stack - but that will be adjusted later */ - r_eax = 0; - r_ebx = 0; - r_ecx = 0; - r_edx = 0; - r_esi = 0; - r_edi = 0; - r_esp = 0; - r_ebp = 0; - -#else - sigjmp_buf env; + jmp_buf env; /* Traverse possible register variables */ - sigsetjmp(env,0); + setjmp(env); start = (ATerm *)env; - stop = ((ATerm *)(((char *)env) + sizeof(sigjmp_buf))); + stop = ((ATerm *)(((char *)env) + sizeof(jmp_buf))); mark_memory_young(start, stop); -#endif stackTop = stack_top(); start = MIN(stackTop, stackBot); diff -urN aterm-2.4.2-old/test/randgen.c aterm-2.4.2/test/randgen.c --- aterm-2.4.2-old/test/randgen.c 2002-06-06 10:16:29.000000000 +0200 +++ aterm-2.4.2/test/randgen.c 2006-08-17 16:09:47.000000000 +0200 @@ -14,8 +14,13 @@ #if HAVE_LRAND48 && HAVE_SRAND48 /* Use the rand48() suite */ #else -#define lrand48() random() -#define srand48(s) srandom(s) +# ifdef WIN32 +# define lrand48() rand() +# define srand48(s) srand(s) +# else +# define lrand48() random() +# define srand48(s) srandom(s) +# endif #endif /*}}} */ diff -urN aterm-2.4.2-old/test/termstats.c aterm-2.4.2/test/termstats.c --- aterm-2.4.2-old/test/termstats.c 2001-10-09 16:35:21.000000000 +0200 +++ aterm-2.4.2/test/termstats.c 2006-08-17 17:15:53.000000000 +0200 @@ -1,7 +1,9 @@ #include #include #include +#ifndef WIN32 #include +#endif #include #include @@ -14,7 +16,9 @@ int main(int argc, char *argv[]) { +#ifndef WIN32 struct tms start, end; +#endif ATerm top = NULL; ATerm t, t2; ATbool dobafsize = ATfalse; @@ -29,16 +33,24 @@ ATinit(argc, argv, &top); +#ifndef WIN32 times(&start); +#endif t = ATreadFromFile(stdin); +#ifndef WIN32 times(&end); textread = end.tms_utime-start.tms_utime; +#endif tmp_file = tmpfile(); +#ifndef WIN32 times(&start); +#endif ATwriteToTextFile(t, tmp_file); +#ifndef WIN32 times(&end); textwrite = end.tms_utime-start.tms_utime; +#endif subterms = AT_calcSubterms(t); symbols = AT_calcUniqueSymbols(t); @@ -56,37 +68,52 @@ printf(" bytes p/node : %8.2f\n", ((double)incore)/((double)subterms)); printf("text size : %8d\n",textsize); printf(" bytes p/node : %8.2f\n", ((double)textsize)/((double)subterms)); + +#ifndef WIN32 printf("text read time : %8.2fs\n", ((double)textread)/((double)CLK_TCK)); printf(" per node : %8.2fus\n", ((double)textread*1000000.0/subterms)/((double)CLK_TCK)); printf("text write time : %8.2fs\n", ((double)textwrite)/((double)CLK_TCK)); printf(" per node : %8.2fus\n", ((double)textwrite*1000000.0/subterms)/((double)CLK_TCK)); +#endif if(dobafsize) { struct stat stats; +#ifndef WIN32 clock_t bafread, bafwrite; +#endif FILE *file = fopen("/tmp/test.baf", "wb+"); int fd = fileno(file); +#ifndef WIN32 times(&start); +#endif ATwriteToBinaryFile(t, file); +#ifndef WIN32 times(&end); bafwrite = end.tms_utime-start.tms_utime; +#endif fflush(file); fstat(fd, &stats); bafsize = (int)stats.st_size; fseek(file, 0, SEEK_SET); +#ifndef WIN32 times(&start); +#endif t2 = ATreadFromBinaryFile(file); +#ifndef WIN32 times(&end); bafread = end.tms_utime-start.tms_utime; +#endif printf("baf size : %8d\n", bafsize); printf(" bytes p/node : %8.2f\n", ((double)bafsize)/((double)subterms)); printf(" bits p/node : %8.2f\n", ((double)bafsize*8)/((double)subterms)); printf(" comp.wrs.text : %8.2f%%\n", 100.0-((double)bafsize*100)/((textsize))); +#ifndef WIN32 printf("baf write time : %8.2fs\n", ((double)bafwrite)/((double)CLK_TCK)); printf(" per node : %8.2fus\n", ((double)bafwrite*1000000.0/subterms)/((double)CLK_TCK)); printf("baf read time : %8.2fs\n", ((double)bafread)/((double)CLK_TCK)); printf(" per node : %8.2fus\n", ((double)bafread*1000000.0/subterms)/((double)CLK_TCK)); +#endif fclose(file); }