From b038dbc724975183476a59a835c9985a2a64e2dc Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Tue, 11 Oct 2016 11:17:12 +0300 Subject: [PATCH] arithmetic added (minus, mul, div, mod) --- .../org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt | 4 ++++ .../org/jetbrains/kotlin/backend/native/llvm/IrToBitcode.kt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt index b7d7fdf4834..2f585dd0bb2 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/CodeGenerator.kt @@ -54,6 +54,10 @@ internal class CodeGenerator(override val context:Context) : ContextUtils { private fun FunctionDescriptor.variable(varName: String): LLVMOpaqueValue? = variables[varName] fun plus(arg0:LLVMOpaqueValue, arg1:LLVMOpaqueValue, result:String):LLVMOpaqueValue = LLVMBuildAdd(context.llvmBuilder, arg0, arg1, result)!! + fun mul(arg0: LLVMOpaqueValue, arg1: LLVMOpaqueValue, result: String): LLVMOpaqueValue = LLVMBuildMul(context.llvmBuilder, arg0, arg1, result)!! + fun minus(arg0: LLVMOpaqueValue, arg1: LLVMOpaqueValue, result: String): LLVMOpaqueValue = LLVMBuildSub(context.llvmBuilder, arg0, arg1, result)!! + fun div(arg0: LLVMOpaqueValue, arg1: LLVMOpaqueValue, result: String): LLVMOpaqueValue = LLVMBuildSDiv(context.llvmBuilder, arg0, arg1, result)!! + fun remainder(arg0: LLVMOpaqueValue, arg1: LLVMOpaqueValue, result: String): LLVMOpaqueValue = LLVMBuildSRem(context.llvmBuilder, arg0, arg1, result)!! fun alloca(type: KotlinType, varName: String):LLVMOpaqueValue = LLVMBuildAlloca(context.llvmBuilder, getLLVMType(type), varName)!! fun load(value:LLVMOpaqueValue, varName: String):LLVMOpaqueValue = LLVMBuildLoad(context.llvmBuilder, value, varName)!! fun store(value:LLVMOpaqueValue, ptr:LLVMOpaqueValue):LLVMOpaqueValue = LLVMBuildStore(context.llvmBuilder, value, ptr)!! diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/IrToBitcode.kt index f55dc8134bc..ae0fa296d11 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/native/llvm/IrToBitcode.kt @@ -106,6 +106,10 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid private fun evaluateOperatorCall(tmpVariableName: String, callee: IrCall, args: MutableList): LLVMOpaqueValue { when (callee!!.origin) { IrStatementOrigin.PLUS -> return generator.plus(args[0]!!, args[1]!!, tmpVariableName) + IrStatementOrigin.MINUS -> return generator.minus(args[0]!!, args[1]!!, tmpVariableName) + IrStatementOrigin.MUL -> return generator.mul(args[0]!!, args[1]!!, tmpVariableName) + IrStatementOrigin.DIV -> return generator.div(args[0]!!, args[1]!!, tmpVariableName) + IrStatementOrigin.PERC -> return generator.remainder(args[0]!!, args[1]!!, tmpVariableName) else -> { TODO() }