Raymond Toy pushed to branch native-image at cmucl / cmucl
Commits:
-
19f274f0
by Raymond Toy at 2021-01-29T17:30:03-08:00
-
832e116a
by Raymond Toy at 2021-01-30T01:54:08+00:00
-
e349bf1d
by Raymond Toy at 2021-01-30T09:51:59-08:00
-
74b0de87
by Raymond Toy at 2021-02-03T17:04:16-08:00
-
23d1a1d1
by Raymond Toy at 2021-02-04T01:28:29+00:00
-
bfbd0527
by Raymond Toy at 2021-02-03T20:19:53-08:00
-
6887f2de
by Raymond Toy at 2021-02-03T20:27:35-08:00
-
02da0955
by Raymond Toy at 2021-02-03T20:49:05-08:00
4 changed files:
Changes:
| ... | ... | @@ -19,8 +19,6 @@ public domain. |
| 19 | 19 |
|
| 20 | 20 |
## New in this release:
|
| 21 | 21 |
* Known issues:
|
| 22 |
- * Building with gcc8 or later doesn't work with the default -O option. Use -O1 instead. This shouldn't really impact overall speed much.
|
|
| 23 |
- * Added simple support to compile with clang instead, which works. (Use x86_linux_clang).
|
|
| 24 | 22 |
* Feature enhancements
|
| 25 | 23 |
* Changes
|
| 26 | 24 |
* Update to ASDF 3.3.4
|
| ... | ... | @@ -35,6 +33,12 @@ public domain. |
| 35 | 33 |
* ~~#80~~ Use ASDF to load contribs. cmu-contribs still exists but does nothing. The contrib names are the same, except it's best to use a keyword instead of a string. So, `:contrib-demos` instead of `"contrib-demos"`.
|
| 36 | 34 |
* ~~#81~~ Added contribs from Eric Marsden
|
| 37 | 35 |
* ~~#82~~ Replace bc with expr in GNUMakefile
|
| 36 |
+ * ~~#86~~ Building with gcc 8 and later works when using -O2 optimization
|
|
| 37 |
+ * ~~#90~~ Some static symbols have been removed. This probably makes the fasl files incompatible with older versions.
|
|
| 38 |
+ * ~~#91~~ Loop destructuring no longer incorrectly signals an error
|
|
| 39 |
+ * ~~#95~~ Disassembler syntax of x86 je and movzx is incorrect
|
|
| 40 |
+ * ~~#98~~ fstpd is not an Intel instruction; disassemble as `fstp dword ptr [addr]`
|
|
| 41 |
+ * ~~#100~~ ldb prints out unicode base-chars correctly instead of just the low 8 bits.
|
|
| 38 | 42 |
* Other changes:
|
| 39 | 43 |
* Improvements to the PCL implementation of CLOS:
|
| 40 | 44 |
* Changes to building procedure:
|
| ... | ... | @@ -212,12 +212,15 @@ static void |
| 212 | 212 |
brief_otherimm(lispobj obj)
|
| 213 | 213 |
{
|
| 214 | 214 |
int type, c, idx;
|
| 215 |
- char buffer[10];
|
|
| 216 | 215 |
|
| 217 | 216 |
type = TypeOf(obj);
|
| 218 | 217 |
switch (type) {
|
| 219 | 218 |
case type_BaseChar:
|
| 220 |
- c = (obj >> 8) & 0xff;
|
|
| 219 |
+ /*
|
|
| 220 |
+ * A base-char should only be 16 bits long now. But
|
|
| 221 |
+ * sometimes it uses all 24. So just grab all the bits.
|
|
| 222 |
+ */
|
|
| 223 |
+ c = (obj >> 8) & 0xfffff;
|
|
| 221 | 224 |
switch (c) {
|
| 222 | 225 |
case '\0':
|
| 223 | 226 |
printf("#\\Null");
|
| ... | ... | @@ -228,20 +231,35 @@ brief_otherimm(lispobj obj) |
| 228 | 231 |
case '\b':
|
| 229 | 232 |
printf("#\\Backspace");
|
| 230 | 233 |
break;
|
| 234 |
+ case '\11':
|
|
| 235 |
+ printf("#\\Tab");
|
|
| 236 |
+ break;
|
|
| 237 |
+ case '\13':
|
|
| 238 |
+ printf("#\\Vt");
|
|
| 239 |
+ break;
|
|
| 240 |
+ case '\15':
|
|
| 241 |
+ printf("#\\Return");
|
|
| 242 |
+ break;
|
|
| 243 |
+ case '\33':
|
|
| 244 |
+ printf("#\\Escape");
|
|
| 245 |
+ break;
|
|
| 246 |
+ case '\40':
|
|
| 247 |
+ printf("#\\Space");
|
|
| 248 |
+ break;
|
|
| 231 | 249 |
case '\177':
|
| 232 | 250 |
printf("#\\Delete");
|
| 233 | 251 |
break;
|
| 234 | 252 |
default:
|
| 235 |
- strcpy(buffer, "#\\");
|
|
| 236 | 253 |
if (c >= 128) {
|
| 237 |
- strcat(buffer, "m-");
|
|
| 238 |
- c -= 128;
|
|
| 239 |
- }
|
|
| 240 |
- if (c < 32) {
|
|
| 241 |
- strcat(buffer, "c-");
|
|
| 242 |
- c += '@';
|
|
| 243 |
- }
|
|
| 244 |
- printf("%s%c", buffer, c);
|
|
| 254 |
+ /* Just print out the code value */
|
|
| 255 |
+ printf("#\\u+%04X", c);
|
|
| 256 |
+ } else if (c < 32) {
|
|
| 257 |
+ /* Print it out as a control character */
|
|
| 258 |
+ printf("#\\^%c", c + '@');
|
|
| 259 |
+ } else {
|
|
| 260 |
+ /* Plain ASCII character */
|
|
| 261 |
+ printf("#\\%c", c);
|
|
| 262 |
+ }
|
|
| 245 | 263 |
break;
|
| 246 | 264 |
}
|
| 247 | 265 |
break;
|
| ... | ... | @@ -655,7 +655,7 @@ asm_complex_double_float(lispobj* ptr, lispobj object, FILE* f) |
| 655 | 655 |
#endif
|
| 656 | 656 |
|
| 657 | 657 |
void
|
| 658 |
-init_asmtab()
|
|
| 658 |
+init_asmtab(void)
|
|
| 659 | 659 |
{
|
| 660 | 660 |
int k = 0;
|
| 661 | 661 |
|
| ... | ... | @@ -674,6 +674,9 @@ init_asmtab() |
| 674 | 674 |
asmtab[type_OtherPointer | (k << 3)] = asm_other_pointer;
|
| 675 | 675 |
}
|
| 676 | 676 |
|
| 677 |
+ asmtab[type_Ratio] = asm_boxed;
|
|
| 678 |
+ asmtab[type_Complex] = asm_boxed;
|
|
| 679 |
+ asmtab[type_SimpleArray] = asm_boxed;
|
|
| 677 | 680 |
asmtab[type_SymbolHeader] = asm_boxed;
|
| 678 | 681 |
asmtab[type_Fdefn] = asm_fdefn;
|
| 679 | 682 |
asmtab[type_InstanceHeader] = asm_boxed;
|
| ... | ... | @@ -683,6 +686,7 @@ init_asmtab() |
| 683 | 686 |
asmtab[type_BaseChar] = asm_immediate;
|
| 684 | 687 |
/* Just use asm_boxed or have a special version for a value cell? */
|
| 685 | 688 |
asmtab[type_ValueCellHeader] = asm_boxed;
|
| 689 |
+
|
|
| 686 | 690 |
}
|
| 687 | 691 |
|
| 688 | 692 |
void
|
| ... | ... | @@ -544,3 +544,15 @@ |
| 544 | 544 |
;; the correct value.
|
| 545 | 545 |
(assert-false
|
| 546 | 546 |
(funcall (compile nil '(lambda () (array-displacement "aaaaaaaa"))))))
|
| 547 |
+ |
|
| 548 |
+(define-test issue.101
|
|
| 549 |
+ (:tag :issues)
|
|
| 550 |
+ ;; Verifies that we don't get unexpected overflow. The actual value
|
|
| 551 |
+ ;; is not really important. The important part is no overflow is
|
|
| 552 |
+ ;; signaled.
|
|
| 553 |
+ ;;
|
|
| 554 |
+ ;; See https://gitlab.common-lisp.net/cmucl/cmucl/-/issues/101 for
|
|
| 555 |
+ ;; more details.
|
|
| 556 |
+ (assert-equalp
|
|
| 557 |
+ 3.0380154777955097d205
|
|
| 558 |
+ (expt 1.7976931348623157d308 0.6666)))
|