diff --git a/kotstd/include/LongArray.kt b/kotstd/include/LongArray.kt new file mode 100644 index 00000000000..683ce2130a2 --- /dev/null +++ b/kotstd/include/LongArray.kt @@ -0,0 +1,92 @@ +external fun kotlinclib_get_long(src: Int, index: Int): Long +external fun kotlinclib_set_long(src: Int, index: Int, value: Long) +external fun kotlinclib_long_size(): Int + + +class LongArray(var size: Int) { + val data: Int + + /** Returns the number of elements in the array. */ + //size: Int + + init { + this.data = malloc_array(kotlinclib_long_size() * this.size) + } + + /** Returns the array element at the given [index]. This method can be called using the index operator. */ + operator fun get(index: Int): Long { + return kotlinclib_get_long(this.data, index) + } + + + /** Sets the element at the given [index] to the given [value]. This method can be called using the index operator. */ + operator fun set(index: Int, value: Long) { + kotlinclib_set_long(this.data, index, value) + } + + + fun clone(): LongArray { + val newInstance = LongArray(this.size) + var index = 0 + while (index < this.size) { + val value = this.get(index) + newInstance.set(index, value) + index = index + 1 + } + + return newInstance + } +} + +fun LongArray.copyOf(newSize: Int): LongArray { + val newInstance = LongArray(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 LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { + val newInstance = LongArray(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 LongArray.plus(element: Long): LongArray { + val index = size + val result = this.copyOf(index + 1) + result[index] = element + return result +} + +operator fun LongArray.plus(elements: LongArray): LongArray { + 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/array_c.ll b/kotstd/lib/arm/array_c.ll index a2766bc94b3..1efea99ab23 100644 --- a/kotstd/lib/arm/array_c.ll +++ b/kotstd/lib/arm/array_c.ll @@ -2,21 +2,20 @@ target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" target triple = "thumbv7m-none--eabi" -declare i8* @malloc_static(i32) #0 - ; Function Attrs: nounwind -define weak i32 @malloc_array(i32 %x) #0 { +define i32 @malloc_array(i32 %x) #0 { %1 = alloca i32, align 4 store i32 %x, i32* %1, align 4 %2 = load i32* %1, align 4 - %3 = call i8* @malloc_static(i32 %2) + %3 = call i8* @malloc(i32 %2) #2 %4 = ptrtoint i8* %3 to i32 ret i32 %4 } +declare i8* @malloc(i32) #1 ; Function Attrs: nounwind -define weak zeroext i8 @kotlinclib_get_byte(i32 %data, i32 %index) #0 { +define zeroext i8 @kotlinclib_get_byte(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -30,7 +29,7 @@ define weak zeroext i8 @kotlinclib_get_byte(i32 %data, i32 %index) #0 { } ; Function Attrs: nounwind -define weak void @kotlinclib_set_byte(i32 %data, i32 %index, i8 zeroext %value) #0 { +define void @kotlinclib_set_byte(i32 %data, i32 %index, i8 zeroext %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i8, align 1 @@ -50,7 +49,7 @@ define weak void @kotlinclib_set_byte(i32 %data, i32 %index, i8 zeroext %value) } ; Function Attrs: nounwind -define weak i32 @kotlinclib_get_int(i32 %data, i32 %index) #0 { +define i32 @kotlinclib_get_int(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -64,7 +63,7 @@ define weak i32 @kotlinclib_get_int(i32 %data, i32 %index) #0 { } ; Function Attrs: nounwind -define weak void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) #0 { +define void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 @@ -84,7 +83,7 @@ define weak void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) #0 { } ; Function Attrs: nounwind -define weak signext i16 @kotlinclib_get_short(i32 %data, i32 %index) #0 { +define signext i16 @kotlinclib_get_short(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -98,7 +97,7 @@ define weak signext i16 @kotlinclib_get_short(i32 %data, i32 %index) #0 { } ; Function Attrs: nounwind -define weak void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value) #0 { +define void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i16, align 2 @@ -117,4 +116,47 @@ define weak void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value ret void } +; Function Attrs: nounwind +define i32 @kotlinclib_get_long(i32 %data, i32 %index) #0 { + %1 = alloca i32, align 4 + %2 = alloca i32, align 4 + store i32 %data, i32* %1, align 4 + store i32 %index, i32* %2, align 4 + %3 = load i32* %1, align 4 + %4 = inttoptr i32 %3 to i32* + %5 = load i32* %2, align 4 + %6 = getelementptr inbounds i32* %4, i32 %5 + %7 = load i32* %6, align 4 + ret i32 %7 +} + +; Function Attrs: nounwind +define void @kotlinclib_set_long(i32 %data, i32 %index, i32 %value) #0 { + %1 = alloca i32, align 4 + %2 = alloca i32, align 4 + %3 = alloca i32, align 4 + %ptr = alloca i32*, align 4 + store i32 %data, i32* %1, align 4 + store i32 %index, i32* %2, align 4 + store i32 %value, i32* %3, align 4 + %4 = load i32* %1, align 4 + %5 = inttoptr i32 %4 to i32* + store i32* %5, i32** %ptr, align 4 + %6 = load i32* %3, align 4 + %7 = load i32** %ptr, align 4 + %8 = load i32* %2, align 4 + %9 = getelementptr inbounds i32* %7, i32 %8 + store i32 %6, i32* %9, align 4 + ret void +} + 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" } +attributes #1 = { "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" } +attributes #2 = { nobuiltin } + +!llvm.module.flags = !{!0, !1} +!llvm.ident = !{!2} + +!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)"} diff --git a/kotstd/lib/kotlin-reflect.jar b/kotstd/lib/kotlin-reflect.jar new file mode 100644 index 00000000000..62340e2dae4 Binary files /dev/null and b/kotstd/lib/kotlin-reflect.jar differ diff --git a/kotstd/lib/kotlin-runtime-sources.jar b/kotstd/lib/kotlin-runtime-sources.jar new file mode 100644 index 00000000000..e661b30034a Binary files /dev/null and b/kotstd/lib/kotlin-runtime-sources.jar differ diff --git a/kotstd/lib/kotlin-runtime.jar b/kotstd/lib/kotlin-runtime.jar new file mode 100644 index 00000000000..4d7a92703f8 Binary files /dev/null and b/kotstd/lib/kotlin-runtime.jar differ diff --git a/kotstd/lib/x86/array_c.ll b/kotstd/lib/x86/array_c.ll index c82227b8908..6d9505becaf 100644 --- a/kotstd/lib/x86/array_c.ll +++ b/kotstd/lib/x86/array_c.ll @@ -1,16 +1,21 @@ -declare i8* @malloc_static(i32) +; ModuleID = 'array.c' +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-linux-gnu" -define weak i32 @malloc_array(i32 %x) #0 { +; Function Attrs: nounwind uwtable +define i32 @malloc_array(i32 %x) #0 { %1 = alloca i32, align 4 store i32 %x, i32* %1, align 4 %2 = load i32* %1, align 4 - %3 = call i8* @malloc_static(i32 %2) + %3 = call i8* @malloc(i32 %2) %4 = ptrtoint i8* %3 to i32 ret i32 %4 } +declare i8* @malloc(i32) #1 + ; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_get_byte(i32 %data, i32 %index) { +define signext i8 @kotlinclib_get_byte(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -26,7 +31,7 @@ define weak signext i8 @kotlinclib_get_byte(i32 %data, i32 %index) { } ; Function Attrs: nounwind uwtable -define weak void @kotlinclib_set_byte(i32 %data, i32 %index, i8 signext %value) { +define void @kotlinclib_set_byte(i32 %data, i32 %index, i8 signext %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i8, align 1 @@ -47,9 +52,8 @@ define weak void @kotlinclib_set_byte(i32 %data, i32 %index, i8 signext %value) ret void } - ; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_get_int(i32 %data, i32 %index) { +define i32 @kotlinclib_get_int(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -65,7 +69,7 @@ define weak i32 @kotlinclib_get_int(i32 %data, i32 %index) { } ; Function Attrs: nounwind uwtable -define weak void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) { +define void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i32, align 4 @@ -86,9 +90,8 @@ define weak void @kotlinclib_set_int(i32 %data, i32 %index, i32 %value) { ret void } - ; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_get_short(i32 %data, i32 %index) { +define signext i16 @kotlinclib_get_short(i32 %data, i32 %index) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 %data, i32* %1, align 4 @@ -104,7 +107,7 @@ define weak signext i16 @kotlinclib_get_short(i32 %data, i32 %index) { } ; Function Attrs: nounwind uwtable -define weak void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value) { +define void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i16, align 2 @@ -124,3 +127,48 @@ define weak void @kotlinclib_set_short(i32 %data, i32 %index, i16 signext %value store i16 %7, i16* %11, align 2 ret void } + +; Function Attrs: nounwind uwtable +define i64 @kotlinclib_get_long(i32 %data, i32 %index) #0 { + %1 = alloca i32, align 4 + %2 = alloca i32, align 4 + store i32 %data, i32* %1, align 4 + store i32 %index, i32* %2, align 4 + %3 = load i32* %1, align 4 + %4 = sext i32 %3 to i64 + %5 = inttoptr i64 %4 to i64* + %6 = load i32* %2, align 4 + %7 = sext i32 %6 to i64 + %8 = getelementptr inbounds i64* %5, i64 %7 + %9 = load i64* %8, align 8 + ret i64 %9 +} + +; Function Attrs: nounwind uwtable +define void @kotlinclib_set_long(i32 %data, i32 %index, i64 %value) #0 { + %1 = alloca i32, align 4 + %2 = alloca i32, align 4 + %3 = alloca i64, align 8 + %ptr = alloca i64*, align 8 + store i32 %data, i32* %1, align 4 + store i32 %index, i32* %2, align 4 + store i64 %value, i64* %3, align 8 + %4 = load i32* %1, align 4 + %5 = sext i32 %4 to i64 + %6 = inttoptr i64 %5 to i64* + store i64* %6, i64** %ptr, align 8 + %7 = load i64* %3, align 8 + %8 = load i64** %ptr, align 8 + %9 = load i32* %2, align 4 + %10 = sext i32 %9 to i64 + %11 = getelementptr inbounds i64* %8, i64 %10 + store i64 %7, i64* %11, align 8 + ret void +} + +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" } +attributes #1 = { "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)"} diff --git a/kotstd/lib/x86/primitives_c.ll b/kotstd/lib/x86/primitives_c.ll index 7dbb9213163..efc26cd7f5f 100644 --- a/kotstd/lib/x86/primitives_c.ll +++ b/kotstd/lib/x86/primitives_c.ll @@ -1,10 +1,9 @@ ; ModuleID = 'primitives.c' -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-pc-linux-gnu" +target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" +target triple = "thumbv7m-none--eabi" -attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_intToByte(i32 %value) #0 { +; Function Attrs: nounwind +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,8 +11,8 @@ define weak signext i8 @kotlinclib_intToByte(i32 %value) #0 { ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_intToChar(i32 %value) #0 { +; Function Attrs: nounwind +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,8 +20,8 @@ define weak signext i8 @kotlinclib_intToChar(i32 %value) #0 { ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { +; Function Attrs: nounwind +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,17 +29,16 @@ define weak signext i16 @kotlinclib_intToShort(i32 %value) #0 { ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_intToLong(i32 %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i32 %2 to i64 - ret i64 %3 + ret i32 %2 } -; Function Attrs: nounwind uwtable -define weak float @kotlinclib_intToFloat(i32 %value) #0 { +; Function Attrs: nounwind +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 @@ -48,8 +46,8 @@ define weak float @kotlinclib_intToFloat(i32 %value) #0 { ret float %3 } -; Function Attrs: nounwind uwtable -define weak double @kotlinclib_intToDouble(i32 %value) #0 { +; Function Attrs: nounwind +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 @@ -57,114 +55,114 @@ define weak double @kotlinclib_intToDouble(i32 %value) #0 { ret double %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_byteToChar(i8 signext %value) #0 { +; Function Attrs: nounwind +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 ret i8 %2 } -; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_byteToShort(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i16 + %3 = zext i8 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_byteToInt(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i32 + %3 = zext i8 %2 to i32 ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_byteToLong(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i64 - ret i64 %3 + %3 = zext i8 %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak float @kotlinclib_byteToFloat(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sitofp i8 %2 to float + %3 = uitofp i8 %2 to float ret float %3 } -; Function Attrs: nounwind uwtable -define weak double @kotlinclib_byteToDouble(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sitofp i8 %2 to double + %3 = uitofp i8 %2 to double ret double %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_charToByte(i8 signext %value) #0 { +; Function Attrs: nounwind +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 ret i8 %2 } -; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_charToShort(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i16 + %3 = zext i8 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_charToInt(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i32 + %3 = zext i8 %2 to i32 ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_charToLong(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i8 %2 to i64 - ret i64 %3 + %3 = zext i8 %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak float @kotlinclib_charToFloat(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sitofp i8 %2 to float + %3 = uitofp i8 %2 to float ret float %3 } -; Function Attrs: nounwind uwtable -define weak double @kotlinclib_charToDouble(i8 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sitofp i8 %2 to double + %3 = uitofp i8 %2 to double ret double %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { +; Function Attrs: nounwind +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 @@ -172,8 +170,8 @@ define weak signext i8 @kotlinclib_shortToByte(i16 signext %value) #0 { ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { +; Function Attrs: nounwind +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 @@ -181,8 +179,8 @@ define weak signext i8 @kotlinclib_shortToChar(i16 signext %value) #0 { ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { +; Function Attrs: nounwind +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 @@ -190,17 +188,17 @@ define weak i32 @kotlinclib_shortToInt(i16 signext %value) #0 { ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_shortToLong(i16 signext %value) #0 { +; Function Attrs: nounwind +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 - %3 = sext i16 %2 to i64 - ret i64 %3 + %3 = sext i16 %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { +; Function Attrs: nounwind +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 @@ -208,8 +206,8 @@ define weak float @kotlinclib_shortToFloat(i16 signext %value) #0 { ret float %3 } -; Function Attrs: nounwind uwtable -define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { +; Function Attrs: nounwind +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 @@ -217,80 +215,79 @@ define weak double @kotlinclib_shortToDouble(i16 signext %value) #0 { ret double %3 } -; Function Attrs: nounwind uwtable -define weak 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 +; Function Attrs: nounwind +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 + %3 = trunc i32 %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak 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 +; Function Attrs: nounwind +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 + %3 = trunc i32 %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak 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 +; Function Attrs: nounwind +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 + %3 = trunc i32 %2 to i16 ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak 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 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 weak 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 +; Function Attrs: nounwind +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 + %3 = sitofp i32 %2 to float ret float %3 } -; Function Attrs: nounwind uwtable -define weak 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 +; Function Attrs: nounwind +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 + %3 = sitofp i32 %2 to double ret double %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_floatToByte(float %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi float %2 to i8 + %3 = fptoui float %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_floatToChar(float %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi float %2 to i8 + %3 = fptoui float %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { +; Function Attrs: nounwind +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 @@ -298,8 +295,8 @@ define weak signext i16 @kotlinclib_floatToShort(float %value) #0 { ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_floatToInt(float %value) #0 { +; Function Attrs: nounwind +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 @@ -307,17 +304,17 @@ define weak i32 @kotlinclib_floatToInt(float %value) #0 { ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_floatToLong(float %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi float %2 to i64 - ret i64 %3 + %3 = fptosi float %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak double @kotlinclib_floatToDouble(float %value) #0 { +; Function Attrs: nounwind +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 @@ -325,26 +322,26 @@ define weak double @kotlinclib_floatToDouble(float %value) #0 { ret double %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_doubleToByte(double %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi double %2 to i8 + %3 = fptoui double %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i8 @kotlinclib_doubleToChar(double %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi double %2 to i8 + %3 = fptoui double %2 to i8 ret i8 %3 } -; Function Attrs: nounwind uwtable -define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { +; Function Attrs: nounwind +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 @@ -352,8 +349,8 @@ define weak signext i16 @kotlinclib_doubleToShort(double %value) #0 { ret i16 %3 } -; Function Attrs: nounwind uwtable -define weak i32 @kotlinclib_doubleToInt(double %value) #0 { +; Function Attrs: nounwind +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 @@ -361,20 +358,64 @@ define weak i32 @kotlinclib_doubleToInt(double %value) #0 { ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak i64 @kotlinclib_doubleToLong(double %value) #0 { +; Function Attrs: nounwind +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 - %3 = fptosi double %2 to i64 - ret i64 %3 + %3 = fptosi double %2 to i32 + ret i32 %3 } -; Function Attrs: nounwind uwtable -define weak float @kotlinclib_doubleToFloat(double %value) #0 { +; Function Attrs: nounwind +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 %3 = fptrunc double %2 to float ret float %3 } + +; Function Attrs: nounwind +define i32 @kotlinclib_int_size() #0 { + ret i32 4 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_long_size() #0 { + ret i32 4 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_boolean_size() #0 { + ret i32 1 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_short_size() #0 { + ret i32 2 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_double_size() #0 { + ret i32 8 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_float_size() #0 { + ret i32 4 +} + +; Function Attrs: nounwind +define i32 @kotlinclib_char_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" } + +!llvm.module.flags = !{!0, !1} +!llvm.ident = !{!2} + +!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)"}