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