translator: add comparison for basic types
This commit is contained in:
@@ -25,7 +25,7 @@ class LLVMBuilder {
|
|||||||
llvmCode.appendln("}")
|
llvmCode.appendln("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun receiveNativeValue(firstOp: LLVMSingleValue) : LLVMSingleValue = when (firstOp) {
|
fun receiveNativeValue(firstOp: LLVMSingleValue): LLVMSingleValue = when (firstOp) {
|
||||||
is LLVMConstant -> firstOp
|
is LLVMConstant -> firstOp
|
||||||
is LLVMVariable -> when (firstOp.pointer) {
|
is LLVMVariable -> when (firstOp.pointer) {
|
||||||
false -> firstOp
|
false -> firstOp
|
||||||
@@ -97,12 +97,6 @@ class LLVMBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addVariableByValue(targetVariable: LLVMVariable, sourceVariable: LLVMVariable, allocVariable: LLVMVariable) {
|
|
||||||
llvmCode.appendln("$allocVariable = alloca ${allocVariable.type}, align ${allocVariable.type?.align}")
|
|
||||||
llvmCode.appendln("store ${allocVariable.type} $sourceVariable, ${allocVariable.getType()} $allocVariable, align ${allocVariable.type?.align}")
|
|
||||||
llvmCode.appendln("$targetVariable = load ${targetVariable.type}, ${allocVariable.getType()} $allocVariable, align ${targetVariable.type?.align}")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addConstant(allocVariable: LLVMVariable, constantValue: LLVMConstant) {
|
fun addConstant(allocVariable: LLVMVariable, constantValue: LLVMConstant) {
|
||||||
llvmCode.appendln("$allocVariable = alloca ${allocVariable.type}, align ${allocVariable.type?.align}")
|
llvmCode.appendln("$allocVariable = alloca ${allocVariable.type}, align ${allocVariable.type?.align}")
|
||||||
llvmCode.appendln("store ${allocVariable.type} $constantValue, ${allocVariable.getType()} $allocVariable, align ${allocVariable.type?.align}")
|
llvmCode.appendln("store ${allocVariable.type} $constantValue, ${allocVariable.getType()} $allocVariable, align ${allocVariable.type?.align}")
|
||||||
|
|||||||
@@ -1,6 +1,27 @@
|
|||||||
package org.kotlinnative.translator.llvm.types
|
package org.kotlinnative.translator.llvm.types
|
||||||
|
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMVariable
|
||||||
|
|
||||||
class LLVMCharType() : LLVMType() {
|
class LLVMCharType() : LLVMType() {
|
||||||
|
override fun operatorLt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp slt i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sgt i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorLeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sle i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sge i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorEq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp eq i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorNeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp ne i8 $firstOp, $secondOp")
|
||||||
|
|
||||||
override val align = 1
|
override val align = 1
|
||||||
override val size: Byte = 1
|
override val size: Byte = 1
|
||||||
|
|||||||
@@ -19,6 +19,24 @@ class LLVMIntType() : LLVMType() {
|
|||||||
override fun operatorPlus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
override fun operatorPlus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, $secondOp")
|
LLVMExpression(LLVMIntType(), "add nsw i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorLt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp slt i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sgt i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorLeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sle i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sge i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorEq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp eq i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorNeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp ne i32 $firstOp, $secondOp")
|
||||||
|
|
||||||
override val align = 4
|
override val align = 4
|
||||||
override val size: Byte = 4
|
override val size: Byte = 4
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,27 @@
|
|||||||
package org.kotlinnative.translator.llvm.types
|
package org.kotlinnative.translator.llvm.types
|
||||||
|
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMExpression
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMSingleValue
|
||||||
|
import org.kotlinnative.translator.llvm.LLVMVariable
|
||||||
|
|
||||||
class LLVMShortType() : LLVMType() {
|
class LLVMShortType() : LLVMType() {
|
||||||
|
override fun operatorLt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp slt i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sgt i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorLeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sle i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorGeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp sge i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorEq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp eq i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
|
override fun operatorNeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression =
|
||||||
|
LLVMExpression(LLVMIntType(), "icmp ne i16 $firstOp, $secondOp")
|
||||||
|
|
||||||
override val size: Byte = 2
|
override val size: Byte = 2
|
||||||
override val align = 2
|
override val align = 2
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ abstract class LLVMType() : Cloneable {
|
|||||||
open fun operatorPlus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
open fun operatorPlus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
open fun operatorTimes(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
open fun operatorTimes(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
open fun operatorMinus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
open fun operatorMinus(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorLt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorGt(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorLeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorGeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorEq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
open fun operatorNeq(result: LLVMVariable, firstOp: LLVMSingleValue, secondOp: LLVMSingleValue): LLVMExpression = throw UnimplementedException()
|
||||||
|
|
||||||
fun makeClone() = clone()
|
fun makeClone() = clone()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user