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
-
ad3862c9
by Raymond Toy at 2020-08-26T23:34:05-07:00
-
01f8217b
by Raymond Toy at 2020-08-26T23:41:36-07:00
3 changed files:
Changes:
| ... | ... | @@ -12,7 +12,7 @@ linux-runner: |
| 12 | 12 |
- mkdir snapshot
|
| 13 | 13 |
- (cd snapshot; tar xjf ../cmucl-$version-linux.tar.bz2; tar xjf ../cmucl-$version-linux.extra.tar.bz2)
|
| 14 | 14 |
script:
|
| 15 |
- - bin/build.sh $bootstrap -C "" -o snapshot/bin/lisp
|
|
| 15 |
+ - bin/build.sh $bootstrap -R -C "" -o snapshot/bin/lisp
|
|
| 16 | 16 |
- bin/make-dist.sh -I dist linux-4
|
| 17 | 17 |
- bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
|
| 18 | 18 |
|
| ... | ... | @@ -24,6 +24,6 @@ osx-runner: |
| 24 | 24 |
- mkdir snapshot
|
| 25 | 25 |
- (cd snapshot; tar xjf ../cmucl-$version-darwin.tar.bz2)
|
| 26 | 26 |
script:
|
| 27 |
- - bin/build.sh $bootstrap -C "" -o snapshot/bin/lisp
|
|
| 27 |
+ - bin/build.sh $bootstrap -R -C "" -o snapshot/bin/lisp
|
|
| 28 | 28 |
- bin/make-dist.sh -I dist darwin-4
|
| 29 | 29 |
- bin/run-tests.sh -l dist/bin/lisp 2>&1 | tee test.log
|
| ... | ... | @@ -8416,10 +8416,13 @@ void do_pending_interrupt(void); |
| 8416 | 8416 |
char *
|
| 8417 | 8417 |
alloc(int nbytes)
|
| 8418 | 8418 |
{
|
| 8419 |
-#if 0 && (defined(i386) || defined(__x86_64))
|
|
| 8419 |
+#if (defined(i386) || defined(__x86_64))
|
|
| 8420 | 8420 |
/*
|
| 8421 | 8421 |
* Need to save and restore the FPU registers on x86, but only for
|
| 8422 |
- * sse2. See Ticket #61.
|
|
| 8422 |
+ * sse2. See Trac ticket #61
|
|
| 8423 |
+ * (https://trac.common-lisp.net/cmucl/ticket/61) and gitlab
|
|
| 8424 |
+ * ticket #86
|
|
| 8425 |
+ * (https://gitlab.common-lisp.net/cmucl/cmucl/-/issues/86).
|
|
| 8423 | 8426 |
*
|
| 8424 | 8427 |
* Not needed by sparc or ppc because we never call alloc from
|
| 8425 | 8428 |
* Lisp directly to do allocation.
|
| ... | ... | @@ -8457,20 +8460,6 @@ alloc(int nbytes) |
| 8457 | 8460 |
set_current_region_free((lispobj) new_free_pointer);
|
| 8458 | 8461 |
break;
|
| 8459 | 8462 |
} else if (bytes_allocated <= auto_gc_trigger) {
|
| 8460 |
-#if 1 && (defined(i386) || defined(__x86_64))
|
|
| 8461 |
- /*
|
|
| 8462 |
- * Need to save and restore the FPU registers on x86, but only for
|
|
| 8463 |
- * sse2. See Ticket #61.
|
|
| 8464 |
- *
|
|
| 8465 |
- * Not needed by sparc or ppc because we never call alloc from
|
|
| 8466 |
- * Lisp directly to do allocation.
|
|
| 8467 |
- */
|
|
| 8468 |
- FPU_STATE(fpu_state);
|
|
| 8469 |
- |
|
| 8470 |
- if (fpu_mode == SSE2) {
|
|
| 8471 |
- save_fpu_state(fpu_state);
|
|
| 8472 |
- }
|
|
| 8473 |
-#endif
|
|
| 8474 | 8463 |
/* Call gc_alloc. */
|
| 8475 | 8464 |
boxed_region.free_pointer = (void *) get_current_region_free();
|
| 8476 | 8465 |
boxed_region.end_addr =
|
| ... | ... | @@ -8481,11 +8470,6 @@ alloc(int nbytes) |
| 8481 | 8470 |
set_current_region_free((lispobj) boxed_region.free_pointer);
|
| 8482 | 8471 |
set_current_region_end((lispobj) boxed_region.end_addr);
|
| 8483 | 8472 |
|
| 8484 |
-#if 1 && (defined(i386) || defined(__x86_64))
|
|
| 8485 |
- if (fpu_mode == SSE2) {
|
|
| 8486 |
- restore_fpu_state(fpu_state);
|
|
| 8487 |
- }
|
|
| 8488 |
-#endif
|
|
| 8489 | 8473 |
break;
|
| 8490 | 8474 |
} else {
|
| 8491 | 8475 |
/* Run GC and try again. */
|
| ... | ... | @@ -8499,7 +8483,7 @@ alloc(int nbytes) |
| 8499 | 8483 |
}
|
| 8500 | 8484 |
}
|
| 8501 | 8485 |
|
| 8502 |
-#if 0 && (defined(i386) || defined(__x86_64))
|
|
| 8486 |
+#if (defined(i386) || defined(__x86_64))
|
|
| 8503 | 8487 |
if (fpu_mode == SSE2) {
|
| 8504 | 8488 |
restore_fpu_state(fpu_state);
|
| 8505 | 8489 |
}
|
| ... | ... | @@ -17,15 +17,13 @@ extern boolean os_support_sse2(void); |
| 17 | 17 |
#define FPU_STATE_SIZE 27
|
| 18 | 18 |
|
| 19 | 19 |
/*
|
| 20 |
- * Need 512 byte area, aligned on a 16-byte boundary. So allocate
|
|
| 21 |
- * 512+16 bytes of space and let the routine adjust the appropriate
|
|
| 22 |
- * alignment.
|
|
| 20 |
+ * Need 512 byte area, aligned on a 16-byte boundary.
|
|
| 23 | 21 |
*/
|
| 24 | 22 |
#define SSE_STATE_SIZE 512
|
| 25 | 23 |
|
| 26 | 24 |
/*
|
| 27 | 25 |
* Just use the SSE size for both x87 and sse2 since the SSE size is
|
| 28 |
- * enough for either.
|
|
| 26 |
+ * enough for either. Make sure it's on a 16-byte boundary.
|
|
| 29 | 27 |
*/
|
| 30 | 28 |
#define FPU_STATE(name) u_int8_t name[SSE_STATE_SIZE] __attribute__((aligned(16)))
|
| 31 | 29 |
|