]> Untitled Git - axy/ft/c-cera.git/commitdiff
Impl of more cmp operations master
authorAxy <gilliardmarthey.axel@gmail.com>
Mon, 8 Jun 2026 12:00:10 +0000 (14:00 +0200)
committerAxy <gilliardmarthey.axel@gmail.com>
Mon, 8 Jun 2026 12:00:10 +0000 (14:00 +0200)
.deps
Makefile
conf.mk
src/builtim_gt.c [new file with mode: 0644]
src/builtin_lt.c [new file with mode: 0644]
src/miniobj.c
src/miniobj.h
src/miniobj_lifetime.c
src/value_gte.c [new file with mode: 0644]
src/vec.h
test.c

diff --git a/.deps b/.deps
index cee5ecb739d662da0ac1c6bc186bf19941069e90..02021cd872b25e3d2f72c122c836e255a4794716 100644 (file)
--- a/.deps
+++ b/.deps
@@ -1,5 +1,9 @@
 ${BUILDDIR}/arc.o: src/arc.c src/arc.h src/memutils.h src/panic.h src/jmp.h \
   src/arith.h src/atomic.h
 ${BUILDDIR}/arc.o: src/arc.c src/arc.h src/memutils.h src/panic.h src/jmp.h \
   src/arith.h src/atomic.h
+${BUILDDIR}/builtim_gt.o: src/builtim_gt.c src/builtin_register.h src/value_types.h \
+  src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
+  src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
+  src/memutils.h
 ${BUILDDIR}/builtin_add.o: src/builtin_add.c src/builtin_register.h src/value_types.h \
   src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
   src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
 ${BUILDDIR}/builtin_add.o: src/builtin_add.c src/builtin_register.h src/value_types.h \
   src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
   src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
@@ -17,6 +21,10 @@ ${BUILDDIR}/builtin_list_set.o: src/builtin_list_set.c src/builtin_register.h \
 ${BUILDDIR}/builtin_list_set_drop.o: src/builtin_list_set_drop.c src/value.h \
   src/value_get.h src/value_types.h src/panic.h src/jmp.h \
   src/value_new.h src/arc.h src/memutils.h src/arith.h
 ${BUILDDIR}/builtin_list_set_drop.o: src/builtin_list_set_drop.c src/value.h \
   src/value_get.h src/value_types.h src/panic.h src/jmp.h \
   src/value_new.h src/arc.h src/memutils.h src/arith.h
+${BUILDDIR}/builtin_lt.o: src/builtin_lt.c src/builtin_register.h src/value_types.h \
+  src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
+  src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
+  src/memutils.h
 ${BUILDDIR}/builtin_lte.o: src/builtin_lte.c src/builtin_register.h src/value_types.h \
   src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
   src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
 ${BUILDDIR}/builtin_lte.o: src/builtin_lte.c src/builtin_register.h src/value_types.h \
   src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
   src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
@@ -39,20 +47,24 @@ ${BUILDDIR}/eval.o: src/eval.c src/ccera.h src/jmp.h src/defer.h src/framealloc.
   src/align.h src/stacktrack.h src/memutils.h src/panic.h src/value.h \
   src/value_get.h src/value_types.h src/value_new.h src/arith.h \
   src/arc.h src/atomic.h src/builtin_register.h src/execalloc.h \
   src/align.h src/stacktrack.h src/memutils.h src/panic.h src/value.h \
   src/value_get.h src/value_types.h src/value_new.h src/arith.h \
   src/arc.h src/atomic.h src/builtin_register.h src/execalloc.h \
-  src/miniobj.h
+  src/miniobj.h src/vec.h
 ${BUILDDIR}/execalloc.o: src/execalloc.c src/panic.h src/jmp.h
 ${BUILDDIR}/framealloc.o: src/framealloc.c src/framealloc.h src/align.h \
   src/stacktrack.h
 ${BUILDDIR}/execalloc.o: src/execalloc.c src/panic.h src/jmp.h
 ${BUILDDIR}/framealloc.o: src/framealloc.c src/framealloc.h src/align.h \
   src/stacktrack.h
-${BUILDDIR}/miniobj.o: src/miniobj.c src/miniobj.h src/panic.h src/jmp.h src/defer.h \
-  src/framealloc.h src/align.h src/stacktrack.h src/memutils.h src/vec.h \
-  src/execalloc.h
-${BUILDDIR}/miniobj_lifetime.o: src/miniobj_lifetime.c src/miniobj.h src/memutils.h \
-  src/panic.h src/jmp.h
+${BUILDDIR}/miniobj.o: src/miniobj.c src/miniobj.h src/vec.h src/memutils.h \
+  src/panic.h src/jmp.h src/defer.h src/framealloc.h src/align.h \
+  src/stacktrack.h src/execalloc.h
+${BUILDDIR}/miniobj_lifetime.o: src/miniobj_lifetime.c src/miniobj.h src/vec.h \
+  src/memutils.h src/panic.h src/jmp.h
 ${BUILDDIR}/panic.o: src/panic.c src/panic.h src/jmp.h src/defer.h src/framealloc.h \
   src/align.h src/stacktrack.h src/memutils.h
 ${BUILDDIR}/stacktrack.o: src/stacktrack.c src/stacktrack.h
 ${BUILDDIR}/value_debug.o: src/value_debug.c src/value.h src/value_get.h \
   src/value_types.h src/panic.h src/jmp.h src/value_new.h
 ${BUILDDIR}/panic.o: src/panic.c src/panic.h src/jmp.h src/defer.h src/framealloc.h \
   src/align.h src/stacktrack.h src/memutils.h
 ${BUILDDIR}/stacktrack.o: src/stacktrack.c src/stacktrack.h
 ${BUILDDIR}/value_debug.o: src/value_debug.c src/value.h src/value_get.h \
   src/value_types.h src/panic.h src/jmp.h src/value_new.h
+${BUILDDIR}/value_gte.o: src/value_gte.c src/builtin_register.h src/value_types.h \
+  src/value.h src/value_get.h src/panic.h src/jmp.h src/value_new.h \
+  src/defer.h src/framealloc.h src/align.h src/stacktrack.h \
+  src/memutils.h
 ${BUILDDIR}/value_lifetime.o: src/value_lifetime.c src/arc.h src/memutils.h \
   src/panic.h src/jmp.h src/arith.h src/defer.h src/framealloc.h \
   src/align.h src/stacktrack.h src/value.h src/value_get.h \
 ${BUILDDIR}/value_lifetime.o: src/value_lifetime.c src/arc.h src/memutils.h \
   src/panic.h src/jmp.h src/arith.h src/defer.h src/framealloc.h \
   src/align.h src/stacktrack.h src/value.h src/value_get.h \
index 5df2d45900d54213f9556abb2fc77a85596d31b9..29fe3446ace8f3239c255fa9506ad58bd473b299 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 NAME=ccera.a
 
 NAME=ccera.a
 
-SRCS=src/arc.c src/builtin_add.c src/builtin.c src/builtin_list_get.c src/builtin_list_set.c src/builtin_list_set_drop.c src/builtin_lte.c src/builtin_mul.c src/builtin_noop.c src/builtin_register.c src/builtin_sub.c src/defer.c src/eval.c src/execalloc.c src/framealloc.c src/miniobj.c src/miniobj_lifetime.c src/panic.c src/stacktrack.c src/value_debug.c src/value_lifetime.c src/value_list.c src/value_move.c src/value_new.c src/value_new_utils.c
+SRCS=src/arc.c src/builtim_gt.c src/builtin_add.c src/builtin.c src/builtin_list_get.c src/builtin_list_set.c src/builtin_list_set_drop.c src/builtin_lt.c src/builtin_lte.c src/builtin_mul.c src/builtin_noop.c src/builtin_register.c src/builtin_sub.c src/defer.c src/eval.c src/execalloc.c src/framealloc.c src/miniobj.c src/miniobj_lifetime.c src/panic.c src/stacktrack.c src/value_debug.c src/value_gte.c src/value_lifetime.c src/value_list.c src/value_move.c src/value_new.c src/value_new_utils.c
 
 HEADERS=src/align.h src/arc.h src/arith.h src/atomic.h src/builtin_register.h src/ccera.h src/defer.h src/execalloc.h src/framealloc.h src/jmp.h src/memutils.h src/miniobj.h src/panic.h src/stacktrack.h src/value_get.h src/value.h src/value_new.h src/value_types.h src/vec.h
 
 
 HEADERS=src/align.h src/arc.h src/arith.h src/atomic.h src/builtin_register.h src/ccera.h src/defer.h src/execalloc.h src/framealloc.h src/jmp.h src/memutils.h src/miniobj.h src/panic.h src/stacktrack.h src/value_get.h src/value.h src/value_new.h src/value_types.h src/vec.h
 
diff --git a/conf.mk b/conf.mk
index c54d73c5cf0043d1ec99547ca88a83bf2a204adc..29d93f578b52238e6da852028da7c35ef43ddeac 100644 (file)
--- a/conf.mk
+++ b/conf.mk
@@ -1,6 +1,6 @@
-LTO=0
-OPT=0
-CC=clang
+LTO=1
+OPT=1
+CC=cc
 #UBSAN=1
 #TSAN=1
 #ASAN=1
 #UBSAN=1
 #TSAN=1
 #ASAN=1
diff --git a/src/builtim_gt.c b/src/builtim_gt.c
new file mode 100644 (file)
index 0000000..5a87fe3
--- /dev/null
@@ -0,0 +1,58 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   builtim_gt.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2026/06/08 13:59:16 by agilliar          #+#    #+#             */
+/*   Updated: 2026/06/08 13:59:54 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "builtin_register.h"
+#include "value.h"
+#include "defer.h"
+
+t_value        builtin_igt_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_IGT1);
+       res.val.v_int = *value_int(&arg);
+       return (res);
+}
+
+t_value        builtin_igt1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_int > *value_int(&arg)));
+}
+
+t_value        builtin_ugt_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_UGT1);
+       res.val.v_uint = *value_uint(&arg);
+       return (res);
+}
+
+t_value        builtin_ugt1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_uint > *value_uint(&arg)));
+}
+
+__attribute__((constructor))
+void   builtin_gt_register(void)
+{
+       builtin_register(BUILTIN_IGT, &builtin_igt_impl, "igt");
+       builtin_register(BUILTIN_IGT1, &builtin_igt1_impl, "igt1");
+       builtin_register(BUILTIN_UGT, &builtin_ugt_impl, "ugt");
+       builtin_register(BUILTIN_UGT1, &builtin_ugt1_impl, "ugt1");
+}
diff --git a/src/builtin_lt.c b/src/builtin_lt.c
new file mode 100644 (file)
index 0000000..c713201
--- /dev/null
@@ -0,0 +1,58 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   builtin_lt.c                                       :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2026/06/08 13:54:41 by agilliar          #+#    #+#             */
+/*   Updated: 2026/06/08 13:55:41 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "builtin_register.h"
+#include "value.h"
+#include "defer.h"
+
+t_value        builtin_ilt_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_ILT1);
+       res.val.v_int = *value_int(&arg);
+       return (res);
+}
+
+t_value        builtin_ilt1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_int < *value_int(&arg)));
+}
+
+t_value        builtin_ult_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_ULT1);
+       res.val.v_uint = *value_uint(&arg);
+       return (res);
+}
+
+t_value        builtin_ult1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_uint < *value_uint(&arg)));
+}
+
+__attribute__((constructor))
+void   builtin_lt_register(void)
+{
+       builtin_register(BUILTIN_ILT, &builtin_ilt_impl, "ilt");
+       builtin_register(BUILTIN_ILT1, &builtin_ilt1_impl, "ilt1");
+       builtin_register(BUILTIN_ULT, &builtin_ult_impl, "ult");
+       builtin_register(BUILTIN_ULT1, &builtin_ult1_impl, "ult1");
+}
index 820819abc3f0ebb80082eeb6d1014ccea8da1a50..8114ab3911a50ba1d942ee84853db5a55ae4e5c0 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 22:55:45 by agilliar          #+#    #+#             */
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 22:55:45 by agilliar          #+#    #+#             */
-/*   Updated: 2026/06/01 18:55:02 by agilliar         ###   ########.fr       */
+/*   Updated: 2026/06/04 14:40:21 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -25,26 +25,26 @@ void        miniobj_write_s(t_miniobj *obj, const char *s)
 
 void   miniobj_write(t_miniobj *obj, const char *s, size_t n)
 {
 
 void   miniobj_write(t_miniobj *obj, const char *s, size_t n)
 {
-       vec_grow((void **) &obj->byte_buf, &obj->byte_capacity, obj->byte_len + n);
-       cera_memcpy(&obj->byte_buf[obj->byte_len], s, n);
-       obj->byte_len += n;
+       vec_push(&obj->byte_vec, s, n);
 }
 
 t_objaddr      miniobj_label(t_miniobj *obj, t_label label)
 {
 }
 
 t_objaddr      miniobj_label(t_miniobj *obj, t_label label)
 {
-       obj->resolved_labels[label] = obj->byte_len;
-       return (obj->byte_len);
+       obj->resolved_labels[label] = obj->byte_vec.len;
+       return (obj->byte_vec.len);
 }
 
 void   miniobj_write_reloc(t_miniobj *obj, t_label label, t_reloc_kind kind)
 {
 }
 
 void   miniobj_write_reloc(t_miniobj *obj, t_label label, t_reloc_kind kind)
 {
-       const uintptr_t s = 0;
+       const t_relocation      reloc = {
+               obj->byte_vec.len,
+               label,
+               kind
+       };
+       const uintptr_t         s = 0;
 
 
-       vec_grow((void **) &obj->reloc_buf,
-               &obj->reloc_capacity, (obj->reloc_len + 1) * sizeof(t_relocation));
-       obj->reloc_buf[obj->reloc_len] = (t_relocation){obj->byte_len, label, kind};
+       vec_push(&obj->reloc_vec, &reloc, sizeof(t_relocation));
        miniobj_write(obj, (const char *)&s, sizeof(int32_t));
        miniobj_write(obj, (const char *)&s, sizeof(int32_t));
-       obj->reloc_len += 1;
 }
 
 const char     *miniobj_finish(t_miniobj obj)
 }
 
 const char     *miniobj_finish(t_miniobj obj)
@@ -55,12 +55,12 @@ const char  *miniobj_finish(t_miniobj obj)
        int32_t                 offset;
 
        defer(miniobj_drop, &obj);
        int32_t                 offset;
 
        defer(miniobj_drop, &obj);
-       res = execalloc(obj.byte_len);
-       cera_memcpy(res, obj.byte_buf, obj.byte_len);
+       res = execalloc(obj.byte_vec.len);
+       cera_memcpy(res, obj.byte_vec.buf, obj.byte_vec.len);
        i = 0;
        i = 0;
-       while (i < obj.reloc_len)
+       while (i * sizeof(t_relocation) < obj.reloc_vec.len)
        {
        {
-               reloc = obj.reloc_buf[i++];
+               reloc = ((t_relocation *)obj.reloc_vec.buf)[i++];
                if (reloc.kind == REL_I32)
                {
                        offset = obj.resolved_labels[reloc.label] - reloc.loc
                if (reloc.kind == REL_I32)
                {
                        offset = obj.resolved_labels[reloc.label] - reloc.loc
index 235500c75ee2f7229e30d13e01944be1600c1447..d41c37764a5e9b9599be0375fca70113a49b86ca 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 22:55:56 by agilliar          #+#    #+#             */
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 22:55:56 by agilliar          #+#    #+#             */
-/*   Updated: 2026/06/01 17:56:03 by agilliar         ###   ########.fr       */
+/*   Updated: 2026/06/04 14:24:54 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -14,6 +14,7 @@
 # define MINIOBJ_H
 
 # include <stddef.h>
 # define MINIOBJ_H
 
 # include <stddef.h>
+# include "vec.h"
 
 typedef size_t t_objaddr;
 typedef size_t t_label;
 
 typedef size_t t_objaddr;
 typedef size_t t_label;
@@ -32,12 +33,8 @@ typedef struct s_relocation
 
 typedef struct s_miniobj
 {
 
 typedef struct s_miniobj
 {
-       char                    *byte_buf;
-       size_t                  byte_len;
-       size_t                  byte_capacity;
-       t_relocation    *reloc_buf;
-       size_t                  reloc_len;
-       size_t                  reloc_capacity;
+       t_vec                   byte_vec;
+       t_vec                   reloc_vec;
        t_objaddr               *resolved_labels;
 }      t_miniobj;
 
        t_objaddr               *resolved_labels;
 }      t_miniobj;
 
index 4eac03d5db9b38f2da334c2b9f2737b00398ab00..6ab4b178383f1964a3afd3d3fdaa0fafc1ecf215 100644 (file)
@@ -6,25 +6,23 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/06/01 00:06:44 by agilliar          #+#    #+#             */
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/06/01 00:06:44 by agilliar          #+#    #+#             */
-/*   Updated: 2026/06/01 00:09:00 by agilliar         ###   ########.fr       */
+/*   Updated: 2026/06/04 14:27:16 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "miniobj.h"
 #include "memutils.h"
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "miniobj.h"
 #include "memutils.h"
+#include "vec.h"
 
 t_miniobj      miniobj_new(size_t label_count)
 {
 
 t_miniobj      miniobj_new(size_t label_count)
 {
-       t_miniobj       res;
-
-       cera_memset(&res, 0, sizeof(t_miniobj));
-       res.resolved_labels = cera_malloc(label_count * sizeof(t_objaddr));
-       return (res);
+       return ((t_miniobj){vec_new(), vec_new(),
+               cera_malloc(label_count * sizeof(t_objaddr))});
 }
 
 void   miniobj_drop(t_miniobj *obj)
 {
 }
 
 void   miniobj_drop(t_miniobj *obj)
 {
-       free(obj->byte_buf);
-       free(obj->reloc_buf);
+       free(obj->byte_vec.buf);
+       free(obj->reloc_vec.buf);
        free(obj->resolved_labels);
 }
        free(obj->resolved_labels);
 }
diff --git a/src/value_gte.c b/src/value_gte.c
new file mode 100644 (file)
index 0000000..f1057a2
--- /dev/null
@@ -0,0 +1,58 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   value_gte.c                                        :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2026/06/08 13:56:19 by agilliar          #+#    #+#             */
+/*   Updated: 2026/06/08 13:59:01 by agilliar         ###   ########.fr       */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "builtin_register.h"
+#include "value.h"
+#include "defer.h"
+
+t_value        builtin_igte_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_IGTE1);
+       res.val.v_int = *value_int(&arg);
+       return (res);
+}
+
+t_value        builtin_igte1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_int >= *value_int(&arg)));
+}
+
+t_value        builtin_ugte_impl(t_value self, t_value arg)
+{
+       t_value         res;
+
+       (void) self;
+       errdefer(value_drop, &arg);
+       res = value_new_builtin(BUILTIN_UGTE1);
+       res.val.v_uint = *value_uint(&arg);
+       return (res);
+}
+
+t_value        builtin_ugte1_impl(t_value self, t_value arg)
+{
+       errdefer(value_drop, &arg);
+       return (value_new_uint(self.val.v_uint >= *value_uint(&arg)));
+}
+
+__attribute__((constructor))
+void   builtin_gte_register(void)
+{
+       builtin_register(BUILTIN_IGTE, &builtin_igte_impl, "igte");
+       builtin_register(BUILTIN_IGTE1, &builtin_igte1_impl, "igte1");
+       builtin_register(BUILTIN_UGTE, &builtin_ugte_impl, "ugte");
+       builtin_register(BUILTIN_UGTE1, &builtin_ugte1_impl, "ugte1");
+}
index bddae52253664fb9ea1c6672aa375dccb1f075a3..8489432046225e91baf1fff2270a715b4caeed4c 100644 (file)
--- a/src/vec.h
+++ b/src/vec.h
@@ -6,7 +6,7 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 23:16:07 by agilliar          #+#    #+#             */
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/05/31 23:16:07 by agilliar          #+#    #+#             */
-/*   Updated: 2026/06/01 18:31:18 by agilliar         ###   ########.fr       */
+/*   Updated: 2026/06/04 14:28:52 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 /*                                                                            */
 /* ************************************************************************** */
 
 # define VEC_H
 
 # include <stddef.h>
 # define VEC_H
 
 # include <stddef.h>
+# include <stdint.h>
 # include "memutils.h"
 # include "memutils.h"
+# include "panic.h"
 
 
-static inline void     vec_grow(void **p, size_t *cap, size_t to)
+typedef struct s_vec
+{
+       void    *buf;
+       size_t  len;
+       size_t  cap;
+}      t_vec;
+
+static inline t_vec    vec_new(void)
+{
+       return ((t_vec){NULL, 0, 0});
+}
+
+static inline void     vec_reserve(t_vec *vec, size_t n)
 {
        void    *nxt;
 {
        void    *nxt;
+       size_t  to;
 
 
-       if (to <= *cap)
+       if (__builtin_add_overflow(n, vec->len, &to))
+               panic("Vec too large");
+       if (to <= vec->cap)
                return ;
                return ;
-       if (to < *cap * 2)
-               to = *cap * 2;
-       nxt = cera_malloc(to);
-       cera_memcpy(nxt, *p, *cap);
-       free(*p);
-       *p = nxt;
-       *cap = to;
+       if (__builtin_mul_overflow(vec->cap, 2, &vec->cap))
+               vec->cap = SIZE_MAX;
+       if (vec->cap < to)
+               vec->cap = to;
+       nxt = cera_malloc(vec->cap);
+       cera_memcpy(nxt, vec->buf, vec->len);
+       free(vec->buf);
+       vec->buf = nxt;
+}
+
+static inline void     vec_push(t_vec  *vec, const void *p, size_t len)
+{
+       vec_reserve(vec, len);
+       cera_memcpy(vec->buf + vec->len, p, len);
+       vec->len += len;
 }
 
 #endif
 }
 
 #endif
diff --git a/test.c b/test.c
index 837e24bdb09b3f0a5616feef8c44b426569d87c1..273f3ef403d001405098440d57f6574b2f6b22ff 100644 (file)
--- a/test.c
+++ b/test.c
@@ -6,7 +6,7 @@
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/04/30 17:19:58 by agilliar          #+#    #+#             */
 /*   By: agilliar <agilliar@student.42mulhouse.fr>  +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2026/04/30 17:19:58 by agilliar          #+#    #+#             */
-/*   Updated: 2026/06/01 18:55:35 by agilliar         ###   ########.fr       */
+/*   Updated: 2026/06/08 13:49:37 by agilliar         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -216,7 +216,6 @@ void main2(void     *_orig)
        printf("%s\n", s2);
 }
 
        printf("%s\n", s2);
 }
 
-/*
 int main(void)
 {
        char    *msg;
 int main(void)
 {
        char    *msg;
@@ -234,8 +233,8 @@ int main(void)
        char *s2 = malloc(strlen(orig) + 1);
        defer(free, s2);
 }
        char *s2 = malloc(strlen(orig) + 1);
        defer(free, s2);
 }
-*/
 
 
+/*
 int    main(void)
 {
        t_miniobj       obj;
 int    main(void)
 {
        t_miniobj       obj;
@@ -250,7 +249,7 @@ int main(void)
        miniobj_write_s(&obj, "\x57"); // push rdi
        miniobj_write_s(&obj, "\x48\xff\xcf"); // dec rdi
        miniobj_write_s(&obj, "\xe8");
        miniobj_write_s(&obj, "\x57"); // push rdi
        miniobj_write_s(&obj, "\x48\xff\xcf"); // dec rdi
        miniobj_write_s(&obj, "\xe8");
-       miniobj_write_reloc(&obj, 0, REL_I32); // call func
+       miniobj_write_reloc(&obj, 0, REL_I32); // call rel32 func
        miniobj_write_s(&obj, "\x5f"); // pop rdi
        miniobj_write_s(&obj, "\x48\x0f\xaf\xc7"); // imul rdi, rax
        miniobj_write_s(&obj, "\xc3"); // ret
        miniobj_write_s(&obj, "\x5f"); // pop rdi
        miniobj_write_s(&obj, "\x48\x0f\xaf\xc7"); // imul rdi, rax
        miniobj_write_s(&obj, "\xc3"); // ret
@@ -260,3 +259,4 @@ int main(void)
        fact = (void *) &miniobj_finish(obj)[func];
        printf("%lu\n", fact(10));
 }
        fact = (void *) &miniobj_finish(obj)[func];
        printf("%lu\n", fact(10));
 }
+*/