From 607abc18875041aa4f9face567515060a5beb73a Mon Sep 17 00:00:00 2001 From: e5l Date: Wed, 13 Jul 2016 16:50:21 +0300 Subject: [PATCH] translator: add callbacks support --- car_llvmkot/src/kotlin_main.ll | 43 +++++++++++++------ .../translator/llvm/types/LLVMFunctionType.kt | 5 +++ 2 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt diff --git a/car_llvmkot/src/kotlin_main.ll b/car_llvmkot/src/kotlin_main.ll index 1e80a7e52de..a5ffb321776 100644 --- a/car_llvmkot/src/kotlin_main.ll +++ b/car_llvmkot/src/kotlin_main.ll @@ -1,22 +1,45 @@ declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" } declare void @wait(i32 %loops) #0 -define void @program_forward() #0 +define void @programRotationRight() #0 { -call void @engine_forward() +call void @engine_turn_right() call void @wait(i32 10) ret void } -declare void @leds_init() #0 -declare void @engine_init() #0 -define void @program_backward() #0 +define void @setCurProgram(i32 %program) #0 +{ +%program.addr = alloca i32, align 4 +store i32 %program, i32* %program.addr, align 4 +ret void +} +define void @programBackward() #0 { call void @engine_backward() call void @wait(i32 10) ret void } +declare void @leds_init() #0 +define void @programForward(i32 %delay) #0 +{ +%delay.addr = alloca i32, align 4 +store i32 %delay, i32* %delay.addr, align 4 +call void @engine_forward() +call void @wait(i32 10) +ret void +} +define void @procNextProgramPending() #0 +{ +ret void +} +declare void @engine_init() #0 +declare void @user_btn_init(void ()* %program) #0 +define void @setNextProgramPending() #0 +{ +ret void +} declare void @engine_backward() #0 -define void @program_rotation_left() #0 +define void @programRotationLeft() #0 { call void @engine_turn_left() call void @wait(i32 10) @@ -26,16 +49,12 @@ define void @kotlin_main() #0 { call void @leds_init() call void @engine_init() +call void @user_btn_init(void ()* @setNextProgramPending) +call void @setCurProgram(i32 0) ret void } declare void @engine_stop() #0 declare void @engine_forward() #0 -define void @program_rotation_right() #0 -{ -call void @engine_turn_right() -call void @wait(i32 10) -ret void -} declare void @engine_turn_left() #0 declare void @engine_turn_right() #0 diff --git a/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt new file mode 100644 index 00000000000..bd61a9da020 --- /dev/null +++ b/translator/src/main/kotlin/org/kotlinnative/translator/llvm/types/LLVMFunctionType.kt @@ -0,0 +1,5 @@ +package org.kotlinnative.translator.llvm.types + +/** + * Created by user on 7/13/16. + */