Home My Page Projects Code Snippets Project Openings SML/NJ
 Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

# SCM Repository

[smlnj] Annotation of /sml/trunk/HISTORY
 [smlnj] / sml / trunk / HISTORY

# Annotation of /sml/trunk/HISTORY

 1 : dbm 570 This is the HISTORY file for the Yale SML/NJ CVS repository. 2 : 3 : An entry should be made for _every_ commit to the repository. 4 : The entries in this file will be used when creating the README 5 : for new versions, so keep that in mind when writing the 6 : description. 7 : 8 : The form of an entry should be: 9 : 10 : mblume 1480 Name: 11 : Date: yyyy/mm/dd 12 : Tag: 13 : Description: 14 : 15 : ---------------------------------------------------------------------- 16 : mblume 1479 Name: Matthias Blume (blume (at) tti - c (dot) org) 17 : mblume 1537 Date: 2004/07/13 13:50:00 CDT 18 : Tag: blume-20040713-nlffi 19 : Description: 20 : 21 : - use paramAlloc to report c-calls with too many arguments 22 : (for PPC version where parameter area is pre-allocated) 23 : - added ccall_maxargspace to machspec (to implement the above) 24 : - made "make" commend in CM's "make" tool configurable 25 : - added option (default: on) for passing the name of the SML/NJ's "bin" 26 : directory to "make"; the call looks like this: 27 : 28 : make SMLNJ_BINDIR= 29 : 30 : This can be used by the Makefile to, e.g., pick the "right" version 31 : of ml-nlffigen. 32 : - minor code tweaks 33 : 34 : ---------------------------------------------------------------------- 35 : Name: Matthias Blume (blume (at) tti - c (dot) org) 36 : mblume 1532 Date: 2004/07/12 22:50:00 CDT 37 : Tag: blume-110_46_1-macosx-nlffi 38 : Description: 39 : 40 : NLFFI under Mac OS X now working (sort of). This is largely untested, 41 : though. 42 : 43 : Note: 1. You have to make a new, clean build of the runtime system. 44 : 2. There are new BOOTFILES, you have to use them! 45 : (Doing the bootstrap process yourself would be *very* painful! 46 : If you absolutely have to do it, build the system under 47 : a different architecture and then cross-compile.) 48 : 49 : Version bumped to 110.46.1 to account for runtime data format changes. 50 : 51 : ---------------------------------------------------------------------- 52 : Name: Matthias Blume (blume (at) tti - c (dot) org) 53 : mblume 1515 Date: 2004/06/18 14:30:00 CDT 54 : Tag: blume-20040618-unix 55 : Description: 56 : 57 : Changed the implementation of structure Unix so that the same stream 58 : is returned every time one of the {text,bin}{In,Out}streamOf functions 59 : is invoked on the same proc. This is not what the spec currently 60 : says -- although IMO it arguably should. (See discussion below.) 61 : 62 : ---------------------------------------------------------------------- 63 : Name: Matthias Blume (blume (at) tti - c (dot) org) 64 : mblume 1507 Date: 2004/06/17 18:15:00 CDT 65 : Tag: Release_110_46 66 : Description: 67 : 68 : New working version (110.46). NEW BOOTFILES! 69 : 70 : ---------------------------------------------------------------------- 71 : Name: Matthias Blume (blume (at) tti - c (dot) org) 72 : mblume 1506 Date: 2004/06/17 17:20:00 CDT 73 : Tag: blume-20040617-timer-unix 74 : Description: 75 : 76 : Changed the interface of structures Timer and Unix to match the most 77 : recent Basis spec. 78 : 79 : In the case of Unix there still seems to be an open/weird issue: 80 : 81 : The {text,bin}{In,Out}streamOf functions are supposed to create 82 : fresh streams whenever they are called -- as opposed to have them 83 : return the same stream every time. This design is supposed to 84 : prevent space leaks caused by proc values hanging on to streams. 85 : 86 : The reap function, on the other hand, is supposed to close the 87 : streams. This cannot be done without having a handle on the 88 : stream in proc after all... 89 : 90 : I took the liberty to implement the following stopgap solution: 91 : 92 : The proc value hangs on to the most recently created stream(s). 93 : Reap closes those. If either or both of the two streams hadn't 94 : been created at all yet, then reap will close the corresponding 95 : file descriptors directly. 96 : 97 : PS: I don't understand the original space leak argument anymore. If 98 : a proc hangs on to the imperative stream, then I/O operations on those 99 : will advance the state of the cached stream and avoid the space leak. 100 : 101 : ---------------------------------------------------------------------- 102 : Name: Matthias Blume (blume (at) tti - c (dot) org) 103 : mblume 1500 Date: 2004/05/28 16:45:00 CDT 104 : Tag: blume-20040528-basis 105 : Description: 106 : 107 : Added signature PACK_REAL and exported functor PrimIO. 108 : 109 : ---------------------------------------------------------------------- 110 : Name: Matthias Blume (blume (at) tti - c (dot) org) 111 : mblume 1498 Date: 2004/05/25 16:00:00 CDT 112 : Tag: blume-20040525-group-owner 113 : Description: 114 : 115 : CM now ignores (but still accepts) the "owner" information in group 116 : descriptions. The owner of a group is its next enclosing 117 : library. Each group must have a unique owner. (There is a virtual 118 : mblume 1505 "toplevel" library that owns groups which are not nested within a real 119 : mblume 1498 library.) Previously, each group had to explicitly declare its owner, 120 : and CM would check that such a declaration is correct. The new scheme 121 : is to have CM check that for each group there is precisely one owning 122 : library. 123 : 124 : The advantage of the new scheme is that the programmer no longer needs 125 : to maintain the somewhat annoying owner information. The downside is 126 : that CM cannot enforce the ownership rule across multiple runs of 127 : CM.make. Fortunately, enclosing the same group in two different 128 : libraries A and B which are not part of the same program does not 129 : cause real problems. 130 : 131 : ---------------------------------------------------------------------- 132 : Name: Matthias Blume (blume (at) tti - c (dot) org) 133 : mblume 1496 Date: 2004/05/20 16:00:00 CDT 134 : Tag: blume-20040520-win32 135 : Description: 136 : 137 : Made the win32 version work again. (Strangely, a misplaced comma had 138 : slipped into win32-process.c which prevented the runtime from being 139 : compiled correctly.) 140 : 141 : Also, included a minor addition to ml-build.bat analogous to what was 142 : done in blume-20040519-ml-build. 143 : 144 : ---------------------------------------------------------------------- 145 : Name: Matthias Blume (blume (at) tti - c (dot) org) 146 : mblume 1494 Date: 2004/05/19 22:10:00 CDT 147 : Tag: blume-20040519-ml-build 148 : Description: 149 : 150 : Arranged for ml-build to clean up after itself a little bit better. 151 : The script generates a temporary SML source file and compiles it using 152 : CM, so CM generates metadata (GUID, SKEL, objectfile) for it. It now 153 : gets rid of those at the end, so they don't accumulate under .cm. 154 : 155 : This required a minor change to install.sh because the name of the 156 : metadata directory (default: .cm) is actually configurable at 157 : installation time. 158 : 159 : ---------------------------------------------------------------------- 160 : Name: Matthias Blume (blume (at) tti - c (dot) org) 161 : mblume 1491 Date: 2004/05/18 15:50:00 CDT 162 : Tag: blume-20040518-mkreader 163 : Description: 164 : 165 : Added Posix.IO.mk{Bin,Text}{Reader,Writer} by lifting their respective 166 : implementations from internal modules PosixBinPrimIO and PosixTextPrimIO. 167 : 168 : ---------------------------------------------------------------------- 169 : Name: Matthias Blume (blume (at) tti - c (dot) org) 170 : mblume 1489 Date: 2004/05/11 14:35:00 CDT 171 : Tag: blume-20040511-win32sock 172 : Description: 173 : 174 : Added previously missing support for many socket-related functions 175 : under win32. Thanks to David Hansel 176 : for the voluminous patch! 177 : 178 : (I have not tested this patch under win32 yet.) 179 : 180 : mblume 1490 Here is David's e-mail: 181 : 182 : Hi, 183 : 184 : Attached to this email you find a diff against sml/nj 110.45 185 : that will enable socket support under Windows. 186 : 187 : To apply the patch (using unix or cygwin) 188 : 1) gunzip runtime.diff.gz 189 : 2) "cd" into "src/runtime" in the source tree of a fresh 190 : 110.45 installation. 191 : 3) patch -p 1 < [your/path/to]runtime.diff 192 : 193 : The code compiles fine but has NOT yet been extensively tested. 194 : I only ran a few tests for basic socket client functionality 195 : (which worked fine). Especially the functions that use ioctl 196 : are not tested at all and might not work (see below). 197 : 198 : I implemented this since we want to move to a newer version of sml/nj 199 : but need socket support in order to use it. This is the first time I 200 : even had a look at the sml/nj source, so please review my changes 201 : before making this part of the distribution! Here are a few issues 202 : that I think might be better for someone to solve who is more 203 : familiar with the sml/nj source (and socket programming): 204 : 205 : - getnetbyaddr.c and getnetbyname.c will raise a "not implemented" 206 : exception since I could not figure out what the windows equivalent 207 : of these functions is 208 : 209 : - In sockets-osdep.h there are a some #include statements that are 210 : only used in a few files that include sockets-osdep.h 211 : 212 : - In smlnj-sock-lib.c, function init_fn() calls WSAStartup() but 213 : does not process its return value since I don't know how to 214 : report an error upwards. 215 : 216 : - It would probably be good to have a call to WSACleanup() when 217 : the library is unloaded (if there is such a possibility). 218 : Otherwise I think Windows will take care of this automatically 219 : when the process finishes. 220 : 221 : - I used ioctlsocket() as a replacement for ioctl() but I have 222 : no idea if that is actually the proper replacement on Windows. 223 : 224 : - All these issues are marked in the code by "FIXME" comments. 225 : 226 : We use sml/nj extensively in our products and are quite happy 227 : with it. I hope this contribution will help you. 228 : 229 : Keep up the good work! 230 : 231 : David 232 : 233 : mblume 1489 ---------------------------------------------------------------------- 234 : Name: Matthias Blume (blume (at) tti - c (dot) org) 235 : mblume 1488 Date: 2004/05/11 14:20:00 CDT 236 : Tag: blume-20040511-installml 237 : Description: 238 : 239 : Fixed two bugs in installml script. (Thanks to Vesa A. Norrman for 240 : the patch.) 241 : 242 : ---------------------------------------------------------------------- 243 : Name: Matthias Blume (blume (at) tti - c (dot) org) 244 : mblume 1487 Date: 2004/05/11 14:05:00 CDT 245 : Tag: blume-20040511-nlffi-netbsd 246 : Description: 247 : 248 : Added support for nlffi under netbsd. (Thanks to Vesa A. Norrman for 249 : the patch.) 250 : 251 : ---------------------------------------------------------------------- 252 : Name: Matthias Blume (blume (at) tti - c (dot) org) 253 : mblume 1486 Date: 2004/05/11 12:05:00 CDT 254 : Tag: blume-20040511-exports 255 : Description: 256 : 257 : As per request by Adam Chlipala , extended various 258 : export lists in compiler-related .cm-files. 259 : 260 : ---------------------------------------------------------------------- 261 : Name: Matthias Blume (blume (at) tti - c (dot) org) 262 : mblume 1485 Date: 2004/05/11 11:35:00 CDT 263 : Tag: blume-20040511-allsource 264 : Description: 265 : 266 : The installer now honors the "src-smlnj" target again, although its meaning 267 : has changed from "all sources required for the compiler" to "all sources 268 : the installer knows about". In other words, if you enable "src-smlnj" 269 : in the "targets" file, then the installer will pull in sources for 270 : everything. (Notice that this refers to source code only. Compiled 271 : code is still only installed for modules that were requested explicitly 272 : or which are required for other modules that were requested explicitly.) 273 : 274 : ---------------------------------------------------------------------- 275 : Name: Matthias Blume (blume (at) tti - c (dot) org) 276 : mblume 1482 Date: 2004/04/23 17:40:00 CDT 277 : Tag: blume-20040423-ieee-scan 278 : Description: 279 : 280 : Fixed IEEEReal.scan (and .fromString) so that if there is an overflow 281 : in the exponent calculation we get INF or ZERO (depending on the mantissa 282 : and the sign of the exponent). 283 : 284 : ---------------------------------------------------------------------- 285 : Name: Matthias Blume (blume (at) tti - c (dot) org) 286 : mblume 1480 Date: 2004/04/23 10:40:00 CDT 287 : Tag: blume-20040423-ml-build 288 : Description: 289 : 290 : The ml-build script now terminates with a non-0 status when something 291 : goes wrong. 292 : 293 : ---------------------------------------------------------------------- 294 : Name: Matthias Blume (blume (at) tti - c (dot) org) 295 : mblume 1479 Date: 2004/04/22 16:35:00 CDT 296 : Tag: blume-20040422-Option 297 : Description: 298 : 299 : Made exception Option to be the same as exception Option.Option 300 : (as it should be). 301 : 302 : ---------------------------------------------------------------------- 303 : allenleung 1468 Name: Allen Leung (leunga (at) reservoir (dot) com) 304 : Date: 2004/03/19 14:40:00 EST 305 : Tag: leunga-20040319-cygwin-nlffi 306 : Description: 307 : 308 : Fixed the runtime so that ml-nlffi-lib runs on the cygwin version 309 : of SML/NJ. The problem is that 310 : 311 : lib = dlopen(NULL, ...) 312 : f = dlsym(lib, "malloc"); 313 : 314 : does not work on Windows unless we explicitly export symbols 315 : such as 'malloc' during linking. We fixed this by explicitly 316 : exporting the required symbols with the magic gcc incantation: 317 : 318 : -Wl,--export-all cygwin.def 319 : 320 : where cygwin.def is a file containing all the symbols that 321 : we wish to export. 322 : 323 : I suspect this is a Windows problem and we'll have to 324 : do the same (somehow with windows compilers) when 325 : we build the native win32 version with the system 326 : calls LoadLibrary/GetProcAddress. 327 : 328 : ---------------------------------------------------------------------- 329 : mblume 1384 Name: Matthias Blume (blume (at) tti - c (dot) org) 330 : mblume 1465 Date: 2004/03/04 16:35:00 CST 331 : Tag: blume-20040304-intinf-fmt 332 : Description: 333 : 334 : Fixed problem with IntInf.fmt (sign would show up on the right instead 335 : of on the left for BIN, OCT, and HEX). 336 : 337 : ---------------------------------------------------------------------- 338 : Name: Matthias Blume (blume (at) tti - c (dot) org) 339 : mblume 1464 Date: 2004/03/04 11:25:00 CST 340 : Tag: blume-20040304-symlinks 341 : Description: 342 : 343 : Fixed problem with installer script (unix only) where bin/ml-yacc and 344 : friends pointed (via symlinks) to absolute locations instead of just 345 : .run-sml. This was reported by Vesa A Norrman. 346 : 347 : ---------------------------------------------------------------------- 348 : Name: Matthias Blume (blume (at) tti - c (dot) org) 349 : mblume 1455 Date: 2004/02/13 14:50:00 CST 350 : Tag: Release_110_45 351 : Description: 352 : 353 : New working version (110.45). New bootfiles. 354 : 355 : ---------------------------------------------------------------------- 356 : Name: Matthias Blume (blume (at) tti - c (dot) org) 357 : mblume 1448 Date: 2004/01/26 15:15:15 CST 358 : Tag: blume-20040126-toplevel 359 : Description: 360 : 361 : Improved handling of exceptions at the interactive toplevel. 362 : 363 : ---------------------------------------------------------------------- 364 : Name: Matthias Blume (blume (at) tti - c (dot) org) 365 : Date: 2004/01/26 11:25:00 366 : mblume 1446 Tag: blume-20040126-app 367 : Description: 368 : 369 : Type of top-level "app" corrected. 370 : mblume 1447 Added code for setting vp_limitPtrMask to Win32-specific runtime. 371 : mblume 1446 372 : ---------------------------------------------------------------------- 373 : Name: Matthias Blume (blume (at) tti - c (dot) org) 374 : mblume 1427 Date: 2003/11/18 17:10 CST 375 : Tag: blume-20031118-basis-fiddle 376 : Description: 377 : 378 : - changed Timer interface to what might become the spec 379 : - POSIX_FLAGS -> BIT_FLAGS according to spec 380 : - some other minor discrepancies wrt. spec eliminated 381 : 382 : ---------------------------------------------------------------------- 383 : Name: Matthias Blume (blume (at) tti - c (dot) org) 384 : mblume 1414 Date: 2003/11/06 12:00:00 CST 385 : Tag: Release_110_44 386 : Description: 387 : 388 : New working version (110.44). New bootfiles. 389 : 390 : ---------------------------------------------------------------------- 391 : Name: Matthias Blume (blume (at) tti - c (dot) org) 392 : mblume 1411 Date: 2003/11/04 11:50:00 CST 393 : Tag: blume-20031104-move-libraries 394 : Description: 395 : 396 : Eliminated the "dont_move_libraries" directive in config/targets. 397 : (The mechanism was broken and could not be fixed easily. Moreover, 398 : there does not seem to be any reason not to move all libraries into 399 : lib during installation. I originally implemented this directive as a 400 : backward-compatibility feature when I first introduced the new CM. 401 : Now that things have been stable for a long time and going back to the 402 : old CM is not an option, there is no reason to keep it around.) 403 : 404 : ---------------------------------------------------------------------- 405 : Name: Matthias Blume (blume (at) tti - c (dot) org) 406 : mblume 1409 Date: 2003/11/03 16:00:00 CST 407 : Tag: blume-20031103-installdir 408 : Description: 409 : 410 : Made installer honor INSTALLDIR variable again. (Thanks to Chris 411 : Richards for pointing out the problem and providing the solution.) 412 : 413 : ---------------------------------------------------------------------- 414 : Name: Matthias Blume (blume (at) tti - c (dot) org) 415 : mblume 1400 Date: 2003/10/01 17:05:00 CDT 416 : Tag: blume-20031001-lal-mlrisc 417 : Description: 418 : 419 : MLRISC bug fix from Lal. 420 : 421 : ---------------------------------------------------------------------- 422 : Name: Matthias Blume (blume (at) tti - c (dot) org) 423 : mblume 1399 Date: 2003/09/30 16:10:00 CDT 424 : Tag: blume-20030930-primio-bat 425 : mblume 1398 Description: 426 : 427 : 1. Added openVector, nullRd, and nullWr to PRIM_IO. 428 : 2. Improved .bat files (for Win32 port) to make things work under Win95. 429 : (thanks to Aaron S. Hawley for this one) 430 : 431 : ---------------------------------------------------------------------- 432 : Name: Matthias Blume (blume (at) tti - c (dot) org) 433 : mblume 1395 Date: 2003/09/26 16:05:00 CDT 434 : Tag: blume-20030926-wrappriv 435 : Description: 436 : 437 : Added missing wrapper for privilege "primitive" in $smlnj/viscomp/core.cm. 438 : 439 : ---------------------------------------------------------------------- 440 : Name: Matthias Blume (blume (at) tti - c (dot) org) 441 : mblume 1394 Date: 2003/09/26 15:00:00 CDT 442 : Tag: blume-20030926-110_43_3 443 : Description: 444 : 445 : - additional cleanup 446 : - version number bump, NEW BOOTFILES 447 : 448 : ---------------------------------------------------------------------- 449 : Name: Matthias Blume (blume (at) tti - c (dot) org) 450 : mblume 1393 Date: 2003/09/26 12:00:00 CDT 451 : Tag: blume-20030926-ppautoload 452 : Description: 453 : 454 : I modified the read-eval-print loop so that the autoloader gets 455 : invoked whenever the prettyprinter tries to look up a symbol that 456 : is not currently defined in the toplevel environment but which 457 : appears in CM's autoload registry. As a result, we see far fewer of 458 : those ?.Foo.Bar.xxx names in the prettyprinter's output. 459 : 460 : In addition to this I tried to clean up some pieces of the Basis 461 : implementation (e.g., Socket, Word8Array) in order to prevent other 462 : instances of these ?.Foo.Bar.xxx names from being printed. 463 : 464 : The mechanism that picks names for types still needs some work, though. 465 : (Right now it seems that if there is a type A.t which is defined to 466 : mblume 1394 be B.u, but B is unavailable at toplevel, then A.t gets printed as 467 : "?.B.u" although the perhaps more sensible solution would be to use 468 : mblume 1393 "A.t" in this case. In other words, the prettyprinter should follow 469 : a chain of DEFtycs not farther than there are corresponding toplevel 470 : names in the current environment.) 471 : 472 : ---------------------------------------------------------------------- 473 : Name: Matthias Blume (blume (at) tti - c (dot) org) 474 : mblume 1391 Date: 2003/09/24 16:31:00 CDT 475 : Tag: blume-20030924-installer 476 : Description: 477 : 478 : Another installer tweak: All the ML code for the installer is now 479 : compiled during CMB.make and put into a little library called 480 :$smlnj/installer.cm. The installation then simply invokes 481 : 482 : sml -m $smlnj/installer.cm 483 : 484 : and everything happens automagically. 485 : 486 : Win32: ML code senses value of environment variable SMLNJ_HOME. 487 : Unix: ML code senses values of environment variables ROOT, CONFIGDIR, 488 : and BINDIR. 489 : 490 : The new scheme guarantees that the ML code responsible for the installation 491 : is in sync with the APIs of the main system. Also, the installer is 492 : somewhat faster because the installer script is precompiled. 493 : 494 : ---------------------------------------------------------------------- 495 : Name: Matthias Blume (blume (at) tti - c (dot) org) 496 : mblume 1390 Date: 2003/09/24 15:35:00 CDT 497 : Tag: blume-20030924-synsock 498 : Description: 499 : 500 : Added a signature SYNCHRONOUS_SOCKET to basis.cm. This is like SOCKET 501 : but excludes all non-blocking operations. Defined SOCKET (in Basis) 502 : and CML_SOCKET in terms of SYNCHRONOUS_SOCKET. Removed superfluous 503 : implementations of non-blocking operations from CML's Socket 504 : structure. 505 : 506 : ---------------------------------------------------------------------- 507 : Name: Matthias Blume (blume (at) tti - c (dot) org) 508 : mblume 1389 Date: 2003/09/24 15:10:05 CDT 509 : Tag: blume-20030924-sockets 510 : Description: 511 : 512 : 1. Fixed SOCKET API and implementation to match Basis spec. 513 : This required changing the internal representation of sockets to one 514 : that remembers (for each socket file descriptor) whether it is currently 515 : blocking or non-blocking. This state is maintained lazily (i.e., a system 516 : call is made only if the state actually needs to change). 517 : 518 : 2. OS-specific details of sockets were moved into separate files, thus 519 : making it possible to unify the bulk of the socket implementations 520 : between Unix and Win32. 521 : 522 : 3. CML's socket API changed accordingly. 523 : (Note that we need to remove non-blocking functions from this API 524 : since they are redundant in the case of CML!) 525 : 526 : 4. CML's socket implementation now makes use of non-blocking functions 527 : provided by Basis, thus removing all OS-dependent code from this part 528 : of CML. 529 : 530 : 5. Changed Real64.precision from 52 to 53. Minor cleanup in Real64 code. 531 : 532 : ---------------------------------------------------------------------- 533 : Name: Matthias Blume (blume (at) tti - c (dot) org) 534 : mblume 1387 Date: 2003/09/22 12:10:00 CDT 535 : mblume 1388 Tag: blume-20030922-110_43_2 536 : mblume 1387 Description: 537 : 538 : Made a new interim version and bootfiles for developer's bootstrapping 539 : convenience. 540 : 541 : 110.43.2 -- NEW BOOTFILES 542 : 543 : ---------------------------------------------------------------------- 544 : Name: Matthias Blume (blume (at) tti - c (dot) org) 545 : mblume 1385 Date: 2003/09/19 15:55:00 CDT 546 : Tag: blume-20030919-cmdir 547 : Description: 548 : 549 : 1. new-install.sh -> install.sh 550 : 2. changed default CM "metadata" directory name to ".cm" (instead of "CM") 551 : 3. tweaked installer so that another name instead of .cm can be chosen 552 : at install time (by setting the CM_DIR_ARC environment variable 553 : during installation); once installation is complete, the name is 554 : fixed 555 : 556 : ---------------------------------------------------------------------- 557 : Name: Matthias Blume (blume (at) tti - c (dot) org) 558 : mblume 1384 Date: 2003/09/18 16:00:00 CDT 559 : Tag: blume-20030918-110_43_1 560 : Description: 561 : 562 : Made a new interim version and bootfiles for developer's bootstrapping 563 : convenience. 564 : 565 : 110.43.1 -- NEW BOOTFILES 566 : 567 : ---------------------------------------------------------------------- 568 : Name: Matthias Blume (blume (at) tti - c (dot) org) 569 : mblume 1383 Date: 2003/09/18 15:20:00 CDT 570 : Tag: blume-20030918-misc 571 : Description: 572 : 573 : 1. Exported fractionsPerSecond etc. from TimeImp (but not from Time as 574 : this seems to be controversial at the moment) and used those in 575 : Posix.ProcEnv.times. 576 : 577 : 2. Added Time.{from,to}Nanoseconds to Time. 578 : 579 : 3. Improved Real.{from,to}LargeInt by avoiding needless calculations. 580 : For example, fromLargeInt never needs to look at more than 3 "big 581 : digits" to get its 53 bits of precision. 582 : 583 : ---------------------------------------------------------------------- 584 : mblume 1384 Name: Matthias Blume (blume (at) tti - c (dot) org) 585 : mblume 1381 Date: 2003/09/17 16:30:00 CDT 586 : Tag: blume-20030917-real32-slices 587 : Description: 588 : 589 : Added an entry to the primitive environment 590 : (compiler/Semant/statenv/prim.sml) for int32->real64 conversion and 591 : added code to compiler/CodeGen/main/mlriscGen.sml to implement it. 592 : 593 : Removed some of the "magic" constants in real64.sml and replaced them 594 : with code that generates these values from their corresponding 595 : integer counterparts. 596 : 597 : Made all(?) the slice-related changes to the Basis and made everything 598 : compile again... 599 : 600 : ---------------------------------------------------------------------- 601 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 602 : mblume 1375 Date: 2003/09/15 17:45:00 CDT 603 : Tag: blume-20030915-rbase 604 : Description: 605 : 606 : Fixed bug in Real.fromLargeInt. 607 : 608 : ---------------------------------------------------------------------- 609 : Name: Matthias Blume (blume (at) tti - c (dot) org) 610 : mblume 1369 Date: 2003/09/13 18:11:00 CDT 611 : Tag: blume-20030913-libinstall 612 : Description: 613 : 614 : Minor bugfix in config/libinstall (set anchor with path to 615 : standalone tool after installing it, otherwise libraries that 616 : need ml-lex or ml-yacc won't compile the first time the installer 617 : runs). 618 : 619 : ---------------------------------------------------------------------- 620 : Name: Matthias Blume (blume (at) tti - c (dot) org) 621 : mblume 1368 Date: 2003/09/12 11:45:00 CDT 622 : Tag: blume-20030912-various 623 : Description: 624 : 625 : - fixed bug in Real.toLargeInt 626 : - fixed bug in Posix.ProcEnv.times 627 : - changed inputLine functions to return an option 628 : - minor installer improvements / bugfixes 629 : - changed default @SMLalloc parameter for x86/celeron to 64k 630 : 631 : ---------------------------------------------------------------------- 632 : Name: Matthias Blume (blume (at) tti - c (dot) org) 633 : mblume 1356 Date: 2003/09/09 22:00:00 CDT 634 : Tag: Release_110_43 635 : Description: 636 : 637 : New working release 110.43. New bootfiles. 638 : 639 : ---------------------------------------------------------------------- 640 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 641 : mblume 1354 Date: 2003/09/09 19:20:00 CDT 642 : Tag: blume-20030909-installer 643 : Description: 644 : 645 : Rewrote large parts of config/install.sh in SML (config/libinstall.sml). 646 : Modified config/install.bat to take advantage of it. Also modified 647 : config/install.sh (and called it config/new-install.sh) to take advantage 648 : of it on Unix systems. (The SML code is (supposed to be) platform- 649 : independent.) 650 : 651 : The installer can now install everything under Win32 652 : as well as under *nix as long as it compiles. 653 : 654 : Other changes: 655 : 656 : - made CML compile again under Win32 657 : - made eXene compile under Win32 (by providing a fake structure UnixSock 658 : and by using OS.Process.getEnv instead of Posix.ProcEnv.getenv) 659 : - fixed a bug in nowhere: it assumed that type OS.Process.status is the 660 : same as type int; under Win32 it isn't 661 : - fixed some slice-related problems in the win32-specific parts of CML 662 : - added a functor argument "sameVol" to os-path-fn.sml in the Basis 663 : (under Win32, the volume name is case-insensitive, and the 664 : OS.Path code compares volume names for equality) 665 : 666 : ---------------------------------------------------------------------- 667 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 668 : mblume 1353 Date: 2003/09/08 11:55:00 CDT 669 : Tag: blume-20030908-fullpath 670 : Description: 671 : 672 : Made Win32 version of OS.FileSys.fullPath return current directory 673 : when given an empty string. This is what the spec says, and incidentally, 674 : CM depends on it. (CM otherwise goes into an infinite loop in certain 675 : cases when presented with the name of a non-existing .cm file.) 676 : 677 : ---------------------------------------------------------------------- 678 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 679 : mblume 1350 Date: 2003/09/04 16:30:00 CDT 680 : mblume 1352 Tag: blume-20030905-slices-etc 681 : mblume 1350 Description: 682 : 683 : 1. Changed interface to vectors and arrays in Basis to match 684 : (draft) Basis spec. 685 : 2. Added signatures and implementations of slices according to 686 : Basis spec. 687 : 3. Edited source code throughout the system to make it compile again 688 : under 1. and 2. (In some cases code had to be added to have it 689 : match the new signatures.) 690 : 4. MLRISC should be backward-compatible: the copies of the originals 691 : of files that needed to change under 3. were retained, the .cm files 692 : check the compiler version number and use old versions when 693 : appropriate. 694 : 5. Changed type of OS.FileSys.readDir and Posix.FileSys.readdir to 695 : dirstream -> string option (in accordance with Basis spec). 696 : 6. When generating code that counts lines, ml-lex used function 697 : CharVector.foldli, taking advantage of its old interface. 698 : This has been replaced with the corresponding code from 699 : CharVectorSlice. (html-lex must be re-lexed!) 700 : 7. BitArray in smlnj-lib/Util has been extended/modified to match the 701 : new MONO_ARRAY signature. (Do we need BitArraySlice?) 702 : 8. Removed temporary additions (fromInternal, toInternal) from the 703 : (now obsolete) IntInf in smlnj-lib/Util. 704 : 9. Cleaned up structure Byte. 705 : 10. Added localOffset, scan, and fromString to Date (according to spec). 706 : Cleaned/corrected implementation of Date. 707 : (Still need to check for correctness; implement better canonicalizeDate.) 708 : 11. Added "scan" to signature IEEE_REAL. 709 : 12. Some improvements to IntInf [in particular: efficiency-hack for 710 : mod and rem when second operand is 2 (for parity checks).] 711 : 13. Changed representation of type Time.time, using a single IntInf.int 712 : value counting microseconds. This considerably simplified the 713 : implementation of structure Time. We now support negative time 714 : values; scan and fromString handle signs. 715 : 14. Functor PrimIO now takes two additional arguments (VectorSlice and 716 : ArraySlice). 717 : 718 : ---------------------------------------------------------------------- 719 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 720 : mblume 1347 Date: 2003/08/28 17:00:00 CDT 721 : Tag: blume-20030828-intinf 722 : Description: 723 : 724 : This is a major update which comes with a version number bump 725 : (110.42.99 -- yes, we are really close to 110.43 :-), NEW BOOTFILES, 726 : and an implementation of IntInf in the Basis. 727 : 728 : There are a fairly large number of related changes and updates throughout 729 : the system: 730 : 731 : Basis: 732 : - Implemented IntInf. 733 : - Made LargeInt a projection of IntInf (by filtering through INTEGER). 734 : mblume 1348 - Added some missing Real64 operations, most notably Real.toLargeInt. 735 : mblume 1347 - Added FixedInt as a synonym for Int32. 736 : 737 : compiler: 738 : * Added support for a built-in intinf type. 739 : - literals 740 : - pattern matching 741 : - conversion shortcuts (Int32.fromLarge o Int.toLarge etc.) 742 : - overloading on literals and operations 743 : 744 : This required adding a primitive type intinf, some additional 745 : primops, and implementations for several non-trivial intinf 746 : operations in Core. (The intinf type is completely abstract 747 : to the compiler; all operations get delegated back to the Core.) 748 : 749 : * Intinf equality is handled by polyequal. However, the compiler 750 : does not print its usual warning in this case (since polyequal 751 : is the right thing to do there). 752 : 753 : * Improved the organization of structure InlineT. 754 : 755 : * A word about conversion primops: 756 : If conversions involving intinf do not cancel out during 757 : mblume 1348 CPS contract, then the compiler must insert calls to Core functions. 758 : mblume 1347 Since all core access must be resolved already during the FLINT 759 : translate phase, it would be too late a the time of CPS contract 760 : mblume 1348 to add new Core calls. For this reason, conversion primops 761 : mblume 1347 for intinf carry two arguments: 1. the numeric argument that 762 : they are supposed to convert, and 2. the Core function that 763 : can help with this conversion if necessary. If CPS contract 764 : mblume 1348 eliminates a primop, then the associated Core function becomes 765 : dead and goes away. Intinf conversion primops that do not get 766 : eliminated by CPS contract get rewritten into calls of their 767 : core functions by a separate, new phase. 768 : mblume 1347 769 : interactive system: 770 : - Control.Print.intinfDepth controls max length of intinf constants 771 : being printed. (Analogous to Control.Print.stringDepth.) 772 : - Cleanup in printutil and pputil: got rid of unused stuff and 773 : duplicates; replaced some of the code with code that makes better 774 : use of library functionality. 775 : 776 : CM: 777 : Bugfix: parse-errors in init group (system/smlnj/init/init.cmi) 778 : are no longer silent. 779 : 780 : CKIT: 781 : Fixed mismatched uses of Int32 and LargeInt. I always decided 782 : in favor of LargeInt -- which is now the same as IntInf. 783 : CKIT-knowledgable people should check whether this is what's 784 : intended and otherwise change things back to using Int32 or 785 : FixedInt. 786 : 787 : Throughout the code: 788 : mblume 1348 Started using IntInf.int literals and built-in operations 789 : mblume 1347 (e.g., comparison with 0) where this seems appropriate. 790 : 791 : 792 : ---------------------------------------------------------------------- 793 : macqueen 1343 Name: Dave MacQueen (dbm@cs.uchicago.edu) 794 : Date: 2003/08/13 11:36:00 CDT 795 : Tag: dbm-20030813-mcz-merge1 796 : Description: 797 : 798 : Merging changes from the mcz-branch development branch into trunk. 799 : These changes involve replacement of the emulated old prettyprinter 800 : interface with direct use of the SML/NJ Lib PP library, and fixing 801 : of a couple of bugs (895, 1186) relating to error messages. A new 802 : prettyprinter for ast datatypes (Elaborator/print/ppast.{sig,sml}) 803 : has been added. 804 : 805 : ---------------------------------------------------------------------- 806 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 807 : mblume 1342 Date: 2003/08/11 15:45:00 CDT 808 : Tag: blume-20030811-windows 809 : Description: 810 : 811 : Version number bumped to 110.42.9. NEW BOOTFILES!!! 812 : 813 : http://smlnj.cs.uchicago.edu/dist/working/110.42.9/ 814 : 815 : This patch restores SML/NJ's ability to run under win32. There are a 816 : number of changes, including fixes for several bugs that had gone 817 : unnoticed until now: 818 : 819 : - uname "CYGWIN_NT*" is recognized as win32 (This is relevant only when 820 : trying to run the win32 version from within cygwin.) 821 : 822 : - There are a number of simple .bat scripts that substitute for their 823 : corresponding Unix shell-scripts. (See below.) 824 : 825 : - The internals of ml-build have been modified slightly. The main 826 : difference is that instead of calling ".link-sml" (or link-sml.bat) 827 : using OS.Process.system, the ML process delegates this task back 828 : to the script. Otherwise problems arise in mixed environments such 829 : as Cygwin where scripts look and work like Unix scripts, but 830 : where OS.Process.system cannot run them. 831 : 832 : - In CM, the srcpath pickler used native pathname syntax -- which 833 : is incorrect in the case of cross-compilation. The new pickle format 834 : is independent of platform-specific naming conventions. 835 : 836 : - Path configuration files (such as lib/pathconfig) can now choose 837 : between native and standard syntax. Placing a line of the form 838 : 839 : standard! 840 : 841 : into the file causes all subsequent paths to be interpreted using 842 : CM standard pathname syntax (= Unix conventions); a line 843 : 844 : native! 845 : 846 : switches back to native style. This was needed so that 847 : path config files can be written portably, see src/system/pathconfig. 848 : 849 : - Runtime system: 850 : 851 : - win32-filesys.c: get_file_time and set_file_time now 852 : access modification time, not creation time. 853 : 854 : - I/O code made aware of new array representation. 855 : 856 : - Bug fixes in X86.prim.masm. 857 : 858 : - src/system/makeml made aware of win32. (For use under cygwin 859 : and other Unix-environments for windows.) 860 : 861 : - In Basis, fixed off-by-one error in win32-io.sml (function vecF) 862 : which caused BinIO.inputAll to fail consistently. 863 : 864 : .bat scripts: 865 : 866 : Windows .bat scripts assume that SMLNJ_HOME is defined. 867 : 868 : - sml.bat, ml-yacc.bat, ml-lex.bat: Driver scripts for standalone 869 : applications (sml, ml-yacc, ml-lex). 870 : - ml-build.bat: analogous to ml-build. 871 : - config\install.bat: Analogous to config/install.sh. This requires 872 : that SMLNJ_HOME is set and that Microsoft Visual C is ready to use. 873 : (nmake etc. must be on the path, and vcvars32 must have been run.) 874 : Moreover, sources for ml-lex and ml-yacc need to exist under src, 875 : and the bootfile hierarchy must have been unpacked under 876 : sml.boot.x86-win32. 877 : The script is very primitive and does a poor job at error checking. 878 : It only installs the base system, ml-lex, and ml-yacc. No other 879 : libraries are being installed (i.e., you get only those that 880 : are part of the compiler.) 881 : - link-sml.bat: analogous to .link-sml, but not currently used 882 : 883 : Unrelated bug fixes: 884 : 885 : - ml-nlffigen now exports structures ST_* corresponding to incomplete 886 : types. 887 : - Added getDevice to PP/src/pp-debug-fn.sml. (Would not compile 888 : otherwise.) 889 : 890 : ---------------------------------------------------------------------- 891 : macqueen 1337 Name: Dave MacQueen (macqueen@cs.uchicago.edu) 892 : Date: 2003/06/17 893 : Tag: macqueen-20030617-bug895 894 : Description: 895 : 896 : Modified compiler/Elaborator/print/pptype.sml to fix bug 895. 897 : Tag will be used for new development branch (mcz-branch) for 898 : use by MacQueen, (Lucasz) Zairek, and (George) Cao at uchicago. 899 : 900 : ---------------------------------------------------------------------- 901 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 902 : mblume 1335 Date: 2003/05/27 16:55:00 CDT 903 : Tag: blume-20030527-polyeq 904 : Description: 905 : 906 : Tried to eliminated most cases of polymorphic equality. 907 : 908 : ---------------------------------------------------------------------- 909 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 910 : mblume 1334 Date: 2003/05/21 17:45:00 CDT 911 : Tag: blume-20030517-complete 912 : Description: 913 : 914 : Two changes: 915 : 916 : 1. Added a flag for controlling whether non-exhaustive bindings will 917 : be treated as errors (default is false). 918 : 2. Cleaned up the *entire* source tree so that CMB.make goes through 919 : without a single non-exhaustive match- or bind warning. 920 : 921 : ---------------------------------------------------------------------- 922 : mblume 1368 Name: Matthias Blume (blume (at) tti - c (dot) org) 923 : mblume 1332 Date: 2003/05/17 10:20:00 CDT 924 : Tag: blume-20030517-absyn 925 : Description: 926 : 927 : 1. Added cases for IF, WHILE, ANDALSO, and ORELSE to Absyn. 928 : 929 : This mainly affects the quality of error messages. However, some 930 : of the code is now more straightforward than before. (Treatment of 931 : the above four constructs in translate.sml is much simpler than 932 : the "macro-expansion" that was going on before. Plus, the mach- 933 : compiler no longer gets invoked just to be able to compile an 934 : if-expression.) 935 : 936 : 2. The ErrorMsg.Error exception is now caught and absorbed by the 937 : interactive loop. 938 : 939 : ---------------------------------------------------------------------- 940 : allenleung 1327 Name: Allen Leung 941 : Date: 2003/05/16 13:05:00 CDT 942 : Tag: leunga-20030516-cygwin-runtime 943 : Description: 944 : 945 : Ported the runtime system to cygwin, which uses the unix 946 : x86-unix bin files. Missing/buggy features: 947 : 948 : o getnetbyname, getnetbyaddr: these functions seem to be missing in 949 : the Cygwin library. 950 : o Ctrl-C handling may be flaky. 951 : o Windows system calls and Windows I/O are not supported. 952 : 953 : A new set of binfiles is located at: 954 : 955 : http://www.dorsai.org/~leunga/boot.x86-unix.tgz 956 : 957 : This is only needed for bootstrapping the cygwin version of smlnj. 958 : Other x86 versions can use the existing binfiles. 959 : 960 : ---------------------------------------------------------------------- 961 : mblume 1317 Name: Matthias Blume 962 : Date: 2003/04/08 15:42:00 CDT 963 : Tag: blume-20030408-listpair 964 : Description: 965 : 966 : 1. Added a target 'mlrisc' to installer. 967 : 968 : 2. Added missing elements to structure ListPair. 969 : 970 : ---------------------------------------------------------------------- 971 : leunga 1296 Name: Allen Leung 972 : Date: 2003/01/07 10:40:00 EST 973 : Tag: leunga-20030107-int-rem 974 : Description: 975 : 976 : Fixed a bug in Int.rem(x,y) where y is a power of 2 on x86. 977 : The arguments to the SUBL instruction were swapped. 978 : 979 : ---------------------------------------------------------------------- 980 : blume 1229 Name: Matthias Blume 981 : blume 1294 Date: 2002/12/12 16:25:00 EST 982 : Tag: blume-20021212-risc-ra 983 : Description: 984 : 985 : Fixed a serious bug in the rewrite code for FP spilling/reloading that 986 : sent the RA into an infinite loop when floating point registers get 987 : spilled. (Because of this bug, e.g., nucleic stopped compiling between 988 : 110.37 and 110.38.) 989 : There was another set of potential problems related to the handling of 990 : MLRISC annotations (but those did not yet cause real problems, apparently). 991 : 992 : ---------------------------------------------------------------------- 993 : Name: Matthias Blume 994 : blume 1291 Date: 2002/12/06 22:40:00 EST 995 : Tag: blume-20021206-cm-fileid 996 : Description: 997 : 998 : Added a call of SrcPath.sync at the beginning of Parse.parse (in CM). 999 : This fixes the problem of CM getting confused by files that suddenly 1000 : change their identity (e.g., by getting unlinked and recreated by some 1001 : text editor such as vi). There might be a better/cheaper/cleaner way 1002 : of doing this, but for now this will have to do. 1003 : 1004 : ---------------------------------------------------------------------- 1005 : Name: Matthias Blume 1006 : blume 1288 Date: 2002/10/28 09:50:00 EST 1007 : Tag: blume-20021028-typecheck 1008 : Description: 1009 : 1010 : Exported structure Typecheck from$smlnj/viscomp/core.cm. 1011 : 1012 : ---------------------------------------------------------------------- 1013 : Name: Matthias Blume 1014 : blume 1282 Date: 2002/10/17 09:10:00 EDT 1015 : blume 1279 Tag: Release_110_42 1016 : Description: 1017 : 1018 : blume 1282 In good old tradition, there has been a slight hiccup so that we have 1019 : to patch 110.42 after the fact. The old release tag has been replaced 1020 : (see below). 1021 : 1022 : The change solves a problem with two competing approaches the 1023 : configuration problem regarding MacOS 10.1 vs. MacOS 10.2 which got in 1024 : each other's way. 1025 : 1026 : This change only affects the runtime system code and the installer script. 1027 : (No new bootfiles.) 1028 : 1029 : ---------------------------------------------------------------------- 1030 : Name: Matthias Blume 1031 : Date: 2002/10/16 12:00:00 EDT 1032 : Tag: Release_110_42_removed 1033 : Description: 1034 : 1035 : blume 1279 New working release. New bootfiles. 1036 : 1037 : ---------------------------------------------------------------------- 1038 : Name: Matthias Blume 1039 : blume 1273 Date: 2002/10/10 13:10:00 EDT 1040 : Tag: blume-20021010-ppc-divs 1041 : Description: 1042 : 1043 : The mltree operator DIVS must be implemented with an overflow check on 1044 : the PPC because the hardware indicates divide-by-zero using "overflow" as 1045 : well. 1046 : 1047 : ---------------------------------------------------------------------- 1048 : Name: Matthias Blume 1049 : blume 1261 Date: 2002/07/23 11:45:00 1050 : Tag: blume-20020723-smlnj-home 1051 : Description: 1052 : 1053 : Sml now senses the SMLNJ_HOME environment variable. If this is set, 1054 : then the bin dir is assumed to be in $SMLNJ_HOME/bin and (unless 1055 : CM_PATHCONFIG is also set), the path configuration file is assumed 1056 : to be in$SMLNJ_HOME/lib/pathconfig. This way one can easily move 1057 : the entire tree to some other place and everything will "just work". 1058 : 1059 : (Companion commands such as ml-build and ml-makedepend also sense this 1060 : variable.) 1061 : 1062 : ---------------------------------------------------------------------- 1063 : Name: Matthias Blume 1064 : blume 1259 Date: 2002/07/12 21:19:00 EDT 1065 : Tag: blume-20020712-liveness 1066 : Description: 1067 : 1068 : Exported two useful "step" functions from liveness module (MLRISC). 1069 : 1070 : ---------------------------------------------------------------------- 1071 : Name: Matthias Blume 1072 : blume 1253 Date: 2002/07/05 16:00 EDT 1073 : Tag: Release_110_41 1074 : Description: 1075 : 1076 : New working release. New bootfiles. 1077 : 1078 : ---------------------------------------------------------------------- 1079 : Name: Matthias Blume 1080 : blume 1250 Date: 2002/07/05 10:25:00 EDT 1081 : Tag: blume-20020705-btimp 1082 : Description: 1083 : 1084 : Exported structure BTImp from $smlnj/viscomp/debugprof.cm so that 1085 : other clients can set up backtracing support. 1086 : 1087 : ---------------------------------------------------------------------- 1088 : Name: Matthias Blume 1089 : blume 1249 Date: 2002/06/25 17:23:00 EDT 1090 : Tag: blume-20020625-fpmax 1091 : Description: 1092 : 1093 : Fixed a bug in translation of INLMAX (and INLMIN) for the floating-point 1094 : case. (The sense of the isNaN test was reversed -- which made min and 1095 : max always return their first argument.) 1096 : 1097 : ---------------------------------------------------------------------- 1098 : Name: Matthias Blume 1099 : blume 1240 Date: 2002/06/11 1100 : Tag: blume-20020611-unixpath 1101 : Description: 1102 : 1103 : Back-ported OS.Path.{from,to}UnixPath from idlbasis-devel branch. 1104 : 1105 : ---------------------------------------------------------------------- 1106 : Name: Matthias Blume 1107 : blume 1238 Date: 2002/06/10 16:35:00 EDT 1108 : Tag: blume-20020610-ieeereal 1109 : Description: 1110 : 1111 : I back-ported my implementation of IEEEReal.fromString from the 1112 : idlbasis-devel branch so that we can test it. 1113 : 1114 : Another small change is that ppDec tries to give more information 1115 : than just "" in the case of functors. However, this code is 1116 : broken in some mysterious way if the functor's body's signature 1117 : has not been declared by ascription but gets inferred from the 1118 : implementation. This needs fixing... 1119 : 1120 : ---------------------------------------------------------------------- 1121 : Name: Matthias Blume 1122 : blume 1229 Date: 2002/05/31 1123 : Tag: blume-20020531-btrace-mode 1124 : Description: 1125 : 1126 : Resurrected SMLofNJ.Internals.BTrace.mode. (It accidentally fell by 1127 : the wayside when I switched over to using Controls everywhere.) 1128 : 1129 : ---------------------------------------------------------------------- 1130 : george 1222 Name: Lal George 1131 : Date: 2002/05/23 12:21:40 EDT 1132 : Tag: george-20020523-visual-labels 1133 : Description: 1134 : 1135 : Labels are now displayed in the graphical output to make 1136 : the fall-through and target blocks obvious. 1137 : 1138 : ---------------------------------------------------------------------- 1139 : blume 1204 Name: Matthias Blume 1140 : blume 1220 Date: 2002/05/22 11:03:00 EDT 1141 : Tag: blume-20020522-shrink 1142 : Description: 1143 : 1144 : John tweaked yesterday's fix for 1131 to handle an out-of-memory 1145 : situation that comes up when allocating huge arrays. 1146 : 1147 : ---------------------------------------------------------------------- 1148 : Name: Matthias Blume 1149 : blume 1215 Date: 2002/05/21 16:00:00 EDT 1150 : Tag: Release_110_40 1151 : Description: 1152 : 1153 : New working release (110.40). New bootfiles. 1154 : 1155 : [Also: John Reppy fixed GC bug 1131.] 1156 : 1157 : ---------------------------------------------------------------------- 1158 : Name: Matthias Blume 1159 : blume 1212 Date: 2002/05/21 12:35:00 EDT 1160 : Tag: blume-20020521-cmdoc 1161 : Description: 1162 : 1163 : CM documentation update. 1164 : 1165 : ---------------------------------------------------------------------- 1166 : Name: Matthias Blume 1167 : blume 1211 Date: 2002/05/21 10:55:00 EDT 1168 : Tag: blume-20020521-misc 1169 : Description: 1170 : 1171 : - John tweaked runtime to be silent on heap export (except when 1172 : GC messages are on). 1173 : - I added a few more things (cross-compiling versions of CMB) to 1174 : config/preloads (as suggestions). 1175 : 1176 : ---------------------------------------------------------------------- 1177 : Name: Matthias Blume 1178 : blume 1208 Date: 2002/05/20 22:25:00 EDT 1179 : Tag: blume-20020520-controls 1180 : Description: 1181 : 1182 : - Added ControlUtil structure to control-lib.cm. 1183 : - Use it throughout. 1184 : - Used Controls facility to define MLRISC controls (as opposed to 1185 : registering MLRISC control ref cells with Controls after the fact) 1186 : - Fixed messed-up controls priorities. 1187 : 1188 : * Removed again all the stuff from config/preloads that one wouldn't 1189 : be able to preload at the time the initial heap image is built. 1190 : (Many libraries, e.g., CML, do not exist yet at this time. The 1191 : only libraries that can be preloaded via config/preloads are those 1192 : that come bundled with the bootfiles.) 1193 : 1194 : ---------------------------------------------------------------------- 1195 : Name: Matthias Blume 1196 : blume 1204 Date: 2002/05/20 10:59:00 EDT 1197 : Tag: blume-20020520-preloads 1198 : Description: 1199 : 1200 : Added a lot of commented-out suggestions for things to be included 1201 : in config/preloads. 1202 : 1203 : ---------------------------------------------------------------------- 1204 : leunga 1203 Name: Allen Leung 1205 : Date: 2002/05/18 14:20:00 EDT 1206 : Tag: leunga-20020518-mdl 1207 : Description: 1208 : 1209 : o Made the mdl tool stuff compile and run again. 1210 : o I've disabled all the stuff that depends on RTL specifications; they 1211 : are all badly broken anyway. 1212 : 1213 : ---------------------------------------------------------------------- 1214 : blume 1201 Name: Matthias Blume 1215 : Date: 2002/05/17 16:49:00 EDT 1216 : Tag: blume-20020517-controls 1217 : Description: 1218 : 1219 : 0. John Reppy made several modifications to the SML/NJ library. 1220 : In particular, there is a shiny new controls-lib.cm. 1221 : 1222 : 1. Pushed new controls interface through compiler so that everything 1223 : compiles again. 1224 : 1225 : 2. Added FormatComb and FORMAT_COMB to the CML version of the 1226 : SML/NJ library (so that CML compiles again). 1227 : 1228 : 3. Modified init scripts because XXX_DEFAULT environment variables 1229 : are no longer with us. (Boot-time initialization is now done 1230 : using the same environment variables that are also used for 1231 : startup-time initialization of controls.) 1232 : 1233 : ---------------------------------------------------------------------- 1234 : george 1192 Name: Lal George 1235 : Date: 2002/05/15 09:20:10 EDT 1236 : Tag: george-20020515-pseudo-op-decls 1237 : Description: 1238 : 1239 : All pseudo-ops emitted before the first segment declaration 1240 : such as TEXT, DATA, and BSS directives are assumed to be global 1241 : declarations and are emitted first in the assembly file. This is 1242 : useful in a number of situations where one has pseudo-ops that are not 1243 : specific to any segment, and also works around the constraint that one 1244 : cannot have client pseudo-ops in the TEXT segment. 1245 : 1246 : Because no segment is associated with these declarations it is 1247 : an error to allocate any space or objects before the first segment 1248 : directive and an exception will be raised. However, we cannot make 1249 : this check for client pseudo-ops. 1250 : 1251 : These top level declarations are a field in the CFG graph_info. 1252 : In theory you can continue to add to this field after the CFG has been 1253 : built -- provided you know what you are doing;-) 1254 : 1255 : ---------------------------------------------------------------------- 1256 : blume 1175 Name: Matthias Blume 1257 : blume 1190 Date: 2002/05/13 16:40:00 EDT 1258 : Tag: blume-20020513-pp-etc 1259 : Description: 1260 : 1261 : A few minor bugfixes: 1262 : 1263 : - Stopgap measure for bug recently reported by Elsa Gunter (ppDec). 1264 : (Bogus printouts for redefined bindings still occur. Compiler 1265 : bug should no longer occur now. We need to redo the prettyprinter 1266 : from scratch.) 1267 : 1268 : - CM pathname printer now also adds escape sequences for ( and ) 1269 : 1270 : - commend and docu fixes for ml-nlffi 1271 : 1272 : ---------------------------------------------------------------------- 1273 : Name: Matthias Blume 1274 : blume 1189 Date: 2002/05/10 16:40:00 EDT 1275 : Tag: blume-20020510-erg-textio 1276 : Description: 1277 : 1278 : Applied the following bugfix provided by Emden Gansner: 1279 : 1280 : Output is corrupted when outputSubstr is used rather than output. 1281 : 1282 : The problem occurs when a substring 1283 : 1284 : ss = (s, dataStart, dataLen) 1285 : 1286 : where dataStart > 0, fills a stream buffer with avail bytes left. 1287 : avail bytes of s, starting at index dataStart, are copied into the 1288 : buffer, the buffer is flushed, and then the remaining dataLen-avail 1289 : bytes of ss are copied into the beginning of the buffer. Instead of 1290 : starting this copy at index dataStart+avail in s, the current code 1291 : starts the copy at index avail. 1292 : 1293 : Fix: 1294 : In text-io-fn.sml, change line 695 from 1295 : val needsFlush = copyVec(v, avail, dataLen-avail, buf, 0) 1296 : to 1297 : val needsFlush = copyVec(v, dataStart+avail, dataLen-avail, buf, 0) 1298 : 1299 : ---------------------------------------------------------------------- 1300 : Name: Matthias Blume 1301 : blume 1186 Date: 2002/04/12 13:55:00 EDT 1302 : Tag: blume-20020412-assyntax 1303 : Description: 1304 : 1305 : 1. Grabbed newer assyntax.h from the XFree86 project. 1306 : 2. Fiddled with how to compile X86.prim.asm without warnings. 1307 : 3. (Very) Minor cleanup in CM. 1308 : 1309 : ---------------------------------------------------------------------- 1310 : Name: Matthias Blume 1311 : blume 1185 Date: 2002/04/01 (no joke!) 17:07:00 EST 1312 : Tag: blume-20020401-x86div 1313 : Description: 1314 : 1315 : Added full support for div/mod/rem/quot on the x86, using the machine 1316 : instruction's two results (without clumsily recomputing the remainder) 1317 : directly where appropriate. 1318 : 1319 : Some more extensive power-of-two support was added to the x86 instruction 1320 : selector (avoiding expensive divs, mods, and muls where they can be 1321 : replaced with cheaper shifts and masks). However, this sort of thing 1322 : ought to be done earlier, e.g., within the CPS optimizer so that 1323 : all architectures benefit from it. 1324 : 1325 : The compiler compiles to a fixed point, but changes might be somewhat 1326 : fragile nevertheless. Please, report any strange things that you might 1327 : see wrt. div/mod/quot/rem... 1328 : 1329 : ---------------------------------------------------------------------- 1330 : Name: Matthias Blume 1331 : blume 1184 Date: 2002/03/29 17:22:00 1332 : Tag: blume-20020329-div 1333 : Description: 1334 : 1335 : Fixed my broken div/mod logic. Unfortunately, this means that the 1336 : inline code for div/mod now has one more comparison than before. 1337 : Fast paths (quotient > 0 or remainder = 0) are not affected, though. 1338 : The problem was with quotient = 0, because that alone does not tell 1339 : us which way the rounding went. One then has to look at whether 1340 : remainder and divisor have the same sign... :( 1341 : 1342 : Anyway, I replaced the bootfiles with fresh ones... 1343 : 1344 : ---------------------------------------------------------------------- 1345 : Name: Matthias Blume 1346 : blume 1183 Date: 2002/03/29 14:10:00 EST 1347 : Tag: blume-20020329-inlprims 1348 : Description: 1349 : 1350 : NEW BOOTFILES!!! Version number bumped to 110.39.3. 1351 : 1352 : Primops have changed. This means that the bin/boot-file formats have 1353 : changed as well. 1354 : 1355 : To make sure that there is no confusion, I made a new version. 1356 : 1357 : 1358 : CHANGES: 1359 : 1360 : * removed REMT from mltree (remainder should never overflow). 1361 : 1362 : * added primops to deal with divisions of all flavors to the frontend 1363 : 1364 : * handled these primops all the way through so they map to their respective 1365 : MLRISC support 1366 : 1367 : * used these primops in the implementation of Int, Int32, Word, Word32 1368 : 1369 : * removed INLDIV, INLMOD, and INLREM as they are no longer necessary 1370 : 1371 : * parameterized INLMIN, INLMAX, and INLABS by a numkind 1372 : 1373 : * translate.sml now deals with all flavors of INL{MIN,MAX,ABS}, including 1374 : floating point 1375 : 1376 : * used INL{MIN,MAX,ABS} in the implementation of Int, Int32, Word, Word32, 1377 : and Real (but Real.abs maps to a separate floating-point-only primop) 1378 : 1379 : 1380 : TODO items: 1381 : 1382 : * Hacked Alpha32 instruction selection, disabling the selection of REMx 1383 : instructions because the machine instruction encoder cannot handle 1384 : them. (Hppa, PPC, and Sparc instruction selection did not handle 1385 : REM in the first place, and REM is supported by the x86 machine coder.) 1386 : 1387 : * Handle DIV and MOD with DIV_TO_NEGINF directly in the x86 instruction 1388 : selection phase. (The two can be streamlined because the hardware 1389 : delivers both quotient and remainder at the same time anyway.) 1390 : 1391 : * Think about what to do with "valOf(Int32.minInt) div ~1" and friends. 1392 : (Currently the behavior is inconsistent both across architectures and 1393 : wrt. the draft Basis spec.) 1394 : 1395 : * Word8 should eventually be handled natively, too. 1396 : 1397 : * There seems to be one serious bug in mltree-gen.sml. It appears, though, 1398 : as if there currently is no execution path that could trigger it in 1399 : SML/NJ. (The assumptions underlying functions arith and promotable do not 1400 : hold for things like multiplication and division.) 1401 : 1402 : ---------------------------------------------------------------------- 1403 : Name: Matthias Blume 1404 : blume 1181 Date: 2002/03/27 16:27:00 EST 1405 : Tag: blume-20020327-mlrisc-divisions 1406 : Description: 1407 : 1408 : Added support for all four division operations (ML's div, mod, quot, 1409 : and rem) to MLRISC. In the course of doing so, I also rationalized 1410 : the naming (no more annoying switch-around of DIV and QUOT), by 1411 : parameterizing the operation by div_rounding_mode (which can be either 1412 : DIV_TO_ZERO or DIV_TO_NEGINF). 1413 : 1414 : The generic MLTreeGen functor takes care of compiling all four 1415 : operations down to only round-to-zero div. 1416 : 1417 : Missing pieces: 1418 : 1419 : * Doing something smarter than relying on MLTreeGen on architectures 1420 : like, e.g., the x86 where hardware division delivers both quotient and 1421 : remainder at the same time. With this, the implementation of the 1422 : round-to-neginf operations could be further streamlined. 1423 : 1424 : * Remove inlining support for div/mod/rem from the frontend and replace it 1425 : with primops that get carried through to the backend. Do this for all 1426 : int and word types. 1427 : 1428 : ---------------------------------------------------------------------- 1429 : Name: Matthias Blume 1430 : blume 1180 Date: 2002/03/25 17:25:00 EST 1431 : Tag: blume-20020325-divmod 1432 : Description: 1433 : 1434 : I improved (hopefully without breaking them) the implementation of Int.div, 1435 : Int.mod, and Int.rem. For this, the code in translate.sml now takes 1436 : advantage of the following observations: 1437 : 1438 : Let q = x quot y r = x rem y 1439 : d = x div y m = x mod y 1440 : 1441 : where "quot" is the round-to-zero version of integer division that 1442 : hardware usually provides. Then we have: 1443 : 1444 : r = x - q * y where neither the * nor the - will overflow 1445 : d = if q >= 0 orelse x = q * y then q else q - 1 1446 : where neither the * nor the - will overflow 1447 : m = if q >= 0 orelse r = 0 then r else r + y 1448 : where the + will not overflow 1449 : 1450 : This results in substantial simplification of the generated code. 1451 : The following table shows the number of CFG nodes and edges generated 1452 : for 1453 : fun f (x, y) = x OPER y 1454 : (* with OPER \in div, mod, quot, rem *) 1455 : 1456 : 1457 : OPER | nodes(old) | edges(old) | nodes(new) | edges(new) 1458 : -------------------------------------------------------- 1459 : div | 24 | 39 | 12 | 16 1460 : mod | 41 | 71 | 12 | 16 1461 : quot | 8 | 10 | 8 | 10 1462 : rem | 10 | 14 | 8 | 10 1463 : 1464 : 1465 : ---------------------------------------------------------------------- 1466 : Name: Matthias Blume 1467 : blume 1179 Date: 2002/03/25 22:06:00 EST 1468 : Tag: blume-20020325-cprotobug 1469 : Description: 1470 : 1471 : Fixed a bug in cproto (c prototype decoder). 1472 : 1473 : ---------------------------------------------------------------------- 1474 : Name: Matthias Blume 1475 : blume 1178 Date: 2002/03/25 16:00:00 EST 1476 : Tag: blume-20020325-raw-primops 1477 : Description: 1478 : 1479 : I did some cleanup to Allen's new primop code and 1480 : replaced yesterday's bootfiles with new ones. 1481 : (But they are stored in the same place.) 1482 : 1483 : ---------------------------------------------------------------------- 1484 : Name: Matthias Blume 1485 : blume 1175 Date: 2002/03/24 22:40:00 EST 1486 : Tag: blume-20020324-bootfiles 1487 : Description: 1488 : 1489 : Made the bootfiles that Allen asked for. 1490 : 1491 : ---------------------------------------------------------------------- 1492 : leunga 1174 Name: Allen Leung 1493 : Date: 2002/03/23 15:50:00 EST 1494 : Tag: leunga-20020323-flint-cps-rcc-primops 1495 : Description: 1496 : 1497 : 1. Changes to FLINT primops: 1498 : 1499 : (* make a call to a C-function; 1500 : * The primop carries C function prototype information and specifies 1501 : * which of its (ML-) arguments are floating point. C prototype 1502 : * information is for use by the backend, ML information is for 1503 : * use by the CPS converter. *) 1504 : | RAW_CCALL of { c_proto: CTypes.c_proto, 1505 : ml_args: ccall_type list, 1506 : ml_res_opt: ccall_type option, 1507 : reentrant : bool 1508 : } option 1509 : (* Allocate uninitialized storage on the heap. 1510 : * The record is meant to hold short-lived C objects, i.e., they 1511 : * are not ML pointers. With the tag, the representation is 1512 : * the same as RECORD with tag tag_raw32 (sz=4), or tag_fblock (sz=8) 1513 : *) 1514 : | RAW_RECORD of {tag:bool,sz:int} 1515 : and ccall_type = CCALL_INT32 | CCALL_REAL64 | CCALL_ML_PTR 1516 : 1517 : 2. These CPS primops are now overloaded: 1518 : 1519 : rawload of {kind:numkind} 1520 : rawstore of {kind:numkind} 1521 : 1522 : The one argument form is: 1523 : 1524 : rawload {kind} address 1525 : 1526 : The two argument form is: 1527 : 1528 : rawload {kind} [ml object, byte-offset] 1529 : 1530 : 3. RAW_CCALL/RCC now takes two extra arguments: 1531 : 1532 : a. The first is whether the C call is reentrant, i.e., whether 1533 : ML state should be saved and restored. 1534 : b. The second argument is a string argument specifying the name of 1535 : library and the C function. 1536 : 1537 : These things are currently not handled in the code generator, yet. 1538 : 1539 : 4. In CProto, 1540 : 1541 : An encoding type of "bool" means "ml object" and is mapped into 1542 : C prototype of PTR. Note that "bool" is different than "string", 1543 : even though "string" is also mapped into PTR, because "bool" 1544 : is assigned an CPS type of BOGt, while "string" is assigned INT32t. 1545 : 1546 : 5. Pickler/unpicker 1547 : 1548 : Changed to handle RAW_RECORD and newest RAW_CCALL 1549 : 1550 : 6. MLRiscGen, 1551 : 1552 : 1. Changed to handle the new rawload/rawstore/rawrecord operators. 1553 : 2. Code for handling C Calls has been moved to a new module CPSCCalls, 1554 : in the file CodeGen/cpscompile/cps-c-calls.sml 1555 : 1556 : 7. Added the conditional move operator 1557 : 1558 : condmove of branch 1559 : 1560 : to cps. Generation of this is still buggy so it is currently 1561 : disabled. 1562 : 1563 : ---------------------------------------------------------------------- 1564 : george 1168 Name: Lal George 1565 : Date: 2002/03/22 14:18:25 EST 1566 : george 1171 Tag: george-20020322-cps-branch-prob 1567 : george 1168 Description: 1568 : 1569 : george 1171 Implemented the Ball-Larus branch prediction-heuristics, and 1570 : george 1168 incorporated graphical viewers for control flow graphs. 1571 : 1572 : george 1171 Ball-Larus Heuristics: 1573 : george 1168 --------------------- 1574 : See the file compiler/CodeGen/cpscompile/cpsBranchProb.sml. 1575 : 1576 : By design it uses the Dempster-Shafer theory for combining 1577 : probabilities. For example, in the function: 1578 : 1579 : fun f(n,acc) = if n = 0 then acc else f(n-1, n*acc) 1580 : 1581 : the ball-larus heuristics predicts that the n=0 is unlikely 1582 : (OH-heuristic), and the 'then' branch is unlikely because of the 1583 : RH-heuristic -- giving the 'then' branch an even lower combined 1584 : george 1171 probability using the Dempster-Shafer theory. 1585 : george 1168 1586 : Finally, John Reppy's loop analysis in MLRISC, further lowers the 1587 : probability of the 'then' branch because of the loop in the else 1588 : branch. 1589 : 1590 : 1591 : Graphical Viewing: 1592 : ------------------ 1593 : I merely plugged in Allen's graphical viewers into the compiler. The 1594 : additional code is not much. At the top level, saying: 1595 : 1596 : Control.MLRISC.getFlag "cfg-graphical-view" := true; 1597 : 1598 : will display the graphical view of the control flow graph just before 1599 : back-patching. daVinci must be in your path for this to work. If 1600 : daVinci is not available, then the default viewer can be changed 1601 : using: 1602 : 1603 : Control.MLRISC.getString "viewer" 1604 : 1605 : which can be set to "dot" or "vcg" for the corresponding viewers. Of 1606 : course, these viewers must be in your path. 1607 : 1608 : The above will display the compilation unit at the level of clusters, 1609 : many of which are small, boring, and un-interesting. Also setting: 1610 : 1611 : Control.MLRISC.getInt "cfg-graphical-view_size" 1612 : 1613 : will display clusters that are larger than the value set by the above. 1614 : 1615 : 1616 : ---------------------------------------------------------------------- 1617 : blume 1159 Name: Matthias Blume 1618 : Date: 2002/03/21 22:20:00 EST 1619 : Tag: blume-20020321-kmp-bugfix 1620 : Description: 1621 : 1622 : Changed the interface to the KMP routine in PreString and fixed 1623 : a minor bug in one place where it was used. 1624 : 1625 : ---------------------------------------------------------------------- 1626 : leunga 1156 Name: Allen Leung 1627 : leunga 1158 Date: 2002/03/21 20:30:00 EST 1628 : Tag: leunga-20020321-cfg 1629 : Description: 1630 : 1631 : Fixed a potential problem in cfg edge splitting. 1632 : 1633 : ---------------------------------------------------------------------- 1634 : Name: Allen Leung 1635 : leunga 1156 Date: 2002/03/21 17:15:00 EST 1636 : Tag: leunga-20020321-x86-fp-cfg 1637 : Description: 1638 : 1639 : 1. Recoded the buggy parts of x86-fp. 1640 : 1641 : a. All the block reordering code has been removed. 1642 : We now depend on the block placement phases to do this work. 1643 : 1644 : b. Critical edge splitting code has been simplified and moved into the 1645 : CFG modules, as where they belong. 1646 : 1647 : Both of these were quite buggy and complex. The code is now much, much 1648 : simpler. 1649 : 1650 : 2. X86 backend. 1651 : 1652 : a. Added instructions for 64-bit support. Instruction selection for 1653 : 64-bit has not been committed, however, since that 1654 : requires changes to MLTREE which haven't been approved by 1655 : Lal and John. 1656 : 1657 : b. Added support for FUCOMI and FUCOMIP when generating code for 1658 : PentiumPro and above. We only generate these instructions in 1659 : the fast-fp mode. 1660 : 1661 : c. Added cases for JP and JNP in X86FreqProps. 1662 : 1663 : 3. CFG 1664 : 1665 : CFG now has a bunch of methods for edge splitting and merging. 1666 : 1667 : 4. Machine description. 1668 : 1669 : John's simplification of MLTREE_BASIS.fcond broke a few machine 1670 : description things: 1671 : 1672 : rtl-build.{sig,sml} and hppa.mdl fixed. 1673 : 1674 : NOTE: the machine description stuff in the repository is still broken. 1675 : Again, I can't put my fixes in because that involves 1676 : changes to MLTREE. 1677 : 1678 : ---------------------------------------------------------------------- 1679 : blume 1145 Name: Matthias Blume 1680 : blume 1155 Date: 2002/03/20 15:55:00 EST 1681 : Tag: blume-20020320-kmp 1682 : Description: 1683 : 1684 : Implemented Knuth-Morris-Pratt string matching in PreString and used 1685 : it for String.isSubstring, Substring.isSubstring, and 1686 : Substring.position. 1687 : 1688 : (Might need some stress-testing. Simple examples worked fine.) 1689 : 1690 : ---------------------------------------------------------------------- 1691 : Name: Matthias Blume 1692 : blume 1152 Date: 2002/03/19 16:37:00 EST 1693 : Tag: blume-20020319-witnesses 1694 : Description: 1695 : 1696 : Added a structure C.W and functions convert/Ptr.convert to ml-nlffi-lib. 1697 : 1698 : This implements a generic mechanism for changing constness qualifiers 1699 : anywhere within big C types without resorting to outright "casts". 1700 : (So far, functions such as C.rw/C.ro or C.Ptr.rw/C.Ptr.ro only let you 1701 : modify the constness at the outermost level.) 1702 : The implementation of "convert" is based on the idea of "witness" 1703 : values -- values that are not used by the operation but whose types 1704 : "testify" to their applicability. On the implementation side, "convert" 1705 : is simply a projection (returning its second curried argument). With 1706 : cross-module inlining, it should not result in any machine code being 1707 : generated. 1708 : 1709 : ---------------------------------------------------------------------- 1710 : Name: Matthias Blume 1711 : blume 1148 Date: 2002/03/15 16:40:00 EST 1712 : Tag: blume-20020315-basis 1713 : Description: 1714 : 1715 : Provided (preliminary?) implementations for 1716 : 1717 : {String,Substring}.{concatWith,isSuffix,isSubstring} 1718 : 1719 : and 1720 : 1721 : Substring.full 1722 : 1723 : Those are in the Basis spec but they were missing in SML/NJ. 1724 : 1725 : ---------------------------------------------------------------------- 1726 : Name: Matthias Blume 1727 : blume 1145 Date: 2002/03/14 21:30:00 EST 1728 : Tag: blume-20020314-controls 1729 : Description: 1730 : 1731 : Controls: 1732 : --------- 1733 : 1734 : 1. Factored out the recently-added Controls : CONTROLS stuff and put 1735 : it into its own library$/controls-lib.cm. The source tree for 1736 : this is under src/smlnj-lib/Controls. 1737 : 1738 : 2. Changed the names of types and functions in this interface, so they 1739 : make a bit more "sense": 1740 : 1741 : module -> registry 1742 : 'a registry -> 'a group 1743 : 1744 : 3. The interface now deals in ref cells only. The getter/setter interface 1745 : is (mostly) gone. 1746 : 1747 : 4. Added a function that lets one register an already-existing ref cell. 1748 : 1749 : 5. Made the corresponding modifications to the rest of the code so that 1750 : everything compiles again. 1751 : 1752 : 6. Changed the implementation of Controls.MLRISC back to something closer 1753 : to the original. In particular, this module (and therefore MLRISC) 1754 : does not depend on Controls. There now is some link-time code in 1755 : int-sys.sml that registers the MLRISC controls with the Controls 1756 : module. 1757 : 1758 : CM: 1759 : --- 1760 : 1761 : * One can now specify the lambda-split aggressiveness in init.cmi. 1762 : 1763 : ---------------------------------------------------------------------- 1764 : leunga 1142 Name: Allen Leung 1765 : Date: 2002/03/13 17:30:00 EST 1766 : Tag: leunga-20020313-x86-fp-unary 1767 : Description: 1768 : 1769 : Bug fix for: 1770 : 1771 : > leunga@weaselbane:~/Yale/tmp/sml-dist{21} bin/sml 1772 : > Standard ML of New Jersey v110.39.1 [FLINT v1.5], March 08, 2002 1773 : > - fun f(x,(y,z)) = Real.~ y; 1774 : > [autoloading] 1775 : > [autoloading done] 1776 : > fchsl (%eax), 184(%esp) 1777 : > Error: MLRisc bug: X86MCEmitter.emitInstr 1778 : > 1779 : > uncaught exception Error 1780 : > raised at: ../MLRISC/control/mlriscErrormsg.sml:16.14-16.19 1781 : 1782 : The problem was that the code generator did not generate any fp registers 1783 : in this case, and the ra didn't know that it needed to run the X86FP phase to 1784 : translate the pseudo fp instruction. This only happened with unary fp 1785 : operators in certain situations. 1786 : 1787 : ---------------------------------------------------------------------- 1788 : blume 1137 Name: Matthias Blume 1789 : blume 1140 Date: 2002/03/13 14:00:00 EST 1790 : Tag: blume-20020313-overload-etc 1791 : Description: 1792 : 1793 : 1. Added _overload as a synonym for overload for backward compatibility. 1794 : (Control.overloadKW must be true for either version to be accepted.) 1795 : 1796 : 2. Fixed bug in install script that caused more things to be installed 1797 : than what was requested in config/targets. 1798 : 1799 : 3. Made CM aware of the (_)overload construct so that autoloading 1800 : works. 1801 : 1802 : ---------------------------------------------------------------------- 1803 : Name: Matthias Blume 1804 : blume 1138 Date: 2002/03/12 22:03:00 EST 1805 : Tag: blume-20020312-url 1806 : Description: 1807 : 1808 : Forgot to update BOOT and srcarchiveurl. 1809 : 1810 : ---------------------------------------------------------------------- 1811 : Name: Matthias Blume 1812 : blume 1137 Date: 2002/03/12 17:30:00 EST 1813 : Tag: blume-20020312-version110392 1814 : Description: 1815 : 1816 : Yet another version number bump (because of small changes to the 1817 : binfile format). Version number is now 110.39.2. NEW BOOTFILES! 1818 : 1819 : Changes: 1820 : 1821 : The new pid generation scheme described a few weeks ago was overly 1822 : complicated. I implemented a new mechanism that is simpler and 1823 : provides a bit more "stability": Once CM has seen a compilation 1824 : unit, it keeps its identity constant (as long as you do not delete 1825 : those crucial CM/GUID/* files). This means that when you change 1826 : blume 1145 an interface, compile, then go back to the old interface, and 1827 : blume 1137 compile again, you arrive at the original pid. 1828 : 1829 : There now also is a mechanism that instructs CM to use the plain 1830 : environment hash as a module's pid (effectively making its GUID 1831 : the empty string). For this, "noguid" must be specified as an 1832 : option to the .sml file in question within its .cm file. 1833 : This is most useful for code that is being generated by tools such 1834 : as ml-nlffigen (because during development programmers tend to 1835 : erase the tool's entire output directory tree including CM's cached 1836 : GUIDs). "noguid" is somewhat dangerous (since it can be used to locally 1837 : revert to the old, broken behavior of SML/NJ, but in specific cases 1838 : where there is no danger of interface confusion, its use is ok 1839 : (I think). 1840 : 1841 : ml-nlffigen by default generates "noguid" annotations. They can be 1842 : turned off by specifying -guid in its command line. 1843 : 1844 : ---------------------------------------------------------------------- 1845 : george 1136 Name: Lal George 1846 : Date: 2002/03/12 12 14:42:36 EST 1847 : Tag: george-20020312-frequency-computation 1848 : Description: 1849 : 1850 : Integrated jump chaining and static block frequency into the 1851 : compiler. More details and numbers later. 1852 : leunga 1025 1853 : george 1003 ---------------------------------------------------------------------- 1854 : george 1133 Name: Lal George 1855 : Date: 2002/03/11 11 22:38:53 EST 1856 : Tag: george-20020311-jump-chain-elim 1857 : Description: 1858 : 1859 : Tested the jump chain elimination on all architectures (except the 1860 : hppa). This is on by default right now and is profitable for the 1861 : alpha and x86, however, it may not be profitable for the sparc and ppc 1862 : when compiling the compiler. 1863 : 1864 : The gc test will typically jump to a label at the end of the cluster, 1865 : where there is another jump to an external cluster containing the actual 1866 : code to invoke gc. This is to allow factoring of common gc invocation 1867 : sequences. That is to say, we generate: 1868 : 1869 : f: 1870 : testgc 1871 : ja L1 % jump if above to L1 1872 : 1873 : L1: 1874 : jmp L2 1875 : 1876 : 1877 : After jump chain elimination the 'ja L1' instructions is converted to 1878 : 'ja L2'. On the sparc and ppc, many of the 'ja L2' instructions may end 1879 : up being implemented in their long form (if L2 is far away) using: 1880 : 1881 : jbe L3 % jump if below or equal to L3 1882 : jmp L2 1883 : L3: 1884 : ... 1885 : 1886 : 1887 : For large compilation units L2 may be far away. 1888 : 1889 : 1890 : ---------------------------------------------------------------------- 1891 : blume 1132 Name: Matthias Blume 1892 : Date: 2002/03/11 13:30:00 EST 1893 : Tag: blume-20020311-mltreeeval 1894 : Description: 1895 : 1896 : A functor parameter was missing. 1897 : 1898 : ---------------------------------------------------------------------- 1899 : leunga 1130 Name: Allen Leung 1900 : leunga 1131 Date: 2002/03/11 10:30:00 EST 1901 : leunga 1142 Tag: leunga-20020311-runtime-string0 1902 : leunga 1131 Description: 1903 : 1904 : The representation of the empty string now points to a 1905 : legal null terminated C string instead of unit. It is now possible 1906 : to convert an ML string into C string with InlineT.CharVector.getData. 1907 : This compiles into one single machine instruction. 1908 : 1909 : ---------------------------------------------------------------------- 1910 : Name: Allen Leung 1911 : leunga 1130 Date: 2002/03/10 23:55:00 EST 1912 : Tag: leunga-20020310-x86-call 1913 : Description: 1914 : 1915 : Added machine generation for CALL instruction (relative displacement mode) 1916 : 1917 : ---------------------------------------------------------------------- 1918 : blume 1128 Name: Matthias Blume 1919 : Date: 2002/03/08 16:05:00 1920 : Tag: blume-20020308-entrypoints 1921 : Description: 1922 : 1923 : Version number bumped to 110.39.1. NEW BOOTFILES! 1924 : 1925 : Entrypoints: non-zero offset into a code object where execution should begin. 1926 : 1927 : - Added the notion of an entrypoint to CodeObj. 1928 : - Added reading/writing of entrypoint info to Binfile. 1929 : - Made runtime system bootloader aware of entrypoints. 1930 : - Use the address of the label of the first function given to mlriscGen 1931 : as the entrypoint. This address is currently always 0, but it will 1932 : not be 0 once we turn on block placement. 1933 : - Removed the linkage cluster code (which was The Other Way(tm) of dealing 1934 : with entry points) from mlriscGen. 1935 : 1936 : ---------------------------------------------------------------------- 1937 : leunga 1127 Name: Allen Leung 1938 : Date: 2002/03/07 20:45:00 EST 1939 : Tag: leunga-20020307-x86-cmov 1940 : Description: 1941 : 1942 : Bug fixes for CMOVcc on x86. 1943 : 1944 : 1. Added machine code generation for CMOVcc 1945 : 2. CMOVcc is now generated in preference over SETcc on PentiumPro or above. 1946 : 3. CMOVcc cannot have an immediate operand as argument. 1947 : 1948 : ---------------------------------------------------------------------- 1949 : blume 1126 Name: Matthias Blume 1950 : Date: 2002/03/07 16:15:00 EST 1951 : Tag: blume-20020307-controls 1952 : Description: 1953 : 1954 : This is a very large but mostly boring patch which makes (almost) 1955 : every tuneable compiler knob (i.e., pretty much everything under 1956 : Control.* plus a few other things) configurable via both the command 1957 : line and environment variables in the style CM did its configuration 1958 : until now. 1959 : 1960 : Try starting sml with '-h' (or, if you are brave, '-H') 1961 : 1962 : To this end, I added a structure Controls : CONTROLS to smlnj-lib.cm which 1963 : implements the underlying generic mechanism. 1964 : 1965 : The interface to some of the existing such facilities has changed somewhat. 1966 : For example, the MLRiscControl module now provides mkFoo instead of getFoo. 1967 : (The getFoo interface is still there for backward-compatibility, but its 1968 : use is deprecated.) 1969 : 1970 : The ml-build script passes -Cxxx=yyy command-line arguments through so 1971 : that one can now twiddle the compiler settings when using this "batch" 1972 : compiler. 1973 : 1974 : TODO items: 1975 : 1976 : We should go through and throw out all controls that are no longer 1977 : connected to anything. Moreover, we should go through and provide 1978 : meaningful (and correct!) documentation strings for those controls 1979 : that still are connected. 1980 : 1981 : Currently, multiple calls to Controls.new are accepted (only the first 1982 : has any effect). Eventually we should make sure that every control 1983 : is being made (via Controls.new) exactly once. Future access can then 1984 : be done using Controls.acc. 1985 : 1986 : Finally, it would probably be a good idea to use the getter-setter 1987 : interface to controls rather than ref cells. For the time being, both 1988 : styles are provided by the Controls module, but getter-setter pairs are 1989 : better if thread-safety is of any concern because they can be wrapped. 1990 : 1991 : ***************************************** 1992 : 1993 : One bug fix: The function blockPlacement in three of the MLRISC 1994 : backpatch files used to be hard-wired to one of two possibilities at 1995 : link time (according to the value of the placementFlag). But (I 1996 : think) it should rather sense the flag every time. 1997 : 1998 : ***************************************** 1999 : 2000 : Other assorted changes (by other people who did not supply a HISTORY entry): 2001 : 2002 : 1. the cross-module inliner now works much better (Monnier) 2003 : 2. representation of weights, frequencies, and probabilities in MLRISC 2004 : changed in preparation of using those for weighted block placement 2005 : (Reppy, George) 2006 : 2007 : ---------------------------------------------------------------------- 2008 : george 1116 Name: Lal George 2009 : george 1124 Date: 2002/03/07 14:44:24 EST 2002 2010 : Tag: george-20020307-weighted-block-placement 2011 : 2012 : Tested the weighted block placement optimization on all architectures 2013 : (except the hppa) using AMPL to generate the block and edge frequencies. 2014 : Changes were required in the machine properties to correctly 2015 : categorize trap instructions. There is an MLRISC flag 2016 : "weighted-block-placement" that can be used to enable weighted block 2017 : placement, but this will be ineffective without block/edge 2018 : frequencies (coming soon). 2019 : 2020 : 2021 : ---------------------------------------------------------------------- 2022 : Name: Lal George 2023 : george 1116 Date: 2002/03/05 17:24:48 EST 2024 : Tag: george-20020305-linkage-cluster 2025 : 2026 : george 1124 In order to support the block placement optimization, a new cluster 2027 : is generated as the very first cluster (called the linkage cluster). 2028 : It contains a single jump to the 'real' entry point for the compilation 2029 : unit. Block placement has no effect on the linkage cluster itself, but 2030 : all the other clusters have full freedom in the manner in which they 2031 : reorder blocks or functions. 2032 : george 1116 2033 : On the x86 the typical linkage code that is generated is: 2034 : ---------------------- 2035 : .align 2 2036 : L0: 2037 : addl L1-L0, 72(%esp) 2038 : george 1124 jmp L1 2039 : george 1116 2040 : 2041 : .align 2 2042 : L1: 2043 : ---------------------- 2044 : 2045 : 72(%esp) is the memory location for the stdlink register. This 2046 : must contain the address of the CPS function being called. In the 2047 : george 1124 above example, it contains the address of L0; before 2048 : george 1116 calling L1 (the real entry point for the compilation unit), it 2049 : must contain the address for L1, and hence 2050 : 2051 : addlL1-L0, 72(%esp) 2052 : 2053 : george 1124 I have tested this on all architectures except the hppa.The increase 2054 : in code size is of course negligible 2055 : george 1116 2056 : ---------------------------------------------------------------------- 2057 : leunga 1115 Name: Allen Leung 2058 : Date: 2002/03/03 13:20:00 EST 2059 : Tag: leunga-20020303-mlrisc-tools 2060 : 2061 : Added #[ ... ] expressions to mlrisc tools 2062 : 2063 : ---------------------------------------------------------------------- 2064 : blume 1096 Name: Matthias Blume 2065 : blume 1098 Date: 2002/02/27 12:29:00 EST 2066 : Tag: blume-20020227-cdebug 2067 : Description: 2068 : 2069 : - made types in structure C and C_Debug to be equal 2070 : - got rid of code duplication (c-int.sml vs. c-int-debug.sml) 2071 : - there no longer is a C_Int_Debug (C_Debug is directly derived from C) 2072 : 2073 : ---------------------------------------------------------------------- 2074 : Name: Matthias Blume 2075 : blume 1096 Date: 2002/02/26 12:00:00 EST 2076 : Tag: blume-20020226-ffi 2077 : Description: 2078 : 2079 : 1. Fixed a minor bug in CM's "noweb" tool: 2080 : If numbering is turned off, then truly don't number (i.e., do not 2081 : supply the -L option to noweb). The previous behavior was to supply 2082 : -L'' -- which caused noweb to use the "default" line numbering scheme. 2083 : Thanks to Chris Richards for pointing this out (and supplying the fix). 2084 : 2085 : 2. Once again, I reworked some aspects of the FFI: 2086 : 2087 : A. The incomplete/complete type business: 2088 : 2089 : - Signatures POINTER_TO_INCOMPLETE_TYPE and accompanying functors are 2090 : gone! 2091 : - ML types representing an incomplete type are now *equal* to 2092 : ML types representing their corresponding complete types (just like 2093 : in C). This is still safe because ml-nlffigen will not generate 2094 : RTTI for incomplete types, nor will it generate functions that 2095 : require access to such RTTI. But when ML code generated from both 2096 : incomplete and complete versions of the C type meet, the ML types 2097 : are trivially interoperable. 2098 : 2099 : NOTE: These changes restore the full generality of the translation 2100 : (which was previously lost when I eliminated functorization)! 2101 : 2102 : B. Enum types: 2103 : 2104 : - Structure C now has a type constructor "enum" that is similar to 2105 : how the "su" constructor works. However, "enum" is not a phantom 2106 : type because each "T enum" has values (and is isomorphic to 2107 : MLRep.Signed.int). 2108 : - There are generic access operations for enum objects (using 2109 : MLRep.Signed.int). 2110 : - ml-nlffigen will generate a structure E_foo for each "enum foo". 2111 : * The structure contains the definition of type "mlrep" (the ML-side 2112 : representation type of the enum). Normally, mlrep is the same 2113 : as "MLRep.Signed.int", but if ml-nlffigen was invoked with "-ec", 2114 : then mlrep will be defined as a datatype -- thus facilitating 2115 : pattern matching on mlrep values. 2116 : ("-ec" will be suppressed if there are duplicate values in an 2117 : enumeration.) 2118 : * Constructors ("-ec") or values (no "-ec") e_xxx of type mlrep 2119 : will be generated for each C enum constant xxx. 2120 : * Conversion functions m2i and i2m convert between mlrep and 2121 : MLRep.Signed.int. (Without "-ec", these functions are identities.) 2122 : * Coversion functions c and ml convert between mlrep and "tag enum". 2123 : * Access functions (get/set) fetch and store mlrep values. 2124 : - By default (unless ml-nlffigen was invoked with "-nocollect"), unnamed 2125 : enumerations are merged into one single enumeration represented by 2126 : structure E_'. 2127 : 2128 : ---------------------------------------------------------------------- 2129 : leunga 1080 Name: Allen Leung 2130 : leunga 1094 Date: 2002/02/25 04:45:00 EST 2131 : Tag: leunga-20020225-cps-spill 2132 : 2133 : This is a new implementation of the CPS spill phase. 2134 : The new phase is in the new file compiler/CodeGen/cpscompile/spill-new.sml 2135 : In case of problems, replace it with the old file spill.sml 2136 : 2137 : The current compiler runs into some serious performance problems when 2138 : constructing a large record. This can happen when we try to compile a 2139 : structure with many items. Even a very simple structure like the following 2140 : makes the compiler slow down. 2141 : 2142 : structure Foo = struct 2143 : val x_1 = 0w1 : Word32.int 2144 : val x_2 = 0w2 : Word32.int 2145 : val x_3 = 0w3 : Word32.int 2146 : ... 2147 : val x_N = 0wN : Word32.int 2148 : end 2149 : 2150 : The following table shows the compile time, from N=1000 to N=4000, 2151 : with the old compiler: 2152 : 2153 : N 2154 : 1000 CPS 100 spill 0.04u 0.00s 0.00g 2155 : MLRISC ra 0.06u 0.00s 0.05g 2156 : (spills = 0 reloads = 0) 2157 : TOTAL 0.63u 0.07s 0.21g 2158 : 2159 : 1100 CPS 100 spill 8.25u 0.32s 0.64g 2160 : MLRISC ra 5.68u 0.59s 3.93g 2161 : (spills = 0 reloads = 0) 2162 : TOTAL 14.71u 0.99s 4.81g 2163 : 2164 : 1500 CPS 100 spill 58.55u 2.34s 1.74g 2165 : MLRISC ra 5.54u 0.65s 3.91g 2166 : (spills = 543 reloads = 1082) 2167 : TOTAL 65.40u 3.13s 6.00g 2168 : 2169 : 2000 CPS 100 spill 126.69u 4.84s 3.08g 2170 : MLRISC ra 0.80u 0.10s 0.55g 2171 : (spills = 42 reloads = 84) 2172 : TOTAL 129.42u 5.10s 4.13g 2173 : 2174 : 3000 CPS 100 spill 675.59u 19.03s 11.64g 2175 : MLRISC ra 2.69u 0.27s 1.38g 2176 : (spills = 62 reloads = 124) 2177 : TOTAL 682.48u 19.61s 13.99g 2178 : 2179 : 4000 CPS 100 spill 2362.82u 56.28s 43.60g 2180 : MLRISC ra 4.96u 0.27s 2.72g 2181 : (spills = 85 reloads = 170) 2182 : TOTAL 2375.26u 57.21s 48.00g 2183 : 2184 : As you can see the old cps spill module suffers from some serious 2185 : leunga 1115 performance problem. But since I cannot decipher the old code fully, 2186 : instead of patching the problems up, I'm reimplementing it 2187 : leunga 1094 with a different algorithm. The new code is more modular, 2188 : smaller when compiled, and substantially faster 2189 : (O(n log n) time and O(n) space). Timing of the new spill module: 2190 : 2191 : 4000 CPS 100 spill 0.02u 0.00s 0.00g 2192 : MLRISC ra 0.25u 0.02s 0.15g 2193 : (spills=1 reloads=3) 2194 : TOTAL 7.74u 0.34s 1.62g 2195 : 2196 : Implementation details: 2197 : 2198 : As far as I can tell, the purpose of the CPS spill module is to make sure the 2199 : number of live variables at any program point (the bandwidth) 2200 : does not exceed a certain limit, which is determined by the 2201 : size of the spill area. 2202 : 2203 : When the bandwidth is too large, we decrease the register pressure by 2204 : packing live variables into spill records. How we achieve this is 2205 : completely different than what we did in the old code. 2206 : 2207 : First, there is something about the MLRiscGen code generator 2208 : that we should be aware of: 2209 : 2210 : o MLRiscGen performs code motion! 2211 : 2212 : In particular, it will move floating point computations and 2213 : address computations involving only the heap pointer to 2214 : their use sites (if there is only a single use). 2215 : What this means is that if we have a CPS record construction 2216 : statement 2217 : 2218 : RECORD(k,vl,w,e) 2219 : 2220 : we should never count the new record address w as live if w 2221 : has only one use (which is often the case). 2222 : 2223 : We should do something similar to floating point, but the transformation 2224 : there is much more complex, so I won't deal with that. 2225 : 2226 : Secondly, there are now two new cps primops at our disposal: 2227 : 2228 : 1. rawrecord of record_kind option 2229 : This pure operator allocates some uninitialized storage from the heap. 2230 : There are two forms: 2231 : 2232 : rawrecord NONE [INT n] allocates a tagless record of length n 2233 : rawrecord (SOME rk) [INT n] allocates a tagged record of length n 2234 : and initializes the tag. 2235 : 2236 : 2. rawupdate of cty 2237 : rawupdate cty (v,i,x) 2238 : Assigns to x to the ith component of record v. 2239 : The storelist is not updated. 2240 : 2241 : We use these new primops for both spilling and increment record construction. 2242 : 2243 : 1. Spilling. 2244 : 2245 : This is implemented with a linear scan algorithm (but generalized 2246 : to trees). The algorithm will create a single spill record at the 2247 : beginning of the cps function and use rawupdate to spill to it, 2248 : and SELECT or SELp to reload from it. So both spills and reloads 2249 : are fine-grain operations. In contrast, in the old algorithm 2250 : "spills" have to be bundled together in records. 2251 : 2252 : Ideally, we should sink the spill record construction to where 2253 : it is needed. We can even split the spill record into multiple ones 2254 : at the places where they are needed. But CPS is not a good 2255 : representation for global code motion, so I'll keep it simple and 2256 : am not attempting this. 2257 : 2258 : 2. Incremental record construction (aka record splitting). 2259 : 2260 : Long records with many component values which are simulatenously live 2261 : (recall that single use record addresses are not considered to 2262 : be live) are constructed with rawrecord and rawupdate. 2263 : We allocate space on the heap with rawrecord first, then gradually 2264 : fill it in with rawupdate. This is the technique suggested to me 2265 : by Matthias. 2266 : 2267 : Some restrictions on when this is applicable: 2268 : 1. It is not a VECTOR record. The code generator currently does not handle 2269 : this case. VECTOR record uses double indirection like arrays. 2270 : 2. All the record component values are defined in the same "basic block" 2271 : as the record constructor. This is to prevent speculative 2272 : record construction. 2273 : 2274 : ---------------------------------------------------------------------- 2275 : Name: Allen Leung 2276 : leunga 1086 Date: 2002/02/22 01:02:00 EST 2277 : Tag: leunga-20020222-mlrisc-tools 2278 : 2279 : Minor bug fixes in the parser and rewriter 2280 : 2281 : ---------------------------------------------------------------------- 2282 : Name: Allen Leung 2283 : leunga 1085 Date: 2002/02/21 20:20:00 EST 2284 : Tag: leunga-20020221-peephole 2285 : 2286 : Regenerated the peephole files. Some contained typos in the specification 2287 : and some didn't compile because of pretty printing bugs in the old version 2288 : of 'nowhere'. 2289 : 2290 : ---------------------------------------------------------------------- 2291 : Name: Allen Leung 2292 : leunga 1079 Date: 2002/02/19 20:20:00 EST 2293 : Tag: leunga-20020219-mlrisc-tools 2294 : Description: 2295 : 2296 : Minor bug fixes to the mlrisc-tools library: 2297 : 2298 : 1. Fixed up parsing colon suffixed keywords 2299 : 2. Added the ability to shut the error messages up 2300 : 3. Reimplemented the pretty printer and fixed up/improved 2301 : the pretty printing of handle and -> types. 2302 : 4. Fixed up generation of literal symbols in the nowhere tool. 2303 : 5. Added some SML keywords to to sml.sty 2304 : 2305 : ---------------------------------------------------------------------- 2306 : Name: Matthias Blume 2307 : blume 1078 Date: 2002/02/19 16:20:00 EST 2308 : Tag: blume-20020219-cmffi 2309 : Description: 2310 : 2311 : A wild mix of changes, some minor, some major: 2312 : 2313 : * All C FFI-related libraries are now anchored under $c: 2314 :$/c.cm --> $c/c.cm 2315 :$/c-int.cm --> $c/internals/c-int.cm 2316 :$/memory.cm --> $c/memory/memory.cm 2317 : 2318 : * "make" tool (in CM) now treats its argument pathname slightly 2319 : differently: 2320 : 1. If the native expansion is an absolute name, then before invoking 2321 : the "make" command on it, CM will apply OS.Path.mkRelative 2322 : (with relativeTo = OS.FileSys.getDir()) to it. 2323 : 2. The argument will be passed through to subsequent phases of CM 2324 : processing without "going native". In particular, if the argument 2325 : was an anchored path, then "make" will not lose track of that anchor. 2326 : 2327 : * Compiler backends now "know" their respective C calling conventions 2328 : instead of having to be told about it by ml-nlffigen. This relieves 2329 : ml-nlffigen from one of its burdens. 2330 : 2331 : * The X86Backend has been split into X86CCallBackend and X86StdCallBackend. 2332 : 2333 : * Export C_DEBUG and C_Debug from$c/c.cm. 2334 : 2335 : * C type encoding in ml-nlffi-lib has been improved to model the conceptual 2336 : subtyping relationship between incomplete pointers and their complete 2337 : counterparts. For this, ('t, 'c) ptr has been changed to 'o ptr -- 2338 : with the convention of instantiating 'o with ('t, 'c) obj whenever 2339 : the pointer target type is complete. In the incomplete case, 'o 2340 : will be instantiated with some "'c iobj" -- a type obtained by 2341 : using one of the functors PointerToIncompleteType or PointerToCompleteType. 2342 : 2343 : Operations that work on both incomplete and complete pointer types are 2344 : typed as taking an 'o ptr while operations that require the target to 2345 : be known are typed as taking some ('t, 'c) obj ptr. 2346 : 2347 : voidptr is now a bit "more concrete", namely "type voidptr = void ptr'" 2348 : where void is an eqtype without any values. This makes it possible 2349 : to work on voidptr values using functions meant to operate on light 2350 : incomplete pointers. 2351 : 2352 : * As a result of the above, signature POINTER_TO_INCOMPLETE_TYPE has 2353 : been vastly simplified. 2354 : 2355 : ---------------------------------------------------------------------- 2356 : Name: Matthias Blume 2357 : blume 1076 Date: 2002/02/19 10:48:00 EST 2358 : Tag: blume-20020219-pqfix 2359 : Description: 2360 : 2361 : Applied Chris Okasaki's bug fix for priority queues. 2362 : 2363 : ---------------------------------------------------------------------- 2364 : Name: Matthias Blume 2365 : blume 1073 Date: 2002/02/15 17:05:00 2366 : blume 1069 Tag: Release_110_39 2367 : Description: 2368 : 2369 : blume 1073 Last-minute retagging is becoming a tradition... :-( 2370 : 2371 : This is the working release 110.39. 2372 : 2373 : ---------------------------------------------------------------------- 2374 : Name: Matthias Blume 2375 : Date: 2002/02/15 16:00:00 EST 2376 : Tag: Release_110_39-orig 2377 : Description: 2378 : 2379 : blume 1069 Working release 110.39. New bootfiles. 2380 : 2381 : blume 1073 (Update: There was a small bug in the installer so it wouldn't work 2382 : with all shells. So I retagged. -Matthias) 2383 : 2384 : blume 1069 ---------------------------------------------------------------------- 2385 : Name: Matthias Blume 2386 : blume 1068 Date: 2002/02/15 14:17:00 EST 2387 : Tag: blume-20020215-showbindings 2388 : Description: 2389 : 2390 : Added EnvRef.listBoundSymbols and CM.State.showBindings. Especially 2391 : the latter can be useful for exploring what bindings are available at 2392 : the interactive prompt. (The first function returns only the list 2393 : of symbols that are really bound, the second prints those but also the 2394 : ones that CM's autoloading mechanism knows about.) 2395 : 2396 : ---------------------------------------------------------------------- 2397 : Name: Matthias Blume 2398 : blume 1067 Date: 2002/02/15 12:08:00 EST 2399 : Tag: blume-20020215-iptrs 2400 : Description: 2401 : 2402 : Two improvements to ml-nlffigen: 2403 : 2404 : 1. Write files only if they do not exist or if their current contents 2405 : do not coincide with what's being written. (That is, avoid messing 2406 : with the time stamps unless absolutely necessary.) 2407 : 2408 : 2. Implement a "repository" mechanism for generated files related 2409 : to "incomplete pointer types". See the README file for details. 2410 : 2411 : ---------------------------------------------------------------------- 2412 : Name: Matthias Blume 2413 : blume 1066 Date: 2002/02/14 11:50:00 EST 2414 : Tag: blume-20020214-quote 2415 : Description: 2416 : 2417 : Added a type 't t_' to tag.sml (in ml-nlffi-lib.cm). This is required 2418 : because of the new and improved tag generation scheme. (Thanks to Allen 2419 : Leung for pointing it out.) 2420 : 2421 : ---------------------------------------------------------------------- 2422 : george 1065 Name: Lal George 2423 : Date: 2002/02/14 09:55:27 EST 2002 2424 : Tag: george-20020214-isabelle-bug 2425 : Description: 2426 : 2427 : Fixed the MLRISC bug sent by Markus Wenzel regarding the compilation 2428 : of Isabelle on the x86. 2429 : 2430 : From Allen: 2431 : ----------- 2432 : I've found the problem: 2433 : 2434 : in ra-core.sml, I use the counter "blocked" to keep track of the 2435 : true number of elements in the freeze queue. When the counter goes 2436 : to zero, I skip examining the queue. But I've messed up the 2437 : bookkeeping in combine(): 2438 : 2439 : else (); 2440 : case !ucol of 2441 : PSEUDO => (if !cntv > 0 then 2442 : (if !cntu > 0 then blocked := !blocked - 1 else (); 2443 : ^^^^^^^^^^^^^^^^^^^^^^^ 2444 : moveu := mergeMoveList(!movev, !moveu) 2445 : ) 2446 : else (); 2447 : 2448 : combine() is called to coalesce two nodes u and v. 2449 : I think I was thinking that if the move counts of u and v are both 2450 : greater than zero then after they are coalesced then one node is 2451 : removed from the freeze queue. Apparently I was thinking that 2452 : both u and v are of low degree, but that's clearly not necessarily true. 2453 : 2454 : 2455 : 02/12/2002: 2456 : Here's the patch. HOL now compiles. 2457 : 2458 : I don't know how this impact on performance (compile 2459 : time or runtime). This bug caused the RA (especially on the x86) 2460 : to go thru the potential spill phase when there are still nodes on the 2461 : freeze queue. 2462 : 2463 : 2464 : 2465 : 2466 : ---------------------------------------------------------------------- 2467 : blume 1058 Name: Matthias Blume 2468 : blume 1064 Date: 2002/02/13 22:40:00 EST 2469 : Tag: blume-20020213-fptr-rtti 2470 : Description: 2471 : 2472 : Fixed a bug in ml-nlffigen that was introduced with one of the previous 2473 : updates. 2474 : 2475 : ---------------------------------------------------------------------- 2476 : Name: Matthias Blume 2477 : blume 1063 Date: 2002/02/13 16:41:00 EST 2478 : Tag: blume-20020213-cmlpq 2479 : Description: 2480 : 2481 : Added new priority queue export symbols (which have just been added to 2482 : smlnj-lib.cm) to CML's version of smlnj-lib.cm. (Otherwise CML would 2483 : not compile and the installer would choke.) 2484 : 2485 : ---------------------------------------------------------------------- 2486 : Name: Matthias Blume 2487 : blume 1062 Date: 2002/02/13 16:15:00 EST 2488 : Tag: blume-20020213-various 2489 : Description: 2490 : 2491 : 1. More tweaks to ml-nlffigen: 2492 : 2493 : - better internal datastructures (resulting in slight speedup) 2494 : - "-match" option requires exact match 2495 : - "localized" gensym counters (untagged structs/unions nested within 2496 : other structs/unions or within typedefs get a fresh counter; their 2497 : tag will be prefixed by a concatenation of their parents' tags) 2498 : - bug fixes (related to calculation of transitive closure of types 2499 : to be included in the output) 2500 : 2501 : 2. Minor Basis updates: 2502 : 2503 : - added implementations for List.collate and Option.app 2504 : 2505 : ---------------------------------------------------------------------- 2506 : Name: Matthias Blume 2507 : blume 1060 Date: 2002/02/11 15:55:00 EST 2508 : Tag: blume-20020211-gensym 2509 : Description: 2510 : 2511 : Added a "-gensym" option to command line of ml-nlffigen. This can be 2512 : used to specify a "stem" -- a string that is inserted in all "gensym'd" 2513 : names (ML structure names that correspond to unnamed C structs, unions, 2514 : and enums), so that separate runs of ml-nlffigen do not clash. 2515 : 2516 : ---------------------------------------------------------------------- 2517 : Name: Matthias Blume 2518 : blume 1059 Date: 2002/02/11 12:05:00 EST 2519 : Tag: blume-20020211-gensml 2520 : Description: 2521 : 2522 : A quick fix for a problem with GenSML (in the pgraph-util library): 2523 : Make generation of toplevel "local" optional. (Strictly speaking, 2524 : signature definitions within "local" are not legal SML.) 2525 : 2526 : Other than that: updates to INSTALL and cm/TODO. 2527 : 2528 : ---------------------------------------------------------------------- 2529 : Name: Matthias Blume 2530 : blume 1058 Date: 2002/02/08 15:00:00 EST 2531 : Tag: blume-20020208-uniquepid 2532 : Description: 2533 : 2534 : 0. Version number has been bumped to 110.38.1. NEW BOOTFILES!!! 2535 : 2536 : 1. The installer (config/install.sh) has gotten smarter: 2537 : 2538 : - Configuration options are a bit easier to specify now 2539 : (in config/targets). 2540 : - Bug in recognizing .tar.bz2 files fixed. 2541 : - Installer automatically resolves dependencies between 2542 : configuration options (e.g., if you ask for eXene, you will 2543 : also get cml -- regardless whether you asked for it or not). 2544 : - Installer can run in "quieter mode" by setting the environment 2545 : variable INSTALL_QUIETLY to "true". "Quieter" does not mean 2546 : "completely silent", though. 2547 : - Build HashCons library as part of smlnj-lib. 2548 : 2549 : 2. A new scheme for assigning persistent identifiers to compilation 2550 : units (and, by extension, to types etc.) has been put into place. 2551 : This fixes a long-standing bug where types and even dynamic values 2552 : can get internally confused, thereby compromising type safety 2553 : (abstraction) and dynamic correctness. See 2554 : 2555 : http://cm.bell-labs.com/cm/cs/who/blume/pid-confusion.tgz 2556 : 2557 : for an example of how things could go wrong until now. 2558 : 2559 : The downside of the new scheme is that pids are not quite as 2560 : persistent as they used to be: CM will generate a fresh pid 2561 : for every compilation unit that it thinks it sees for the first 2562 : time. That means that if you compile starting from a clean, fresh 2563 : source tree at two different times, you end up with different 2564 : binaries. 2565 : 2566 : Cutoff recompilation, however, has not been compromised because 2567 : CM keeps pid information in special caches between runs. 2568 : 2569 : ---------------------------------------------------------------------- 2570 : george 1053 Name: Lal George 2571 : george 1055 Date: 2002/02/07 15:34:13 EST 2002 2572 : Tag: 2573 : Description: 2574 : 2575 : Compilers that generate assembly code may produce global labels 2576 : whose value is resolved at link time. The various peephole optimization 2577 : modules did not take this in account. 2578 : 2579 : TODO. The Labels.addrOf function should really return an option 2580 : type so that clients are forced to deal with this issue, rather 2581 : than an exception being raised. 2582 : 2583 : ---------------------------------------------------------------------- 2584 : Name: Lal George 2585 : george 1053 Date: 2002/02/06 13:55:02 EST 2586 : Tag: george-20020206-ra-breakup 2587 : Description: 2588 : 2589 : 1. A bug fix from Allen. 2590 : 2591 : A typo causes extra fstp %st(0)'s to be generated at compensation 2592 : edges, which might cause stack underflow traps at runtime. This 2593 : occurs in fft where there are extraneous fstps right before the 'into' 2594 : trap instruction (in this case they are harmless since none of the 2595 : integers overflow.) 2596 : 2597 : george 1054 2. Pulled out various utility modules that were embedded in the modules 2598 : george 1053 of the register allocator. I need these modules for other purposes, but 2599 : george 1054 they are not complete enough to put into a library (just yet). 2600 : george 1053 ---------------------------------------------------------------------- 2601 : blume 1049 Name: Matthias Blume 2602 : Date: 2002/01/31 16:05:00 EST 2603 : Tag: blume-20020131-sparc-ccalls 2604 : Description: 2605 : 2606 : 1. C-calls on Sparc needlessly allocated a huge chunk (96 bytes) 2607 : of extra stack space by mistake. Fixed. 2608 : 2609 : 2. Bug in logic of handling of command-line options in ml-nlffigen fixed. 2610 : 2611 : ---------------------------------------------------------------------- 2612 : leunga 1048 Name: Allen Leung 2613 : Date: 2002/01/30 2614 : Tag: leunga-20020130-nowhere-bug-fix 2615 : Description: 2616 : 2617 : MLRISC bug fixes: 2618 : 1. Fixed a bindings computation bug in the 'nowhere' program generator tool. 2619 : 2. MachineInt.fromString was negating its value. 2620 : 2621 : ---------------------------------------------------------------------- 2622 : blume 1039 Name: Matthias Blume 2623 : blume 1047 Date: 2002/01/29 2624 : Tag: blume-20020129-INSTALL 2625 : Description: 2626 : 2627 : - Added somewhat detailed installation instructions (file INSTALL). 2628 : - Fixed curl-detection bug in config/install.sh. 2629 : - It is now possible to select the URL getter using the URLGETTER 2630 : environment variable: 2631 : 2632 : not set / "unknown" --> automatic detection (script tries wget, 2633 : curl, and lynx) 2634 : "wget" / "curl" / "lynx" --> use the specified program (script "knows" 2635 : how to properly invoke them) 2636 : other --> use $URLGETTER directly, it must take 2637 : precisely two command-line arguments 2638 : (source URL and destination file name) 2639 : 2640 : ---------------------------------------------------------------------- 2641 : Name: Matthias Blume 2642 : blume 1044 Date: 2002/01/28 2643 : blume 1045 Tag: blume-20020128-sparc-ccalls 2644 : Description: 2645 : 2646 : - Fixed problem with calculation of "used" registers in sparc-c-calls. 2647 : - Make use of the allocParam argument in sparc-c-calls. 2648 : 2649 : ---------------------------------------------------------------------- 2650 : Name: Matthias Blume 2651 : Date: 2002/01/28 2652 : blume 1044 Tag: blume-20020128-allocParam 2653 : Description: 2654 : 2655 : John Reppy: Changes c-calls API to accept client-callback for 2656 : allocating extra stack space. 2657 : me: Corresponding changes to mlriscGen (using a dummy argument that 2658 : does not change the current behavior). 2659 : 2660 : ---------------------------------------------------------------------- 2661 : Name: Matthias Blume 2662 : blume 1040 Date: 2002/01/28 12:00:00 2663 : Tag: Release_110_38 2664 : Description: 2665 : 2666 : This time for real!!! 2667 : 2668 : ---------------------------------------------------------------------- 2669 : Name: Matthias Blume 2670 : blume 1039 Date: 2002/01/28 10:56:00 EST 2671 : Tag: blume-20020128-retraction 2672 : Description: 2673 : 2674 : 0. Retracted earlier 110.38. (The Release_110_38 tag has been replaced 2675 : with blume-Release_110_38-retracted.) 2676 : 2677 : 1. Fixed a problem with incorrect rounding modes in real64.sml. 2678 : (Thanks to Andrew Mccreight .) 2679 : 2680 : 2. A bug in ml-nlffigen related to the handling of unnamed structs, unions, 2681 : and enums fixed. The naming of corresponding ML identifiers should 2682 : now be consistent again. 2683 : 2684 : ---------------------------------------------------------------------- 2685 : leunga 1038 Name: Allen Leung 2686 : Date: 2002/01/27 2687 : Tag: leunga-20020127-nowhere 2688 : Description: 2689 : 2690 : Added a target called nowhere in the configuration scripts. 2691 : Enabling this will build the MLRISC 'nowhere' tool (for translating 2692 : programs with where-clauses into legal SML code) during installation. 2693 : 2694 : ---------------------------------------------------------------------- 2695 : blume 1036 Name: Matthias Blume 2696 : leunga 1038 Date: 2002/01/25 21:27:00 EST 2697 : blume 1039 Tag: blume-Release_110_38-retracted 2698 : blume 1037 Description: 2699 : 2700 : Call it a (working) release! Version is 110.38. Bootfiles are ready. 2701 : 2702 : README will be added later. 2703 : 2704 : blume 1039 !!! NOTE: Re-tagged as blume-Release_110_38-retracted. Original tag 2705 : (Release_110_38) removed. Reason: Last-minute bug fixes. 2706 : 2707 : blume 1037 ---------------------------------------------------------------------- 2708 : Name: Matthias Blume 2709 : blume 1036 Date: 2002/01/25 2710 : Tag: blume-20020125-ffi 2711 : Description: 2712 : 2713 : A large number of tweaks and improvements to ml-nlffi-lib and 2714 : ml-nlffigen: 2715 : 2716 : - ML represenation types have been streamlined 2717 : - getter and setter functions work with concrete values, not abstract 2718 : ones where possible 2719 : - ml-nlffigen command line more flexible (see README file there) 2720 : - some bugs have been fixed (hopefully) 2721 : 2722 : ---------------------------------------------------------------------- 2723 : george 1034 Name: Lal George 2724 : Date: 2002/01/24 2725 : Tag: george-20020124-risc-ra-interface 2726 : Description: 2727 : 2728 : There is a dramatic simplification in the interface to the 2729 : register allocator for RISC architectures as a result of making 2730 : parallel copy instructions explicit. 2731 : 2732 : ---------------------------------------------------------------------- 2733 : blume 1028 Name: Matthias Blume 2734 : blume 1032 Date: 2002/01/22 2735 : Tag: blume-20020122-x86-ccalls 2736 : Description: 2737 : 2738 : Bug fix for c-calls on x86 (having to do with how char- and 2739 : short-arguments are being handled). 2740 : 2741 : ---------------------------------------------------------------------- 2742 : Name: Matthias Blume 2743 : blume 1031 Date: 2002/01/21 2744 : Tag: blume-20020121-ff 2745 : Description: 2746 : 2747 : Another day of fiddling with the FFI... 2748 : 2749 : 1. Bug fix/workaround: CKIT does not complain about negative array 2750 : dimensions, so ml-nlffigen has to guard itself against this possibility. 2751 : (Otherwise a negative dimension would send it into an infinite loop.) 2752 : 2753 : 2. Some of the abstract types (light objects, light pointers, most "base" 2754 : types) in structure C are now eqtypes. 2755 : 2756 : 3. Added constructors and test functions for NULL function pointers. 2757 : 2758 : ---------------------------------------------------------------------- 2759 : Name: Matthias Blume 2760 : blume 1028 Date: 2002/01/18 2761 : blume 1030 Tag: blume-20020118-ready-for-new-release 2762 : Description: 2763 : 2764 : Made config/srcarchiveurl point to a new place. (Will provide boot 2765 : files shortly.) 2766 : 2767 : Maybe we christen this to be 110.38? 2768 : 2769 : ---------------------------------------------------------------------- 2770 : Name: Matthias Blume 2771 : Date: 2002/01/18 2772 : blume 1029 Tag: blume-20020118-more-ffifiddle 2773 : Description: 2774 : 2775 : Today's FFI fiddling: 2776 : 2777 : - Provided a structure CGetSet with "convenient" versions of C.Get.* and 2778 : C.Set.* that use concrete (MLRep.*) arguments and results instead 2779 : of abstract ones. 2780 : 2781 : - Provided word-style bit operations etc. for "int" representation 2782 : types in MLRep.SBitops where ranges over Char, Int, Short, 2783 : and Long. 2784 : 2785 : ---------------------------------------------------------------------- 2786 : Name: Matthias Blume 2787 : Date: 2002/01/18 2788 : blume 1028 Tag: blume-20020118-use-x86-fp 2789 : Description: 2790 : 2791 : Now that x86-fast-fp seems to be working, I turned it back on again 2792 : by default. (Seems to work fine now, even with the FFI.) 2793 : 2794 : Other than that, I added some documentation about the FFI to 2795 : src/ml-nlffigen/README and updated the FFI test examples in 2796 : src/ml-nlffi-lib/Tests/*. 2797 : 2798 : ---------------------------------------------------------------------- 2799 : leunga 1025 Name: Allen Leung 2800 : Date: 2002/01/17 2801 : Tag: leunga-20020117-x86-fast-fp-call 2802 : Description: 2803 : 2804 : 1. Fixed a problem with handling return fp values when x86's fast fp 2805 : mode is turned on. 2806 : 2807 : 2. Minor pretty printing fix for cellset. Print %st(0) as %st(0) instead 2808 : of %f32. 2809 : 2810 : 3. Added a constructor INT32lit to the ast of MLRISC tools. 2811 : 2812 : ---------------------------------------------------------------------- 2813 : blume 1021 Name: Matthias Blume 2814 : Date: 2002/01/16 2815 : Tag: blume-20020116-ffifiddle 2816 : Description: 2817 : 2818 : More fiddling with the FFI interface: 2819 : 2820 : - Make constness 'c instead of rw wherever possible. This eliminates 2821 : the need for certain explicit coercions. (However, due to ML's 2822 : value polymorphism, there will still be many cases where explicit 2823 : coercions are necessary. Phantom types are not the whole answer 2824 : to modeling a subtyping relationship in ML.) 2825 : 2826 : - ro/rw coersions for pointers added. (Avoids the detour through */&.) 2827 : 2828 : - "printf" test example added to src/ml-nlffi-lib/Tests. (Demonstrates 2829 : clumsy workaround for varargs problem.) 2830 : 2831 : ---------------------------------------------------------------------- 2832 : george 1016 Name: Lal George 2833 : Date: 2002/01/15 2834 : Tag: 2835 : Description: 2836 : 2837 : 1. Since COPY instructions are no longer native to the architecture, 2838 : a generic functor can be used to implement the expandCopies function. 2839 : 2840 : 2. Allowed EXPORT and IMPORT pseudo-op declarations to appear inside a 2841 : TEXT segment. 2842 : 2843 : ---------------------------------------------------------------------- 2844 : blume 1011 Name: Matthias Blume 2845 : blume 1015 Date: 2002/01/15 2846 : Tag: blume-20020115-ffiupdates 2847 : Description: 2848 : 2849 : 1. Fix for bug resulting in single-precision float values being returned 2850 : incorrectly from FFI calls. 2851 : 2852 : 2. Small modifications to C FFI API: 2853 : 2854 : - memory-allocation routines return straight objects (no options) 2855 : and raise an exception in out-of-memory situations 2856 : - unsafe extensions to cast between function pointers and pointers 2857 : from/to ints 2858 : - added structure C_Debug as an alternative to structure C where 2859 : pointer-dereferencing (|*| and |*!) always check for null-pointers 2860 : - added open_lib' to DynLinkage; open_lib' works like open_lib 2861 : but also takes a (possibly empty) list of existing library handles 2862 : that the current library depends on 2863 : 2864 : ---------------------------------------------------------------------- 2865 : Name: Matthias Blume 2866 : blume 1011 Date: 2002/01/10 2867 : Tag: blume-20020110-newffigen 2868 : Description: 2869 : 2870 : 1. Updates to portable graph code. 2871 : 2872 : 2. Major update to ml-nlffigen and ml-nlffi-lib. Things are much 2873 : more scalable now so that even huge interfaces such as the one 2874 : for GTK compile in finite time and space. :-) 2875 : See src/ml-nlffigen/README for details on what's new. 2876 : 2877 : ---------------------------------------------------------------------- 2878 : george 1003 Name: Lal George 2879 : george 1009 Date: 2001/01/09 14:31:35 EST 2002 2880 : Tag: george-20011206-rm-native-copy 2881 : Description: 2882 : 2883 : Removed the native COPY and FCOPY instructions 2884 : from all the architectures and replaced it with the 2885 : explicit COPY instruction from the previous commit. 2886 : 2887 : It is now possible to simplify many of the optimizations 2888 : modules that manipulate copies. This has not been 2889 : done in this change. 2890 : 2891 : ---------------------------------------------------------------------- 2892 : Name: Lal George 2893 : george 1003 Date: 2001/12/06 16:50:13 EST 2001 2894 : Tag: george-20011206-mlrisc-instruction 2895 : Description: 2896 : george 824 2897 : george 1003 Changed the representation of instructions from being fully abstract 2898 : to being partially concrete. That is to say: 2899 : 2900 : from 2901 : type instruction 2902 : 2903 : to 2904 : type instr (* machine instruction *) 2905 : 2906 : datatype instruction = 2907 : LIVE of {regs: C.cellset, spilled: C.cellset} 2908 : | KILL of {regs: C.cellset, spilled: C.cellset} 2909 : | COPYXXX of {k: CB.cellkind, dst: CB.cell list, src: CB.cell list} 2910 : | ANNOTATION of {i: instruction, a: Annotations.annotation} 2911 : | INSTR of instr 2912 : 2913 : This makes the handling of certain special instructions that appear on 2914 : all architectures easier and uniform. 2915 : 2916 : LIVE and KILL say that a list of registers are live or killed at the 2917 : program point where they appear. No spill code is generated when an 2918 : element of the 'regs' field is spilled, but the register is moved to 2919 : the 'spilled' (which is present, more for debugging than anything else). 2920 : 2921 : LIVE replaces the (now deprecated) DEFFREG instruction on the alpha. 2922 : We used to generate: 2923 : 2924 : DEFFREG f1 2925 : f1 := f2 + f3 2926 : trapb 2927 : 2928 : but now generate: 2929 : 2930 : f1 := f2 + f3 2931 : trapb 2932 : LIVE {regs=[f1,f2,f3], spilled=[]} 2933 : 2934 : Furthermore, the DEFFREG (hack) required that all floating point instruction 2935 : use all registers mentioned in the instruction. Therefore f1 := f2 + f3, 2936 : defines f1 and uses [f1,f2,f3]! This hack is no longer required resulting 2937 : in a cleaner alpha implementation. (Hopefully, intel will not get rid of 2938 : this architecture). 2939 : 2940 : COPYXXX is intended to replace the parallel COPY and FCOPY available on 2941 : all the architectures. This will result in further simplification of the 2942 : register allocator that must be aware of them for coalescing purposes, and 2943 : will also simplify certain aspects of the machine description that provides 2944 : callbacks related to parallel copies. 2945 : 2946 : ANNOTATION should be obvious, and now INSTR represents the honest to God 2947 : machine instruction set! 2948 : 2949 : The /instructions/Instr.sml files define certain utility 2950 : functions for making porting easier -- essentially converting upper case 2951 : to lower case. All machine instructions (of type instr) are in upper case, 2952 : and the lower case form generates an MLRISC instruction. For example on 2953 : the alpha we have: 2954 : 2955 : datatype instr = 2956 : LDA of {r:cell, b:cell, d:operand} 2957 : | ... 2958 : 2959 : val lda : {r:cell, b:cell, d:operand} -> instruction 2960 : ... 2961 : 2962 : where lda is just (INSTR o LDA), etc. 2963 : 2964 : leunga 815 ---------------------------------------------------------------------- 2965 : blume 986 Name: Matthias Blume 2966 : blume 993 Date: 2001/11/22 21:40:00 EST 2967 : Tag: Release_110_37 2968 : Description: 2969 : 2970 : Release 110.37. This time for real. 2971 : 2972 : ---------------------------------------------------------------------- 2973 : Name: Matthias Blume 2974 : blume 988 Date: 2001/11/21 16:35:00 EST 2975 : Tag: blume-20011121-foot-in-mouth 2976 : Description: 2977 : 2978 : Removed the "Release_110_37" tag because of a serious bug. 2979 : This will be re-tagged once the bug is fixed. 2980 : 2981 : ---------------------------------------------------------------------- 2982 : Name: Matthias Blume 2983 : blume 987 Date: 2001/11/21 16:14:00 EST 2984 : Tag: blume-20011121-forgottenfile 2985 : Description: 2986 : 2987 : Forgot to add a file. (Just a .tex-file -- part of 2988 : the CM manual source.) 2989 : 2990 : ---------------------------------------------------------------------- 2991 : Name: Matthias Blume 2992 : blume 986 Date: 2001/11/21 16:10:00 EST 2993 : blume 988 Tag: blume-20011121-invalid_110_37 2994 : blume 986 Description: 2995 : 2996 : blume 988 Note: I removed the original tag "Release_110_37" from this commit 2997 : because we found a serious bug in all non-x86 backends. 2998 : - Matthias 2999 : 3000 : blume 986 1. Modifications to the SML/NJ code generator and to the runtime system 3001 : so that code object name strings are directly inserted into code 3002 : objects at code generation time. The only business the runtime system 3003 : has with this is now to read the name strings on occasions. 3004 : (The encoding of the name string has also changed somewhat.) 3005 : 3006 : 2. CM now implements a simple "set calculus" for specifying export lists. 3007 : In particular, it is now possible to refer to the export lists of 3008 : other libraries/groups/sources and form unions as well as differences. 3009 : See the latest CM manual for details. 3010 : 3011 : 3. An separate notion of "proxy" libraries has again be eliminated from 3012 : CM's model. (Proxy libraries are now simply a special case of using 3013 : the export list calculus.) 3014 : 3015 : 4. Some of the existing libraries now take advantage of the new set 3016 : calculus. 3017 : (Notice that not all libraries have been converted because some 3018 : of the existing .cm-files are supposed to be backward compatible 3019 : with 110.0.x.) 3020 : 3021 : 5. Some cleanup in stand-alone programs. (Don't use "exnMessage" -- use 3022 : "General.exnMessage"! The former relies on a certain hook to be 3023 : initialized, and that often does not happen in the stand-alone case.) 3024 : 3025 : ---------------------------------------------------------------------- 3026 : george 984 Name: Lal George 3027 : Date: 2001/11/21 13:56:18 EST 3028 : Tag: george-2001121-pseudo-ops 3029 : Description: 3030 : 3031 : Implemented a complete redesign of MLRISC pseudo-ops. Now there 3032 : ought to never be any question of incompatabilities with 3033 : pseudo-op syntax expected by host assemblers. 3034 : 3035 : For now, only modules supporting GAS syntax are implemented 3036 : but more should follow, such as MASM, and vendor assembler 3037 : syntax, e.g. IBM as, Sun as, etc. 3038 : 3039 : ---------------------------------------------------------------------- 3040 : blume 977 Name: Matthias Blume 3041 : Date: 2001/11/14 11:52:00 EST 3042 : Tag: blume-20011114-srcname 3043 : Description: 3044 : 3045 : 1. Routed the name of the current source file to mlriscgen where it 3046 : should be directly emitted into the code object. (This last part 3047 : is yet to be done.) 3048 : 3049 : 2. Some cleanup of the pgraph code to make it match the proposal that 3050 : I put out the other day. (The proposal notwithstanding, things are 3051 : still in flux here.) 3052 : 3053 : ---------------------------------------------------------------------- 3054 : george 976 Name: Lal George 3055 : Date: 2001/11/14 09:44:04 EST 3056 : Tag: 3057 : Description: 3058 : 3059 : Fix for a backpatching bug reported by Allen. 3060 : 3061 : Because the boundary between short and long span-dependent 3062 : instructions is +/- 128, there are an astounding number of 3063 : span-dependent instructions whose size is over estimated. 3064 : 3065 : Allen came up with the idea of letting the size of span 3066 : dependent instructions be non-monotonic, for a maxIter 3067 : number of times, after which the size must be monotonically 3068 : increasing. 3069 : 3070 : This table shows the number of span-dependent instructions 3071 : whose size was over-estimated as a function of maxIter, for the 3072 : file Parse/parse/ml.grm.sml: 3073 : 3074 : maxIter # of instructions: 3075 : 10 687 3076 : 20 438 3077 : 30 198 3078 : 40 0 3079 : 3080 : In compiling the compiler, there is no significant difference in 3081 : compilation speed between maxIter=10 and maxIter=40. Actually, 3082 : my measurements showed that maxIter=40 was a tad faster than 3083 : maxIter=10! Also 96% of the files in the compiler reach a fix 3084 : point within 13 iterations, so fixing maxIter at 40, while high, 3085 : is okay. 3086 : 3087 : ---------------------------------------------------------------------- 3088 : blume 975 Name: Matthias Blume 3089 : Date: 2001/10/31 15:25:00 EST 3090 : Tag: blume-20011031-pgraph 3091 : Description: 3092 : 3093 : CKIT: 3094 : * Changed the "Function" constructor of type Ast.ctype to carry optional 3095 : argument identifiers. 3096 : * Changed the return type of TypeUtil.getFunction accordingly. 3097 : * Type equality ignores the argument names. 3098 : * TypeUtil.composite tries to preserve argument names but gives up quickly 3099 : if there is a mismatch. 3100 : 3101 : installation script: 3102 : * attempts to use "curl" if available (unless "wget" is available as well) 3103 : 3104 : CM: 3105 : * has an experimental implementation of "portable graphs" which I will 3106 : soon propose as an implementation-independent library format 3107 : * there are also new libraries$/pgraph.cm and $/pgraph-util.cm 3108 : 3109 : NLFFI-LIB: 3110 : * some cleanup (all cosmetic) 3111 : 3112 : NLFFIGEN: 3113 : * temporarily disabled the mechanism that suppresses ML output for 3114 : C definitions whose identifiers start with an underscore character 3115 : * generate val bindings for enum constants 3116 : * user can request that only one style (light or heavy) is being used; 3117 : default is to use both (command-line arguments: -heavy and -light) 3118 : * fixed bug in handling of function types involving incomplete pointers 3119 : * generate ML entry points that take record arguments (i.e., using 3120 : named arguments) for C functions that have a prototype with named 3121 : arguments 3122 : (see changes to CKIT) 3123 : 3124 : ---------------------------------------------------------------------- 3125 : leunga 972 Name: Allen Leung 3126 : Date: 2001/10/27 20:34:00 EDT 3127 : Tag: leunga-20011027-x86-fast-fp-call 3128 : Description: 3129 : 3130 : Fixed the bug described in blume-20010920-slowfp. 3131 : 3132 : The fix involves 3133 : 1. generating FCOPYs in FSTP in ia32-svid 3134 : 2. marking a CALL with the appropriate annotation 3135 : 3136 : ---------------------------------------------------------------------- 3137 : blume 961 Name: Matthias Blume 3138 : Date: 2001/10/16 11:32:00 EDT 3139 : Tag: blume-20011016-netbsd 3140 : Description: 3141 : 3142 : Underscore patch from Chris Richards (fixing problem with compiling 3143 : runtime system under recent NetBSD). 3144 : 3145 : ---------------------------------------------------------------------- 3146 : george 959 Name: Allen Leung 3147 : Date: 2001/10/12 17:18:32 EDT 2001 3148 : Tag: leung-20011012-x86-printflowgraph 3149 : Description: 3150 : 3151 : X86RA now uses a valid (instead of dummy) PrintFlowgraph module. 3152 : 3153 : ---------------------------------------------------------------------- 3154 : george 952 Name: Lal George 3155 : george 958 Date: 2001/10/11 23:51:34 EDT 3156 : Tag: george-20011011-too-many-instrs 3157 : Description: 3158 : 3159 : The representation of a program point never expected to see more 3160 : than 65536 instructions in a basic block! 3161 : 3162 : ---------------------------------------------------------------------- 3163 : Name: Lal George 3164 : george 952 Date: 2001/10/09 09:41:37 EDT 3165 : Tag: george-20011008-mlrisc-labels 3166 : Description: 3167 : 3168 : Changed the machine description files to support printing of 3169 : local and global labels in assembly code, based on host assembler 3170 : conventions. 3171 : 3172 : ---------------------------------------------------------------------- 3173 : blume 916 Name: Matthias Blume 3174 : blume 939 Date: 2001/09/25 15:25:00 EDT 3175 : Tag: blume-20010925-exninfo 3176 : Description: 3177 : 3178 : I provided a non-hook implementation of exnName (at the toplevel) and 3179 : made the "dummy" implementation of exnMessage (at the toplevel) more 3180 : useful: if nothing gets "hooked in", then at least you are going to 3181 : see the exception name and a message indicating why you don't see more. 3182 : 3183 : [For the time being, programs that need exnMessage and want to use 3184 : ml-build should either use General.exnMessage (strongly recommended) or 3185 : refer to structure General at some other point so that CM sees a 3186 : static dependency.] 3187 : 3188 : [Similar remarks go for "print" and "use": If you want to use their 3189 : functionality in stand-alone programs generated by ml-build, then use 3190 : TextIO.output and Backend.Interact.useFile (from$smlnj/compiler.cm).] 3191 : 3192 : ---------------------------------------------------------------------- 3193 : Name: Matthias Blume 3194 : blume 938 Date: 2001/09/20 17:28:00 EDT 3195 : Tag: blume-20010920-slowfp 3196 : Description: 3197 : 3198 : Allen says that x86-fast-fp is not safe yet, so I turned it off again... 3199 : 3200 : ---------------------------------------------------------------------- 3201 : Name: Matthias Blume 3202 : blume 937 Date: 2001/09/20 17:20:00 EDT 3203 : Tag: blume-20010920-canonicalpaths 3204 : Description: 3205 : 3206 : 0. Updated the BOOT file (something that I forgot to do earlier). 3207 : 3208 : 1. Small internal change to CM so that it avoids "/../" in filenames 3209 : as much as possible (but only where it is safe). 3210 : 3211 : 2. Changed config/_run-sml (resulting in a changed bin/.run-sml) so 3212 : that arguments that contain delimiters are passed through correctly. 3213 : This change also means that all "special" arguments of the form 3214 : @SMLxxx... must come first. 3215 : 3216 : 3. Changed install script to put relative anchor names for tool commands 3217 : into pathconfig. 3218 : 3219 : ---------------------------------------------------------------------- 3220 : Name: Matthias Blume 3221 : blume 932 Date: 2001/09/18 15:35:00 EDT 3222 : Tag: blume-20010918-readme11036 3223 : Description: 3224 : 3225 : Added README files. 3226 : 3227 : ---------------------------------------------------------------------- 3228 : Name: Matthias Blume 3229 : blume 929 Date: 2001/09/18 11:45:00 EDT 3230 : Tag: Release_110_36 (retag) 3231 : Description: 3232 : 3233 : Fixed mistake in config/preloads. Retagged as 110.36. 3234 : 3235 : ---------------------------------------------------------------------- 3236 : Name: Matthias Blume 3237 : blume 928 Date: 2001/09/18 09:40:00 EDT 3238 : blume 929 Tag: Release_110_36_orig (tag changed) 3239 : blume 928 Description: 3240 : 3241 : New version (110.36). New bootfiles. 3242 : 3243 : ---------------------------------------------------------------------- 3244 : Name: Matthias Blume 3245 : blume 927 Date: 2001/09/14 16:15:00 EDT 3246 : Tag: blume-20010914-x86fastfp 3247 : Description: 3248 : 3249 : John committed some changes that Allen made, in particular a (hopefully) 3250 : correctly working version of the x86-fp module. 3251 : 3252 : I changed the default setting of the Control.MLRISC.getFlag "x86-fast-fp" 3253 : flag to "true". Everything seems to compile to a fixpoint ok, and 3254 : "mandelbrot" speeds up by about 15%. 3255 : 3256 : ---------------------------------------------------------------------- 3257 : Name: Matthias Blume 3258 : blume 923 Date: 2001/09/13 11:20:00 EDT 3259 : Tag: blume-20010913-minimal 3260 : Description: 3261 : 3262 : 1. Stefan Monnier's patch to fix a miscompilation problem that 3263 : was brought to light by John Reppy's work on Moby. 3264 : 3265 : 2. Implemented a minimal "structure Compiler" that contains just 3266 : "version" and "architecture". The minimal version will be 3267 : available when the full version is not. This is for backward- 3268 : compatibility with code that wants to test Compiler.version. 3269 : 3270 : ---------------------------------------------------------------------- 3271 : Name: Matthias Blume 3272 : blume 920 Date: 2001/08/28 14:03:00 EDT 3273 : Tag: blume-20010828-ml-lex 3274 : Description: 3275 : 3276 : Fix for bug 1581, received from Neophytos Michael. 3277 : 3278 : ---------------------------------------------------------------------- 3279 : Name: Matthias Blume 3280 : blume 918 Date: 2001/08/27 11:20:00 EDT 3281 : Tag: blume-20010827-readme11035 3282 : Description: 3283 : 3284 : Fleshed out the README file for 110.35. 3285 : 3286 : ---------------------------------------------------------------------- 3287 : Name: Matthias Blume 3288 : blume 916 Date: 2001/08/24 17:10:00 EDT 3289 : Tag: Release_110_35 3290 : Description: 3291 : 3292 : New version number (110.35). New bootfiles. 3293 : 3294 : ---------------------------------------------------------------------- 3295 : george 915 Name: Lal George 3296 : george 909 Date: 2001/08/24 13:47:18 EDT 2001 3297 : Tag: george-20010824-MLRISC-graphs 3298 : Description: 3299 : 3300 : removed clusters from MLRISC completely and replaced with graphs. 3301 : 3302 : ---------------------------------------------------------------------- 3303 : Name: Matthias Blume 3304 : blume 905 Date: 2001/08/23 17:50:00 EDT 3305 : Tag: blume-20010823-toplevel 3306 : Description: 3307 : 3308 : - some reorganization of the code that implements various kinds of 3309 : environments in the compiler (static, dynamic, symbolic, combined) 3310 : - re-implemented the EnvRef module so that evalStream works properly 3311 : (if the stream contains references to "use", "CM.make", etc.) 3312 : - cleaned up evalloop.sml and interact.sml (but they need more cleaning) 3313 : 3314 : ---------------------------------------------------------------------- 3315 : Name: Matthias Blume 3316 : blume 904 Date: 2001/08/20 15:50 EDT 3317 : Tag: blume20010820-slipup 3318 : Description: 3319 : 3320 : I forgot to commit a few files. Here they are... 3321 : 3322 : ---------------------------------------------------------------------- 3323 : Name: Matthias Blume 3324 : blume 903 Date: 2001/08/20 15:35:00 EDT 3325 : Tag: blume-20010820-debugprof 3326 : Description: 3327 : 3328 : !!!! NEW BOOTFILES !!!! 3329 : 3330 : This is another round of reorganizing the compiler sources. This 3331 : time the main goal was to factor out all the "instrumentation" 3332 : passes (for profiling and backtracing) into their own library. 3333 : The difficulty was to do it in such a way that it does not depend 3334 : on elaborate.cm but only on elabdata.cm. 3335 : 3336 : Therefore there have been further changes to both elaborate.cm and 3337 : elabdata.cm -- more "generic" things have been moved from the former 3338 : to the latter. As a result, I was forced to split the assignment 3339 : of numbers indicating "primtyc"s into two portions: SML-generic and 3340 : SML/NJ-specific. Since it would have been awkward to maintain, 3341 : I bit the bullet and actually _changed_ the mapping between these 3342 : numbers and primtycs. The bottom line of this is that you need 3343 : a new set of bin- and bootfiles. 3344 : 3345 : I have built new bootfiles for all architectures, so doing a fresh 3346 : checkout and config/install.sh should be all you need. 3347 : 3348 : The newly created library's name is 3349 : 3350 : $smlnj/viscomp/debugprof.cm 3351 : 3352 : and its sources live under 3353 : 3354 : src/compiler/DebugProf 3355 : 3356 : ---------------------------------------------------------------------- 3357 : Name: Matthias Blume 3358 : blume 902 Date: 2001/08/15 17:15:00 EDT 3359 : Tag: blume-20010815-compreorg 3360 : Description: 3361 : 3362 : This is a first cut at reorganizing the CM libraries that make up the 3363 : core of the compiler. The idea is to separate out pieces that could 3364 : be used independently by tools, e.g., the parser, the typechecker, etc. 3365 : 3366 : The current status is a step in this direction, but it is not quite 3367 : satisfactory yet. Expect more changes in the future. 3368 : 3369 : Here is the current (new) organization... 3370 : 3371 : What used to be$smlnj/viscomp/core.cm is now divided into 3372 : six CM libraries: 3373 : 3374 : $smlnj/viscomp/basics.cm 3375 : /parser.cm 3376 : /elabdata.cm 3377 : /elaborate.cm 3378 : /execute.cm 3379 : /core.cm 3380 : 3381 : The CM files for these libraries live under src/system/smlnj/viscomp. 3382 : All these libraries are proxy libraries that contain precisely 3383 : one CM library component. Here are the locations of the components 3384 : (all within the src/compiler tree): 3385 : 3386 : Basics/basics.cm 3387 : Parse/parser.cm 3388 : ElabData/elabdata.cm 3389 : Elaborator/elaborate.cm 3390 : Execution/execute.cm 3391 : core.cm 3392 : 3393 : [This organization is the same that has been used already 3394 : for a while for the architecture-specific parts of the visible 3395 : compiler and for the old version of core.cm.] 3396 : 3397 : As you will notice, many source files have been moved from their 3398 : respective original locations to a new home in one of the above 3399 : subtrees. 3400 : 3401 : The division of labor between the new libraries is the following: 3402 : 3403 : basics.cm: 3404 : - Simple, basic definitions that pertain to many (or all) of 3405 : the other libraries. 3406 : parser.cm: 3407 : - The SML parser, producing output of type Ast.dec. 3408 : - The type family for Ast is also defined and exported here. 3409 : elabdata.cm: 3410 : - The datatypes that describe input and output of the elaborator. 3411 : This includes types, absyn, and static environments. 3412 : elaborator.cm: 3413 : - The SML/NJ type checker and elaborator. 3414 : This maps an Ast.dec (with a given static environment) to 3415 : an Absyn.dec (with a new static environment). 3416 : - This libraries implements certain modules that used to be 3417 : structures as functors (to remove dependencies on FLINT). 3418 : execute.cm: 3419 : - Everything having to do with executing binary code objects. 3420 : - Dynamic environments. 3421 : core.cm: 3422 : - SML/NJ-specific instantiations of the elaborator and MLRISC. 3423 : - Top-level modules. 3424 : - FLINT (this should eventually become its own library) 3425 : 3426 : Notes: 3427 : 3428 : I am not 100% happy with the way I separated the elaborator (and its 3429 : data structures) from FLINT. Two instances of the same problem: 3430 : 3431 : 1. Data structures contain certain fields that carry FLINT-specific 3432 : information. I hacked around this using exn and the property list 3433 : module from smlnj-lib. But the fact that there are middle-end 3434 : specific fields around at all is a bit annoying. 3435 : 3436 : 2. The elaborator calculates certain FLINT-related information. I tried 3437 : to make this as abstract as I could using functorization, but, again, 3438 : the fact that the elaborator has to perform calculations on behalf 3439 : of the middle-end at all is not nice. 3440 : 3441 : 3. Having to used exn and property lists is unfortunate because it 3442 : weakens type checking. The other alternative (parameterizing 3443 : nearly *everything*) is not appealing, though. 3444 : 3445 : I removed the "rebinding =" warning hack because due to the new organization 3446 : it was awkward to maintain it. As a result, the compiler now issues some of 3447 : these warnings when compiling init.cmi during bootstrap compilation. On 3448 : the plus side, you also get a warning when you do, for example: 3449 : val op = = Int32.+ 3450 : which was not the case up to now. 3451 : 3452 : I placed "assign" and "deref" into the _Core structure so that the 3453 : code that deals with the "lazy" keyword can find them there. This 3454 : removes the need for having access to the primitive environment 3455 : during elaboration. 3456 : 3457 : ---------------------------------------------------------------------- 3458 : Name: Matthias Blume 3459 : blume 898 Date: 2001/08/13 3460 : Tag: blume-20010813-closures 3461 : Description: 3462 : 3463 : This fix was sent to us by Zhong Shao. It is supposed to improve the 3464 : performance of certain loops by avoiding needless closure allocation. 3465 : 3466 : ---------------------------------------------------------------------- 3467 : george 890 Name: Lal George 3468 : george 896 Date: 2001/07/31 10:03:23 EDT 2001 3469 : Tag: george-20010731-x86-fmalloc 3470 : Description: Fixed bug in x86 calls 3471 : 3472 : There was a bug where call instructions would mysteriously 3473 : vanish. The call instruction had to be one that returned 3474 : a floating point value. 3475 : 3476 : ---------------------------------------------------------------------- 3477 : Name: Lal George 3478 : george 890 Date: 2001/07/19 16:36:29 EDT 2001 3479 : Tag: george-20010719-simple-cells 3480 : Description: 3481 : 3482 : I have dramatically simplified the interface for CELLS in MLRISC. 3483 : 3484 : In summary, the cells interface is broken up into three parts: 3485 : 3486 : 1. CellsBasis : CELLS_BASIS 3487 : 3488 : CellsBasis is a top level structure and common for all 3489 : architectures. it contains the definitions of basic datatypes 3490 : and utility functions over these types. 3491 : 3492 : 2. functor Cells() : CELLS 3493 : 3494 : Cells generates an interface for CELLS that incorporates the 3495 : specific resources on the target architecture, such as the 3496 : presence of special register classes, their number and size, 3497 : and various useful substructures. 3498 : 3499 : 3. CELLS 3500 : 3501 : e.g. SparcCells: SPARCCELLS 3502 : 3503 : CELLS usually contains additional bindings for special 3504 : registers on the architecture, such as: 3505 : 3506 : val r0 : cell (* register zero *) 3507 : val y : cell (* Y register *) 3508 : val psr : cell (* processor status register *) 3509 : ... 3510 : 3511 : The structure returned by applying the Cells functor is opened 3512 : in this interface. 3513 : 3514 : The main implication of all this is that the datatypes for cells is 3515 : split between CellsBasis and CELLS -- a fairly simple change for user 3516 : code. 3517 : 3518 : In the old scheme the CELLS interface had a definitional binding of 3519 : the form: 3520 : 3521 : signature CELLS = sig 3522 : 3523 : structure CellsBasis = CellsBasis 3524 : 3525 : ... 3526 : 3527 : end 3528 : 3529 : With all the sharing constraints that goes on in MLRISC, this old 3530 : design quickly leads to errors such as: 3531 : 3532 : "structure definition spec inside of sharing ... " 3533 : 3534 : 3535 : and appears to require an unacceptable amount of sharing and where 3536 : constraint hackery. 3537 : 3538 : I think this error message (the interaction of definitional specs and 3539 : sharing) requires more explanation on our web page. 3540 : 3541 : ---------------------------------------------------------------------- 3542 : blume 826 Name: Matthias Blume 3543 : blume 879 Date: 2001/07/19 15:00:00 EDT 3544 : Tag: blume-20010719-libreorg 3545 : Description: 3546 : 3547 : This update puts together a fairly extensive but straightforward change 3548 : to the way the libraries that implement the interactive system are 3549 : organized: 3550 : 3551 : The biggest change is the elimination of structure Compiler. As a 3552 : replacement for this structure, there is now a CM library 3553 : (known as$smlnj/compiler.cm or $smlnj/compiler/current.cm) 3554 : that exports all the substructures of the original structure Compiler 3555 : directly. So instead of saying Compiler.Foo.bar one now simply 3556 : says Foo.bar. (The CM libraries actually export a collection of 3557 : structures that is richer than the collection of substructures of 3558 : structure Compiler.) 3559 : 3560 : To make the transition smooth, there is a separate library called 3561 :$smlnj/compiler/compiler.cm which puts together and exports the 3562 : original structure Compiler (or at least something very close to it). 3563 : 3564 : There are five members of the original structure Compiler 3565 : that are not exported directly but which instead became members 3566 : of a new structure Backend (described by signature BACKEND). These are: 3567 : structure Profile (: PROFILE), structure Compile (: COMPILE), structure 3568 : Interact (: INTERACT), structure Machine (: MACHINE), and val 3569 : architecture (: string). 3570 : 3571 : Structure Compiler.Version has become structure CompilerVersion. 3572 : 3573 : Cross-compilers for alpha32, hppa, ppc, sparc, and x86 are provided 3574 : by $smlnj/compiler/.cm where is alpha32, hppa, ppc, sparc, 3575 : or x86, respectively. 3576 : Each of these exports the same frontend structures that 3577 :$smlnj/compiler.cm exports. But they do not have a structure Backend 3578 : and instead export some structure Backend where is Alpha32, 3579 : Hppa, PPC, Sparc, or X86, respectively. 3580 : 3581 : Library $smlnj/compiler/all.cm exports the union of the exports of 3582 :$smlnj/compiler/.cm 3583 : 3584 : There are no structures Compiler anymore, use 3585 : $smlnj/compiler/.cm instead. 3586 : 3587 : Library host-compiler-0.cm is gone. Instead, the internal library 3588 : that instantiates CM is now called cm0.cm. Selection of the host 3589 : compiler (backend) is no longer done here but. (Responsibility for it 3590 : now lies with$smlnj/compiler/current.cm. This seems to be more 3591 : logical.) 3592 : 3593 : Many individual files have been moved or renamed. Some files have 3594 : been split into multiple files, and some "dead" files have been deleted. 3595 : 3596 : Aside from these changes to library organization, there are also changes 3597 : to the way the code itself is organized: 3598 : 3599 : Structure Binfile has been re-implemented in such a way that it no 3600 : longer needs any knowledge of the compiler. It exclusively deals 3601 : with the details of binfile layout. It no longer invokes the 3602 : compiler (for the purpose of creating new prospective binfile 3603 : content), and it no longer has any knowledge of how to interpret 3604 : pickles. 3605 : 3606 : Structure Compile (: COMPILE) has been stripped down to the bare 3607 : essentials of compilation. It no longer deals with linking/execution. 3608 : The interface has been cleaned up considerably. 3609 : 3610 : Utility routines for dealing with linking and execution have been 3611 : moved into their own substructures. 3612 : 3613 : (The ultimate goal of these changes is to provide a light-weight 3614 : binfile loader/linker (at least for, e.g., stable libraries) that 3615 : does not require CM or the compiler to be present.) 3616 : 3617 : CM documentation has been updated to reflect the changes to library 3618 : organization. 3619 : 3620 : ---------------------------------------------------------------------- 3621 : Name: Matthias Blume 3622 : blume 875 Date: 2001/07/10 17:30:00 EDT 3623 : Tag: Release_110_34 3624 : Description: 3625 : 3626 : blume 876 Minor tweak to 110.34 (re-tagged): 3627 : 3628 : - README.html file added to CVS repository 3629 : - runtime compiles properly under FreeBSD 3.X and 4.X 3630 : 3631 : ---------------------------------------------------------------------- 3632 : Name: Matthias Blume 3633 : Date: 2001/07/10 17:30:00 EDT 3634 : Tag: Release_110_34 3635 : Description: 3636 : 3637 : blume 875 New version number (110.34). New bootfiles. 3638 : 3639 : ---------------------------------------------------------------------- 3640 : Name: Matthias Blume 3641 : blume 874 Date: 2001/07/09 16:00:00 EDT 3642 : Tag: blume-20010709-more-varargs 3643 : Description: 3644 : 3645 : I changed the handling of varargs in ml-nlffigen again: 3646 : The ellipsis ... will now simply be ignored (with an accompanying warning). 3647 : 3648 : The immediate effect is that you can actually call a varargs function 3649 : from ML -- but you can't actually supply any arguments beyond the ones 3650 : specified explicitly. (For example, you can call printf with its format 3651 : string, but you cannot pass additional arguments.) 3652 : 3653 : This behavior is only marginally more useful than the one before, but 3654 : it has the advantage that a function or, more importantly, a function 3655 : type never gets dropped on the floor, thus avoiding follow-up problems with 3656 : other types that refer to the offending one. 3657 : 3658 : ---------------------------------------------------------------------- 3659 : Name: Matthias Blume 3660 : blume 873 Date: 2001/07/09 11:25:00 EDT 3661 : Tag: blume-20010709-varargs 3662 : Description: 3663 : 3664 : 1. ckit-lib.cm now exports structure Error 3665 : 2. ml-nlffigen reports occurences of "..." (i.e., varargs function types) 3666 : with a warning accompanied by a source location. Moreover, it 3667 : merely skips the offending function or type and proceeds with the 3668 : rest of its work.u As a result, one can safely feed C code containing 3669 : "..." to ml-nlffigen. 3670 : 3. There are some internal improvements to CM, providing slightly 3671 : more general string substitutions in the tools subsystem. 3672 : 3673 : ---------------------------------------------------------------------- 3674 : Name: Matthias Blume 3675 : blume 854 Date: 2001/06/27 15:10:00 EDT 3676 : Tag: blume-20010627-concur 3677 : Description: 3678 : 3679 : Fixed a small bug in CM's handling of parallel compilation. 3680 : (You could observe the bug by Control-C-interrupting an ordinary 3681 : CMB.make or CM.stabilize and then attaching some compile servers. 3682 : The result was that all of a sudden the previously interrupted 3683 : compilation would continue on its own. This was because of 3684 : an over-optimization: CM did not bother to clean out certain queues 3685 : when no servers were attached "anyway", resulting in the contents 3686 : of these queues to grab control when new servers did get attached.) 3687 : 3688 : There is also another minor update to the CM manual. 3689 : 3690 : ---------------------------------------------------------------------- 3691 : Name: Matthias Blume 3692 : blume 853 Date: 2001/06/26 16:15:00 EDT 3693 : Tag: blume-20010626-cmdoc 3694 : Description: 3695 : 3696 : Minor typo fixed in CM manual (syntax diagram for libraries). 3697 : 3698 : ---------------------------------------------------------------------- 3699 : Name: Matthias Blume 3700 : blume 852 Date: 2001/06/25 22:55:00 EDT 3701 : Tag: blume-20010625-x86pc 3702 : Description: 3703 : 3704 : Fixed a nasty bug in the X86 assembly code that caused signal 3705 : handlers to fail (crash) randomly. 3706 : 3707 : ---------------------------------------------------------------------- 3708 : Name: Matthias Blume 3709 : blume 846 Date: 2001/06/25 12:05:00 EDT 3710 : Tag: blume-20010625-nlffigen 3711 : Description: 3712 : 3713 : This update fixes a number of minor bugs in ml-nlffigen as reported by 3714 : Nick Carter . 3715 : 3716 : 1. Silly but ok typedefs of the form "typedef void myvoid;" are now accepted. 3717 : 2. Default names for generated files are now derived from the name of 3718 : the C file *without its directory*. In particular, this causes generated 3719 : files to be placed locally even if the C file is in some system directory. 3720 : 3. Default names for generated signatures and structures are also derived 3721 : from the C file name without its directory. This avoids silly things 3722 : like "structure GL/GL". 3723 : (Other silly names are still possible because ml-nlffigen does not do 3724 : blume 847 a thorough check of whether generated names are legal ML identifiers. 3725 : When in doubt, use command line arguments to force particular names.) 3726 : blume 846 3727 : ---------------------------------------------------------------------- 3728 : Name: Matthias Blume 3729 : blume 845 Date: 2001/06/21 12:25:00 EDT 3730 : Tag: blume-20010621-eXene 3731 : Description: 3732 : 3733 : eXene now compiles and (sort of) works again. 3734 : 3735 : The library name (for version > 110.33) is $/eXene.cm. 3736 : 3737 : I also added an new example in src/eXene/examples/nbody. See the 3738 : README file there for details. 3739 : 3740 : ---------------------------------------------------------------------- 3741 : Name: Matthias Blume 3742 : blume 844 Date: 2001/06/20 16:40:00 EDT 3743 : Tag: blume-20010620-cml 3744 : Description: 3745 : 3746 : CML now compiles and works again. 3747 : 3748 : Libraries (for version > 110.33): 3749 : 3750 :$cml/cml.cm Main CML library. 3751 : $cml/basis.cm CML's version of$/basis.cm. 3752 : $cml/cml-internal.cm Internal helper library. 3753 :$cml/core-cml.cm Internal helper library. 3754 : $cml-lib/trace-cml.cm Tracing facility. 3755 :$cml-lib/smlnj-lib.cm CML's version of $/smlnj-lib.cm 3756 : 3757 : The installer (config/install.sh) has been taught how to properly 3758 : install this stuff. 3759 : 3760 : ---------------------------------------------------------------------- 3761 : Name: Matthias Blume 3762 : blume 843 Date: 2001/06/19 17:55:00 EDT 3763 : Tag: blume-20010619-instantiate 3764 : Description: 3765 : 3766 : This un-breaks the fix for bug 1432. 3767 : (The bug was originally fixed in 110.9 but I broke it again some 3768 : time after that.) 3769 : 3770 : ---------------------------------------------------------------------- 3771 : Name: Matthias Blume 3772 : blume 842 Date: 2001/06/19 17:25:00 EDT 3773 : Tag: blume-20010619-signals 3774 : Description: 3775 : 3776 : This should (hopefully) fix the long-standing signal handling bug. 3777 : (The runtime system was constructing a continuation record with an 3778 : incorrect descriptor which would cause the GC to drop data on the floor...) 3779 : 3780 : ---------------------------------------------------------------------- 3781 : Name: Matthias Blume 3782 : blume 840 Date: 2001/06/15 15:05:00 EDT 3783 : blume 841 Tag: blume-20010615-moresparc 3784 : Description: 3785 : 3786 : Here is a short late-hour update related to Sparc c-calls: 3787 : 3788 : -- made handling of double-word arguments a bit smarter 3789 : 3790 : -- instruction selection phase tries to collapse certain clumsily 3791 : constructed ML-Trees; typical example: 3792 : 3793 : ADD(ty,ADD(_,e,LI d1),LI d2) -> ADD(ty,e,LI(d1+d2)) 3794 : 3795 : This currently has no further impact on SML/NJ since mlriscGen does 3796 : not seem to generate such patterns in the first place, and c-calls 3797 : (which did generate them in the beginning) has meanwhile been fixed 3798 : so as to avoid them as well. 3799 : 3800 : ---------------------------------------------------------------------- 3801 : Name: Matthias Blume 3802 : Date: 2001/06/15 15:05:00 EDT 3803 : blume 840 Tag: blume-20010615-sparc 3804 : Description: 3805 : 3806 : The purpose of this update is to provide an implementation of NLFFI 3807 : on Sparc machines. 3808 : 3809 : Here are the changes in detail: 3810 : 3811 : * src/MLRISC/sparc/c-calls/sparc-c-calls.sml is a new file containing 3812 : the Sparc implementation of the c-calls API. 3813 : * The Sparc backend of SML/NJ has been modified to uniformely use %fp 3814 : for accessing the ML frame. Thus, we have a real frame pointer and 3815 : can freely modify %sp without need for an omit-frame-ptr phase. 3816 : The vfp logic in src/compiler/CodeGen/* has been changed to accomodate 3817 : this case. 3818 : * ml-nlffigen has been taught to produce code for different architectures 3819 : and calling conventions. 3820 : * In a way similar to what was done in the x86 case, the Sparc 3821 : backend uses its own specific extension to mltree. (For example, 3822 : it needs to be able to generate UNIMP instructions which are part 3823 : of the calling convention.) 3824 : * ml-nlffi-lib was reorganized to make it more modular (in particular, 3825 : to make it easier to plug in new machine- and os-dependent parts). 3826 : 3827 : There are some other fairly unrelated bug fixes and cleanups as well: 3828 : 3829 : * I further hacked the .cm files for MLRISC tools (like MDLGen) so 3830 : that they properly share their libraries with existing SML/NJ libraries. 3831 : * I fixed a minor cosmetic bug in CM, supressing certain spurious 3832 : follow-up error messages. 3833 : * Updates to CM/CMB documentation. 3834 : 3835 : TODO items: 3836 : 3837 : * MLRISC should use a different register as its asmTemp on the Sparc. 3838 : (The current %o2 is a really bad choice because it is part of the 3839 : calling conventions, so things might interfere in unexpected ways.) 3840 : 3841 : ---------------------------------------------------------------------- 3842 : Name: Matthias Blume 3843 : blume 839 Date: 2001/06/07 3844 : Tag: blume-20010607-calls 3845 : Description: 3846 : 3847 : A number of internal changes related to C calls and calling conventions: 3848 : 3849 : 1. ML-Tree CALL statements now carry a "pops" field. It indicates the 3850 : number of bytes popped implicitly (by the callee). In most cases 3851 : this field is 0 but on x86/win32 it is some non-zero value. This 3852 : is information provided for the benefit of the "omit-frameptr" pass. 3853 : 2. The CALL instruction on the x86 carries a similar "pops" field. 3854 : The instruction selection phase copies its value from the ML-Tree 3855 : CALL statement. 3856 : 3. On all other architectures, the instruction selection phase checks 3857 : whether "pops=0" and complains if not. 3858 : 4. The c-calls implementation for x86 now accepts two calling conventions: 3859 : "ccall" and "stdcall". When "ccall" is selected, the caller cleans 3860 : up after the call and pops is set to 0. For "stdcall", the caller 3861 : does nothing, leaving the cleanup to the callee; pops is set to 3862 : the number of bytes that were pushed onto the stack. 3863 : 5. The cproto decoder (compiler/Semant/types/cproto.sml) now can 3864 : distinguish between "ccall" and "stdcall". 3865 : 6. The UNIMP instruction has been added to the supported Sparc instruction 3866 : set. (This is needed for implementing the official C calling convention 3867 : on this architecture.) 3868 : 7. I fixed some of the .cm files under src/MLRISC/Tools to make them 3869 : work with the latest CM. 3870 : 3871 : ---------------------------------------------------------------------- 3872 : Name: Matthias Blume 3873 : blume 838 Date: 2001/06/05 15:10:00 EDT 3874 : Tag: blume-20010605-cm-index 3875 : Description: 3876 : 3877 : 0. The "lambdasplit" parameter for class "sml" in CM has been documented. 3878 : 3879 : 1. CM can now generate "index files". These are human-readable files 3880 : that list on a per-.cm-file basis each toplevel symbol defined or 3881 : imported. The location of the index file for 3882 : /.cm is /CM/INDEX/.cm. 3883 : To enable index-file generation, set CM.Control.generate_index to true 3884 : or export an environment-symbol: export CM_GENERATE_INDEX=true. 3885 : 3886 : The CM manual has been updated accordingly. 3887 : 3888 : 2. I made some slight modifications to the c-calls API in MLRISC. 3889 : 3890 : a) There is now a callback to support saving/restoring of 3891 : dedicated but caller-save registers around the actual call 3892 : instruction. 3893 : b) One can optionally specify a comment-annotation for the 3894 : call instruction. 3895 : 3896 : 3. SML/NJ (mlriscGen.sml) uses this new API for the rawccall primop. 3897 : (For example, the comment annotation shows the C prototype of 3898 : the function being called.) 3899 : 3900 : ---------------------------------------------------------------------- 3901 : Name: Matthias Blume 3902 : blume 837 Date: 2001/06/01 13:30:00 EDT 3903 : Tag: blume-20010601-nlffi-cleanup 3904 : Description: 3905 : 3906 : This is mostly a cleanup of MLFFI stuff: 3907 : 3908 : - some signature files have been put into a more exposed place 3909 : - the ugly 'f type parameter is gone (simplifies types tremendously!) 3910 : - ml-nlffigen changed accordingly 3911 : - tutorial updated 3912 : 3913 : Other changes: 3914 : 3915 : - author's affiliation in CM manual(s) updated 3916 : - some more recognized keywords added to Allen's sml.sty 3917 : 3918 : ---------------------------------------------------------------------- 3919 : Name: Matthias Blume 3920 : blume 836 Date: 2001/05/25 15:30:00 EDT 3921 : Tag: blume-20010525-iptr 3922 : Description: 3923 : 3924 : - put the official 110.33-README (as it appears on the ftp server) under 3925 : CVS 3926 : - fixed a small bug related to incomplete pointer types in 3927 : ml-nlffigen 3928 : - small cosmetic change to the ml-nlffi-lib's "arr" type constructor 3929 : (it does not need the 'f type parameter) 3930 : 3931 : ---------------------------------------------------------------------- 3932 : Name: Matthias Blume 3933 : blume 834 Date: 2001/05/23 14:30:00 EDT 3934 : Tag: Release_110_33 3935 : Description: 3936 : 3937 : New version number (110.33). New bootfiles. 3938 : 3939 : ---------------------------------------------------------------------- 3940 : Name: Matthias Blume 3941 : blume 833 Date: 2001/05/22 18:06:00 EDT 3942 : Tag: blume-20010522-targets 3943 : Description: 3944 : 3945 : Made install.sh use file config/targets.customized if it exists, falling 3946 : back to config/targets if it doesn't. This way one can have a customized 3947 : version of the targets file without touching the "real thing", thus 3948 : eliminating the constant fear of accidentally checking something bogus 3949 : back into the CVS repository... (File config/targets.customized must 3950 : not be added to the repository!) 3951 : 3952 : ---------------------------------------------------------------------- 3953 : Name: Matthias Blume 3954 : blume 832 Date: 2001/05/22 16:30:00 EDT 3955 : Tag: blume-20010522-minitut 3956 : Description: 3957 : 3958 : 1. Bug fix in ml-nlffigen; now (hopefully) correctly handling 3959 : struct returns. 3960 : 2. Added src/ml-nlffi-lib/Doc/mini-tutorial.txt. This is some very 3961 : incomplete, preliminary documentation for NLFFI. 3962 : 3963 : ---------------------------------------------------------------------- 3964 : Name: Matthias Blume 3965 : blume 829 Date: 2001/05/14 11:30:00 EDT 3966 : Tag: blume-20010514-script 3967 : Description: 3968 : 3969 : Some bugs in install script fixed. 3970 : 3971 : In addition to that I also made a slight change to the NLFFI API: 3972 : Functors generated by ml-nlffigen now take the dynamic library as a 3973 : straight functor argument, not as a suspended one. (The original 3974 : functor code used to force the suspension right away anyway, so there 3975 : was nothing gained by this complication of the interface.) 3976 : 3977 : ---------------------------------------------------------------------- 3978 : Name: Matthias Blume 3979 : blume 828 Date: 2001/05/11 14:35:00 EDT 3980 : Tag: blume-20010511-ml-nlffi 3981 : Description: 3982 : 3983 : I finally took the plunge and added my new FFI code to the main 3984 : repository. For x86-linux it is now ready for prime-time. 3985 : 3986 : There are two new subdirectories of "src": 3987 : 3988 : - ml-nlffi-lib: 3989 : The utility library for programs using the FFI interface. 3990 : Here is the implementation of$/c.cm and its associated low-level 3991 : partners $/c-int.cm and$/memory.cm. 3992 : - ml-nlffigen: 3993 : A stand-alone program for generating ML glue code from C source 3994 : code. 3995 : 3996 : Building ml-nlffigen requires $/ckit-lib.cm. 3997 : 3998 : The config/install.sh script has been updates to do the Right Thing 3999 : (hopefully). 4000 : 4001 : Notice that the source tree for the C-Kit will not be put under "src" 4002 : but directly under the installation root directory. (This is the 4003 : structure that currently exists on the CVS server when you check out 4004 : module "sml".) Fortunately, config/install.sh knows about this oddity. 4005 : 4006 : Bugs: No documentation yet. 4007 : 4008 : ---------------------------------------------------------------------- 4009 : Name: Matthias Blume 4010 : blume 826 Date: 2001/05/09 16:35:00 EDT 4011 : Tag: blume-20010509-cpscontract 4012 : Description: 4013 : 4014 : Fixed a bug in the accounting code in cpsopt/contract.sml. (The 4015 : wrapper/unwrapper elimination did not decrement usage counts and some 4016 : dead variables got overlooked by the dead-up logic.) 4017 : 4018 : ---------------------------------------------------------------------- 4019 : george 824 Name: Lal George 4020 : Date: 2001/05/08 17:26:09 EDT 4021 : Tag: george-20010508-omit-frameptr 4022 : Description: 4023 : 4024 : Changes to implement the omit-frame-pointer optimization to support 4025 : raw C calls. For now, there is only support on the Intel x86, but 4026 : other architectures will follow as more experience is gained with this. 4027 : 4028 : 4029 : ---------------------------------------------------------------------- 4030 : blume 818 Name: Matthias Blume 4031 : blume 819 Date: 2001/05/07 14:40:00 EDT 4032 : Tag: blume-20010507-proxies 4033 : Description: 4034 : 4035 : I made into "proxy libraries" all libraries that qualify for such a 4036 : change. (A qualifying library is a library that has another library or 4037 : groups as its sole member and repeats that member's export list 4038 : verbatim. A proxy library avoids this repetition by omitting its export 4039 : list, effectively inheriting the list that its (only) member exports. 4040 : See the CM manual for more explanation.) 4041 : The main effect is that explicit export lists for these libraries 4042 : do not have to be kepts in sync, making maintenance a bit easier. 4043 : 4044 : I also added copyright notices to many .cm-files. 4045 : 4046 : Last but not least, I made a new set of bootfiles. 4047 : 4048 : ---------------------------------------------------------------------- 4049 : Name: Matthias Blume 4050 : blume 818 Date: 2001/05/04 17:00:00 EDT 4051 : Tag: blume-20010504-cm-lsplit 4052 : Description: 4053 : 4054 : 0. John merged pending changes to$/smlnj-lib.cm 4055 : 4056 : 1. Allen's previous change accidentally backed out of one of Lal's 4057 : earlier changes. I undid this mistake (re-introducing Lal's change). 4058 : 4059 : 2. I used the new topOrder' function from graph-scc.sml (from \$/smlnj-lib.cm) 4060 : within the compiler where applicable. There is some code simplification 4061 : because of that. 4062 : 4063 : 3. The "split" phase (in FLINT) is now part of the default list of phases. 4064 : Compiler.Control.LambdaSplitting.* can be used to globally control the 4065 : lambda-splitting (cross-module-inlining) engine. In addition to that, 4066 : it can now also be controlled on a per-source basis: CM has been taught 4067 : a new tool parameter applicable to ML source files. 4068 : 4069 : - To turn lambda-splitting off completely: 4070 : local open Compiler.Control.LambdaSplitting in 4071 : val _ = set Off 4072 : end 4073 : - To make "no lambda-splitting" the global default (but allow per-source 4074 : overriding); this is the initial setting: 4075 : local open Compiler.Control.LambdaSplitting in 4076 : val _ = set (Default NONE) 4077 : end 4078 : - To make "lambda-splitting with aggressiveness a" the global default 4079 : (and allow per-source overriding): 4080 : local open Compiler.Control.LambdaSplitting in 4081 : val _ = set (Default (SOME a)) 4082 : end 4083 : 4084 : - To turn lambda-splitting off for a given ML souce file (say: a.sml) 4085 : write (in the respective .cm-file): 4086 : a.sml (lambdasplitting:off) 4087 : - To turn lambda-splitting for a.sml on with minimal aggressiveness: 4088 : a.sml (lambdasplitting:on) 4089 : - To turn lambda-splitting for a.sml on with aggressiveness (where 4090 : is a decimal non-negative integer): 4091 : a.sml (lambdasplitting:) 4092 : - To turn lambda-splitting for a.sml on with maximal aggressiveness: 4093 : a.sml (lambdasplitting:infinity) 4094 : - To use the global default for a.sml: 4095 : a.sml (lambdasplitting:default) 4096 : or simply 4097 : a.sml 4098 : 4099 : ---------------------------------------------------------------------- 4100 : leunga 815 Name: Allen Leung 4101 : Date: 2001/05/04 01:57:00 EDT 4102 : Tag: leunga-20010504-sync 4103 : Description: 4104 : leunga 788 4105 : leunga 815 MLRISC features. 4106 : 4107 : 1. Fix to CMPXCHG instructions. 4108 : 2. Changed RA interface to allow annotations in callbacks. 4109 : 3. Added a new method to the stream interface to allow annotations updates. 4110 : 4111 : george 749 ---------------------------------------------------------------------- 4112 : blume 812 Name: Matthias Blume 4113 : blume 814 Date: 2001/05/01 11:45:00 EDT 4114 : Tag: blume-20010501-pcedittmp 4115 : Description: 4116 : 4117 : Changed install.sh to use the current working directory instead of 4118 : /usr/tmp for a temporary file (pcedittmp). The previous choice 4119 : of /usr/tmp caused trouble with MacOS X because of file premission 4120 : problems. 4121 : 4122 : ---------------------------------------------------------------------- 4123 : Name: Matthias Blume 4124 : blume 812 Date: 2001/04/20 11:10:00 EDT 4125 : Tag: blume-20010420-inMLflag 4126 : Description: 4127 : 4128 : - added vp_limitPtrMask to vproc-state.h 4129 : (for use by the raw-C-calls mechanism to implement proper interrupt 4130 : handling) 4131 : - made the ML compiler aware of various data-structure offsets so it 4132 : can generate code for accessing the vp_inML flag and vp_limitPtrMask 4133 : - tweaked mlriscGen.sml to have it emit interrupt-handling code for 4134 : raw C-calls 4135 : 4136 : ---------------------------------------------------------------------- 4137 : george 810 Name: Lal George 4138 : Date: 2001/04/20 09:15:28 EDT 4139 : Tag: george-20010420-macosX 4140 : Description: 4141 : 4142 : - Changes to port to Mac OS X; Darwin. 4143 : 4144 : - In the process I found that sqrt was broken on the PPC, because the 4145 : fsqrt instruction is not implemented. 4146 : 4147 : ---------------------------------------------------------------------- 4148 : blume 799 Name: Matthias Blume 4149 : blume 808 Date: 2001/04/18 12:45:00 EDT 4150 : Tag: blume-20010418-ccalls 4151 : Description: 4152 : 4153 : - fixed two off-by-4 errors in the x86-specific c-calls implementation 4154 : (this bug prevented structure arguments containing pointers from being 4155 : passed correctly) 4156 : - changed the raw-C-call code in mlriscGen.sml in such a way that 4157 : structure arguments are represented as a pointer to the beginning 4158 : of the structure (instead of having a series of synthesized arguments, 4159 : one for each structure member) 4160 : 4161 : - made makeml script's verbosity level configurable via environment 4162 : variable (MAKEML_VERBOSITY) 4163 : 4164 : blume 813 - eliminated placeholder implementations for f32l, w16s, i16s, and f32s 4165 : blume 808 in rawmem-x86.sml; we are now using the real thing 4166 : 4167 : ---------------------------------------------------------------------- 4168 : Name: Matthias Blume 4169 : blume 806 Date: 2001/03/22 16:25:00 EST 4170 : Tag: blume-20010322-bootfiles 4171 : Description: 4172 : 4173 : Created a new set of bootfiles (for your automatic installation convenience). 4174 : 4175 : ---------------------------------------------------------------------- 4176 : Name: Matthias Blume 4177 : blume 805 Date: 2001/03/22 15:10:00 EST 4178 : Tag: blume-20010322-rawmem-parcm 4179 : Description: 4180 : 4181 : 1. All "raw memory access" primitives for the new FFI are implemented now 4182 : (at least on the x86). 4183 : 2. Some further cleanup of CM's parallel make mechanism. 4184 : 4185 : ---------------------------------------------------------------------- 4186 : Name: Matthias Blume 4187 : blume 801 Date: 2001/03/19 17:53:00 EST 4188 : Tag: blume-20010319-parallel 4189 : Description: 4190 : 4191 : Parallel make (using compile servers) now works again. 4192 : 4193 : To this end, CM.stabilize and CMB.make have been modified to work in 4194 : two passes when compile servers are attached: 4195 : 1. Compile everything, do not perform stabilization; this pass 4196 : uses compile servers 4197 : 2. Stabilize everything; this pass does not use compile servers 4198 : If there are no compile servers, the two passes are combined into one 4199 : (as before). Splitting the passes increases the inherent parallelism 4200 : in the dependency graph because the entire graph including all 4201 : libraries is available at the same time. This, in turn, improves 4202 : server utilization. The downside is that the master process will 4203 : have to do some extra work after compilation is done (because for 4204 : technical reasons it must re-read all the binfiles during stabilization). 4205 : 4206 : ---------------------------------------------------------------------- 4207 : Name: Matthias Blume 4208 : blume 800 Date: 2001/03/16 12:22:00 EST 4209 : Tag: blume-20010316-bootfiles 4210 : Description: 4211 : 4212 : Created a new set of bootfiles (for your automatic installation convenience). 4213 : 4214 : ---------------------------------------------------------------------- 4215 : Name: Matthias Blume 4216 : blume 799 Date: 2001/03/16 11:00:00 EST 4217 : Tag: blume-20010316-MLTREE-fixup 4218 : Description: 4219 : 4220 : This is a minor fixup for an (untagged) earlier commit by Allen. 4221 : (A file was missing). 4222 : 4223 : ---------------------------------------------------------------------- 4224 : leunga 788 Name: Allen Leung 4225 : leunga 796 Date: Mon Mar 5 18:54:57 EST 2001 4226 : Tag: leunga-20010305-cut-support 4227 : 4228 : 1. New support for alternative control-flow in MLTREE. 4229 : Currently we support 4230 : 4231 : FLOW_TO(CALL ...., [k1,...,kn]) 4232 : 4233 : This is needed for 'cuts to' in C-- and try/handle-like constructs 4234 : in Moby 4235 : 4236 : New assembler flag "asm-show-cutsto" to turn on control-flow debugging. 4237 : 4238 : 2. Register Allocator 4239 : 4240 : Changes in interface [from Fermin, John] 4241 : 4242 : 3. Alpha 8-bit SLL support [Fermin] 4243 : 4244 : 4. All architectures 4245 : 4246 : A new module (ClusterExpandCopies) for expanding parallel copies. 4247 : 4248 : ---------------------------------------------------------------------- 4249 : Name: Allen Leung 4250 : leunga 788 Date: 2001/02/27 23:07:00 EST 4251 : Tag: leunga-20010227-minor-stuff 4252 : 4253 : 1. Alpha bug fix for CMOVNE 4254 : 2. Handle mltree COND(..,FCMP ...,...) 4255 : 3. Bug fix in simplifier 4256 : 4257 : ---------------------------------------------------------------------- 4258 : blume 777 Name: Matthias Blume 4259 : blume 781 Date: 2001/01/30 17:50:00 EST 4260 : Tag: blume-20010130-sync 4261 : Description: 4262 : 4263 : This is just a minor update to sync my devel branch with the main brach. 4264 : The only visible change is the addition of some README files. 4265 : 4266 : ---------------------------------------------------------------------- 4267 : Name: Matthias Blume 4268 : blume 778 Date: 2001/01/12 23:30:00 JST 4269 : Tag: blume-20010112-bootfiles 4270 : Description: 4271 : 4272 : Made a new set of bootfiles that goes with the current state of the 4273 : repository. 4274 : 4275 : ---------------------------------------------------------------------- 4276 : Name: Matthias Blume 4277 : blume 777 Date: 2001/01/12 21:20:00 JST 4278 : Tag: blume-20010112-sync 4279 : Description: 4280 : 4281 : I am just flushing out some minor changes that had accumulated in 4282 : my private branch in order to sync with the main tree. (This is 4283 : mainly because I had CVS trouble when trying to merge _into_ my 4284 : private branch.) 4285 : 4286 : Most people should be completely unaffected by this. 4287 : 4288 : ---------------------------------------------------------------------- 4289 : leunga 775 Name: Allen Leung 4290 : Date: Thu Jan 11 21:03:00 EST 2001 4291 : Tag: leunga-20010111-labexp=mltree 4292 : Description: 4293 : 4294 : 1. Removed the type LabelExp and replace it by MLTree. 4295 : 2. Rewritten mltree-simplify with the pattern matcher tool. 4296 : 3. There were some bugs in alpha code generator which would break 4297 : 64-bit code generation. 4298 : 4. Redo the tools to generate code with the 4299 :