feat: implements sign extension operation for division
This commit is contained in:
parent
70e023f27a
commit
c9723f9359
@ -237,8 +237,8 @@ object asmGenerator {
|
||||
}
|
||||
|
||||
case BinaryOp(x, y, op) =>
|
||||
chain ++= evalExprOntoStack(x)
|
||||
chain ++= evalExprOntoStack(y)
|
||||
chain ++= evalExprOntoStack(x)
|
||||
|
||||
chain += stack.pop(RAX)
|
||||
|
||||
@ -251,11 +251,21 @@ object asmGenerator {
|
||||
chain += stack.push(RAX)
|
||||
|
||||
case BinaryOperator.Div =>
|
||||
// chain += stack.pop(RDX)
|
||||
// chain += stack.pop(RAX)
|
||||
// chain += stack.push(RDX)
|
||||
// chain += stack.push(RAX)
|
||||
chain += CDQ()
|
||||
chain += Divide(stack.head(SizeDir.Word))
|
||||
chain += stack.drop()
|
||||
chain += stack.push(RAX)
|
||||
|
||||
case BinaryOperator.Mod =>
|
||||
// chain += stack.pop(RDX)
|
||||
// chain += stack.pop(RAX)
|
||||
// chain += stack.push(RDX)
|
||||
// chain += stack.push(RAX)
|
||||
chain += CDQ()
|
||||
chain += Divide(stack.head(SizeDir.Word))
|
||||
chain += stack.drop()
|
||||
chain += stack.push(RDX)
|
||||
|
@ -112,6 +112,7 @@ object assemblyIR {
|
||||
case class Move(op1: Dest, op2: Src) extends Operation("mov", op1, op2)
|
||||
case class Load(op1: Register, op2: MemLocation | IndexAddress)
|
||||
extends Operation("lea ", op1, op2)
|
||||
case class CDQ() extends Operation("cdq")
|
||||
|
||||
case class Return() extends Operation("ret")
|
||||
|
||||
|
@ -88,7 +88,7 @@ class ParallelExamplesSpec extends AnyFlatSpec with BeforeAndAfterAll with Paral
|
||||
"^.*wacc-examples/valid/advanced.*$",
|
||||
"^.*wacc-examples/valid/array.*$",
|
||||
// "^.*wacc-examples/valid/basic/exit.*$",
|
||||
"^.*wacc-examples/valid/basic/skip.*$",
|
||||
// "^.*wacc-examples/valid/basic/skip.*$",
|
||||
"^.*wacc-examples/valid/expressions.*$",
|
||||
"^.*wacc-examples/valid/function/nested_functions.*$",
|
||||
"^.*wacc-examples/valid/function/simple_functions.*$",
|
||||
@ -100,7 +100,7 @@ class ParallelExamplesSpec extends AnyFlatSpec with BeforeAndAfterAll with Paral
|
||||
"^.*wacc-examples/valid/pairs.*$",
|
||||
"^.*wacc-examples/valid/runtimeErr.*$",
|
||||
"^.*wacc-examples/valid/scope.*$",
|
||||
"^.*wacc-examples/valid/sequence.*$",
|
||||
// "^.*wacc-examples/valid/sequence.*$",
|
||||
"^.*wacc-examples/valid/variables.*$",
|
||||
"^.*wacc-examples/valid/while.*$",
|
||||
// format: on
|
||||
|
Loading…
x
Reference in New Issue
Block a user