translator: add LongArray to stdlib

This commit is contained in:
Alexey Stepanov
2016-08-11 18:54:44 +03:00
parent d27a8e410d
commit 23787ba51b
7 changed files with 380 additions and 157 deletions
+59 -11
View File
@@ -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)"}