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"