From 5a823a3c17d66d7366d19c93a6c5f6660771a893 Mon Sep 17 00:00:00 2001 From: Alexey Stepanov Date: Fri, 12 Aug 2016 09:42:06 +0300 Subject: [PATCH] translator: add arraextensions to BooleanArray, ByteArray and ShortArray --- kotstd/include/BooleanArray.kt | 53 ++++++ kotstd/include/ByteArray.kt | 53 ++++++ kotstd/include/ShortArray.kt | 53 ++++++ kotstd/lib/arm/primitives_c.ll | 105 ++++++----- kotstd/lib/x86/primitives_c.ll | 334 +++++++++++++++++---------------- 5 files changed, 383 insertions(+), 215 deletions(-) diff --git a/kotstd/include/BooleanArray.kt b/kotstd/include/BooleanArray.kt index 656b2771ea1..d39a0695fc5 100644 --- a/kotstd/include/BooleanArray.kt +++ b/kotstd/include/BooleanArray.kt @@ -40,3 +40,56 @@ class BooleanArray(var size: Int) { } } + +fun BooleanArray.copyOf(newSize: Int): BooleanArray { + val newInstance = BooleanArray(newSize) + var index = 0 + val end = if (newSize > this.size) this.size else newSize + while (index < end) { + val value = this.get(index) + newInstance.set(index, value) + index = index + 1 + } + + while (index < newSize) { + newInstance.set(index, false) + index = index + 1 + } + + return newInstance +} + +fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { + val newInstance = BooleanArray(toIndex - fromIndex) + var index = fromIndex + while (index < toIndex) { + val value = this.get(index) + newInstance.set(index - fromIndex, value) + index = index + 1 + } + + return newInstance +} + +operator fun BooleanArray.plus(element: Boolean): BooleanArray { + val index = size + val result = this.copyOf(index + 1) + result[index] = element + return result +} + +operator fun BooleanArray.plus(elements: BooleanArray): BooleanArray { + val thisSize = size + val arraySize = elements.size + val resultSize = thisSize + arraySize + val newInstance = this.copyOf(resultSize) + var index = thisSize + + while (index < resultSize) { + val value = elements.get(index - thisSize) + newInstance.set(index, value) + index = index + 1 + } + + return newInstance +} \ No newline at end of file diff --git a/kotstd/include/ByteArray.kt b/kotstd/include/ByteArray.kt index fbcac272ca6..a483bd5bd5b 100644 --- a/kotstd/include/ByteArray.kt +++ b/kotstd/include/ByteArray.kt @@ -39,3 +39,56 @@ class ByteArray(var size: Int) { } } + +fun ByteArray.copyOf(newSize: Int): ByteArray { + val newInstance = ByteArray(newSize) + var index = 0 + val end = if (newSize > this.size) this.size else newSize + while (index < end) { + val value = this.get(index) + newInstance.set(index, value) + index = index + 1 + } + + while (index < newSize) { + newInstance.set(index, 0) + index = index + 1 + } + + return newInstance +} + +fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { + val newInstance = ByteArray(toIndex - fromIndex) + var index = fromIndex + while (index < toIndex) { + val value = this.get(index) + newInstance.set(index - fromIndex, value) + index = index + 1 + } + + return newInstance +} + +operator fun ByteArray.plus(element: Byte): ByteArray { + val index = size + val result = this.copyOf(index + 1) + result[index] = element + return result +} + +operator fun ByteArray.plus(elements: ByteArray): ByteArray { + val thisSize = size + val arraySize = elements.size + val resultSize = thisSize + arraySize + val newInstance = this.copyOf(resultSize) + var index = thisSize + + while (index < resultSize) { + val value = elements.get(index - thisSize) + newInstance.set(index, value) + index = index + 1 + } + + return newInstance +} \ No newline at end of file diff --git a/kotstd/include/ShortArray.kt b/kotstd/include/ShortArray.kt index a9c5ec0672f..5e2d8e97ea6 100644 --- a/kotstd/include/ShortArray.kt +++ b/kotstd/include/ShortArray.kt @@ -38,3 +38,56 @@ class ShortArray(var size: Int) { } } + +fun ShortArray.copyOf(newSize: Int): ShortArray { + val newInstance = ShortArray(newSize) + var index = 0 + val end = if (newSize > this.size) this.size else newSize + while (index < end) { + val value = this.get(index) + newInstance.set(index, value) + index = index + 1 + } + + while (index < newSize) { + newInstance.set(index, 0) + index = index + 1 + } + + return newInstance +} + +fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { + val newInstance = ShortArray(toIndex - fromIndex) + var index = fromIndex + while (index < toIndex) { + val value = this.get(index) + newInstance.set(index - fromIndex, value) + index = index + 1 + } + + return newInstance +} + +operator fun ShortArray.plus(element: Short): ShortArray { + val index = size + val result = this.copyOf(index + 1) + result[index] = element + return result +} + +operator fun ShortArray.plus(elements: ShortArray): ShortArray { + val thisSize = size + val arraySize = elements.size + val resultSize = thisSize + arraySize + val newInstance = this.copyOf(resultSize) + var index = thisSize + + while (index < resultSize) { + val value = elements.get(index - thisSize) + newInstance.set(index, value) + index = index + 1 + } + + return newInstance +} \ No newline at end of file diff --git a/kotstd/lib/arm/primitives_c.ll b/kotstd/lib/arm/primitives_c.ll index 632d4896f00..5154049972d 100644 --- a/kotstd/lib/arm/primitives_c.ll +++ b/kotstd/lib/arm/primitives_c.ll @@ -3,7 +3,7 @@ target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "thumbv7m-none--eabi" ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_intToByte(i32 %value) #0 { +define zeroext i8 @kotlinclib_intToByte(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -12,7 +12,7 @@ define weak zeroext i8 @kotlinclib_intToByte(i32 %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_intToChar(i32 %value) #0 { +define zeroext i8 @kotlinclib_intToChar(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -21,7 +21,7 @@ define weak zeroext i8 @kotlinclib_intToChar(i32 %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { +define signext i16 @kotlinclib_intToShort(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -30,7 +30,7 @@ define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_intToLong(i32 %value) #0 { +define i32 @kotlinclib_intToLong(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -38,7 +38,7 @@ define weak i32 @kotlinclib_intToLong(i32 %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_intToFloat(i32 %value) #0 { +define float @kotlinclib_intToFloat(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -47,7 +47,7 @@ define weak float @kotlinclib_intToFloat(i32 %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_intToDouble(i32 %value) #0 { +define double @kotlinclib_intToDouble(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -56,7 +56,7 @@ define weak double @kotlinclib_intToDouble(i32 %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_byteToChar(i8 zeroext %value) #0 { +define zeroext i8 @kotlinclib_byteToChar(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -64,7 +64,7 @@ define weak zeroext i8 @kotlinclib_byteToChar(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_byteToShort(i8 zeroext %value) #0 { +define signext i16 @kotlinclib_byteToShort(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -73,7 +73,7 @@ define weak signext i16 @kotlinclib_byteToShort(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_byteToInt(i8 zeroext %value) #0 { +define i32 @kotlinclib_byteToInt(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -82,7 +82,7 @@ define weak i32 @kotlinclib_byteToInt(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_byteToLong(i8 zeroext %value) #0 { +define i32 @kotlinclib_byteToLong(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -91,7 +91,7 @@ define weak i32 @kotlinclib_byteToLong(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_byteToFloat(i8 zeroext %value) #0 { +define float @kotlinclib_byteToFloat(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -100,7 +100,7 @@ define weak float @kotlinclib_byteToFloat(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_byteToDouble(i8 zeroext %value) #0 { +define double @kotlinclib_byteToDouble(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -109,7 +109,7 @@ define weak double @kotlinclib_byteToDouble(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_charToByte(i8 zeroext %value) #0 { +define zeroext i8 @kotlinclib_charToByte(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -117,7 +117,7 @@ define weak zeroext i8 @kotlinclib_charToByte(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_charToShort(i8 zeroext %value) #0 { +define signext i16 @kotlinclib_charToShort(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -126,7 +126,7 @@ define weak signext i16 @kotlinclib_charToShort(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_charToInt(i8 zeroext %value) #0 { +define i32 @kotlinclib_charToInt(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -135,7 +135,7 @@ define weak i32 @kotlinclib_charToInt(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_charToLong(i8 zeroext %value) #0 { +define i32 @kotlinclib_charToLong(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -144,7 +144,7 @@ define weak i32 @kotlinclib_charToLong(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_charToFloat(i8 zeroext %value) #0 { +define float @kotlinclib_charToFloat(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -153,7 +153,7 @@ define weak float @kotlinclib_charToFloat(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_charToDouble(i8 zeroext %value) #0 { +define double @kotlinclib_charToDouble(i8 zeroext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 @@ -162,7 +162,7 @@ define weak double @kotlinclib_charToDouble(i8 zeroext %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { +define zeroext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -171,7 +171,7 @@ define weak zeroext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { +define zeroext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -180,7 +180,7 @@ define weak zeroext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { +define i32 @kotlinclib_shortToInt(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -189,7 +189,7 @@ define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_shortToLong(i16 signext %value) #0 { +define i32 @kotlinclib_shortToLong(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -198,7 +198,7 @@ define weak i32 @kotlinclib_shortToLong(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { +define float @kotlinclib_shortToFloat(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -207,7 +207,7 @@ define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { +define double @kotlinclib_shortToDouble(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -216,7 +216,7 @@ define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_longToByte(i32 %value) #0 { +define zeroext i8 @kotlinclib_longToByte(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -225,7 +225,7 @@ define weak zeroext i8 @kotlinclib_longToByte(i32 %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_longToChar(i32 %value) #0 { +define zeroext i8 @kotlinclib_longToChar(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -234,7 +234,7 @@ define weak zeroext i8 @kotlinclib_longToChar(i32 %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_longToShort(i32 %value) #0 { +define signext i16 @kotlinclib_longToShort(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -243,7 +243,7 @@ define weak signext i16 @kotlinclib_longToShort(i32 %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_longToInt(i32 %value) #0 { +define i32 @kotlinclib_longToInt(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -251,7 +251,7 @@ define weak i32 @kotlinclib_longToInt(i32 %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_longToFloat(i32 %value) #0 { +define float @kotlinclib_longToFloat(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -260,7 +260,7 @@ define weak float @kotlinclib_longToFloat(i32 %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_longToDouble(i32 %value) #0 { +define double @kotlinclib_longToDouble(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -269,7 +269,7 @@ define weak double @kotlinclib_longToDouble(i32 %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_floatToByte(float %value) #0 { +define zeroext i8 @kotlinclib_floatToByte(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -278,7 +278,7 @@ define weak zeroext i8 @kotlinclib_floatToByte(float %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_floatToChar(float %value) #0 { +define zeroext i8 @kotlinclib_floatToChar(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -287,7 +287,7 @@ define weak zeroext i8 @kotlinclib_floatToChar(float %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { +define signext i16 @kotlinclib_floatToShort(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -296,7 +296,7 @@ define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_floatToInt(float %value) #0 { +define i32 @kotlinclib_floatToInt(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -305,7 +305,7 @@ define weak i32 @kotlinclib_floatToInt(float %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_floatToLong(float %value) #0 { +define i32 @kotlinclib_floatToLong(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -314,7 +314,7 @@ define weak i32 @kotlinclib_floatToLong(float %value) #0 { } ; Function Attrs: nounwind -define weak double @kotlinclib_floatToDouble(float %value) #0 { +define double @kotlinclib_floatToDouble(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -323,7 +323,7 @@ define weak double @kotlinclib_floatToDouble(float %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_doubleToByte(double %value) #0 { +define zeroext i8 @kotlinclib_doubleToByte(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -332,7 +332,7 @@ define weak zeroext i8 @kotlinclib_doubleToByte(double %value) #0 { } ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_doubleToChar(double %value) #0 { +define zeroext i8 @kotlinclib_doubleToChar(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -341,7 +341,7 @@ define weak zeroext i8 @kotlinclib_doubleToChar(double %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { +define signext i16 @kotlinclib_doubleToShort(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -350,7 +350,7 @@ define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_doubleToInt(double %value) #0 { +define i32 @kotlinclib_doubleToInt(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -359,7 +359,7 @@ define weak i32 @kotlinclib_doubleToInt(double %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_doubleToLong(double %value) #0 { +define i32 @kotlinclib_doubleToLong(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -368,7 +368,7 @@ define weak i32 @kotlinclib_doubleToLong(double %value) #0 { } ; Function Attrs: nounwind -define weak float @kotlinclib_doubleToFloat(double %value) #0 { +define float @kotlinclib_doubleToFloat(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -377,37 +377,42 @@ define weak float @kotlinclib_doubleToFloat(double %value) #0 { } ; Function Attrs: nounwind -define weak i32 @kotlinclib_int_size() #0 { +define i32 @kotlinclib_int_size() #0 { ret i32 4 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_long_size() #0 { - ret i32 8 +define i32 @kotlinclib_long_size() #0 { + ret i32 4 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_boolean_size() #0 { +define i32 @kotlinclib_boolean_size() #0 { ret i32 1 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_short_size() #0 { +define i32 @kotlinclib_short_size() #0 { ret i32 2 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_double_size() #0 { +define i32 @kotlinclib_double_size() #0 { ret i32 8 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_float_size() #0 { +define i32 @kotlinclib_float_size() #0 { ret i32 4 } ; Function Attrs: nounwind -define weak i32 @kotlinclib_char_size() #0 { +define i32 @kotlinclib_char_size() #0 { + ret i32 1 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_byte_size() #0 { ret i32 1 } diff --git a/kotstd/lib/x86/primitives_c.ll b/kotstd/lib/x86/primitives_c.ll index fdfd9831b9e..2aaecfa6d6b 100644 --- a/kotstd/lib/x86/primitives_c.ll +++ b/kotstd/lib/x86/primitives_c.ll @@ -1,9 +1,9 @@ ; ModuleID = 'primitives.c' -target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" -target triple = "thumbv7m-none--eabi" +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-linux-gnu" -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_intToByte(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_intToByte(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -11,8 +11,8 @@ define weak zeroext i8 @kotlinclib_intToByte(i32 %value) #0 { ret i8 %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_intToChar(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_intToChar(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -20,8 +20,8 @@ define weak zeroext i8 @kotlinclib_intToChar(i32 %value) #0 { ret i8 %3 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_intToShort(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -29,16 +29,17 @@ define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_intToLong(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_intToLong(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 - ret i32 %2 + %3 = sext i32 %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_intToFloat(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define float @kotlinclib_intToFloat(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -46,8 +47,8 @@ define weak float @kotlinclib_intToFloat(i32 %value) #0 { ret float %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_intToDouble(i32 %value) #0 { +; Function Attrs: nounwind uwtable +define double @kotlinclib_intToDouble(i32 %value) #0 { %1 = alloca i32, align 4 store i32 %value, i32* %1, align 4 %2 = load i32* %1, align 4 @@ -55,114 +56,114 @@ define weak double @kotlinclib_intToDouble(i32 %value) #0 { ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_byteToChar(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_byteToChar(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 ret i8 %2 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_byteToShort(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_byteToShort(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i16 + %3 = sext i8 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_byteToInt(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_byteToInt(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i32 + %3 = sext i8 %2 to i32 ret i32 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_byteToLong(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_byteToLong(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i32 - ret i32 %3 + %3 = sext i8 %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_byteToFloat(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define float @kotlinclib_byteToFloat(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = uitofp i8 %2 to float + %3 = sitofp i8 %2 to float ret float %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_byteToDouble(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define double @kotlinclib_byteToDouble(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = uitofp i8 %2 to double + %3 = sitofp i8 %2 to double ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_charToByte(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_charToByte(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 ret i8 %2 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_charToShort(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_charToShort(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i16 + %3 = sext i8 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_charToInt(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_charToInt(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i32 + %3 = sext i8 %2 to i32 ret i32 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_charToLong(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_charToLong(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = zext i8 %2 to i32 - ret i32 %3 + %3 = sext i8 %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_charToFloat(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define float @kotlinclib_charToFloat(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = uitofp i8 %2 to float + %3 = sitofp i8 %2 to float ret float %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_charToDouble(i8 zeroext %value) #0 { +; Function Attrs: nounwind uwtable +define double @kotlinclib_charToDouble(i8 signext %value) #0 { %1 = alloca i8, align 1 store i8 %value, i8* %1, align 1 %2 = load i8* %1, align 1 - %3 = uitofp i8 %2 to double + %3 = sitofp i8 %2 to double ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -170,8 +171,8 @@ define weak zeroext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { ret i8 %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -179,8 +180,8 @@ define weak zeroext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { ret i8 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_shortToInt(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -188,17 +189,17 @@ define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { ret i32 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_shortToLong(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_shortToLong(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 - %3 = sext i16 %2 to i32 - ret i32 %3 + %3 = sext i16 %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define float @kotlinclib_shortToFloat(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -206,8 +207,8 @@ define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { ret float %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { +; Function Attrs: nounwind uwtable +define double @kotlinclib_shortToDouble(i16 signext %value) #0 { %1 = alloca i16, align 2 store i16 %value, i16* %1, align 2 %2 = load i16* %1, align 2 @@ -215,79 +216,80 @@ define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_longToByte(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - %3 = trunc i32 %2 to i8 +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_longToByte(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = trunc i64 %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_longToChar(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - %3 = trunc i32 %2 to i8 +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_longToChar(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = trunc i64 %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_longToShort(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - %3 = trunc i32 %2 to i16 +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_longToShort(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = trunc i64 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_longToInt(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - ret i32 %2 +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_longToInt(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = trunc i64 %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_longToFloat(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - %3 = sitofp i32 %2 to float +; Function Attrs: nounwind uwtable +define float @kotlinclib_longToFloat(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = sitofp i64 %2 to float ret float %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_longToDouble(i32 %value) #0 { - %1 = alloca i32, align 4 - store i32 %value, i32* %1, align 4 - %2 = load i32* %1, align 4 - %3 = sitofp i32 %2 to double +; Function Attrs: nounwind uwtable +define double @kotlinclib_longToDouble(i64 %value) #0 { + %1 = alloca i64, align 8 + store i64 %value, i64* %1, align 8 + %2 = load i64* %1, align 8 + %3 = sitofp i64 %2 to double ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_floatToByte(float %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_floatToByte(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 - %3 = fptoui float %2 to i8 + %3 = fptosi float %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_floatToChar(float %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_floatToChar(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 - %3 = fptoui float %2 to i8 + %3 = fptosi float %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_floatToShort(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -295,8 +297,8 @@ define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_floatToInt(float %value) #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_floatToInt(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -304,17 +306,17 @@ define weak i32 @kotlinclib_floatToInt(float %value) #0 { ret i32 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_floatToLong(float %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_floatToLong(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 - %3 = fptosi float %2 to i32 - ret i32 %3 + %3 = fptosi float %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak double @kotlinclib_floatToDouble(float %value) #0 { +; Function Attrs: nounwind uwtable +define double @kotlinclib_floatToDouble(float %value) #0 { %1 = alloca float, align 4 store float %value, float* %1, align 4 %2 = load float* %1, align 4 @@ -322,26 +324,26 @@ define weak double @kotlinclib_floatToDouble(float %value) #0 { ret double %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_doubleToByte(double %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_doubleToByte(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 - %3 = fptoui double %2 to i8 + %3 = fptosi double %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_doubleToChar(double %value) #0 { +; Function Attrs: nounwind uwtable +define signext i8 @kotlinclib_doubleToChar(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 - %3 = fptoui double %2 to i8 + %3 = fptosi double %2 to i8 ret i8 %3 } -; Function Attrs: nounwind -define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { +; Function Attrs: nounwind uwtable +define signext i16 @kotlinclib_doubleToShort(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -349,8 +351,8 @@ define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { ret i16 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_doubleToInt(double %value) #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_doubleToInt(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -358,17 +360,17 @@ define weak i32 @kotlinclib_doubleToInt(double %value) #0 { ret i32 %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_doubleToLong(double %value) #0 { +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_doubleToLong(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 - %3 = fptosi double %2 to i32 - ret i32 %3 + %3 = fptosi double %2 to i64 + ret i64 %3 } -; Function Attrs: nounwind -define weak float @kotlinclib_doubleToFloat(double %value) #0 { +; Function Attrs: nounwind uwtable +define float @kotlinclib_doubleToFloat(double %value) #0 { %1 = alloca double, align 8 store double %value, double* %1, align 8 %2 = load double* %1, align 8 @@ -376,46 +378,48 @@ define weak float @kotlinclib_doubleToFloat(double %value) #0 { ret float %3 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_int_size() #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_int_size() #0 { ret i32 4 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_long_size() #0 { - ret i32 4 -} - -; Function Attrs: nounwind -define weak i32 @kotlinclib_boolean_size() #0 { - ret i32 1 -} - -; Function Attrs: nounwind -define weak i32 @kotlinclib_short_size() #0 { - ret i32 2 -} - -; Function Attrs: nounwind -define weak i32 @kotlinclib_double_size() #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_long_size() #0 { ret i32 8 } -; Function Attrs: nounwind -define weak i32 @kotlinclib_float_size() #0 { - ret i32 4 -} - -; Function Attrs: nounwind -define weak i32 @kotlinclib_char_size() #0 { +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_boolean_size() #0 { ret i32 1 } -attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_short_size() #0 { + ret i32 2 +} -!llvm.module.flags = !{!0, !1} -!llvm.ident = !{!2} +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_double_size() #0 { + ret i32 8 +} -!0 = !{i32 1, !"wchar_size", i32 4} -!1 = !{i32 1, !"min_enum_size", i32 4} -!2 = !{!"Ubuntu clang version 3.6.2-3ubuntu2 (tags/RELEASE_362/final) (based on LLVM 3.6.2)"} +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_float_size() #0 { + ret i32 4 +} + +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_char_size() #0 { + ret i32 1 +} + +; Function Attrs: nounwind uwtable +define i32 @kotlinclib_byte_size() #0 { + ret i32 1 +} + +attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } + +!llvm.ident = !{!0} + +!0 = !{!"Ubuntu clang version 3.6.2-3ubuntu2 (tags/RELEASE_362/final) (based on LLVM 3.6.2)"}