mirror of
https://github.com/irmen/prog8.git
synced 2025-08-14 22:27:48 +00:00
fix IR same register error
This commit is contained in:
@@ -47,19 +47,15 @@ internal class BuiltinFuncGen(private val codeGen: IRCodeGen, private val exprGe
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun funcStringCompare(call: PtBuiltinFunctionCall): ExpressionCodeResult {
|
private fun funcStringCompare(call: PtBuiltinFunctionCall): ExpressionCodeResult {
|
||||||
/*
|
|
||||||
loadm.w r65500,string.compare.st1
|
|
||||||
loadm.w r65501,string.compare.st2
|
|
||||||
syscall 29
|
|
||||||
returnreg.b r0
|
|
||||||
*/
|
|
||||||
val result = mutableListOf<IRCodeChunkBase>()
|
val result = mutableListOf<IRCodeChunkBase>()
|
||||||
val left = exprGen.translateExpression(call.args[0])
|
val left = exprGen.translateExpression(call.args[0])
|
||||||
val right = exprGen.translateExpression(call.args[1])
|
val right = exprGen.translateExpression(call.args[1])
|
||||||
|
val targetReg = codeGen.registers.nextFree()
|
||||||
addToResult(result, left, 65500, -1)
|
addToResult(result, left, 65500, -1)
|
||||||
addToResult(result, right, 65501, -1)
|
addToResult(result, right, 65501, -1)
|
||||||
addInstr(result, IRInstruction(Opcode.SYSCALL, value=IMSyscall.COMPARE_STRINGS.number), null)
|
addInstr(result, IRInstruction(Opcode.SYSCALL, value=IMSyscall.COMPARE_STRINGS.number), null)
|
||||||
return ExpressionCodeResult(result, IRDataType.BYTE, 0, -1)
|
addInstr(result, IRInstruction(Opcode.LOADR, IRDataType.BYTE, reg1=targetReg, reg2=0), null)
|
||||||
|
return ExpressionCodeResult(result, IRDataType.BYTE, targetReg, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun funcCmp(call: PtBuiltinFunctionCall): ExpressionCodeResult {
|
private fun funcCmp(call: PtBuiltinFunctionCall): ExpressionCodeResult {
|
||||||
|
Reference in New Issue
Block a user