mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Some initial wasm support.
This commit is contained in:
127
test/test_suite/abi/vec2_wasm.c3t
Normal file
127
test/test_suite/abi/vec2_wasm.c3t
Normal file
@@ -0,0 +1,127 @@
|
||||
// #target: wasm32
|
||||
module abi;
|
||||
|
||||
struct Vector2 {
|
||||
float x;
|
||||
float y;
|
||||
}
|
||||
extern fn Vector2 vector2_zero() { return Vector2 {}; }
|
||||
extern fn Vector2 vector2_one() { return Vector2 {}; }
|
||||
extern fn Vector2 vector2_add(Vector2 v1, Vector2 v2) { return Vector2 {}; }
|
||||
extern fn Vector2 vector2_add_value(Vector2 v, float add) { return Vector2 {}; }
|
||||
extern fn Vector2 vector2_subtract(Vector2 v1, Vector2 v2) { return Vector2 {}; }
|
||||
extern fn Vector2 vector2_subtract_value(Vector2 v, float sub) { return Vector2 {}; }
|
||||
|
||||
// #expect: abi.ll
|
||||
; ModuleID = 'abi'
|
||||
source_filename = "abi"
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128-ni:1:10:20"
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
%Vector2 = type { float, float }
|
||||
|
||||
define void @vector2_zero(%Vector2* sret(%Vector2) align 4 %0) #0 {
|
||||
entry:
|
||||
%literal = alloca %Vector2, align 4
|
||||
%1 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %1, align 4
|
||||
%2 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %2, align 4
|
||||
%3 = bitcast %Vector2* %0 to i8*
|
||||
%4 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vector2_one(%Vector2* sret(%Vector2) align 4 %0) #0 {
|
||||
entry:
|
||||
%literal = alloca %Vector2, align 4
|
||||
%1 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %1, align 4
|
||||
%2 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %2, align 4
|
||||
%3 = bitcast %Vector2* %0 to i8*
|
||||
%4 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vector2_add(%Vector2* sret(%Vector2) align 4 %0, %Vector2* byval(%Vector2) align 4 %1, %Vector2* byval(%Vector2) align 4 %2) #0 {
|
||||
entry:
|
||||
%v1 = alloca %Vector2, align 4
|
||||
%v2 = alloca %Vector2, align 4
|
||||
%literal = alloca %Vector2, align 4
|
||||
%3 = bitcast %Vector2* %v1 to i8*
|
||||
%4 = bitcast %Vector2* %1 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
%5 = bitcast %Vector2* %v2 to i8*
|
||||
%6 = bitcast %Vector2* %2 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %5, i8* align 4 %6, i32 8, i1 false)
|
||||
%7 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %7, align 4
|
||||
%8 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %8, align 4
|
||||
%9 = bitcast %Vector2* %0 to i8*
|
||||
%10 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %9, i8* align 4 %10, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vector2_add_value(%Vector2* sret(%Vector2) align 4 %0, %Vector2* byval(%Vector2) align 4 %1, float %2) #0 {
|
||||
entry:
|
||||
%v = alloca %Vector2, align 4
|
||||
%add = alloca float, align 4
|
||||
%literal = alloca %Vector2, align 4
|
||||
%3 = bitcast %Vector2* %v to i8*
|
||||
%4 = bitcast %Vector2* %1 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
store float %2, float* %add, align 4
|
||||
%5 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %5, align 4
|
||||
%6 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %6, align 4
|
||||
%7 = bitcast %Vector2* %0 to i8*
|
||||
%8 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %7, i8* align 4 %8, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vector2_subtract(%Vector2* sret(%Vector2) align 4 %0, %Vector2* byval(%Vector2) align 4 %1, %Vector2* byval(%Vector2) align 4 %2) #0 {
|
||||
entry:
|
||||
%v1 = alloca %Vector2, align 4
|
||||
%v2 = alloca %Vector2, align 4
|
||||
%literal = alloca %Vector2, align 4
|
||||
%3 = bitcast %Vector2* %v1 to i8*
|
||||
%4 = bitcast %Vector2* %1 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
%5 = bitcast %Vector2* %v2 to i8*
|
||||
%6 = bitcast %Vector2* %2 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %5, i8* align 4 %6, i32 8, i1 false)
|
||||
%7 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %7, align 4
|
||||
%8 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %8, align 4
|
||||
%9 = bitcast %Vector2* %0 to i8*
|
||||
%10 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %9, i8* align 4 %10, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @vector2_subtract_value(%Vector2* sret(%Vector2) align 4 %0, %Vector2* byval(%Vector2) align 4 %1, float %2) #0 {
|
||||
entry:
|
||||
%v = alloca %Vector2, align 4
|
||||
%sub = alloca float, align 4
|
||||
%literal = alloca %Vector2, align 4
|
||||
%3 = bitcast %Vector2* %v to i8*
|
||||
%4 = bitcast %Vector2* %1 to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %3, i8* align 4 %4, i32 8, i1 false)
|
||||
store float %2, float* %sub, align 4
|
||||
%5 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 0
|
||||
store float 0.000000e+00, float* %5, align 4
|
||||
%6 = getelementptr inbounds %Vector2, %Vector2* %literal, i32 0, i32 1
|
||||
store float 0.000000e+00, float* %6, align 4
|
||||
%7 = bitcast %Vector2* %0 to i8*
|
||||
%8 = bitcast %Vector2* %literal to i8*
|
||||
call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %7, i8* align 4 %8, i32 8, i1 false)
|
||||
ret void
|
||||
}
|
||||
Reference in New Issue
Block a user