author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Mon, 20 Jun 2016 09:38:10 +0100 | |
changeset 28 | 4bdee0ee3d83 |
parent 27 | 73e7acbd16ff |
child 29 | 5693302d4e24 |
permissions | -rw-r--r-- |
23
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
1 |
" |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
2 |
Copyright (C) 2016-now Jan Vrany |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
3 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
4 |
This code is not an open-source (yet). You may use this code |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
5 |
for your own experiments and projects, given that: |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
6 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
7 |
* all modification to the code will be sent to the |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
8 |
original author for inclusion in future releases |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
9 |
* this is not used in any commercial software |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
10 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
11 |
This license is provisional and may (will) change in |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
12 |
a future. |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
13 |
" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
"{ Package: 'jv:dragonfly/c1' }" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
"{ NameSpace: DragonFly }" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
18 |
Object subclass:#C1Compiler |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
19 |
instanceVariableNames:'method module function asm prologue epilogue contextSetup |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
20 |
literals literalsBaseAddr context stack' |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
classVariableNames:'SelectorSpecialCharMappingTable' |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
22 |
poolDictionaries:'DragonFly::C1LLVMTypes LLVMIntPredicate VMData VMOffsets |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
23 |
VMConstants' |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
category:'DragonFly-C1' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
|
23
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
27 |
!C1Compiler class methodsFor:'documentation'! |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
28 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
29 |
copyright |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
30 |
" |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
31 |
Copyright (C) 2016-now Jan Vrany |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
32 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
33 |
This code is not an open-source (yet). You may use this code |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
34 |
for your own experiments and projects, given that: |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
35 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
36 |
* all modification to the code will be sent to the |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
37 |
original author for inclusion in future releases |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
38 |
* this is not used in any commercial software |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
39 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
40 |
This license is provisional and may (will) change in |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
41 |
a future. |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
42 |
|
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
43 |
" |
d2d9a2d4d6bf
Added README, licenses and copyright notices.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
19
diff
changeset
|
44 |
! ! |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
45 |
|
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
!C1Compiler class methodsFor:'class initialization'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
initialize |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
"Invoked at system start or when the class is dynamically loaded." |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
"/ please change as required (and remove this comment) |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
53 |
SelectorSpecialCharMappingTable := Dictionary withKeysAndValues: |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
#($+ 'pl' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
55 |
$- 'mi' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
$* 'mu' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
$/ 'di' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
$, 'co' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
$@ 'at' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
$< 'le' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
$> 'gr' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
62 |
$= 'eq' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
63 |
$~ 'ne' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
$| 'pi' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
65 |
$\ 'mo' |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
66 |
$& 'am'). |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
67 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
"Created: / 09-02-2016 / 08:43:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
69 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
70 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
!C1Compiler class methodsFor:'compilation'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
compile: method |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
^ self new compile: method |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
"Created: / 09-02-2016 / 08:47:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
78 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
79 |
!C1Compiler class methodsFor:'utilities'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
81 |
functionNameForClass: class selector: selector |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
82 |
"For given class name and selector, returns the name |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
83 |
used by LLVM" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
84 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
85 |
^ String streamContents:[ :s| |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
86 |
s nextPutAll: '__M_D_'. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
s nextPutAll: (class name copyReplaceAll: $: with: $_). |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
s nextPut: $_. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
selector isBinarySelector ifTrue:[ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
90 |
selector do:[:c | |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
s nextPutAll: (SelectorSpecialCharMappingTable at: c) |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
92 |
]. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
93 |
] ifFalse:[ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
94 |
selector do:[:c | |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
c isAlphaNumeric ifTrue:[ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
96 |
s nextPut: c |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
] ifFalse:[ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
98 |
s nextPut: $_. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
c == $: ifFalse:[ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
100 |
c codePoint printOn: s. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
101 |
] |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
102 |
]. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
103 |
] |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
104 |
]. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
105 |
]. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
106 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
107 |
" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
C1Compiler functionNameForClass: C1Compiler selector: #functionNameForClass:selector: |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
109 |
C1Compiler functionNameForClass: SmallInteger selector: #+ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
110 |
C1Compiler functionNameForClass: Object selector: #~= |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
111 |
C1Compiler functionNameForClass: JavaVM selector: #_ALOAD: |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
112 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
113 |
" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
114 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
115 |
"Created: / 09-02-2016 / 08:44:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
116 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
117 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
118 |
!C1Compiler methodsFor:'accessing'! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
119 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
120 |
functionSEND: nArgs |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
121 |
| name | |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
122 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
123 |
self assert: (nArgs between: 0 and:15). |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
124 |
name := '_SEND', nArgs printString. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
125 |
^ self functionNamed: name type: (TyOBJFUNCs at: nArgs + 1). |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
126 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
127 |
"Created: / 20-04-2016 / 21:39:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
128 |
"Modified: / 17-06-2016 / 23:25:05 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
129 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
130 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
131 |
function__MKREALCONTEXT5 |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
132 |
^ self functionNamed: '__MKREALCONTEXT5' type: TyMKREALCONTEXT5 |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
133 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
134 |
"Created: / 17-06-2016 / 23:25:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
26 | 135 |
! |
136 |
||
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
137 |
method |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
138 |
^ method |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
139 |
! |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
140 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
141 |
method:aMethod |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
142 |
method := aMethod. |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
143 |
! ! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
144 |
|
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
145 |
!C1Compiler methodsFor:'compilation'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
146 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
147 |
compile: aMethod |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
148 |
self method: aMethod. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
149 |
self prepare. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
150 |
self prologue. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
151 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
152 |
self epilogue. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
153 |
self finish. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
154 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
155 |
"Created: / 09-02-2016 / 08:52:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
156 |
"Modified: / 21-04-2016 / 09:18:35 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
157 |
! |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
158 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
159 |
finish |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
160 |
"Finish the compilation, i.e., generate machine code |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
161 |
and update method's code pointer" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
162 |
| opts mm object jit literalsSection | |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
163 |
|
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
164 |
object := CompiledCodeObject forCompiledCode: method text: 0 literals: literals size ilcs: 0. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
165 |
literals notEmptyOrNil ifTrue:[ |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
166 |
literalsSection := object literals. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
167 |
1 to: literals size do:[:i | |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
168 |
literalsSection at: i put: (literals at: i). |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
169 |
]. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
170 |
literalsBaseAddr initializer: (LLVMConstant pointer: literalsSection address type: TyOBJVec) |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
171 |
]. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
172 |
module verify. |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
173 |
mm := C1LLVMMCJITMemoryManager for: object. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
174 |
opts := LLVMMCJITCompilerOptions new. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
175 |
opts MCJMM: mm. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
176 |
jit := LLVMExecutionEngine newForModule: module options: opts. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
177 |
method code: (jit addressOfFunction: function). |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
178 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
179 |
"Created: / 21-04-2016 / 09:19:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
180 |
"Modified: / 20-06-2016 / 09:22:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
181 |
! |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
182 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
183 |
prepare |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
184 |
| name | |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
185 |
name := self class functionNameForClass: method mclass ? UndefinedObject selector: method selector ? '<unbound>'. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
186 |
module := LLVMModule newWithName: name. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
187 |
function := module addFunctionNamed: name type: (TyOBJFUNCs at: method numArgs + 1). |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
188 |
(function parameterAt: OBJFUNCArgIndexReceiver) name: 'zelf'. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
189 |
(function parameterAt: OBJFUNCArgIndexSelector) name: 'selector'. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
190 |
(function parameterAt: OBJFUNCArgIndexSearchClass) name: 'searchClass'. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
191 |
(function parameterAt: OBJFUNCArgIndexILC) name: 'pilc'. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
192 |
1 to: method numArgs do:[:i | (function parameterAt: OBJFUNCArgIndexArgBase + i) name: 'arg' , i printString ]. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
193 |
asm := function builder. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
194 |
literals := OrderedCollection with: method. |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
195 |
literalsBaseAddr := module addGlobalNamed: '__literals' value: (LLVMConstant null: TyOBJVec) |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
196 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
197 |
"Created: / 21-04-2016 / 09:17:06 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
198 |
"Modified: / 20-06-2016 / 20:28:18 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
199 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
200 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
201 |
!C1Compiler methodsFor:'private'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
202 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
203 |
epilogue |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
204 |
asm continue: epilogue. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
205 |
asm ret: |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
206 |
(asm call: self function__MKREALCONTEXT5 |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
207 |
_: { self loadRetvalTemp }) |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
208 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
209 |
"Created: / 15-04-2016 / 23:38:09 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
210 |
"Modified: / 17-06-2016 / 23:27:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
211 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
212 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
213 |
functionNamed: name type: type |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
214 |
| f | |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
215 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
216 |
f := module getFunctionNamed: name. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
217 |
f isNil ifTrue:[ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
218 |
f := module addFunctionNamed: name type: type |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
219 |
]. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
220 |
^ f |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
221 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
222 |
"Created: / 17-06-2016 / 23:23:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
223 |
! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
224 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
225 |
prologue |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
226 |
| classOfReceiver classInILC classCheck | |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
227 |
prologue := function addBasicBlockNamed: 'prologue'. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
228 |
epilogue := function addBasicBlockNamed: 'epilogue'. |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
229 |
asm continue: prologue. |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
230 |
classOfReceiver := self loadClassOf:(function parameterAt:OBJFUNCArgIndexReceiver). |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
231 |
classInILC := self loadClassFromILC:(function parameterAt:OBJFUNCArgIndexILC). |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
232 |
classCheck := asm icmp: (asm ptr: classOfReceiver toInt: LLVMType intptr) |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
233 |
_: (asm ptr: classInILC toInt: LLVMType intptr) |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
234 |
cond: LLVMIntNE. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
235 |
asm if: classCheck"failed" then: [ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
236 |
"/ Class check failed, call _SENDX()" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
237 |
asm ret: ( |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
238 |
asm call: (self functionSEND:method numArgs) _: { |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
239 |
function parameterAt: OBJFUNCArgIndexReceiver. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
240 |
function parameterAt: OBJFUNCArgIndexSelector. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
241 |
function parameterAt: OBJFUNCArgIndexSearchClass. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
242 |
function parameterAt: OBJFUNCArgIndexILC } , |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
243 |
(1 to: method numArgs collect:[:i | function parameterAt: OBJFUNCArgIndexArgBase + i ]) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
244 |
). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
245 |
]. |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
246 |
self contextSetup. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
247 |
asm continue: (function addBasicBlockNamed:'body'). |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
248 |
|
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
249 |
"Created: / 09-02-2016 / 17:07:28 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
250 |
"Modified: / 17-06-2016 / 23:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
251 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
252 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
253 |
!C1Compiler methodsFor:'private-context setup'! |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
254 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
255 |
contextSetup |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
256 |
| flags | |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
257 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
258 |
contextSetup := function addBasicBlockNamed:'context-setup'. |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
259 |
asm continue:contextSetup. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
260 |
context := asm alloca:(C1LLVMTypes tyContext:(method numArgs + method numVars + method numTemps)) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
261 |
as:'__context'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
262 |
flags := (method isJavaMethod ifTrue:[ __LAZYJCON ] ifFalse:[ method isBlock ifTrue:[ __LAZYBCON ] ifFalse:[ __LAZYMCON ]]) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
263 |
| __CANNOT_RETURN "/ For now, we don't (yet) fill setjmp() buffer |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
264 |
| (method numArgs bitShift: __NARG_SHIFT) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
265 |
| (method numVars bitShift: __NVAR_SHIFT) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
266 |
| (method numTemps bitShift: __NTMP_SHIFT). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
267 |
asm store:(self loadSmallInteger: flags) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
268 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexFlags }). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
269 |
|
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
270 |
asm store:(self loadLiteral: method) |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
271 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexMethod }). |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
272 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
273 |
asm store:self loadReceiver |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
274 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexReceiver }). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
275 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
276 |
asm store:self loadSelector |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
277 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexSelector }). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
278 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
279 |
asm store:self loadSearchClass |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
280 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexSearchClass }). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
281 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
282 |
asm store:(asm bitcast: self loadThisContext to: LLVMType intptr pointer) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
283 |
at:(asm gep:context at:{ 0 . TyContextFieldIndexSenderS }). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
284 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
285 |
self storeThisContext: context. |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
286 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
287 |
"Created: / 20-04-2016 / 23:12:22 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
288 |
"Modified: / 20-06-2016 / 20:44:18 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
289 |
! ! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
290 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
291 |
!C1Compiler methodsFor:'private-load / store'! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
292 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
293 |
loadClassFromILC:pIlc |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
294 |
self assert:pIlc type = TyInlineCachePtr. |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
295 |
^ asm load:(asm gep:pIlc at:{ 0 . TyInlineCacheIndexClass }) |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
296 |
"Created: / 12-02-2016 / 13:19:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" "Modified: / 15-04-2016 / 23:18:52 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
297 |
! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
298 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
299 |
loadClassOf:obj |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
300 |
| class1 class2 class3 class23| |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
301 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
302 |
|
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
303 |
asm if: (self isNilObject: obj) then:[ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
304 |
class1 := self loadClassUndefinedObject. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
305 |
] else: [ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
306 |
asm if: (self isSmallIntegerObject:obj) then: [ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
307 |
class2 := self loadClassSmallInteger. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
308 |
] else:[ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
309 |
class3 := (asm load:(asm gep:obj at:{ 0 . TyInstanceFieldIndexClass })). |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
310 |
]. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
311 |
class23 := asm phi: { class2 . class3 }. |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
312 |
]. |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
313 |
^ asm phi: { class1 . class23 } |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
314 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
315 |
"Created: / 09-02-2016 / 17:25:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
316 |
"Modified: / 18-06-2016 / 20:50:51 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
317 |
! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
318 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
319 |
loadClassSmallInteger |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
320 |
| addr | |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
321 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
322 |
addr := asm |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
323 |
int:(LLVMConstant uintptr:ADDR_SmallInteger) |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
324 |
toPtr:TyOBJ pointer |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
325 |
as:'ADDR_SmallInteger'. |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
326 |
^ asm load:addr as: 'SmallInteger'. |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
327 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
328 |
"Created: / 12-02-2016 / 11:54:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
329 |
"Modified: / 21-04-2016 / 17:03:02 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
330 |
! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
331 |
|
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
332 |
loadClassUndefinedObject |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
333 |
| addr | |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
334 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
335 |
addr := asm |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
336 |
int:(LLVMConstant uintptr:ADDR_UndefinedObject ) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
337 |
toPtr:TyOBJ pointer |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
338 |
as:'ADDR_UndefinedObject'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
339 |
^ asm load:addr as: 'UndefinedObject'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
340 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
341 |
"Created: / 18-06-2016 / 00:47:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
342 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
343 |
|
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
344 |
loadLiteral: anObject |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
345 |
| index | |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
346 |
anObject class == SmallInteger ifTrue:[ |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
347 |
^ self loadSmallInteger: anObject. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
348 |
]. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
349 |
anObject isNil ifTrue:[ |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
350 |
^ self loadNil. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
351 |
]. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
352 |
index := literals identityIndexOf: anObject. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
353 |
index == 0 ifTrue:[ |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
354 |
literals add: anObject. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
355 |
index := literals size. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
356 |
]. |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
357 |
^ asm load: (asm gep: (asm load: literalsBaseAddr) at: index - 1) |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
358 |
as: ('literal_', index printString) |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
359 |
|
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
360 |
"Created: / 20-06-2016 / 20:41:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
361 |
"Modified: / 20-06-2016 / 23:35:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
362 |
! |
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
363 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
364 |
loadNil |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
365 |
^ asm int:(LLVMConstant uintptr:0) toPtr:TyOBJ as: 'nil' |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
366 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
367 |
"Created: / 21-04-2016 / 13:59:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
368 |
"Modified: / 20-06-2016 / 23:36:50 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
369 |
! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
370 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
371 |
loadReceiver |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
372 |
^ context isNil |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
373 |
ifTrue:[ function parameterAt: OBJFUNCArgIndexReceiver ] |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
374 |
ifFalse:[ asm load: (asm gep: context at:{ 0 . TyContextFieldIndexReceiver }) as: 'zelf' ] |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
375 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
376 |
"Created: / 20-04-2016 / 22:09:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
377 |
"Modified: / 20-06-2016 / 23:37:09 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
378 |
! |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
379 |
|
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
380 |
loadRetvalTemp |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
381 |
self assert: context notNil description: 'No context!!'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
382 |
^ asm load: (asm gep: context at:{ 0 . TyContextFieldIndexRetvalTemp }) as: 'retvalTemp' |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
383 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
384 |
"Created: / 17-06-2016 / 23:13:50 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
385 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
386 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
387 |
loadSearchClass |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
388 |
^ context isNil |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
389 |
ifTrue:[ function parameterAt: OBJFUNCArgIndexSearchClass ] |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
390 |
ifFalse:[ asm load: (asm gep: context at:{ 0 . TyContextFieldIndexSearchClass }) as: 'searchClass' ] |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
391 |
|
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
392 |
"Created: / 20-04-2016 / 23:27:03 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
393 |
"Modified: / 20-06-2016 / 23:37:24 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
394 |
! |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
395 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
396 |
loadSelector |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
397 |
^ context isNil |
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
398 |
ifTrue:[ function parameterAt: OBJFUNCArgIndexSelector ] |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
399 |
ifFalse:[ asm load: (asm gep: context at:{ 0 . TyContextFieldIndexSelector }) as: 'selector'] |
18
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
400 |
|
81ed8ce0852f
C1: Added context setup code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
401 |
"Created: / 20-04-2016 / 23:24:12 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
402 |
"Modified: / 20-06-2016 / 23:37:33 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
403 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
404 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
405 |
loadSmallInteger: value |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
406 |
self assert: (value between: SmallInteger minVal and: SmallInteger maxVal). |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
407 |
^asm int: (LLVMConstant sintptr: (value << 1) + 1) toPtr: TyOBJ as:'smallint_', value printString |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
408 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
409 |
"Created: / 18-06-2016 / 22:15:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
28
4bdee0ee3d83
Initial support for literals
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
27
diff
changeset
|
410 |
"Modified: / 20-06-2016 / 23:37:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
411 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
412 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
413 |
loadThisContext |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
414 |
| addr | |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
415 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
416 |
addr := asm |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
417 |
int:(LLVMConstant uintptr:ADDR___thisContext) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
418 |
toPtr:TyOBJ pointer |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
419 |
as:'ADDR___thisContext'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
420 |
^ asm load:addr as: '__thisContext'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
421 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
422 |
"Created: / 17-06-2016 / 23:38:20 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
423 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
424 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
425 |
storeRetvalTemp: value |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
426 |
self assert: context notNil description: 'No context!!'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
427 |
^ asm store: value at: (asm gep: context at:{ 0 . TyContextFieldIndexRetvalTemp }) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
428 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
429 |
"Created: / 17-06-2016 / 23:14:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
430 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
431 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
432 |
storeThisContext: value |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
433 |
| addr valueAsOBJ | |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
434 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
435 |
valueAsOBJ := value type = TyOBJ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
436 |
ifTrue:[ value ] |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
437 |
ifFalse:[ asm bitcast: value to: TyOBJ ]. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
438 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
439 |
addr := asm |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
440 |
int:(LLVMConstant uintptr:ADDR___thisContext) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
441 |
toPtr:TyOBJ pointer |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
442 |
as:'ADDR___thisContext'. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
443 |
asm store: valueAsOBJ at: addr. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
444 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
445 |
"Created: / 17-06-2016 / 23:38:50 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
446 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
447 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
448 |
!C1Compiler methodsFor:'private-testing'! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
449 |
|
27
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
450 |
isNilObject: value |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
451 |
self assert: value type = TyOBJ. |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
452 |
^ asm icmp: (asm ptr: value toInt: LLVMType intptr) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
453 |
_: (LLVMConstant uintptr: 0) |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
454 |
cond: LLVMIntEQ |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
455 |
|
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
456 |
"Created: / 18-06-2016 / 00:48:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
457 |
! |
73e7acbd16ff
Simple method prologue / epilogue implementation
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
26
diff
changeset
|
458 |
|
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
459 |
isSmallIntegerObject: value |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
460 |
self assert: value type = TyOBJ. |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
461 |
^ asm icmp: (asm and: (asm ptr: value toInt: LLVMType intptr) _: (LLVMConstant uintptr: 1)) |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
462 |
_: (LLVMConstant uintptr: 1) |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
463 |
cond: LLVMIntEQ |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
464 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
465 |
"Created: / 09-02-2016 / 17:30:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
466 |
"Modified: / 12-02-2016 / 11:55:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
467 |
! ! |
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
468 |
|
19
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
469 |
!C1Compiler class methodsFor:'documentation'! |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
470 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
471 |
version_HG |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
472 |
|
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
473 |
^ '$Changeset: <not expanded> $' |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
474 |
! ! |
51a3540a2a10
C1: Added C1Compiler #prepare/#finish
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
17
diff
changeset
|
475 |
|
17
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
476 |
|
54798ae989cc
Initial work on LLVM-based C1 compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
477 |
C1Compiler initialize! |