translator: valid malloc for x86
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)
|
||||
declare i8* @malloc_static(i32)
|
||||
attributes #0 = { nounwind "stack-protector-buffer-size"="8" "target-cpu"="cortex-m3" "target-features"="+hwdiv,+strict-align" }
|
||||
declare i8* @malloc(i32)
|
||||
%class.ComplexRef = type { i32, %class.Simple* }
|
||||
define void @ComplexRef(%class.ComplexRef* %classvariable.this, i32 %i, %class.Simple* %s) #0
|
||||
define void @ComplexRef(%class.ComplexRef* %classvariable.this, i32 %i, %class.Simple* %s)
|
||||
{
|
||||
%classvariable.this.addr = alloca %class.ComplexRef, align 4
|
||||
%i.addr = alloca i32, align 4
|
||||
@@ -18,7 +17,7 @@ call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var4, i8* %var5, i64 8, i32 4, i1 fals
|
||||
ret void
|
||||
}
|
||||
%class.Simple = type { i32 }
|
||||
define void @Simple(%class.Simple* %classvariable.this, i32 %i) #0
|
||||
define void @Simple(%class.Simple* %classvariable.this, i32 %i)
|
||||
{
|
||||
%classvariable.this.addr = alloca %class.Simple, align 4
|
||||
%i.addr = alloca i32, align 4
|
||||
@@ -31,15 +30,15 @@ store i32 %var6, i32* %var7, align 4
|
||||
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %var8, i8* %var9, i64 4, i32 4, i1 false)
|
||||
ret void
|
||||
}
|
||||
define void @kotlin_main() #0
|
||||
define void @main()
|
||||
{
|
||||
%var11 = call i8* @malloc_static(i32 4)
|
||||
%var11 = call i8* @malloc(i32 4)
|
||||
%var10 = bitcast i8* %var11 to %class.Simple*
|
||||
call void @Simple(%class.Simple* %var10, i32 5)
|
||||
%managed.s.1 = alloca %class.Simple, align 4
|
||||
%var12 = load %class.Simple* %var10, align 4
|
||||
store %class.Simple %var12, %class.Simple* %managed.s.1, align 4
|
||||
%var14 = call i8* @malloc_static(i32 4)
|
||||
%var14 = call i8* @malloc(i32 4)
|
||||
%var13 = bitcast i8* %var14 to %class.ComplexRef*
|
||||
call void @ComplexRef(%class.ComplexRef* %var13, i32 1, %class.Simple* %managed.s.1)
|
||||
%managed.i.1 = alloca %class.ComplexRef, align 4
|
||||
|
||||
@@ -10,7 +10,7 @@ fun main(args: Array<String>) {
|
||||
}
|
||||
|
||||
val disposer = Disposer.newDisposable()
|
||||
val state = parseAndAnalyze(args.asList(), disposer, arm = true)
|
||||
val state = parseAndAnalyze(args.asList(), disposer, arm = false)
|
||||
|
||||
val files = state.environment.getSourceFiles()
|
||||
if (files.isEmpty()) {
|
||||
|
||||
@@ -22,7 +22,7 @@ class LLVMBuilder(val arm: Boolean) {
|
||||
private fun initBuilder() {
|
||||
val declares = arrayOf(
|
||||
"declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1)",
|
||||
"declare i8* @malloc_static(i32)")
|
||||
"declare i8* @${if (arm) "malloc_static" else "malloc"}(i32)")
|
||||
|
||||
declares.forEach { globalCode.appendln(it) }
|
||||
|
||||
@@ -168,7 +168,7 @@ class LLVMBuilder(val arm: Boolean) {
|
||||
val allocedVar = getNewVariable(LLVMCharType(), pointer = 1)
|
||||
|
||||
val size = if (target.pointer > 0) POINTER_SIZE else target.type.size
|
||||
val alloc = "$allocedVar = call i8* @malloc_static(i32 $size)"
|
||||
val alloc = "$allocedVar = call i8* @${if (arm) "malloc_static" else "malloc"}(i32 $size)"
|
||||
localCode.appendln(alloc)
|
||||
|
||||
val cast = "$target = bitcast ${allocedVar.getType()} $allocedVar to ${target.getType()}"
|
||||
|
||||
Reference in New Issue
Block a user