translator: add arm llvm lib
This commit is contained in:
@@ -30,7 +30,7 @@ for i in $( ls "$DIRECTORY/input" $1); do
|
||||
clang-3.6 -S -emit-llvm $DIRECTORY/linked/main.c -o $DIRECTORY/linked/main.ll -Wno-implicit-function-declaration
|
||||
rm -f $DIRECTORY/linked/main.c
|
||||
|
||||
cp ./src/main/resources/kotlib/linked/* $DIRECTORY/linked/
|
||||
cp ./src/main/resources/kotlib/linked/x86/* $DIRECTORY/linked/
|
||||
|
||||
if [ -f "$DIRECTORY/c/$TEST.c" ]
|
||||
then
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
; ModuleID = 'array.c'
|
||||
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 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(i32 %2) #2
|
||||
%4 = ptrtoint i8* %3 to i32
|
||||
ret i32 %4
|
||||
}
|
||||
|
||||
declare i8* @malloc(i32) #1
|
||||
|
||||
; Function Attrs: nounwind
|
||||
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
|
||||
store i32 %index, i32* %2, align 4
|
||||
%3 = load i32* %1, align 4
|
||||
%4 = inttoptr i32 %3 to i8*
|
||||
%5 = load i32* %2, align 4
|
||||
%6 = getelementptr inbounds i8* %4, i32 %5
|
||||
%7 = load i8* %6, align 1
|
||||
ret i8 %7
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind
|
||||
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
|
||||
%ptr = alloca i8*, align 4
|
||||
store i32 %data, i32* %1, align 4
|
||||
store i32 %index, i32* %2, align 4
|
||||
store i8 %value, i8* %3, align 1
|
||||
%4 = load i32* %1, align 4
|
||||
%5 = inttoptr i32 %4 to i8*
|
||||
store i8* %5, i8** %ptr, align 4
|
||||
%6 = load i8* %3, align 1
|
||||
%7 = load i8** %ptr, align 4
|
||||
%8 = load i32* %2, align 4
|
||||
%9 = getelementptr inbounds i8* %7, i32 %8
|
||||
store i8 %6, i8* %9, align 1
|
||||
ret void
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind
|
||||
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
|
||||
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_int(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
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind
|
||||
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
|
||||
store i32 %index, i32* %2, align 4
|
||||
%3 = load i32* %1, align 4
|
||||
%4 = inttoptr i32 %3 to i16*
|
||||
%5 = load i32* %2, align 4
|
||||
%6 = getelementptr inbounds i16* %4, i32 %5
|
||||
%7 = load i16* %6, align 2
|
||||
ret i16 %7
|
||||
}
|
||||
|
||||
; Function Attrs: nounwind
|
||||
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
|
||||
%ptr = alloca i16*, align 4
|
||||
store i32 %data, i32* %1, align 4
|
||||
store i32 %index, i32* %2, align 4
|
||||
store i16 %value, i16* %3, align 2
|
||||
%4 = load i32* %1, align 4
|
||||
%5 = inttoptr i32 %4 to i16*
|
||||
store i16* %5, i16** %ptr, align 4
|
||||
%6 = load i16* %3, align 2
|
||||
%7 = load i16** %ptr, align 4
|
||||
%8 = load i32* %2, align 4
|
||||
%9 = getelementptr inbounds i16* %7, i32 %8
|
||||
store i16 %6, i16* %9, align 2
|
||||
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}
|
||||
@@ -0,0 +1,385 @@
|
||||
; 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"
|
||||
|
||||
; 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
|
||||
%3 = trunc i32 %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = trunc i32 %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = trunc i32 %2 to i16
|
||||
ret i16 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
ret i32 %2
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = sitofp i32 %2 to float
|
||||
ret float %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = sitofp i32 %2 to double
|
||||
ret double %3
|
||||
}
|
||||
|
||||
; 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
|
||||
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 = zext i8 %2 to i16
|
||||
ret i16 %3
|
||||
}
|
||||
|
||||
; 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 = zext i8 %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 = zext i8 %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 = uitofp i8 %2 to float
|
||||
ret float %3
|
||||
}
|
||||
|
||||
; 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 = uitofp i8 %2 to double
|
||||
ret double %3
|
||||
}
|
||||
|
||||
; 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
|
||||
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 = zext i8 %2 to i16
|
||||
ret i16 %3
|
||||
}
|
||||
|
||||
; 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 = zext i8 %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 = zext i8 %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 = uitofp i8 %2 to float
|
||||
ret float %3
|
||||
}
|
||||
|
||||
; 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 = uitofp i8 %2 to double
|
||||
ret double %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = trunc i16 %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = trunc i16 %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = sext i16 %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = sitofp i16 %2 to float
|
||||
ret float %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = sitofp i16 %2 to double
|
||||
ret double %3
|
||||
}
|
||||
|
||||
; 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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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 = fptoui float %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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 = fptoui float %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = fptosi float %2 to i16
|
||||
ret i16 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = fptosi float %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = fpext float %2 to double
|
||||
ret double %3
|
||||
}
|
||||
|
||||
; 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 = fptoui double %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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 = fptoui double %2 to i8
|
||||
ret i8 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = fptosi double %2 to i16
|
||||
ret i16 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
%3 = fptosi double %2 to i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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 i32
|
||||
ret i32 %3
|
||||
}
|
||||
|
||||
; 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
|
||||
}
|
||||
|
||||
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}
|
||||
Reference in New Issue
Block a user