diff --git a/src/main/wacc/backend/RuntimeError.scala b/src/main/wacc/backend/RuntimeError.scala index e6e972c..934077a 100644 --- a/src/main/wacc/backend/RuntimeError.scala +++ b/src/main/wacc/backend/RuntimeError.scala @@ -3,6 +3,8 @@ package wacc import cats.data.Chain import wacc.assemblyIR._ +val ERROR_CODE = 255 + sealed trait RuntimeError { def strLabel: String def errStr: String @@ -33,7 +35,7 @@ object RuntimeError { // private val RBP = Register(Q64, BP) private val RSI = Register(Q64, SI) // private val RDX = Register(Q64, DX) - // private val RCX = Register(Q64, CX) + private val RCX = Register(Q64, CX) case object ZeroDivError extends RuntimeError { val strLabel = ".L._errDivZero_str0" @@ -62,7 +64,7 @@ object RuntimeError { stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(BadChrError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(255)), + Move(RDI, ImmediateVal(ERROR_CODE)), assemblyIR.Call(CLibFunc.Exit) ) @@ -78,7 +80,7 @@ object RuntimeError { stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(NullPtrError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(255)), + Move(RDI, ImmediateVal(ERROR_CODE)), assemblyIR.Call(CLibFunc.Exit) ) @@ -94,7 +96,7 @@ object RuntimeError { stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(OverflowError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(255)), + Move(RDI, ImmediateVal(ERROR_CODE)), assemblyIR.Call(CLibFunc.Exit) ) @@ -108,11 +110,11 @@ object RuntimeError { def generateHandler: Chain[AsmLine] = Chain( LabelDef(OutOfBoundsError.errLabel), - Move(RSI, Register(Q64, CX)), + Move(RSI, RCX), stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(OutOfBoundsError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(255)), + Move(RDI, ImmediateVal(ERROR_CODE)), assemblyIR.Call(CLibFunc.Exit) ) } @@ -127,7 +129,7 @@ object RuntimeError { stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(OutOfMemoryError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(255)), + Move(RDI, ImmediateVal(ERROR_CODE)), assemblyIR.Call(CLibFunc.Exit) ) }