Mercurial > repos > tabletprog
comparison modules/llcompile.tp @ 354:a6cdcc1b1c02
Fix il and llcompile modules enough that it actually attempts to run the compiled program
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 15 Apr 2015 20:08:38 -0700 |
parents | 95bc24c729e6 |
children | 3b023e5a0b42 |
comparison
equal
deleted
inserted
replaced
353:95bc24c729e6 | 354:a6cdcc1b1c02 |
---|---|
124 _size <- _asize | 124 _size <- _asize |
125 //TODO: sign/zero extend result | 125 //TODO: sign/zero extend result |
126 } | 126 } |
127 _signed <- (l signed?) || (r signed?) | 127 _signed <- (l signed?) || (r signed?) |
128 _opMap ifget: (expr op) :ingen { | 128 _opMap ifget: (expr op) :ingen { |
129 ilf add: (ingen: lv rv (dest val) _size) | 129 if: (lv isInteger?) { |
130 tmp <- lv | |
131 lv <- ilf getReg | |
132 ilf add: (il mov: tmp lv ls) | |
133 } | |
134 ilf add: (ingen: rv lv (dest val) _size) | |
130 #{ | 135 #{ |
131 val <- dest val | 136 val <- dest val |
132 size <- _size | 137 size <- _size |
133 signed? <- _signed | 138 signed? <- _signed |
134 } | 139 } |
135 } else: { | 140 } else: { |
136 _compOps ifget: (expr op) :condFun { | 141 _compOps ifget: (expr op) :condFun { |
137 if: (rv isInteger?) { | 142 if: (lv isInteger?) { |
138 tmp <- rv | 143 tmp <- lv |
139 rv <- ilf getReg | 144 lv <- ilf getReg |
140 ilf add: (il mov: tmp rv rs) | 145 ilf add: (il mov: tmp lv ls) |
141 } | 146 } |
142 ilf add: (il cmp: lv rv _size) | 147 ilf add: (il cmp: rv lv _size) |
143 cond <- condFun: _signed | 148 cond <- condFun: _signed |
144 ilf add: (il bool: cond (dest val)) | 149 ilf add: (il bool: cond (dest val)) |
145 #{ | 150 #{ |
146 val <- dest val | 151 val <- dest val |
147 size <- il b | 152 size <- il b |
509 text <- (file open: (args get: 1)) readAll | 514 text <- (file open: (args get: 1)) readAll |
510 mcode <- compileText: text | 515 mcode <- compileText: text |
511 _notError: mcode { | 516 _notError: mcode { |
512 ba <- bytearray executableFromBytes: mcode | 517 ba <- bytearray executableFromBytes: mcode |
513 arg <- if: (length: args) > 2 { int32: (args get: 2) } else: {0} | 518 arg <- if: (length: args) > 2 { int32: (args get: 2) } else: {0} |
514 ba runWithArg: (arg i64) | 519 res <- ba runWithArg: (arg int64) |
520 print: (string: res) . "\n" | |
515 } else: :err { | 521 } else: :err { |
516 (file stderr) write: (err msg) . "\n" | 522 (file stderr) write: (err msg) . "\n" |
517 } | 523 } |
518 } else: { | 524 } else: { |
519 (file stderr) write: "Usage: llcompile FILE\n" | 525 (file stderr) write: "Usage: llcompile FILE\n" |