]> gitweb.factorcode.org Git - factor.git/blob - basis/bootstrap/assembler/arm.factor
bootstrap.assember: Add arm files. They don't work yet.
[factor.git] / basis / bootstrap / assembler / arm.factor
1 ! Copyright (C) 2020 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: bootstrap.image.private cpu.arm.assembler kernel
4 kernel.private layouts locals.backend math.private namespaces
5 slots.private strings.private ;
6 IN: bootstrap.arm
7
8 big-endian off
9
10 [
11 ] CALLBACK-STUB jit-define
12
13 [
14 ] JIT-PUSH-LITERAL jit-define
15
16 [
17 ] JIT-WORD-CALL jit-define
18
19 [
20 ] JIT-IF jit-define
21
22 : jit->r ( -- )
23     1 bootstrap-cells rs-reg rs-reg ADDi64
24     -1 bootstrap-cells ds-reg rs-reg LDR-post ;
25
26 : jit-r> ( -- )
27     1 bootstrap-cells ds-reg ds-reg ADDi64
28     -1 bootstrap-cells rs-reg ds-reg LDR-post ;
29
30 : jit-2>r ( -- )
31     1 bootstrap-cells rs-reg rs-reg ADDi64
32     -1 bootstrap-cells ds-reg rs-reg LDR-post
33     1 bootstrap-cells rs-reg rs-reg ADDi64
34     -1 bootstrap-cells ds-reg rs-reg LDR-post ;
35
36 : jit-2r> ( -- )
37     1 bootstrap-cells ds-reg ds-reg ADDi64
38     -1 bootstrap-cells rs-reg ds-reg LDR-post
39     1 bootstrap-cells ds-reg ds-reg ADDi64
40     -1 bootstrap-cells rs-reg ds-reg LDR-post ;
41
42 : jit-3>r ( -- )
43     1 bootstrap-cells rs-reg rs-reg ADDi64
44     -1 bootstrap-cells ds-reg rs-reg LDR-post
45     1 bootstrap-cells rs-reg rs-reg ADDi64
46     -1 bootstrap-cells ds-reg rs-reg LDR-post
47     1 bootstrap-cells rs-reg rs-reg ADDi64
48     -1 bootstrap-cells ds-reg rs-reg LDR-post ;
49
50 : jit-3r> ( -- )
51     1 bootstrap-cells ds-reg ds-reg ADDi64
52     -1 bootstrap-cells rs-reg ds-reg LDR-post
53     1 bootstrap-cells ds-reg ds-reg ADDi64
54     -1 bootstrap-cells rs-reg ds-reg LDR-post
55     1 bootstrap-cells ds-reg ds-reg ADDi64
56     -1 bootstrap-cells rs-reg ds-reg LDR-post ;
57
58 [
59     ! jit->r
60     ! 0 CALL f rc-relative rel-word
61     ! jit-r>
62 ] JIT-DIP jit-define
63
64 [
65 ] JIT-2DIP jit-define
66
67 [
68 ] JIT-3DIP jit-define
69
70 [
71 ] JIT-EXECUTE jit-define
72
73 [
74 ] JIT-PROLOG jit-define
75
76 [
77 ] JIT-EPILOG jit-define
78
79 [
80 ] JIT-RETURN jit-define
81
82
83 ! ! ! Polymorphic inline caches
84 ! The PIC stubs are not permitted to touch pic-tail-reg.
85
86 ! Load a value from a stack position
87 [
88 ] PIC-LOAD jit-define
89
90 [
91 ] PIC-TAG jit-define
92
93
94 [
95 ] PIC-TUPLE jit-define
96
97 [
98 ] PIC-CHECK-TAG jit-define
99
100 [
101 ] PIC-HIT jit-define
102
103 [
104 ] MEGA-LOOKUP jit-define
105
106
107 {
108     ! ## Fixnums
109
110     ! ### Add
111     { fixnum+fast [
112     ] }
113
114     ! ### Bit stuff
115     { fixnum-bitand [ 
116     ] }
117     { fixnum-bitnot [
118     ] }
119     { fixnum-bitor [
120     ] }
121     { fixnum-bitxor [
122     ] }
123     { fixnum-shift-fast [
124     ] }
125
126     ! ### Comparisons
127     { both-fixnums? [
128     ] }
129     { eq? [
130     ] }
131     { fixnum> [
132     ] }
133     { fixnum>= [
134     ] }
135     { fixnum< [
136     ] }
137     { fixnum<= [
138     ] }
139
140     ! ### Div/mod
141     { fixnum-mod [
142     ] }
143     { fixnum/i-fast [
144     ] }
145     { fixnum/mod-fast [
146     ] }
147
148     ! ### Mul
149     { fixnum*fast [
150     ] }
151
152     ! ### Sub
153     { fixnum-fast [
154     ] }
155
156     ! ## Locals
157     { drop-locals [
158     ] }
159     { get-local [
160     ] }
161     { load-local [
162     ] }
163
164     ! ## Objects
165     { slot [
166     ] }
167     { string-nth-fast [
168     ] }
169     { tag [
170     ] }
171
172     ! ## Shufflers
173
174     ! ### Drops
175     { drop [ ] } ! ds-reg SUBi64 ] } ! ds-reg bootstrap-cell SUB ] }
176     { 2drop [ ] } ! ds-reg 2 bootstrap-cells SUB ] }
177     { 3drop [ ] } ! ds-reg 3 bootstrap-cells SUB ] }
178     { 4drop [ ] } ! ds-reg 4 bootstrap-cells SUB ] }
179
180     ! ### Dups
181     { dup [
182     ] }
183     { 2dup [
184     ] }
185     { 3dup [
186     ] }
187     { 4dup [
188     ] }
189     { dupd [
190     ] }
191
192     ! ### Misc shufflers
193     { over [
194     ] }
195     { pick [
196     ] }
197
198     ! ### Nips
199     { nip [
200     ] }
201     { 2nip [
202     ] }
203
204     ! ### Swaps
205     { -rot [
206     ] }
207     { rot [
208     ] }
209     { swap [
210     ] }
211     { swapd [
212     ] }
213
214     ! ## Signal handling
215     { leaf-signal-handler [
216     ] }
217     { signal-handler [
218     ] }
219
220
221 } define-sub-primitives
222
223
224 ! [ "bootstrap.arm" forget-vocab ] with-compilation-unit