Raymond Toy pushed to branch issue-86-save-fpu-state-on-entry-to-alloc at cmucl / cmucl
Commits: a95db7ba by Raymond Toy at 2020-08-26T23:30:54-07:00 Update comments
- - - - - ad3862c9 by Raymond Toy at 2020-08-26T23:34:05-07:00 Clean up code
- - - - - 01f8217b by Raymond Toy at 2020-08-26T23:41:36-07:00 Add -R flag to recompile lisp
- - - - -
3 changed files:
- .gitlab-ci.yml - src/lisp/gencgc.c - src/lisp/x86-arch.h
Changes:
===================================== .gitlab-ci.yml ===================================== @@ -12,7 +12,7 @@ linux-runner: - mkdir snapshot - (cd snapshot; tar xjf ../cmucl-$version-linux.tar.bz2; tar xjf ../cmucl-$version-linux.extra.tar.bz2) script: - - bin/build.sh $bootstrap -C "" -o snapshot/bin/lisp + - bin/build.sh $bootstrap -R -C "" -o snapshot/bin/lisp - bin/make-dist.sh -I dist linux-4 - bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
@@ -24,6 +24,6 @@ osx-runner: - mkdir snapshot - (cd snapshot; tar xjf ../cmucl-$version-darwin.tar.bz2) script: - - bin/build.sh $bootstrap -C "" -o snapshot/bin/lisp + - bin/build.sh $bootstrap -R -C "" -o snapshot/bin/lisp - bin/make-dist.sh -I dist darwin-4 - bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
===================================== src/lisp/gencgc.c ===================================== @@ -8416,10 +8416,13 @@ void do_pending_interrupt(void); char * alloc(int nbytes) { -#if 0 && (defined(i386) || defined(__x86_64)) +#if (defined(i386) || defined(__x86_64)) /* * Need to save and restore the FPU registers on x86, but only for - * sse2. See Ticket #61. + * sse2. See Trac ticket #61 + * (https://trac.common-lisp.net/cmucl/ticket/61) and gitlab + * ticket #86 + * (https://gitlab.common-lisp.net/cmucl/cmucl/-/issues/86). * * Not needed by sparc or ppc because we never call alloc from * Lisp directly to do allocation. @@ -8457,20 +8460,6 @@ alloc(int nbytes) set_current_region_free((lispobj) new_free_pointer); break; } else if (bytes_allocated <= auto_gc_trigger) { -#if 1 && (defined(i386) || defined(__x86_64)) - /* - * Need to save and restore the FPU registers on x86, but only for - * sse2. See Ticket #61. - * - * Not needed by sparc or ppc because we never call alloc from - * Lisp directly to do allocation. - */ - FPU_STATE(fpu_state); - - if (fpu_mode == SSE2) { - save_fpu_state(fpu_state); - } -#endif /* Call gc_alloc. */ boxed_region.free_pointer = (void *) get_current_region_free(); boxed_region.end_addr = @@ -8481,11 +8470,6 @@ alloc(int nbytes) set_current_region_free((lispobj) boxed_region.free_pointer); set_current_region_end((lispobj) boxed_region.end_addr);
-#if 1 && (defined(i386) || defined(__x86_64)) - if (fpu_mode == SSE2) { - restore_fpu_state(fpu_state); - } -#endif break; } else { /* Run GC and try again. */ @@ -8499,7 +8483,7 @@ alloc(int nbytes) } }
-#if 0 && (defined(i386) || defined(__x86_64)) +#if (defined(i386) || defined(__x86_64)) if (fpu_mode == SSE2) { restore_fpu_state(fpu_state); }
===================================== src/lisp/x86-arch.h ===================================== @@ -17,15 +17,13 @@ extern boolean os_support_sse2(void); #define FPU_STATE_SIZE 27
/* - * Need 512 byte area, aligned on a 16-byte boundary. So allocate - * 512+16 bytes of space and let the routine adjust the appropriate - * alignment. + * Need 512 byte area, aligned on a 16-byte boundary. */ #define SSE_STATE_SIZE 512
/* * Just use the SSE size for both x87 and sse2 since the SSE size is - * enough for either. + * enough for either. Make sure it's on a 16-byte boundary. */ #define FPU_STATE(name) u_int8_t name[SSE_STATE_SIZE] __attribute__((aligned(16)))
View it on GitLab: https://gitlab.common-lisp.net/cmucl/cmucl/-/compare/4b80a6e595faa3e2343b623...