mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
88 lines
3.4 KiB
C
88 lines
3.4 KiB
C
// #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
|
|
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
%Vector2 = type { float, float }
|
|
|
|
define void @vector2_zero(ptr noalias sret(%Vector2) align 4 %0) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%1 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %1, align 4
|
|
%2 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %2, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
define void @vector2_one(ptr noalias sret(%Vector2) align 4 %0) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%1 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %1, align 4
|
|
%2 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %2, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
define void @vector2_add(ptr noalias sret(%Vector2) align 4 %0, ptr byval(%Vector2) align 4 %1, ptr byval(%Vector2) align 4 %2) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%3 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %3, align 4
|
|
%4 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %4, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
define void @vector2_add_value(ptr noalias sret(%Vector2) align 4 %0, ptr byval(%Vector2) align 4 %1, float %2) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%3 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %3, align 4
|
|
%4 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %4, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
define void @vector2_subtract(ptr noalias sret(%Vector2) align 4 %0, ptr byval(%Vector2) align 4 %1, ptr byval(%Vector2) align 4 %2) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%3 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %3, align 4
|
|
%4 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %4, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
define void @vector2_subtract_value(ptr noalias sret(%Vector2) align 4 %0, ptr byval(%Vector2) align 4 %1, float %2) #0 {
|
|
entry:
|
|
%literal = alloca %Vector2, align 4
|
|
%3 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 0
|
|
store float 0.000000e+00, ptr %3, align 4
|
|
%4 = getelementptr inbounds %Vector2, ptr %literal, i32 0, i32 1
|
|
store float 0.000000e+00, ptr %4, align 4
|
|
call void @llvm.memcpy.p0.p0.i32(ptr align 4 %0, ptr align 4 %literal, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|