feat: add writer for assembly code
This commit is contained in:
parent
2a234f6db8
commit
67f7e64b95
@ -2,6 +2,7 @@ package wacc
|
|||||||
|
|
||||||
object assemblyIR {
|
object assemblyIR {
|
||||||
|
|
||||||
|
sealed trait AsmLine
|
||||||
sealed trait Operand
|
sealed trait Operand
|
||||||
sealed trait Src extends Operand // mem location, register and imm value
|
sealed trait Src extends Operand // mem location, register and imm value
|
||||||
sealed trait Dest extends Operand // mem location and register
|
sealed trait Dest extends Operand // mem location and register
|
||||||
@ -58,7 +59,7 @@ object assemblyIR {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO Check if dest and src are not both memory locations
|
// TODO Check if dest and src are not both memory locations
|
||||||
abstract class Operation(ins: String, ops: Operand*) {
|
abstract class Operation(ins: String, ops: Operand*) extends AsmLine {
|
||||||
override def toString: String = s"\t$ins ${ops.mkString(", ")}"
|
override def toString: String = s"\t$ins ${ops.mkString(", ")}"
|
||||||
}
|
}
|
||||||
case class Add(op1: Dest, op2: Src) extends Operation("add", op1, op2)
|
case class Add(op1: Dest, op2: Src) extends Operation("add", op1, op2)
|
||||||
@ -83,7 +84,7 @@ object assemblyIR {
|
|||||||
case class Jump(op1: LabelArg, condition: Cond = Cond.Always)
|
case class Jump(op1: LabelArg, condition: Cond = Cond.Always)
|
||||||
extends Operation(s"j${condition.toString}", op1)
|
extends Operation(s"j${condition.toString}", op1)
|
||||||
|
|
||||||
case class LabelDef(name: String) {
|
case class LabelDef(name: String) extends AsmLine {
|
||||||
override def toString = s"$name:"
|
override def toString = s"$name:"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
src/main/wacc/backend/writer.scala
Normal file
11
src/main/wacc/backend/writer.scala
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package wacc
|
||||||
|
|
||||||
|
import java.io.PrintStream
|
||||||
|
|
||||||
|
object writer {
|
||||||
|
import assemblyIR._
|
||||||
|
|
||||||
|
def writeTo(asmList: List[AsmLine], printStream: PrintStream): Unit = {
|
||||||
|
asmList.foreach(printStream.println)
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user