Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Working on an interpreter, plus probably some other stuff. Not workin…

…g yet, but I want to get this stuff committed so I don't lose it.
  • Loading branch information...
commit b9f0d4a87313f261183eed73c9f383b7f4a39607 1 parent d95a98b
@AdamSpitz authored
Showing with 1,957 additions and 1,229 deletions.
  1. +61 −32 doc/Adam - working notes.txt
  2. +56 −15 klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj/adam.mode1
  3. +183 −73 klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj/adam.pbxuser
  4. +111 −82 objects/applications/klein/kleinC1_BCI.self
  5. +111 −75 objects/applications/klein/kleinC1_Gens.self
  6. +580 −659 objects/applications/klein/kleinC1_IRNodes.self
  7. +266 −13 objects/applications/klein/kleinC1_Values.self
  8. +8 −20 objects/applications/klein/kleinCompiler1.self
  9. +1 −1  objects/applications/klein/kleinExport.self
  10. +78 −2 objects/applications/klein/kleinPrims.self
  11. +110 −1 objects/applications/klein/kleinSelfVM.self
  12. +233 −61 objects/applications/klein/kleinTestVM.self
  13. +88 −176 objects/applications/klein/vmKitCloning.self
  14. +6 −1 objects/applications/klein/vmKitGC.self
  15. +25 −1 objects/applications/klein/vmKitInterpreter.self
  16. +1 −1  objects/applications/klein/vmKitLayouts.self
  17. +21 −3 objects/applications/klein/vmKitMaps.self
  18. +15 −9 objects/applications/klein/vmKitObjMapper.self
  19. +0 −1  objects/applications/klein/vmKitVM.self
  20. +2 −2 public_html/index.html
  21. +1 −1  public_html/running.html
View
93 doc/Adam - working notes.txt
@@ -1,8 +1,19 @@
-Cleanups to do:
-
- - Addresses. Factor it all so that I can easily switch to untagged addresses.
- - Factor the layout stuff so that it's a bit more uniform and elegant about handling oops versus addresses. (C is really nice in that way; how close can we get to that?)
- - Stuff that tries to avoid cloning... is there a way to make it clear which stuff that is? Draw a clear fence around it? And avoid duplication with regular stuff? (The problem is that there's some stuff that needs failblocks when running on a remote image, but needs to avoid cloning when running in a local image.) Actually, now that I've got inlining and stuff, maybe just fix the code so that it doesn't bother trying to avoid cloning anymore.
+Stuff to do:
+ - Turn off the translated vector prims so that the bug goes away for now (hopefully).
+ - Clean up some stuff? Maybe try documenting Klein so that other programmers can get into it. That ought to lead to a bunch of cleanups.
+ - Fix some stuff:
+ - The export cycle time.
+ - The debugger taking forever to open up or continue or whatever.
+ - Maybe by the time I'm done with those things I'll have some idea of what to do with this stuff:
+ - That bug with the hash table (or whatever it might be).
+ - The ran-out-of-temp-regs thing.
+ - Maybe make it optimize dynamically?
+ - Do a post to the Self blog, mentioning some stuff to be done:
+ - Porting the assembler and compiler.
+ - Traditional C-style compiler optimizations.
+ - A more mature GC.
+ - Various primitives - graphics, etc.
+ - Get rid of OIDs? But we'll need a different way for the remote environment to keep track of stuff.
----
@@ -24,35 +35,24 @@ Fix the copyright notices!!!
Could try manually splitting up the modules that have a lot of uninvoked nmethods, so that they're less coarse-grained.
+Submodules I could maybe split off from mirror:
+
+ - DONE: mirrorProgramming
+ - annotations?
+
----
Let's make a faster compiler. (We'll need that anyway.) Hopefully I can just reuse the existing compiler and turn off some stuff:
- Don't calculateDominance.
- - Don't convertToSSAForm.
- - Don't doInlining.
- Don't calculateValueLiveness (but then will I need another register allocator?).
-OK, I did some of that. Does it work?
-
----
-How do I do PICs?
-
-I guess each one is just an nmethod, created on the fly. Could make them a fixed size and then just fill them up with branches to the sendMessage_stub, so that later we can extend them by overwriting in the middle. But check to see how the Self VM does it.
+In updateLivenessInformation, could I speed things up by representing the sets in a different format?
-I could do them statically, too - anytime I see a call to _Eq: I know it's likely to be a boolean, same with sends of && and ||, etc. (But only do this if the optimizationPolicy is to compileFastCode.)
-
-How does the Self VM do it?
+Same with buildInterferenceInformation?
- - Looks like every sendDesc has a pic(), which is null if there are 0 or 1 target maps.
- - The PIC is called a CacheStub. Which is a kind of OopNCode. And "OopNCode is the base class of all code containing oop references embedded in the code (e.g. sethi instructions)."
- - Apparently nmethods are a kind of OopNCode too.
-
-OK, so I should make a parent of nmethod called nativeCodeContainingOops. Or maybe just nativeCode.
-
-But I guess I don't really know right now whether a lot of my time is being spent doing polymorphic lookups. Could I get a list of how often the sendMessage_stub is called with each selector? That'd tell me whether I need PICs yet or not.
-
-Hmm, OK, I fixed the worst offenders. Not sure whether it's worth doing PICs now.
+Hmm, why is canReuseNMethod: taking up so much time?
----
@@ -69,21 +69,50 @@ Seriously, how does the Self VM do it?
----
-Submodules I could maybe split off from mirror:
+Not sure what to do. There's a bug where it fails to find a klein locations constant in a dictionary, even though it's actually there. It looks to me like it's in the wrong place - I think the identity hash comes out to 1 (mod 16), but it's actually in position 5 (and there are a couple of emptyMarkers at position 1).
- - DONE: mirrorProgramming
- - annotations?
+Hmm, has the bug gone away?
+
+Nope. But it seems to be flaky. Blecch.
+
+I think it started when I made the _At: and _At:Put: primitives (and the byteVector ones, too) translate to IR nodes. So maybe I should start by writing a bunch of miniVM tests for those. Be really thorough.
+
+I wrote some tests, they didn't fail. But then I replaced the new translated prims with the old code-generator ones, and the bug went away. (At least, I think it did. The bug seemed to be intermittent, so I can't trust that just because I don't see it now it's actually gone.)
+
+So... now what? If the problem *is* with the translated vector prims, how can I find it?
+
+Hmm, let's look at the IR nodes generated by the prims, and see if there's a way that the register allocator could get screwed up or something if we defer cloning the block.
----
-Not sure what to do. There's a bug where it fails to find a klein locations constant in a dictionary, even though it's actually there. It looks to me like it's in the wrong place - I think the identity hash comes out to 1 (mod 16), but it's actually in position 5 (and there are a couple of emptyMarkers at position 1).
+How else could I deal with the uninvoked nmethod problem?
-Hmm, has the bug gone away?
+What if I wrote an interpreter? That could at least reduce the amount of stuff that needs to be compiled.
-Nope. But it seems to be flaky. Blecch.
+What would I have to do?
+
+ - In the lookup_stub or whatever it is, make it interpret the method instead of compiling it.
+ - Write an interpreter.
+ - Be able to create a new activation.
+ - Make sure that when the interpreter does a send, it's done in such a way that it can run compiled nmethods with no problem. Maybe a _Perform: would do it?
+ - Make the debugger smart enough to be able to view interpreted activations. Um... how? I dunno.
+
+Hmm, to create an activation, do I want to do it from scratch, or clone an existing one, or what? Meh, from scratch is probably better, space-wise.
----
-Awesome! The whole GC pause is less than 30 seconds now, and it would be more like 10 seconds if it weren't for the oop recycling.
+Maybe prependACopyOfDeferredComputation: should have some safety checks.
+
+----
+
+On the location-hash bug: OK, seems like the hash is coming back 4 (though I'm not completely sure of that). So if hash: is returning the wrong thing, maybe it's in the "buckets pred &&" part.
+
+----
+
+Hmm. Seems like maybe we're trying to figure out if we canReuseNMethod: the whileFalse: and whileTrue: nmethods (and a few others). Because we're inlining... what?
+
+Wait, are we trying to inline 'value' for a block, in a method on traits block? That's bad, huh? Or is it? No, if the outermost slot is on traits block, it's bad.
+
+----
-Biggest problem now might be the environment pausing whenever I hit Continue, I think.
+Hmm, no copyForVM:Oop:IfFail: on a klein mirrors methodActivation. Do I need a different kind of mirror for interpreter activations?
View
71 klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj/adam.mode1
@@ -190,6 +190,46 @@
<key>Content</key>
<dict>
<key>PBXProjectModuleGUID</key>
+ <string>662396AA103C9B4000D70ABF</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>activation.cpp</string>
+ <key>PBXSplitModuleInNavigatorKey</key>
+ <dict>
+ <key>Split0</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
+ <string>662396AB103C9B4000D70ABF</string>
+ <key>PBXProjectModuleLabel</key>
+ <string>activation.cpp</string>
+ <key>_historyCapacity</key>
+ <integer>0</integer>
+ <key>bookmark</key>
+ <string>66659D8910668F55004063B4</string>
+ <key>history</key>
+ <array>
+ <string>6675E39C103EF1C000F25AEC</string>
+ </array>
+ </dict>
+ <key>SplitCount</key>
+ <string>1</string>
+ </dict>
+ <key>StatusBarVisibility</key>
+ <true/>
+ </dict>
+ <key>Geometry</key>
+ <dict>
+ <key>Frame</key>
+ <string>{{0, 20}, {1319, 880}}</string>
+ <key>PBXModuleWindowStatusBarHidden2</key>
+ <false/>
+ <key>RubberWindowFrame</key>
+ <string>15 102 1319 921 0 0 1680 1028 </string>
+ </dict>
+ </dict>
+ <dict>
+ <key>Content</key>
+ <dict>
+ <key>PBXProjectModuleGUID</key>
<string>661E0F6C0FE458B3006515A6</string>
<key>PBXProjectModuleLabel</key>
<string>activation.hh</string>
@@ -204,10 +244,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F6E0FE458B3006515A6</string>
+ <string>66659D8A10668F55004063B4</string>
<key>history</key>
<array>
- <string>661E0F690FE457B3006515A6</string>
+ <string>6675E39D103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -244,10 +284,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F700FE458B3006515A6</string>
+ <string>66659D8B10668F55004063B4</string>
<key>history</key>
<array>
- <string>661E0F6F0FE458B3006515A6</string>
+ <string>6675E39E103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -284,10 +324,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F710FE458B3006515A6</string>
+ <string>66659D8C10668F55004063B4</string>
<key>history</key>
<array>
- <string>6611A9EC0FE34AE000A4FBDA</string>
+ <string>6675E39F103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -324,10 +364,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F720FE458B3006515A6</string>
+ <string>66659D8D10668F55004063B4</string>
<key>history</key>
<array>
- <string>6611A9ED0FE34AE000A4FBDA</string>
+ <string>6675E3A0103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -364,10 +404,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F730FE458B3006515A6</string>
+ <string>66659D8E10668F55004063B4</string>
<key>history</key>
<array>
- <string>6611A9EE0FE34AE000A4FBDA</string>
+ <string>6675E3A1103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -404,10 +444,10 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
- <string>661E0F740FE458B3006515A6</string>
+ <string>66659D8F10668F55004063B4</string>
<key>history</key>
<array>
- <string>6611A9EF0FE34AE000A4FBDA</string>
+ <string>6675E3A2103EF1C000F25AEC</string>
</array>
</dict>
<key>SplitCount</key>
@@ -619,9 +659,9 @@
</array>
<key>TableOfContents</key>
<array>
- <string>661E0F6A0FE458B3006515A6</string>
+ <string>66659D8710668F55004063B4</string>
<string>1CE0B1FE06471DED0097A5F4</string>
- <string>661E0F6B0FE458B3006515A6</string>
+ <string>66659D8810668F55004063B4</string>
<string>1CE0B20306471E060097A5F4</string>
<string>1CE0B20506471E060097A5F4</string>
</array>
@@ -760,8 +800,9 @@
<string>665B5D030F86DA82006C9C0B</string>
<string>6690F3AE0FE34A96007002BF</string>
<string>665B5D000F86DA82006C9C0B</string>
- <string>/Users/adam/Desktop/git/klein/klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj</string>
<string>661E0F6C0FE458B3006515A6</string>
+ <string>662396AA103C9B4000D70ABF</string>
+ <string>/Users/adam/Desktop/git/klein/klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj</string>
</array>
<key>WindowString</key>
<string>0 59 1680 969 0 0 1680 1028 </string>
View
256 klein_C_code/xcode/klein_C_code/klein_C_code.xcodeproj/adam.pbxuser
@@ -32,22 +32,31 @@
PBXFileDataSource_Target_ColumnID,
);
};
- PBXPerProjectTemplateStateSaveDate = 266622841;
- PBXWorkspaceStateSaveDate = 266622841;
+ PBXPerProjectTemplateStateSaveDate = 275156799;
+ PBXWorkspaceStateSaveDate = 275156799;
};
perUserProjectItems = {
- 6611A9EC0FE34AE000A4FBDA /* PBXTextBookmark */ = 6611A9EC0FE34AE000A4FBDA /* PBXTextBookmark */;
- 6611A9ED0FE34AE000A4FBDA /* PBXTextBookmark */ = 6611A9ED0FE34AE000A4FBDA /* PBXTextBookmark */;
- 6611A9EE0FE34AE000A4FBDA /* PBXTextBookmark */ = 6611A9EE0FE34AE000A4FBDA /* PBXTextBookmark */;
- 6611A9EF0FE34AE000A4FBDA /* PBXTextBookmark */ = 6611A9EF0FE34AE000A4FBDA /* PBXTextBookmark */;
- 661E0F690FE457B3006515A6 /* PBXBookmark */ = 661E0F690FE457B3006515A6 /* PBXBookmark */;
- 661E0F6E0FE458B3006515A6 /* PBXTextBookmark */ = 661E0F6E0FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F6F0FE458B3006515A6 /* PBXTextBookmark */ = 661E0F6F0FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F700FE458B3006515A6 /* PBXTextBookmark */ = 661E0F700FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F710FE458B3006515A6 /* PBXTextBookmark */ = 661E0F710FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F720FE458B3006515A6 /* PBXTextBookmark */ = 661E0F720FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F730FE458B3006515A6 /* PBXTextBookmark */ = 661E0F730FE458B3006515A6 /* PBXTextBookmark */;
- 661E0F740FE458B3006515A6 /* PBXTextBookmark */ = 661E0F740FE458B3006515A6 /* PBXTextBookmark */;
+ 661952BF103DF6DA00F3B9A3 = 661952BF103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 661952C0103DF6DA00F3B9A3 = 661952C0103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 661952C1103DF6DA00F3B9A3 = 661952C1103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 661952C2103DF6DA00F3B9A3 = 661952C2103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 661952C3103DF6DA00F3B9A3 = 661952C3103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 661952C4103DF6DA00F3B9A3 = 661952C4103DF6DA00F3B9A3 /* PBXTextBookmark */;
+ 66659D8910668F55004063B4 /* PBXTextBookmark */ = 66659D8910668F55004063B4 /* PBXTextBookmark */;
+ 66659D8A10668F55004063B4 /* PBXTextBookmark */ = 66659D8A10668F55004063B4 /* PBXTextBookmark */;
+ 66659D8B10668F55004063B4 /* PBXTextBookmark */ = 66659D8B10668F55004063B4 /* PBXTextBookmark */;
+ 66659D8C10668F55004063B4 /* PBXTextBookmark */ = 66659D8C10668F55004063B4 /* PBXTextBookmark */;
+ 66659D8D10668F55004063B4 /* PBXTextBookmark */ = 66659D8D10668F55004063B4 /* PBXTextBookmark */;
+ 66659D8E10668F55004063B4 /* PBXTextBookmark */ = 66659D8E10668F55004063B4 /* PBXTextBookmark */;
+ 66659D8F10668F55004063B4 /* PBXTextBookmark */ = 66659D8F10668F55004063B4 /* PBXTextBookmark */;
+ 6675E39B103EF1C000F25AEC = 6675E39B103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E39C103EF1C000F25AEC = 6675E39C103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E39D103EF1C000F25AEC = 6675E39D103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E39E103EF1C000F25AEC = 6675E39E103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E39F103EF1C000F25AEC = 6675E39F103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E3A0103EF1C000F25AEC = 6675E3A0103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E3A1103EF1C000F25AEC = 6675E3A1103EF1C000F25AEC /* PBXTextBookmark */;
+ 6675E3A2103EF1C000F25AEC = 6675E3A2103EF1C000F25AEC /* PBXTextBookmark */;
};
sourceControlManager = 66886F7C0F76AC1A0074489F /* Source Control */;
userBuildSettings = {
@@ -57,11 +66,47 @@
uiCtxt = {
sepNavIntBoundsRect = "{{0, 0}, {1280, 1596}}";
sepNavSelRange = "{914, 0}";
- sepNavVisRect = "{{0, 66}, {1280, 848}}";
+ sepNavVisRect = "{{0, 728}, {1280, 848}}";
sepNavWindowFrame = "{{15, 46}, {1319, 977}}";
};
};
- 6611A9EC0FE34AE000A4FBDA /* PBXTextBookmark */ = {
+ 66088A040992F80100C1CFFE /* activation.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1280, 5334}}";
+ sepNavSelRange = "{11548, 84}";
+ sepNavVisRect = "{{0, 3892}, {1280, 848}}";
+ sepNavWindowFrame = "{{15, 46}, {1319, 977}}";
+ };
+ };
+ 66149FAB099D4CB800F22F2E /* errorCodes.hh */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1280, 848}}";
+ sepNavSelRange = "{753, 19}";
+ sepNavVisRect = "{{0, 0}, {1280, 848}}";
+ sepNavWindowFrame = "{{15, 46}, {1319, 977}}";
+ };
+ };
+ 661952BF103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 660889F90992F77C00C1CFFE /* activation.hh */;
+ name = "activation.hh: get_self_quickly";
+ rLen = 0;
+ rLoc = 914;
+ rType = 0;
+ vrLen = 2374;
+ vrLoc = 2928;
+ };
+ 661952C0103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66289FC909CF68E8006C728B /* memory.cpp */;
+ name = activ;
+ rLen = 5;
+ rLoc = 3113;
+ rType = 0;
+ vrLen = 1367;
+ vrLoc = 2449;
+ };
+ 661952C1103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BC17D77F093FF3EE009766CE /* smallVMDeclarationsOrStubs.hh */;
name = "smallVMDeclarationsOrStubs.hh: 26";
@@ -71,7 +116,7 @@
vrLen = 1029;
vrLoc = 0;
};
- 6611A9ED0FE34AE000A4FBDA /* PBXTextBookmark */ = {
+ 661952C2103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 66289FB209CF688F006C728B /* memory.hh */;
name = "memory.hh: 1";
@@ -81,7 +126,7 @@
vrLen = 732;
vrLoc = 0;
};
- 6611A9EE0FE34AE000A4FBDA /* PBXTextBookmark */ = {
+ 661952C3103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BC5DDF0E093FDE6200FC105C /* lookup.hh */;
name = findObject;
@@ -91,7 +136,7 @@
vrLen = 2029;
vrLoc = 0;
};
- 6611A9EF0FE34AE000A4FBDA /* PBXTextBookmark */ = {
+ 661952C4103DF6DA00F3B9A3 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BCD742C1094404E5000B8247 /* object.hh */;
name = "object.hh: 77";
@@ -101,39 +146,59 @@
vrLen = 1985;
vrLoc = 1725;
};
- 66149FAB099D4CB800F22F2E /* errorCodes.hh */ = {
+ 66289FB209CF688F006C728B /* memory.hh */ = {
uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1280, 848}}";
- sepNavSelRange = "{753, 19}";
- sepNavVisRect = "{{0, 0}, {1280, 848}}";
- sepNavWindowFrame = "{{15, 46}, {1319, 977}}";
+ sepNavIntBoundsRect = "{{0, 0}, {1133, 703}}";
+ sepNavSelRange = "{0, 0}";
+ sepNavVisRect = "{{0, 0}, {1133, 703}}";
+ sepNavWindowFrame = "{{160, 196}, {1172, 832}}";
};
};
- 661E0F690FE457B3006515A6 /* PBXBookmark */ = {
- isa = PBXBookmark;
- fRef = 660889F90992F77C00C1CFFE /* activation.hh */;
+ 66289FC909CF68E8006C728B /* memory.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1280, 5614}}";
+ sepNavSelRange = "{3113, 5}";
+ sepNavVisRect = "{{0, 830}, {1280, 848}}";
+ sepNavWindowFrame = "{{167, 51}, {1319, 977}}";
+ };
};
- 661E0F6E0FE458B3006515A6 /* PBXTextBookmark */ = {
+ 6644476609D20EBC00A0069C /* freeLists.hh */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1133, 703}}";
+ sepNavSelRange = "{103, 17}";
+ sepNavVisRect = "{{0, 0}, {1133, 703}}";
+ sepNavWindowFrame = "{{61, 149}, {1172, 832}}";
+ };
+ };
+ 664447BB09D210BE00A0069C /* freeLists.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {1133, 1750}}";
+ sepNavSelRange = "{0, 0}";
+ sepNavVisRect = "{{0, 462}, {1133, 703}}";
+ sepNavWindowFrame = "{{84, 128}, {1172, 832}}";
+ };
+ };
+ 66659D8910668F55004063B4 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66088A040992F80100C1CFFE /* activation.cpp */;
+ name = "static oop_t self_for_new_activation(ActivationMapObj* contents_addr, oop_t rcvr) {";
+ rLen = 84;
+ rLoc = 11548;
+ rType = 0;
+ vrLen = 3043;
+ vrLoc = 11024;
+ };
+ 66659D8A10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 660889F90992F77C00C1CFFE /* activation.hh */;
name = "activation.hh: get_self_quickly";
rLen = 0;
rLoc = 914;
rType = 0;
- vrLen = 3217;
- vrLoc = 76;
- };
- 661E0F6F0FE458B3006515A6 /* PBXTextBookmark */ = {
- isa = PBXTextBookmark;
- fRef = 66289FC909CF68E8006C728B /* memory.cpp */;
- name = remembered_set;
- rLen = 14;
- rLoc = 10345;
- rType = 0;
- vrLen = 1583;
- vrLoc = 9275;
+ vrLen = 2450;
+ vrLoc = 2852;
};
- 661E0F700FE458B3006515A6 /* PBXTextBookmark */ = {
+ 66659D8B10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 66289FC909CF68E8006C728B /* memory.cpp */;
name = activ;
@@ -143,7 +208,7 @@
vrLen = 1367;
vrLoc = 2449;
};
- 661E0F710FE458B3006515A6 /* PBXTextBookmark */ = {
+ 66659D8C10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BC17D77F093FF3EE009766CE /* smallVMDeclarationsOrStubs.hh */;
name = "smallVMDeclarationsOrStubs.hh: 26";
@@ -153,7 +218,7 @@
vrLen = 1029;
vrLoc = 0;
};
- 661E0F720FE458B3006515A6 /* PBXTextBookmark */ = {
+ 66659D8D10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = 66289FB209CF688F006C728B /* memory.hh */;
name = "memory.hh: 1";
@@ -163,7 +228,7 @@
vrLen = 732;
vrLoc = 0;
};
- 661E0F730FE458B3006515A6 /* PBXTextBookmark */ = {
+ 66659D8E10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BC5DDF0E093FDE6200FC105C /* lookup.hh */;
name = findObject;
@@ -173,7 +238,7 @@
vrLen = 2029;
vrLoc = 0;
};
- 661E0F740FE458B3006515A6 /* PBXTextBookmark */ = {
+ 66659D8F10668F55004063B4 /* PBXTextBookmark */ = {
isa = PBXTextBookmark;
fRef = BCD742C1094404E5000B8247 /* object.hh */;
name = "object.hh: 77";
@@ -183,37 +248,82 @@
vrLen = 1985;
vrLoc = 1725;
};
- 66289FB209CF688F006C728B /* memory.hh */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1133, 703}}";
- sepNavSelRange = "{0, 0}";
- sepNavVisRect = "{{0, 0}, {1133, 703}}";
- sepNavWindowFrame = "{{160, 196}, {1172, 832}}";
- };
+ 6675E39B103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66088A040992F80100C1CFFE /* activation.cpp */;
+ rLen = 1;
+ rLoc = 288;
+ rType = 1;
};
- 66289FC909CF68E8006C728B /* memory.cpp */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1280, 5614}}";
- sepNavSelRange = "{3113, 5}";
- sepNavVisRect = "{{0, 829}, {1280, 848}}";
- sepNavWindowFrame = "{{167, 51}, {1319, 977}}";
- };
+ 6675E39C103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66088A040992F80100C1CFFE /* activation.cpp */;
+ name = "static oop_t self_for_new_activation(ActivationMapObj* contents_addr, oop_t rcvr) {";
+ rLen = 84;
+ rLoc = 11548;
+ rType = 0;
+ vrLen = 3043;
+ vrLoc = 11024;
};
- 6644476609D20EBC00A0069C /* freeLists.hh */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1133, 703}}";
- sepNavSelRange = "{103, 17}";
- sepNavVisRect = "{{0, 0}, {1133, 703}}";
- sepNavWindowFrame = "{{61, 149}, {1172, 832}}";
- };
+ 6675E39D103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 660889F90992F77C00C1CFFE /* activation.hh */;
+ name = "activation.hh: get_self_quickly";
+ rLen = 0;
+ rLoc = 914;
+ rType = 0;
+ vrLen = 2450;
+ vrLoc = 2852;
};
- 664447BB09D210BE00A0069C /* freeLists.cpp */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {1133, 1750}}";
- sepNavSelRange = "{0, 0}";
- sepNavVisRect = "{{0, 462}, {1133, 703}}";
- sepNavWindowFrame = "{{84, 128}, {1172, 832}}";
- };
+ 6675E39E103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66289FC909CF68E8006C728B /* memory.cpp */;
+ name = activ;
+ rLen = 5;
+ rLoc = 3113;
+ rType = 0;
+ vrLen = 1367;
+ vrLoc = 2449;
+ };
+ 6675E39F103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = BC17D77F093FF3EE009766CE /* smallVMDeclarationsOrStubs.hh */;
+ name = "smallVMDeclarationsOrStubs.hh: 26";
+ rLen = 0;
+ rLoc = 668;
+ rType = 0;
+ vrLen = 1029;
+ vrLoc = 0;
+ };
+ 6675E3A0103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 66289FB209CF688F006C728B /* memory.hh */;
+ name = "memory.hh: 1";
+ rLen = 0;
+ rLoc = 0;
+ rType = 0;
+ vrLen = 732;
+ vrLoc = 0;
+ };
+ 6675E3A1103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = BC5DDF0E093FDE6200FC105C /* lookup.hh */;
+ name = findObject;
+ rLen = 10;
+ rLoc = 886;
+ rType = 0;
+ vrLen = 2029;
+ vrLoc = 0;
+ };
+ 6675E3A2103EF1C000F25AEC /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = BCD742C1094404E5000B8247 /* object.hh */;
+ name = "object.hh: 77";
+ rLen = 0;
+ rLoc = 2859;
+ rType = 0;
+ vrLen = 1985;
+ vrLoc = 1725;
};
6676AF95099AC65F002ECCD3 /* blockObj.hh */ = {
uiCtxt = {
View
193 objects/applications/klein/kleinC1_BCI.self
@@ -438,7 +438,7 @@ SlotsToOmit: parent.
previousPCO <- -1.
r.
|
- r: irNodesByBCI mapBy: [|:n. :i| n pcOffsetIfPresent: [|:o| previousPCO: o. o] IfAbsent: [i = 0 ifTrue: [[aaaaaaa]. halt]. previousPCO]]
+ r: irNodesByBCI mapBy: [|:n. :i| n pcOffsetIfPresent: [|:o| previousPCO: o. o] IfAbsent: previousPCO]
Into: myScopeDesc pcOffsetVector copySize: irNodesByBCI size.
r ifNone: myScopeDesc pcOffsetVector).
} | )
@@ -834,12 +834,22 @@ SlotsToOmit: parent.
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'bytecodeInterpreter' -> 'parent' -> () From: ( | {
+ 'Category: interpreting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+
+ interpretBodyOfSlot = ( |
+ |
+ slot isMethod ifTrue: [interpretMethod]
+ False: [dataSlot: slot]).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'bytecodeInterpreter' -> 'parent' -> () From: ( | {
'Category: interpreting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
interpretSlot = ( |
|
- slot isMethod ifTrue: [interpretMethod]
- False: [dataSlot: slot].
+ prologue.
+ interpretBodyOfSlot.
+ epilogue.
self).
} | )
@@ -1427,7 +1437,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: arithmetic\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
add: r1 From: r2 To: dst = ( |
|
@@ -1435,7 +1445,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: arithmetic\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
addImm: anInt From: from To: dst = ( |
|
@@ -1449,10 +1459,9 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
addNode: n = ( |
|
- n isLabel ifTrue: [| oldBB. oldBBEndNode |
- oldBB: currentBB.
+ n isLabel ifTrue: [| oldBBEndNode |
nodeToInsertAfter ifNotNil: [
- oldBBEndNode: oldBB endNode.
+ oldBBEndNode: currentBB endNode.
nodeToInsertAfter canFallThrough ifTrue: [branchToLabel: n].
endCurrentBasicBlockWith: nodeToInsertAfter.
].
@@ -1492,7 +1501,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: building IR nodes\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+ 'Category: control flow\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
artificiallyDetachTheRestOfTheCurrentBasicBlock = ( |
brnch.
@@ -1509,7 +1518,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: building IR nodes\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: control flow\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
artificiallyInsertANewBasicBlock = ( |
labelOfInsertedBB.
@@ -1986,7 +1995,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: labels\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
bindLabel: n = ( |
|
@@ -1996,7 +2005,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: labels\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
branchToLabel: lbl = ( |
|
@@ -2065,7 +2074,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+ 'Category: branches\x7fCategory: conditionals\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
comparisons = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> 'comparisons' -> () From: ( |
{} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodeGenerator parent comparisons.
@@ -2249,7 +2258,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: labels\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
defineLabel = ( |
n.
@@ -2260,7 +2269,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: building IR nodes\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+ 'Category: control flow\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
endCurrentBasicBlock = ( |
|
@@ -2268,7 +2277,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: building IR nodes\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+ 'Category: control flow\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
endCurrentBasicBlockWith: n = ( |
|
@@ -2323,10 +2332,12 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
generateForObjectAtAddress: memObjAddrReg At: indexSmiReg Into: dstObjReg = ( |
|
- addNode: irNodeProtos readOopAtIndex copyBC: currentBC
- Base: memObjAddrReg
- Index: indexSmiReg
- Destination: dstObjReg).
+ addNode: irNodeProtos indexedReadOrWrite copyBC: currentBC
+ KindOfData: irNodeProtos indexedReadOrWrite oopData
+ KindOfAccess: irNodeProtos indexedReadOrWrite read
+ Base: memObjAddrReg
+ Index: indexSmiReg
+ Data: dstObjReg).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -2334,11 +2345,14 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
generateForObjectAtAddress: memObjAddrReg At: indexSmiReg Put: dataObjReg BypassingWriteBarrier: shouldBypassWriteBarrier = ( |
|
- addNode: irNodeProtos writeOopAtIndex copyBC: currentBC
- Base: memObjAddrReg
- Index: indexSmiReg
- Data: dataObjReg
- BypassingWriteBarrier: shouldBypassWriteBarrier).
+ addNode: irNodeProtos indexedReadOrWrite copyBC: currentBC
+ KindOfData: irNodeProtos indexedReadOrWrite oopData
+ KindOfAccess: (shouldBypassWriteBarrier
+ ifTrue: [irNodeProtos indexedReadOrWrite writeBypassingBarrier]
+ False: [irNodeProtos indexedReadOrWrite write ])
+ Base: memObjAddrReg
+ Index: indexSmiReg
+ Data: dataObjReg).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -2380,7 +2394,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: conditionals\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
generateIf: objValue DoesNotEqual: otherObjValue ThenBranchTo: trueFork = ( |
|
@@ -2388,7 +2402,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: conditionals\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
generateIf: objValue Equals: otherObjValue ThenBranchTo: trueFork = ( |
|
@@ -2396,7 +2410,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: conditionals\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
generateIf: objValue Is: comparison With: otherObjValue ThenBranchTo: trueFork = ( |
|
@@ -2413,7 +2427,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: conditionals\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
generateIf: smiValue IsBetweenZeroAnd: max ThenBranchTo: trueFork = ( |
|
@@ -2477,6 +2491,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
'Category: inlining\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
ifShouldInlineSend: key To: rcvrValue Then: inlineBlk Else: noInlineBlk = ( |
+ h.
m.
ss.
t.
@@ -2487,6 +2502,9 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
t: rcvrValue mergedType.
m: t knownMapUsingOracle: compiler objectsOracle IfFail: [^ noInlineBlk value].
+ "Make sure that all nmethods on traits block are reusable."
+ ('value' isPrefixOf: key selector) && [(topBytecodeInterpreter slot holder findReflecteeUsingOracle: compiler objectsOracle) _Eq: traits block] ifTrue: [^ noInlineBlk value].
+
ss: [|:exit|
key lookupSlotsUsing: sourceLevelAllocator context protoSlotFinder
Self: m
@@ -2520,9 +2538,9 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
nodeBefore.
sla.
|
- sla: newSourceLevelAllocatorToInlineMethodSlot: s Key: key ReceiverType: rcvrType.
+ sla: newSourceLevelAllocatorToInlineContext: newContextForMethodSlot: s Key: key ReceiverType: rcvrType.
i: pushNewInterpreterFor: sla InlinedSendNode: sendNode.
- sla context isForABlockMethod ifTrue: [i inlinedBlock: (rcvrType theBlockIfFail: raiseError) originalBlock_replaceThisSlotWithTheValueSlot].
+ sla context isForABlockMethod ifTrue: [i inlinedBlock: rcvrType theBlock originalBlock_replaceThisSlotWithTheValueSlot].
i currentBC: i nonexistentBCAt: 0.
rcvrAndArgValues with: sla incomingRcvrAndArgValues Do: [|:srcV. :dstV| move: srcV To: dstV].
interpretCurrentSlot.
@@ -2537,10 +2555,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
inline: sendNode Slot: s Key: key ReceiverType: rcvrType RcvrAndArgs: rcvrAndArgValues Result: resultValue = ( |
|
- rcvrType isSelf && [rcvrType sourceLevelAllocator outermostScope == topBytecodeInterpreter outermostScope] ifTrue: [
- [aaaaaaa]. "I think this is right. We don't need any reusabilityConditions for inlines from any context
- except the top one, because the top one is the only thing that we customize on."
- [(compiler slot name = 'whileTrue:') && [key selector = 'value'] ifTrue: [halt].].
+ (mightThisNMethodBeCustomizedForType: rcvrType) ifTrue: [
compiler dependsOnKey: key ResolvingToSlot: s.
].
@@ -2553,7 +2568,8 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
inline: sendNode MethodSlot: s Key: key ReceiverType: rcvrType RcvrAndArgs: rcvrAndArgValues Result: resultValue.
"Gotta move the renamed resultValue to the original resultValue."
- [aaaaaaa "This is confusing."]. nodeToInsertAfter isMove ifTrue: [
+ [aaaaaaa "This is confusing."].
+ nodeToInsertAfter isMove ifTrue: [
move: nodeToInsertAfter destinationValue To: resultValue.
nodeToInsertAfter recordDefinersAndUsers. "Make sure the newly-inserted move node has its data-flow info hooked up properly."
] False: [
@@ -2567,7 +2583,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
].
] False: [| nodeBefore. rcvrMap |
nodeBefore: nodeToInsertAfter.
- rcvrMap: rcvrType knownMapUsingOracle: compiler objectsOracle IfFail: raiseError.
+ rcvrMap: rcvrType knownMapUsingOracle: compiler objectsOracle.
dataSlot: s InReceiverWithMap: rcvrMap RcvrAndArgs: rcvrAndArgValues Result: resultValue.
forgeControlFlowLinksStartingFrom: nodeBefore Until: nodeToInsertAfter.
nodeBefore until: nodeToInsertAfter Do: [|:n|
@@ -2583,9 +2599,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
interpretCurrentSlot = ( |
|
- currentBytecodeInterpreter prologue.
currentBytecodeInterpreter interpretSlot.
- currentBytecodeInterpreter epilogue.
self).
} | )
@@ -2665,10 +2679,12 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
loadByteAt: baseAddrReg IndexedBy: indexReg To: dstSmiReg = ( |
|
- addNode: irNodeProtos readByteAtIndex copyBC: currentBC
- Base: baseAddrReg
- Index: indexReg
- Destination: dstSmiReg).
+ addNode: irNodeProtos indexedReadOrWrite copyBC: currentBC
+ KindOfData: irNodeProtos indexedReadOrWrite byteData
+ KindOfAccess: irNodeProtos indexedReadOrWrite read
+ Base: baseAddrReg
+ Index: indexReg
+ Data: dstSmiReg).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -2751,6 +2767,17 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
+ 'Category: inlining\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+
+ mightThisNMethodBeCustomizedForType: t = ( |
+ |
+ "I think we don't need any reusabilityConditions for inlines from any context except
+ the top one, because the top one is the only thing that we customize on. -- Adam, July 2009"
+
+ t isSelf && [t sourceLevelAllocator outermostScope == topBytecodeInterpreter outermostScope]).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
'Category: moving data\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
move: srcValue To: dstValue = ( |
@@ -2846,7 +2873,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: branches\x7fCategory: labels\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
newBranchNodeForLabel: lbl = ( |
|
@@ -2854,7 +2881,27 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: inlining\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
+
+ newContextForMethodSlot: s Key: key ReceiverType: rcvrType = ( |
+ lpScope.
+ rcvrMap.
+ selfMap.
+ |
+
+ rcvrMap: rcvrType knownMapUsingOracle: compiler objectsOracle.
+ lpScope: s contents isReflecteeBlockMethod ifFalse: [nil] True: [rcvrType theBlock lexicalParentScopeDesc].
+ selfMap: s contents isReflecteeBlockMethod ifFalse: [rcvrMap] True: [(bytecodeInterpreterWithScope: lpScope) context selfMap].
+
+ compiler prototypes compilationContext copyForSlot: (compiler objectsOracle kleinifySlot: s)
+ Key: key
+ Self: selfMap
+ Receiver: rcvrMap
+ LexicalParentScope: lpScope).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
+ 'Category: branches\x7fCategory: labels\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
newLabel = ( |
|
@@ -2872,27 +2919,10 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
'Category: inlining\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: private'
- newSourceLevelAllocatorToInlineMethodSlot: s Key: key ReceiverType: rcvrType = ( |
- c.
- lps.
- rcvrMap.
- selfMap.
+ newSourceLevelAllocatorToInlineContext: c = ( |
sla.
|
-
- lps: s contents isReflecteeBlockMethod ifFalse: [nil] True: [(rcvrType theBlockIfFail: raiseError) lexicalParentScopeDesc].
- rcvrMap: rcvrType knownMapUsingOracle: compiler objectsOracle IfFail: raiseError.
- selfMap: s contents isReflecteeBlockMethod ifFalse: [rcvrMap] True: [(bytecodeInterpreterWithScope: lps) context selfMap].
-
- c: compiler prototypes compilationContext copyForSlot: (compiler objectsOracle kleinifySlot: s)
- Key: key
- Self: selfMap
- Receiver: rcvrMap
- LexicalParentScope: lps.
-
- sla: compiler prototypes sourceLevelAllocator
- copyForMachineLevelAllocator: machineLevelAllocator
- Context: c.
+ sla: compiler prototypes sourceLevelAllocator copyForMachineLevelAllocator: machineLevelAllocator Context: c.
sla initializeValues.
sla allocateIncomingAndPreallocatedLocations.
sla).
@@ -2943,14 +2973,17 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
i: compiler prototypes bytecodeInterpreter
copyForIRNodeGenerator: self
Allocator: aSourceLevelAllocator.
+
currentBytecodeInterpreter ifNotNil: [|:ci|
ci inlinedInterpreters addLast: i.
i inliningInterpreter: ci.
].
+
n ifNotNil: [
i nodeToBranchToOnNLR: n nodeToBranchToOnNLR.
[i nodeToBranchToOnNLR controlFlowPreds isEmpty] assert.
].
+
currentBytecodeInterpreter: i.
createLocalReturnBB.
createNLRPointEpilogue.
@@ -2960,12 +2993,9 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
'Category: local variables\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
- readLocalSlot: s Into: dst = ( |
- localValue.
+ readLocalSlot: s Into: dstValue = ( |
|
- localValue: sourceLevelAllocator valueForSlot: s.
- move: localValue To: dst.
- self).
+ move: (sourceLevelAllocator valueForSlot: s) To: dstValue).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -3003,7 +3033,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: shifting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
shiftLeftBy: shift From: src To: dst = ( |
|
@@ -3011,7 +3041,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: shifting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
shiftLeftImmBy: nBits From: src To: dst = ( |
|
@@ -3021,7 +3051,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: shifting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
shiftRightArithBy: shift From: src To: dst = ( |
|
@@ -3029,7 +3059,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
- 'Category: binary operations\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: binary operations\x7fCategory: shifting\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
shiftRightArithImmBy: nBits From: src To: dst = ( |
|
@@ -3041,7 +3071,7 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
'Category: primitives\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
- shouldBeLazyAboutCloningPrimitiveFailBlocks = bootstrap stub -> 'globals' -> 'true' -> ().
+ shouldBeLazyAboutCloningPrimitiveFailBlocks = bootstrap stub -> 'globals' -> 'false' -> ().
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -3066,10 +3096,12 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
storeByteFrom: srcSmiReg To: baseAddrReg IndexedBy: indexReg = ( |
|
- addNode: irNodeProtos writeByteAtIndex copyBC: currentBC
- Base: baseAddrReg
- Index: indexReg
- Data: srcSmiReg).
+ addNode: irNodeProtos indexedReadOrWrite copyBC: currentBC
+ KindOfData: irNodeProtos indexedReadOrWrite byteData
+ KindOfAccess: irNodeProtos indexedReadOrWrite writeBypassingBarrier
+ Base: baseAddrReg
+ Index: indexReg
+ Data: srcSmiReg).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> 'parent' -> () From: ( | {
@@ -3092,11 +3124,8 @@ included before at least one of its preds is.\x7fModuleInfo: Module: kleinC1_BCI
'Category: local variables\x7fModuleInfo: Module: kleinC1_BCI InitialContents: FollowSlot\x7fVisibility: public'
writeLocalSlot: s From: srcValue = ( |
- localValue.
|
- localValue: sourceLevelAllocator valueForSlot: s.
- move: srcValue To: localValue.
- self).
+ move: srcValue To: sourceLevelAllocator valueForSlot: s).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodeGenerator' -> () From: ( | {
View
186 objects/applications/klein/kleinC1_Gens.self
@@ -425,11 +425,12 @@ See the LICENSE file for license information.
generateSwitchForCases: cases If: testBlk Then: thenBlk Else: elseBlk = ( |
forks.
|
- generateExit: [|:end|
+ generateExit: [|:end. i <- 0|
forks: cases copyMappedBy: [newLabel].
cases with: forks Do: [|:c. :f|
- testBlk value: c With: f.
+ testBlk value: c With: f With: i.
"fall through to next case"
+ i: i succ.
].
elseBlk value.
branchToLabel: end.
@@ -453,6 +454,54 @@ See the LICENSE file for license information.
Else: [loadFalseInto: dstBoolReg]).
} | )
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ loadByteAt: addr IndexedBy: indexReg To: dst = ( |
+ |
+ childMustImplement).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ loadValueAtOffset: o FromAddressInRegister: addressReg ToRegister: dstReg = ( |
+ |
+ childMustImplement).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ loadWordAt: addr IndexedBy: index To: dst = ( |
+ |
+ childMustImplement).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ storeByteFrom: src To: addr IndexedBy: indexReg = ( |
+ |
+ childMustImplement).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ storeWordFrom: src To: addr IndexedBy: index = ( |
+ |
+ childMustImplement).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'codeGenerationMixin' -> () From: ( | {
+ 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ storeWordInRegister: srcReg ToOffset: o FromAddressInRegister: addressReg = ( |
+ |
+ childMustImplement).
+ } | )
+
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: accessing\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: private'
@@ -1408,13 +1457,39 @@ Returns an address into a bytes part masquerading as a small integer.
'Category: primitives\x7fCategory: arguments\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
generatePrimitive_ArgAt_IfFail_: node = ( |
- index.
+ indexValue.
|
[_ArgAt: 0 ]. "browsing"
[_ArgAt: 0 IfFail: fb]. "browsing"
- index: node rcvrOrArgOopValueForConstantLocAt: 1 IfFail: raiseError.
- moveLocation: (sourceLevelAllocator valueForIncomingRcvrOrArgAt: index) location
- ToLocation: node resultLoc.
+ indexValue: node rcvrOrArgValueAt: 1.
+ indexValue ifTypeIsConstant: [|:index|
+ moveLocation: (node sourceLevelAllocator valueForIncomingRcvrOrArgAt: index) location
+ ToLocation: node resultLoc.
+ ] Else: [
+ materializeLocsAndFailureHandlerOf: node AndDo: [|:dstReg. :rcvrReg. :indexReg. :fh|
+ fh assertInteger: indexReg.
+ generateSwitchForCases: node sourceLevelAllocator incomingRcvrAndArgValues If: [|:v. :lbl. :i|
+ generateIf: indexReg EqualsImmediate: (layouts smi encode: i) ThenBranchTo: lbl.
+ ] Then: [|:v|
+ moveLocation: v location ToRegister: dstReg.
+ ] Else: [
+ fh fail: 'invalid argument index'.
+ ].
+ ].
+ ].
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
+ 'Category: primitives\x7fCategory: arguments\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
+ generatePrimitive_ArgCountIfFail_: node = ( |
+ |
+ [_ArgCount ]. "browsing"
+ [_ArgCountIfFail: fb]. "browsing"
+ materializeDest: node resultLoc AndDo: [|:dstReg|
+ loadOop: node sourceLevelAllocator incomingRcvrAndArgValues size IntoRegister: dstReg.
+ ].
self).
} | )
@@ -1525,6 +1600,7 @@ Returns an address into a bytes part masquerading as a small integer.
generatePrimitive_OnNonLocalReturn_IfFail_: node = ( |
doneLabel.
+ locationsUsedAfterCall.
nlrLabel.
nlrLabelForProtectBlock.
|
@@ -1538,7 +1614,8 @@ Returns an address into a bytes part masquerading as a small integer.
moveLocation: node rcvrLoc ToLocation: machineLevelAllocator locationForOutgoingRcvrOrArgAt: 0.
nlrLabel: newLabel.
node specialLabelToBranchToOnNLR: nlrLabel.
- genNormalCallSelector: 'value' LiveOopTracker: liveOopTracker copyForNode: node.
+ locationsUsedAfterCall: (node homeScopeValue location & node homeScopeDescValue location) asVector.
+ genNormalCallSelector: 'value' LiveOopTracker: (liveOopTracker copyForNode: node) extraLocationsToPreserve: locationsUsedAfterCall.
node specialLabelToBranchToOnNLR: nil.
comment: 'no NLR happened, so return the result of running the block'.
@@ -1559,7 +1636,7 @@ Returns an address into a bytes part masquerading as a small integer.
nlrLabelForProtectBlock: newLabel.
node specialLabelToBranchToOnNLR: nlrLabelForProtectBlock.
- genNormalCallSelector: 'value:' LiveOopTracker: liveOopTracker copyForNode: node.
+ genNormalCallSelector: 'value:' LiveOopTracker: (liveOopTracker copyForNode: node) extraLocationsToPreserve: locationsUsedAfterCall.
node specialLabelToBranchToOnNLR: nil.
bindLabel: nlrLabelForProtectBlock. "ignore protect block NLR"
@@ -1779,7 +1856,13 @@ the total number. -- Adam, June 2009\x7fModuleInfo: Module: kleinC1_Gens Initial
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'liveOopTracker' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_Gens InitialContents: InitializeToExpression: (nil)\x7fVisibility: private'
+ 'ModuleInfo: Module: kleinC1_Gens InitialContents: InitializeToExpression: (vector)\x7fVisibility: public'
+
+ extraLocationsToPreserve <- ((bootstrap stub -> 'globals') \/-> 'vector') -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> 'liveOopTracker' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_Gens InitialContents: InitializeToExpression: (nil)\x7fVisibility: public'
node.
} | )
@@ -1835,7 +1918,7 @@ the total number. -- Adam, June 2009\x7fModuleInfo: Module: kleinC1_Gens Initial
preserve.
|
couldZap: node machineLevelAllocator locationsThatCouldBeDead.
- preserve: node locationsThatNeedToBePreserved.
+ preserve: node locationsThatNeedToBePreserved, extraLocationsToPreserve.
couldZap asSet copyFilteredBy: [|:loc|
(gcMaskLayout shouldLocationBeRepresentedInGCMask: loc)
&& [(preserve includes: loc) not]
@@ -1878,15 +1961,6 @@ the total number. -- Adam, June 2009\x7fModuleInfo: Module: kleinC1_Gens Initial
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- loadByteAt: addr IndexedBy: indexReg To: dst = ( |
- |
- childMustImplement.
- self).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: moving data\x7fCategory: location-specific methods\x7fCategory: loading\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: private'
loadConstantLocation: loc ToRegister: r = ( |
@@ -2048,23 +2122,6 @@ the total number. -- Adam, June 2009\x7fModuleInfo: Module: kleinC1_Gens Initial
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- loadValueAtOffset: o FromAddressInRegister: addressReg ToRegister: dstReg = ( |
- |
- childMustImplement).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- loadWordAt: addr IndexedBy: index To: dst = ( |
- |
- childMustImplement.
- self).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: moving data\x7fCategory: embedding & loading oops\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: private'
loadZeroIntoRegister: r = ( |
@@ -2353,9 +2410,6 @@ and may fail to compile otherwise.
nmethodInvocationCountSlot = ( |
|
- [aaaaaaa]. "Used to cache these, but then mapping the slot object
- caused trouble on the Klein side. How do I get the transporter
- to initialize the Klein-side one to nil? -- Adam, July 2009"
[invocationCount]. "browsing"
vmKit nmethod asMirror slotAt: 'invocationCount').
} | )
@@ -2600,15 +2654,6 @@ and may fail to compile otherwise.
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- storeByteFrom: src To: addr IndexedBy: indexReg = ( |
- |
- childMustImplement.
- self).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: accessing data slots\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
storeIntoDataSlot: slot OfHolderInLocation: holderLoc FromLocation: srcLoc = ( |
@@ -2691,23 +2736,6 @@ and may fail to compile otherwise.
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- storeWordFrom: src To: addr IndexedBy: index = ( |
- |
- childMustImplement.
- self).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: moving data\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
-
- storeWordInRegister: srcReg ToOffset: o FromAddressInRegister: addressReg = ( |
- |
- childMustImplement).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: accessing\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: private'
topSourceLevelAllocator = ( |
@@ -3416,15 +3444,6 @@ Returns an address into the caller\'s compiled code masquerading as a small inte
generateMoveIncomingReceiverAndArgumentsToNonVolLocations = ( |
|
"could use stswi someday"
-
- [aaaaaaa].
- [
- compiler slot name = 'if:Then:If:Then:If:Then:Else:' ifTrue: [
- breakpoint: 'let\'s step through'.
- halt.
- ].
- ].
-
topSourceLevelAllocator incomingVolatileRegRcvrAndArgLocationsToSaveDo: [|:vol. :nonVolReg. :nonVolMem|
nonVolReg ifNotNil: [moveLocation: vol ToLocation: nonVolReg].
nonVolMem ifNotNil: [moveLocation: vol ToLocation: nonVolMem].
@@ -3635,6 +3654,16 @@ Returns an address into the caller\'s compiled code masquerading as a small inte
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'ppc' -> 'parent' -> () From: ( | {
'Category: primitives\x7fCategory: send descs\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+ generatePrimitiveInto: dstReg Receiver: rcvrReg EntryAddressOfInterpretStubIfFail: fh = ( |
+ |
+ [interpret_stub]. "browsing"
+ generateEntryAddressOfStubNamed: 'interpret_stub' Into: dstReg.
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'ppc' -> 'parent' -> () From: ( | {
+ 'Category: primitives\x7fCategory: send descs\x7fModuleInfo: Module: kleinC1_Gens InitialContents: FollowSlot\x7fVisibility: public'
+
generatePrimitiveInto: dstReg Receiver: rcvrReg EntryAddressOfNMethodLookupStubIfFail: fh = ( |
|
[nmethodCacheLookup_stub]. "browsing"
@@ -4310,7 +4339,14 @@ Returns an address into the caller\'s compiled code masquerading as a small inte
invalidateInlineCache: sendDescReg = ( |
|
moveLocation: (locations constant copyForOop: 0)
- ToLocation: locationForIndex: sendDesc previousMapIndex InSendDesc: sendDescReg).
+ ToLocation: locationForIndex: sendDesc previousMapIndex InSendDesc: sendDescReg.
+
+ "Don't bother doing a polymorphic nmethod cache at all - I'm guessing it'll cost
+ too much to keep recreating it, though we should really test that. -- Adam, July 2009"
+ moveLocation: (locations constant copyForOop: -1)
+ ToLocation: locationForIndex: sendDesc nmethodCacheIndex InSendDesc: sendDescReg.
+
+ self).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'codeGenerators' -> 'ppc' -> 'parent' -> () From: ( | {
View
1,239 objects/applications/klein/kleinC1_IRNodes.self
@@ -108,14 +108,6 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: control-flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- bindLabel = ( |
- |
- self).
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: control-flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
-
canFallThrough = bootstrap stub -> 'globals' -> 'true' -> ().
} | )
@@ -214,7 +206,6 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
generateCode = ( |
n.
|
- bindLabel.
codeGenerator generating: [n: nodeName. n, ' addComment' ] During: [addComment ].
codeGenerator generating: [ n, ' generateSpecificCode'] During: [generateSpecificCode].
self).
@@ -311,12 +302,6 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: testing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- isNonlocalReturn = bootstrap stub -> 'globals' -> 'false' -> ().
- } | )
-
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: testing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
-
isPhiFunction = bootstrap stub -> 'globals' -> 'false' -> ().
} | )
@@ -433,7 +418,7 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: removing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: source-order links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
remove = ( |
|
@@ -442,7 +427,7 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
- 'Category: removing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: source-order links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
removeFromControlFlow = ( |
|
@@ -532,7 +517,7 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
|
i: incomingLiveValues size.
o: outgoingLiveValues size.
- controlFlowSuccsDo: [|:n| outgoingLiveValues addAll: n incomingLiveValues].
+ controlFlowSuccsDo: [|:n| n incomingLiveValues do: [|:v| outgoingLiveValues add: v]].
outgoingLiveValues do: [|:v| (definesValue: v) ifFalse: [incomingLiveValues add: v]].
doSpecialLivenessUpdating.
changed: (i != incomingLiveValues size) || [o != outgoingLiveValues size].
@@ -591,6 +576,14 @@ from the bytecode interpreter.\x7fModuleInfo: Module: kleinC1_IRNodes InitialCon
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
+ 'Category: accessing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ valueSet = ( |
+ |
+ compiler prototypes dataValue valueSet).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> () From: ( | {
'Category: data flow\x7fCategory: liveness\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
valuesThatAreInitiallyKnownToBeLiveDo: blk = ( |
@@ -1104,7 +1097,7 @@ SlotsToOmit: parent.
rcvrOrArgOopValueForConstantLocAt: i IfFail: fb = ( |
|
- (rcvrOrArgValueAt: i) knownConstantValueIfFail: fb).
+ (rcvrOrArgValueAt: i) ifTypeIsConstant: [|:o| o] Else: fb).
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'sendOrPrimitive' -> 'parent' -> () From: ( | {
@@ -1315,6 +1308,12 @@ allocation and can reduce register pressure, yielding better code.
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstractPrimitive' -> 'parent' -> () From: ( | {
'Category: testing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ isPerform = bootstrap stub -> 'globals' -> 'false' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstractPrimitive' -> 'parent' -> () From: ( | {
+ 'Category: testing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
isPrimitive = bootstrap stub -> 'globals' -> 'true' -> ().
} | )
@@ -3111,279 +3110,645 @@ SlotsToOmit: parent.
} | )
bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
- 'Category: vectors\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ 'Category: addressing objects\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- integerRangeTest = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () ToBe: bootstrap addSlotsTo: (
+ indexedReadOrWrite = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () ToBe: bootstrap addSlotsTo: (
bootstrap remove: 'parent' From:
- globals klein compiler1 parent prototypes irNodes abstractConditionalBranch copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes integerRangeTest.
+ globals klein compiler1 parent prototypes irNodes abstract copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite.
CopyDowns:
-globals klein compiler1 parent prototypes irNodes abstractConditionalBranch. copy
+globals klein compiler1 parent prototypes irNodes abstract. copy
SlotsToOmit: parent.
\x7fIsComplete: '.
| ) .
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
'Category: data flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
- integerValue.
+ baseAddressValue.
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (255)'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
+ 'Category: data flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
- maximum <- 255.
+ dataValue.
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
+ 'Category: data flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ indexValue.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ kindOfAccess.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ kindOfData.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> () From: ( | {
'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes integerRangeTest parent.
+ parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent.
'.
| ) .
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
- 'Category: copying\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: kinds of data\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- copyBC: aBC Integer: i Max: m TrueFork: tf FalseFork: ff = ( |
- |
- ((((copyBC: aBC) integerValue: i) maximum: m) trueFork: tf) falseFork: ff).
+ byteData = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent byteData.
+\x7fIsComplete: '.
+ | ) .
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
- 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- generateSpecificCode = ( |
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Into: dstReg With: cg = ( |
|
- codeGenerator materializeSource: integerValue location AndDo: [|:integerReg|
- codeGenerator generateIf: integerReg IsBetweenZeroAnd: maximum ThenBranchTo: trueFork label.
- ].
- codeGenerator branchToLabel: falseFork label.
- self).
+ cg loadByteAt: baseUntaggedAddrReg IndexedBy: indexReg To: dstReg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstractConditionalBranch' -> 'parent' -> ().
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Put: dataReg BypassingWriteBarrier: shouldBypassWriteBarrier With: cg = ( |
+ |
+ cg storeByteFrom: dataReg To: baseUntaggedAddrReg IndexedBy: indexReg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
- 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- replaceUsedValue: v With: newV = ( |
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Into: dstReg With: cg = ( |
|
- case
- if: [v = integerValue] Then: [integerValue: newV]
- Else: [error: 'what value is that?']).
+ cg loadByteAt: baseUntaggedAddrReg IndexedByConstant: index To: dstReg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
- 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- stronglyUsedValuesDo: blk = ( |
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Put: dataReg BypassingWriteBarrier: shouldBypassWriteBarrier With: cg = ( |
|
- blk value: integerValue.
- self).
+ cg storeByteFrom: dataReg To: baseUntaggedAddrReg IndexedByConstant: index).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
- 'Category: interrupt points\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'byteData' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- interruptPoint = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () ToBe: bootstrap addSlotsTo: (
- bootstrap remove: 'parent' From:
- globals klein compiler1 parent prototypes irNodes abstract copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes interruptPoint.
-
-CopyDowns:
-globals klein compiler1 parent prototypes irNodes abstract. copy
-SlotsToOmit: parent.
-
-\x7fIsComplete: '.
- | ) .
+ parent* = bootstrap stub -> 'traits' -> 'oddball' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: copying\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes interruptPoint parent.
-'.
- | ) .
+ copyBC: aBC KindOfData: oopOrByte KindOfAccess: readOrWrite Base: baseAddr Index: i Data: d = ( |
+ |
+ (((((copyBC: aBC) kindOfData: oopOrByte) kindOfAccess: readOrWrite) baseAddressValue: baseAddr) dataValue: d) indexValue: i).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
definedValuesDo: blk = ( |
|
+ kindOfAccess isRead ifTrue: [blk value: dataValue].
self).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
generateSpecificCode = ( |
|
- codeGenerator genStackCheck.
+ codeGenerator materializeSource: baseAddressValue location AndDo: [|:baseUntaggedAddrReg|
+ materializeDataLocationAndDo: [|:dataReg|
+ indexValue location isConstant ifTrue: [
+ kindOfAccess generateForBaseAddress: baseUntaggedAddrReg AtConstant: indexValue location oopValue Data: dataReg Kind: kindOfData With: codeGenerator.
+ ] False: [
+ codeGenerator materializeSource: indexValue location AndDo: [|:indexSmiReg|
+ kindOfAccess generateForBaseAddress: baseUntaggedAddrReg At: indexSmiReg Data: dataReg Kind: kindOfData With: codeGenerator.
+ ].
+ ].
+ ].
+ ].
self).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> ().
+ hasNoSideEffectsOtherThanDefining: v = ( |
+ |
+ [kindOfAccess isRead] assert.
+ [v == dataValue] assert.
+ true).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
- 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- stronglyUsedValuesDo: blk = ( |
- | self).
+ materializeDataLocationAndDo: blk = ( |
+ |
+ kindOfAccess isRead ifTrue: [codeGenerator materializeDest: dataValue location AndDo: blk]
+ False: [codeGenerator materializeSource: dataValue location AndDo: blk]).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
- 'Category: branches\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- label = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () ToBe: bootstrap addSlotsTo: (
- bootstrap remove: 'parent' From:
- bootstrap remove: 'sourcePred' From:
- globals klein compiler1 parent prototypes irNodes abstract copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes label.
+ mergedTypeFor: v AlreadySeen: seen = ( |
+ |
+ [kindOfAccess isRead] assert.
+ [v == dataValue] assert.
-CopyDowns:
-globals klein compiler1 parent prototypes irNodes abstract. copy
-SlotsToOmit: parent sourcePred.
+ "Later on we could be smarter about this."
+ kindsOfPossibleTypes couldBeAnything).
+ } | )
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: kinds of data\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ oopData = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent oopData.
\x7fIsComplete: '.
| ) .
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- basicBlock.
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Into: dstReg With: cg = ( |
+ |
+ cg generateForObjectAtAddress: baseUntaggedAddrReg At: indexReg Into: dstReg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- cachedLabel.
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Put: dataReg BypassingWriteBarrier: shouldBypassWriteBarrier With: cg = ( |
+ |
+ cg generateForObjectAtAddress: baseUntaggedAddrReg
+ At: indexReg
+ Put: dataReg
+ BypassingWriteBarrier: shouldBypassWriteBarrier).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
- 'Category: control flow links\x7fComment: Set of irNodes that branch to me.\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (set copyRemoveAll)'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- controlFlowPreds <- set copyRemoveAll.
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Into: dstReg With: cg = ( |
+ |
+ cg generateForObjectAtAddress: baseUntaggedAddrReg AtConstant: index Into: dstReg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (false)'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- marksStartOfBC <- bootstrap stub -> 'globals' -> 'false' -> ().
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Put: dataReg BypassingWriteBarrier: shouldBypassWriteBarrier With: cg = ( |
+ |
+ cg generateForObjectAtAddress: baseUntaggedAddrReg
+ AtConstant: index
+ Put: dataReg
+ BypassingWriteBarrier: shouldBypassWriteBarrier).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'oopData' -> () From: ( | {
'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( |
- {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes label parent.
-'.
- | ) .
+ parent* = bootstrap stub -> 'traits' -> 'oddball' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- addComment = ( |
- |
- self).
+ parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: kinds of access\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- bindLabel = ( |
- |
- codeGenerator bindLabel: label.
- self).
+ read = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent read.
+\x7fIsComplete: '.
+ | ) .
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: control flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- controlFlowPredsDo: blk = ( |
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Data: dstReg Kind: kindOfData With: cg = ( |
|
- controlFlowPreds do: blk.
- self).
+ kindOfData generateForBaseAddress: baseUntaggedAddrReg At: indexReg Into: dstReg With: cg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: copying\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- copy = ( |
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Data: dstReg Kind: kindOfData With: cg = ( |
|
- resend.copy controlFlowPreds: controlFlowPreds copy).
+ kindOfData generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Into: dstReg With: cg).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- definedValuesDo: blk = ( |
- |
- self).
+ isRead = bootstrap stub -> 'globals' -> 'true' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- generateSpecificCode = ( |
- |
- self).
+ isWrite = bootstrap stub -> 'globals' -> 'false' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: testing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'read' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- isLabel = bootstrap stub -> 'globals' -> 'true' -> ().
+ parent* = bootstrap stub -> 'traits' -> 'oddball' -> ().
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- label = ( |
+ replaceDefinedValue: v With: newV = ( |
|
- cachedLabel ifNil: [
- cachedLabel: codeGenerator newLabel whereDidIComeFrom: self.
- cachedLabel
- ]).
+ case
+ if: [v = dataValue] Then: [[kindOfAccess isRead] assert. dataValue: newV]
+ Else: [error: 'what value is that?']).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> ().
+ replaceUsedValue: v With: newV = ( |
+ |
+ case
+ if: [v = baseAddressValue] Then: [ baseAddressValue: newV]
+ If: [v = indexValue] Then: [ indexValue: newV]
+ If: [v = dataValue] Then: [[kindOfAccess isWrite] assert. dataValue: newV]
+ Else: [error: 'what value is that?']).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: accessing\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
- pcOffsetIfPresent: pb IfAbsent: ab = ( |
+ stronglyUsedValuesDo: blk = ( |
|
- label isResolved
- ifTrue: [pb value: label resolvedValue - codeGenerator origin]
- False: ab).
+ blk value: baseAddressValue.
+ blk value: indexValue.
+ kindOfAccess isWrite ifTrue: [blk value: dataValue].
+ self).
} | )
- bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> 'parent' -> () From: ( | {
- 'Category: control flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: kinds of access\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
- sourcePred: n = ( |
+ write = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent write.
+\x7fIsComplete: '.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ generateForBaseAddress: baseUntaggedAddrReg At: indexReg Data: dataReg Kind: kindOfData With: cg = ( |
+ |
+ kindOfData generateForBaseAddress: baseUntaggedAddrReg
+ At: indexReg
+ Put: dataReg
+ BypassingWriteBarrier: shouldBypassWriteBarrier
+ With: cg).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ generateForBaseAddress: baseUntaggedAddrReg AtConstant: index Data: dataReg Kind: kindOfData With: cg = ( |
+ |
+ kindOfData generateForObjectAtAddress: baseUntaggedAddrReg
+ AtConstant: index
+ Put: dataReg
+ BypassingWriteBarrier: shouldBypassWriteBarrier
+ With: cg).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ isRead = bootstrap stub -> 'globals' -> 'false' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ isWrite = bootstrap stub -> 'globals' -> 'true' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap stub -> 'traits' -> 'oddball' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ shouldBypassWriteBarrier = bootstrap stub -> 'globals' -> 'false' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> () From: ( | {
+ 'Category: kinds of access\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ writeBypassingBarrier = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'writeBypassingBarrier' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes indexedReadOrWrite parent writeBypassingBarrier.
+\x7fIsComplete: '.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'writeBypassingBarrier' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'write' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'indexedReadOrWrite' -> 'parent' -> 'writeBypassingBarrier' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ shouldBypassWriteBarrier = bootstrap stub -> 'globals' -> 'true' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
+ 'Category: vectors\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ integerRangeTest = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () ToBe: bootstrap addSlotsTo: (
+ bootstrap remove: 'parent' From:
+ globals klein compiler1 parent prototypes irNodes abstractConditionalBranch copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes integerRangeTest.
+
+CopyDowns:
+globals klein compiler1 parent prototypes irNodes abstractConditionalBranch. copy
+SlotsToOmit: parent.
+
+\x7fIsComplete: '.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
+ 'Category: data flow links\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ integerValue.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (255)'
+
+ maximum <- 255.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes integerRangeTest parent.
+'.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
+ 'Category: copying\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ copyBC: aBC Integer: i Max: m TrueFork: tf FalseFork: ff = ( |
+ |
+ ((((copyBC: aBC) integerValue: i) maximum: m) trueFork: tf) falseFork: ff).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ generateSpecificCode = ( |
+ |
+ codeGenerator materializeSource: integerValue location AndDo: [|:integerReg|
+ codeGenerator generateIf: integerReg IsBetweenZeroAnd: maximum ThenBranchTo: trueFork label.
+ ].
+ codeGenerator branchToLabel: falseFork label.
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstractConditionalBranch' -> 'parent' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ replaceUsedValue: v With: newV = ( |
+ |
+ case
+ if: [v = integerValue] Then: [integerValue: newV]
+ Else: [error: 'what value is that?']).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'integerRangeTest' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ stronglyUsedValuesDo: blk = ( |
+ |
+ blk value: integerValue.
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
+ 'Category: interrupt points\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ interruptPoint = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () ToBe: bootstrap addSlotsTo: (
+ bootstrap remove: 'parent' From:
+ globals klein compiler1 parent prototypes irNodes abstract copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes interruptPoint.
+
+CopyDowns:
+globals klein compiler1 parent prototypes irNodes abstract. copy
+SlotsToOmit: parent.
+
+\x7fIsComplete: '.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes interruptPoint parent.
+'.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ definedValuesDo: blk = ( |
+ |
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ 'Category: generating code\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ generateSpecificCode = ( |
+ |
+ codeGenerator genStackCheck.
+ self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ parent* = bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'abstract' -> 'parent' -> ().
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'interruptPoint' -> 'parent' -> () From: ( | {
+ 'Category: data flow\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: private'
+
+ stronglyUsedValuesDo: blk = ( |
+ | self).
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> () From: ( | {
+ 'Category: branches\x7fModuleInfo: Module: kleinC1_IRNodes InitialContents: FollowSlot\x7fVisibility: public'
+
+ label = bootstrap define: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () ToBe: bootstrap addSlotsTo: (
+ bootstrap remove: 'parent' From:
+ bootstrap remove: 'sourcePred' From:
+ globals klein compiler1 parent prototypes irNodes abstract copy ) From: bootstrap setObjectAnnotationOf: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( |
+ {} = 'ModuleInfo: Creator: globals klein compiler1 parent prototypes irNodes label.
+
+CopyDowns:
+globals klein compiler1 parent prototypes irNodes abstract. copy
+SlotsToOmit: parent sourcePred.
+
+\x7fIsComplete: '.
+ | ) .
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ basicBlock.
+ } | )
+
+ bootstrap addSlotsTo: bootstrap stub -> 'globals' -> 'klein' -> 'compiler1' -> 'parent' -> 'prototypes' -> 'irNodes' -> 'label' -> () From: ( | {
+ 'ModuleInfo: Module: kleinC1_IRNodes InitialContents: InitializeToExpression: (nil)'
+
+ cachedLabel.
+ } | )