-
Notifications
You must be signed in to change notification settings - Fork 32
ExnCodeExperiments
Felix S. Klock II edited this page Jul 28, 2013
·
1 revision
This is data related to the task described in Ticket #182.
It seems to PnkFelix that this data is inconclusive. Perhaps all the variation is in the noise. More experiments are necessary.
R6RS, exn-is-loaded R6RS, exn-in-stream
benchmark cpu real gc cpu real gc
boyer 583 603 53 579 598 59
browse 2748 2791 121 2701 2752 128
cpstak 1325 1349 298 1313 1337 305
ctak 2885 2935 261 2862 2908 280
dderiv 1747 1778 242 1757 1798 234
deriv 1241 1270 243 1239 1269 234
destruc 1078 1094 45 1031 1048 50
diviter 1052 1078 186 1053 1079 197
divrec 1387 1502 191 1374 1491 215
puzzle 1807 1958 9 1802 1950 9
takl 1052 1063 0 963 973 0
triangl 2250 2271 0 2313 2336 0
fft 1386 1434 303 1375 1424 296
fib 1633 1647 0 1633 1657 0
fibfp 2861 2943 348 3039 3144 339
mbrot 2105 2147 777 2113 2188 460
pnpoly 1656 1679 116 1653 1685 66
sum 603 608 0 602 612 0
sumfp 1957 1989 368 1968 2055 397
tak 1086 1098 0 1093 1106 0
ack 99 105 0 99 105 1
array1 439 535 46 429 516 42
cat 480 606 0 467 676 0
string 507 543 30 503 540 28
sum1 1640 2970 7 1646 2968 6
sumloop 880 896 0 879 892 0
tail 726 862 23 697 832 36
wc 310 357 0 310 354 0
conform 1371 1395 54 1373 1396 53
dynamic 703 773 148 691 763 144
earley 1541 1654 349 1544 1657 350
fibc 2514 2558 201 2491 2539 187
graphs 1510 1555 207 1509 1562 176
lattice 1744 1771 14 1747 1768 22
matrix 1698 1725 86 1720 1746 103
maze 5394 5506 57 5437 5511 53
mazefun 1239 1264 54 1233 1257 43
nqueens 1384 1414 78 1398 1422 68
paraffins 3404 3972 1723 3388 3953 1759
peval 1257 1280 14 1237 1257 10
primes 7195 7310 96 7123 7231 101
ray 10440 19925 218 10511 19803 206
scheme 1251 1267 35 1267 1284 32
simplex 17881 36228 134 17888 36250 148
slatex 482 2136 2 463 1734 2
perm9 995 1205 702 994 1194 686
nboyer 1428 1529 324 1436 1543 325
sboyer 1265 1292 31 1275 1298 32
gcbench 1316 1597 818 1270 1522 748
parsing 6296 6483 94 6232 6389 110
gcold 17954 22147 9267 17918 22035 9316
R5RS, exn-is-loaded R5RS, exn-in-stream
benchmark cpu real gc cpu real gc
boyer 4136 4230 59 4103 4171 60
browse 8268 8398 126 7859 7952 123
cpstak 8420 8570 412 8579 8698 406
ctak 3663 3734 292 3626 3681 279
dderiv 5839 5924 225 5963 6046 260
deriv 4741 4824 220 4906 4986 222
destruc 8782 8911 200 9024 9136 180
diviter 3950 4010 205 3907 3958 159
divrec 4496 4667 207 4453 4630 221
puzzle 13200 13794 372 13376 13679 357
takl 7135 7504 0 7002 7083 0
triangl 17014 17325 231 17365 17610 242
fft 10229 10612 831 10459 10737 851
fib 24402 24810 580 24976 25390 573
fibfp 11557 11779 612 11714 11935 570
mbrot 15182 15466 1069 15386 15617 1095
pnpoly 10370 10515 181 11366 11500 172
sum 18486 18717 572 19172 19418 575
sumfp 11029 11178 641 10674 10844 668
tak 15912 16134 185 16115 16306 196
ack 2345 2787 96 2375 2804 82
array1 5860 6147 573 6045 6321 564
cat 540 836 0 505 636 0
string 507 542 28 503 539 31
sum1 1657 2981 9 1662 2985 7
sumloop 19879 20144 801 20358 20618 776
tail 825 964 34 804 943 30
wc 856 909 16 866 924 20
conform 1977 2008 60 1966 1995 55
dynamic 2058 2975 227 2038 2954 223
earley 5105 5278 585 5082 5254 600
fibc 4054 4117 245 4055 4117 240
graphs 4887 4987 278 4926 5026 310
lattice 6981 7056 30 6767 6834 27
matrix 8924 11464 296 8699 11293 302
maze 16315 16756 481 16419 16775 474
mazefun 9580 9792 191 9556 9693 208
nqueens 13988 14228 425 14155 14388 400
paraffins 8590 9722 3324 8525 9634 3305
peval 3774 3826 76 3681 3738 67
primes 11620 11785 137 11950 12122 130
ray 10153 15381 346 10281 15108 371
scheme 2974 3022 76 3000 3106 82
simplex 13983 19642 328 14066 19777 317
slatex 582 1801 10 577 1722 6
perm9 4316 4649 1055 4277 4620 1054
nboyer 5609 5790 469 5382 5557 482
sboyer 5539 5610 98 5661 5786 89
gcbench 4257 4588 951 4335 4662 959
parsing 15873 16253 327 15954 16405 306
gcold 41014 45845 10592 41426 46012 10554
For semi-completeness, here is the diff describing the changes PnkFelix made during this experiment:
Index: src/Asm/IAssassin/sassy-instr.sch
===================================================================
--- src/Asm/IAssassin/sassy-instr.sch (revision 3715)
+++ src/Asm/IAssassin/sassy-instr.sch (working copy)
@@ -280,8 +280,10 @@
(define-sassy-instr (ia86.exception_noncontinuable excode)
;; `(comment -- exception ,excode)
+ `(mov (& ,GLOBALS ,$g.second) ,SECOND)
+ `(mov ,SECOND ,excode)
`(call (& ,GLOBALS ,$m.exception))
- `(dwords ,excode))
+ )
;;; exception_continuable excode restart
;;; Jump to exception handler with code without destroying
@@ -300,8 +302,7 @@
(define-sassy-instr (ia86.exception_continuable excode restart)
;; `(comment -- exception ,excode)
- `(call (& ,GLOBALS ,$m.exception))
- `(dwords ,excode)
+ (ia86.exception_noncontinuable excode)
`(align ,code_align)
`(jmp ,restart))
Index: src/Rts/Shared/i386-millicode.asm
===================================================================
--- src/Rts/Shared/i386-millicode.asm (revision 3714)
+++ src/Rts/Shared/i386-millicode.asm (working copy)
@@ -584,11 +584,8 @@
PUBLIC i386_inexactp
MCg mc_inexactp
-PUBLIC i386_exception ; Exn encoded in instr stream
- mov [GLOBALS+G_SECOND+4], SECOND
- mov SECOND, [GLOBALS] ; Exn code address
- mov ax, [SECOND] ; Exn code
- and eax, 0xFFFF ; is 16 bits
+PUBLIC i386_exception
+ and eax, 0xFFFF ; Exn code is 16 bits
shl eax, 2 ; encoded as fixnum
jmp i386_signal_exception_intrsafe
(obviously this changeset should not be put into the repository without a corresponding change to the Petit/Nasm backend in source:trunk/larceny_src/include/Nasm/i386-instr.ah)