diff options
| author | 2022-08-30 10:41:16 +0200 | |
|---|---|---|
| committer | 2022-08-30 10:41:16 +0200 | |
| commit | dea68bafe81c40adf29e45630cfeceb97b91a630 (patch) | |
| tree | 687c50f8e1402ed30ee711d27647aad8251a015c /src/llvm.cff | |
| parent | e4163c18cdc3522f24e459cd6ddde60edb1605e2 (diff) | |
Makefile and such
Diffstat (limited to 'src/llvm.cff')
| -rw-r--r-- | src/llvm.cff | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/llvm.cff b/src/llvm.cff index d8c8a32..97d1e3c 100644 --- a/src/llvm.cff +++ b/src/llvm.cff @@ -93,7 +93,6 @@ fn gen(fmt *const u8, ...) void { case Bool; gen("i%z", ty.size*8); case Int; gen("i%z", ty.size*8); case Flo; gen(ty.size == 4 ? "float" : "double"); - // case Ptr p; gen("%t*", p->is(:Void) ? ty_i8 : p); case Ptr p; gen("ptr"); case Slice p; gen("{ %t, %t }", mkptrtype(p), ty_usize); case Arr arr; @@ -485,9 +484,8 @@ fn convert(f *Fn, to *const Type, ex *Expr) Value { case to->is(:Ptr) and from->is(:Arr); let addr = genref(f, ex).Addr; - let t = mktmp(ex.ty); - gen("\t%v = getelementptr %t, %t %v, %t 0, %t 0\n", &t, addr.ty.u.Ptr, addr.ty, &addr, - ty_usize, ty_usize); + let t = mktmp(to); + gen("\t%v = getelementptr %t, %t %v, i32 0, i32 0\n", &t, addr.ty.u.Ptr, addr.ty, &addr); return t; case to->is(:Arr) and from->is(:Arr); @@ -621,6 +619,7 @@ fn genexpr(f *Fn, ex *Expr) Value { case '='; let ref = genref(f, b.lhs); let rhs = convert(f, b.lhs.ty, b.rhs); + gen("; %t\n",b.lhs.ty); genstore(f, ref, rhs); return genload(f, ref); // load again because value could have overflowed when storing it @@ -1272,8 +1271,8 @@ extern fn llvm_genfn(externp bool, name *const u8, f *Fn) void { if i < f.paramnames.#len - 1 or f.variadic { gen(", "); } - if f.variadic { gen("..."); } } + if f.variadic { gen("..."); } gen(") { \n"); let id = 0; foreach(nam, i, f.paramnames) { |