comparison modules/llcompile.tp @ 361:06dceff348ea

llcompile now has Hacky support for calling C functions using dl to lookup symbols and almost has support string constants
author Michael Pavone <pavone@retrodev.com>
date Thu, 23 Apr 2015 19:24:20 -0700
parents 0b83f15e819d
children
comparison
equal deleted inserted replaced
360:0b83f15e819d 361:06dceff348ea
22 _notError: vals ifnoterr else: :e { e } 22 _notError: vals ifnoterr else: :e { e }
23 } 23 }
24 24
25 _ilFun <- :_name { 25 _ilFun <- :_name {
26 _buff <- #[] 26 _buff <- #[]
27 _data <- #[]
27 _blockStack <- [] 28 _blockStack <- []
29 _labelDefs <- dict hash
28 _nextReg <- 0 30 _nextReg <- 0
29 #{ 31 #{
30 name <- { _name } 32 name <- { _name }
31 add <- :inst { _buff append: inst } 33 add <- :inst { _buff append: inst }
34 addData <- :data {
35 lbl <- il label
36 dataPos <- _data length
37 _labelDefs set: dataPos lbl
38 _data append: data
39 lbl reference
40 }
32 getReg <- { 41 getReg <- {
33 r <- il reg: _nextReg 42 r <- il reg: _nextReg
34 _nextReg <- _nextReg + 1 43 _nextReg <- _nextReg + 1
35 r 44 r
36 } 45 }
43 _buff <- _blockStack value 52 _buff <- _blockStack value
44 _blockStack <- _blockStack tail 53 _blockStack <- _blockStack tail
45 res 54 res
46 } 55 }
47 buffer <- { _buff } 56 buffer <- { _buff }
57 finalize <- {
58 foreach: _data :idx data {
59 _buff append: (_labelDefs get: idx else: { false })
60 _buff append: (il data: data)
61 }
62 }
48 } 63 }
49 } 64 }
50 65
51 _sizeMap <- dict hash 66 _sizeMap <- dict hash
52 _sizeMap set: "8" (il b) 67 _sizeMap set: "8" (il b)
157 } 172 }
158 } 173 }
159 } 174 }
160 } 175 }
161 _compileString <- :expr syms ilf assignTo { 176 _compileString <- :expr syms ilf assignTo {
162 177 lbl <- ilf addData: (expr val)
178 v <- assignTo value: :asn {
179 asn
180 } none: {
181 lbl
182 }
183 #{
184 val <- v
185 //TODO: Asbstract pointer size
186 size <- il q
187 signed? <- false
188 }
163 } 189 }
164 _compileInt <- :expr syms ilf assignTo { 190 _compileInt <- :expr syms ilf assignTo {
165 sz <- il sizeFromBytes: (expr size) 191 sz <- il sizeFromBytes: (expr size)
166 assignTo value: :asn { 192 assignTo value: :asn {
167 ilf add: (il mov: (expr val) (asn val) sz) 193 ilf add: (il mov: (expr val) (asn val) sz)
439 last value: :v { 465 last value: :v {
440 ilf add: (il return: (v val) (v size)) 466 ilf add: (il return: (v val) (v size))
441 } none: { 467 } none: {
442 ilf add: (il return: 0 (il l)) 468 ilf add: (il return: 0 (il l))
443 } 469 }
470 ilf finalize
444 ilf 471 ilf
445 } else: { 472 } else: {
446 argErrors 473 argErrors
447 } 474 }
448 } 475 }