aboutsummaryrefslogtreecommitdiff
path: root/prescheme-nim-local/nim
diff options
context:
space:
mode:
authorPjotr Prins2025-02-11 02:24:30 -0600
committerPjotr Prins2025-02-11 02:24:30 -0600
commitfd714598394a36d94846a5c2cfa1dc6a7e4bcced (patch)
tree9b89ad45f6e357de32bb0219e7b534053484675d /prescheme-nim-local/nim
parent83d5d1535754016500af6854aab26c1fbdde73d0 (diff)
downloadpresentations-fd714598394a36d94846a5c2cfa1dc6a7e4bcced.tar.gz
Add FOSDEM 2025 talk
Diffstat (limited to 'prescheme-nim-local/nim')
-rw-r--r--prescheme-nim-local/nim/.guix-shell2
-rw-r--r--prescheme-nim-local/nim/@mexample.nim.c529
-rw-r--r--prescheme-nim-local/nim/@msimd.nim.c188
m---------prescheme-nim-local/nim/contrib/nimsimd0
-rw-r--r--prescheme-nim-local/nim/example.nim51
-rw-r--r--prescheme-nim-local/nim/readme.md65
-rw-r--r--prescheme-nim-local/nim/simd.nim29
7 files changed, 864 insertions, 0 deletions
diff --git a/prescheme-nim-local/nim/.guix-shell b/prescheme-nim-local/nim/.guix-shell
new file mode 100644
index 0000000..7c87f25
--- /dev/null
+++ b/prescheme-nim-local/nim/.guix-shell
@@ -0,0 +1,2 @@
+guix shell -C --network nim gcc-toolchain which gdb gsl coreutils openssl nss-certs nss
+
diff --git a/prescheme-nim-local/nim/@mexample.nim.c b/prescheme-nim-local/nim/@mexample.nim.c
new file mode 100644
index 0000000..54d0b01
--- /dev/null
+++ b/prescheme-nim-local/nim/@mexample.nim.c
@@ -0,0 +1,529 @@
+/* Generated by Nim Compiler v1.6.12 */
+#define NIM_INTBITS 64
+
+#include "nimbase.h"
+#include <string.h>
+#undef LANGUAGE_C
+#undef MIPSEB
+#undef MIPSEL
+#undef PPC
+#undef R3000
+#undef R4000
+#undef i386
+#undef linux
+#undef mips
+#undef near
+#undef far
+#undef powerpc
+#undef unix
+#define nimfr_(x, y)
+#define nimln_(x, y)
+typedef struct tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg;
+typedef struct NimStringDesc NimStringDesc;
+typedef struct TGenericSeq TGenericSeq;
+typedef struct TNimType TNimType;
+typedef struct TNimNode TNimNode;
+typedef struct tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw;
+typedef struct tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA;
+typedef struct tyObject_GcHeap__iDiTSZpQ7px0t5vNrxVbUA tyObject_GcHeap__iDiTSZpQ7px0t5vNrxVbUA;
+typedef struct tyObject_GcStack__UCyPjkT5JTcDkiVmdF9b1Hg tyObject_GcStack__UCyPjkT5JTcDkiVmdF9b1Hg;
+typedef struct tyObject_MemRegion__Gp1H3ulLE0JSwys9chSegUQ tyObject_MemRegion__Gp1H3ulLE0JSwys9chSegUQ;
+typedef struct tyObject_SmallChunk__IlnS2SZ9b9a9aa7geF7H7WlTQ tyObject_SmallChunk__IlnS2SZ9b9a9aa7geF7H7WlTQ;
+typedef struct tyObject_BigChunk__w1NV79cuBqFbXit4Tp17eOg tyObject_BigChunk__w1NV79cuBqFbXit4Tp17eOg;
+typedef struct tyObject_LLChunk__SQF3x9cXavsoHTw29byqkDLw tyObject_LLChunk__SQF3x9cXavsoHTw29byqkDLw;
+typedef struct tyObject_IntSet__2jdqyVr8TdkdzxtDR9cMNeA tyObject_IntSet__2jdqyVr8TdkdzxtDR9cMNeA;
+typedef struct tyObject_Trunk__49cO1kD2eWrtb8yk3xFe3Mg tyObject_Trunk__49cO1kD2eWrtb8yk3xFe3Mg;
+typedef struct tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw;
+typedef struct tyObject_HeapLinks__F5ahjOdOdTkYY2d0Q2Gl8A tyObject_HeapLinks__F5ahjOdOdTkYY2d0Q2Gl8A;
+typedef struct tyTuple__KO8Ebr67mzOYgVGVXIV5PQ tyTuple__KO8Ebr67mzOYgVGVXIV5PQ;
+typedef struct tyObject_GcStat__VaNnSVm7WoX0lNTqTCv50w tyObject_GcStat__VaNnSVm7WoX0lNTqTCv50w;
+typedef struct tyObject_CellSet__1gT1qjnSW9cWCbrErC2YjgA tyObject_CellSet__1gT1qjnSW9cWCbrErC2YjgA;
+typedef struct tyObject_PageDesc__2k4DJQa4eGP2jIhQQvG7aQ tyObject_PageDesc__2k4DJQa4eGP2jIhQQvG7aQ;
+struct TGenericSeq {
+NI len;
+NI reserved;
+};
+struct NimStringDesc {
+ TGenericSeq Sup;
+NIM_CHAR data[SEQ_DECL_SIZE];
+};
+struct tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg {
+NimStringDesc* name;
+NI age;
+};
+typedef tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg tyArray__3ZLM5yW0QMKoSQQYqBR4sQ[2];
+typedef NU8 tyEnum_TNimKind__dRYPikfx8C6QeI2ANiRwTw;
+typedef NU8 tySet_tyEnum_TNimTypeFlag__L6XiVPmbiz6rQWqIFXIsjg;
+typedef N_NIMCALL_PTR(void, tyProc__ojoeKfW4VYIm36I9cpDTQIg) (void* p, NI op);
+typedef N_NIMCALL_PTR(void*, tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ) (void* p);
+struct TNimType {
+NI size;
+NI align;
+tyEnum_TNimKind__dRYPikfx8C6QeI2ANiRwTw kind;
+tySet_tyEnum_TNimTypeFlag__L6XiVPmbiz6rQWqIFXIsjg flags;
+TNimType* base;
+TNimNode* node;
+void* finalizer;
+tyProc__ojoeKfW4VYIm36I9cpDTQIg marker;
+tyProc__WSm2xU5ARYv9aAR4l0z9c9auQ deepcopy;
+};
+typedef NU8 tyEnum_TNimNodeKind__zmvn9aqxMUIOpaIc6RYBPNg;
+struct TNimNode {
+tyEnum_TNimNodeKind__zmvn9aqxMUIOpaIc6RYBPNg kind;
+NI offset;
+TNimType* typ;
+NCSTRING name;
+NI len;
+TNimNode** sons;
+};
+typedef N_NIMCALL_PTR(void, tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ) (void);
+struct tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw {
+NI refcount;
+TNimType* typ;
+};
+struct tyObject_GcStack__UCyPjkT5JTcDkiVmdF9b1Hg {
+void* bottom;
+};
+struct tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA {
+NI len;
+NI cap;
+tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw** d;
+};
+typedef tyObject_SmallChunk__IlnS2SZ9b9a9aa7geF7H7WlTQ* tyArray__M5QRq6N4svLoIwlZOmQxHQ[256];
+typedef NU32 tyArray__BHbOSqU1t9b3Gt7K2c6fQig[24];
+typedef tyObject_BigChunk__w1NV79cuBqFbXit4Tp17eOg* tyArray__ncS3w2BYKGi9bXT5b1e3WWA[32];
+typedef tyArray__ncS3w2BYKGi9bXT5b1e3WWA tyArray__O9b1hn09cFfHywfOftglH4MQ[24];
+typedef tyObject_Trunk__49cO1kD2eWrtb8yk3xFe3Mg* tyArray__K9awrF1N4sTg9c39conY9aozxw[256];
+struct tyObject_IntSet__2jdqyVr8TdkdzxtDR9cMNeA {
+tyArray__K9awrF1N4sTg9c39conY9aozxw data;
+};
+typedef tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw* tyArray__Jee6tsSzFCBDKArKW15qfA[2];
+struct tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw {
+tyArray__Jee6tsSzFCBDKArKW15qfA link;
+NI key;
+NI upperBound;
+NI level;
+};
+struct tyTuple__KO8Ebr67mzOYgVGVXIV5PQ {
+tyObject_BigChunk__w1NV79cuBqFbXit4Tp17eOg* Field0;
+NI Field1;
+};
+typedef tyTuple__KO8Ebr67mzOYgVGVXIV5PQ tyArray__FxF33lwaa0ndwuf7R7TmBw[30];
+struct tyObject_HeapLinks__F5ahjOdOdTkYY2d0Q2Gl8A {
+NI len;
+tyArray__FxF33lwaa0ndwuf7R7TmBw chunks;
+tyObject_HeapLinks__F5ahjOdOdTkYY2d0Q2Gl8A* next;
+};
+struct tyObject_MemRegion__Gp1H3ulLE0JSwys9chSegUQ {
+NI minLargeObj;
+NI maxLargeObj;
+tyArray__M5QRq6N4svLoIwlZOmQxHQ freeSmallChunks;
+NU32 flBitmap;
+tyArray__BHbOSqU1t9b3Gt7K2c6fQig slBitmap;
+tyArray__O9b1hn09cFfHywfOftglH4MQ matrix;
+tyObject_LLChunk__SQF3x9cXavsoHTw29byqkDLw* llmem;
+NI currMem;
+NI maxMem;
+NI freeMem;
+NI occ;
+NI lastSize;
+tyObject_IntSet__2jdqyVr8TdkdzxtDR9cMNeA chunkStarts;
+tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw* root;
+tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw* deleted;
+tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw* last;
+tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw* freeAvlNodes;
+NIM_BOOL locked;
+NIM_BOOL blockChunkSizeIncrease;
+NI nextChunkSize;
+tyObject_AvlNode__IYoO7WMK5SrBWxv8MOtVcw bottomData;
+tyObject_HeapLinks__F5ahjOdOdTkYY2d0Q2Gl8A heapLinks;
+};
+struct tyObject_GcStat__VaNnSVm7WoX0lNTqTCv50w {
+NI stackScans;
+NI cycleCollections;
+NI maxThreshold;
+NI maxStackSize;
+NI maxStackCells;
+NI cycleTableSize;
+NI64 maxPause;
+};
+struct tyObject_CellSet__1gT1qjnSW9cWCbrErC2YjgA {
+NI counter;
+NI max;
+tyObject_PageDesc__2k4DJQa4eGP2jIhQQvG7aQ* head;
+tyObject_PageDesc__2k4DJQa4eGP2jIhQQvG7aQ** data;
+};
+struct tyObject_GcHeap__iDiTSZpQ7px0t5vNrxVbUA {
+tyObject_GcStack__UCyPjkT5JTcDkiVmdF9b1Hg stack;
+NI cycleThreshold;
+NI zctThreshold;
+tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA zct;
+tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA decStack;
+tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA tempStack;
+NI recGcLock;
+tyObject_MemRegion__Gp1H3ulLE0JSwys9chSegUQ region;
+tyObject_GcStat__VaNnSVm7WoX0lNTqTCv50w stat;
+tyObject_CellSet__1gT1qjnSW9cWCbrErC2YjgA marked;
+tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA additionalRoots;
+NI gcThreadId;
+};
+typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
+typedef NI tyArray__oXFh4MvEDAk4hEbFQSH7yQ[6];
+typedef NimStringDesc* tyArray__sMpvt1sOxOJ3LFGulnbeMQ[4];
+N_LIB_PRIVATE N_NIMCALL(void, nimGCvisit)(void* d, NI op);
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_3)(void);
+N_LIB_PRIVATE N_NIMCALL(void, nimRegisterGlobalMarker)(tyProc__T4eqaYlFJYZUv9aG9b1TV0bQ markerProc);
+N_LIB_PRIVATE N_NIMCALL(void, genericAssign)(void* dest, void* src, TNimType* mt);
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_7)(void);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyStringRC1)(NimStringDesc* src);
+static N_INLINE(void, nimGCunrefNoCycle)(void* p);
+static N_INLINE(void, decRef__system_5310)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c);
+static N_INLINE(NI, minuspercent___system_716)(NI x, NI y);
+static N_INLINE(NIM_BOOL, ltpercent___system_1005)(NI x, NI y);
+static N_INLINE(void, rtlAddZCT__system_5308)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c);
+N_LIB_PRIVATE N_NOINLINE(void, addZCT__system_5259)(tyObject_CellSeq__6qQxmDUC9aUb88gPyztChFA* s, tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c);
+static N_INLINE(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*, usrToCell__system_5265)(void* usr);
+static N_INLINE(void, nimZeroMem)(void* p, NI size);
+static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
+static N_INLINE(void, asgnRef)(void** dest, void* src);
+static N_INLINE(void, incRef__system_5303)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c);
+static N_INLINE(NI, pluspercent___system_696)(NI x, NI y);
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_8)(void);
+N_NIMCALL(NimStringDesc*, rawNewString)(NI cap);
+N_LIB_PRIVATE N_NIMCALL(void, formatValue__pureZstrformat_162)(NimStringDesc** result, NimStringDesc* value, NimStringDesc* specifier);
+static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src);
+static N_INLINE(void, copyMem__system_1727)(void* dest, void* source, NI size);
+static N_INLINE(void, nimCopyMem)(void* dest, void* source, NI size);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, resizeString)(NimStringDesc* dest, NI addlen);
+N_LIB_PRIVATE N_NIMCALL(void, formatValue__example_46)(NimStringDesc** result, NI value, NimStringDesc* specifier);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, copyString)(NimStringDesc* src);
+N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
+N_LIB_PRIVATE N_NOINLINE(void, raiseOverflow)(void);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___systemZdollars_3)(NI x);
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_14)(void);
+static N_INLINE(void, initStackBottomWith)(void* locals);
+N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
+N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_DatInit000)(void);
+N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_Init000)(void);
+N_LIB_PRIVATE N_NIMCALL(void, atmexampledotnim_DatInit000)(void);
+N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
+N_LIB_PRIVATE TNimType NTIperson__NF2Erj5R8mAkjQbMRdkMjg_;
+extern TNimType NTIstring__77mFvmsOLKik79ci2hXkHEg_;
+extern TNimType NTIint__hLlQjbV9bLNq5PFxYcqacsA_;
+N_LIB_PRIVATE TNimType NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_;
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_5, "John", 4);
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_6, "Kate", 4);
+static NIM_CONST tyArray__3ZLM5yW0QMKoSQQYqBR4sQ TM__DfQaFFoJOv5Rj9bYYIj8A9cg_4 = {{((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_5), ((NI) 45)}
+,
+{((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_6), ((NI) 30)}
+}
+;
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_9, " is ", 4);
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_10, " years old", 10);
+static NIM_CONST tyArray__oXFh4MvEDAk4hEbFQSH7yQ TM__DfQaFFoJOv5Rj9bYYIj8A9cg_12 = {((NI) 3),
+((NI) 6),
+((NI) 9),
+((NI) 12),
+((NI) 15),
+((NI) 18)}
+;
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_15, "mov", 3);
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_16, "btc", 3);
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_17, "cli", 3);
+STRING_LITERAL(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_18, "xor", 3);
+N_LIB_PRIVATE NIM_CONST tyArray__sMpvt1sOxOJ3LFGulnbeMQ opcodes__example_187 = {((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_15),
+((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_16),
+((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_17),
+((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_18)}
+;
+N_LIB_PRIVATE tyArray__3ZLM5yW0QMKoSQQYqBR4sQ people__example_5;
+N_LIB_PRIVATE tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg person__example_31;
+extern tyObject_GcHeap__iDiTSZpQ7px0t5vNrxVbUA gch__system_5212;
+N_LIB_PRIVATE NimStringDesc* fmtRes__example_40;
+N_LIB_PRIVATE NI odd__example_154;
+N_LIB_PRIVATE NimStringDesc* o__example_213;
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_3)(void) {
+ NI T1_;
+ T1_ = (NI)0;
+ for (T1_ = 0; T1_ < 2; T1_++) {
+ nimGCvisit((void*)people__example_5[T1_].name, 0);
+ }
+}
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_7)(void) {
+ nimGCvisit((void*)person__example_31.name, 0);
+}
+static N_INLINE(NI, minuspercent___system_716)(NI x, NI y) {
+ NI result;
+ result = (NI)0;
+ result = ((NI) ((NU)((NU64)(((NU) (x))) - (NU64)(((NU) (y))))));
+ return result;
+}
+static N_INLINE(NIM_BOOL, ltpercent___system_1005)(NI x, NI y) {
+ NIM_BOOL result;
+ result = (NIM_BOOL)0;
+ result = ((NU64)(((NU) (x))) < (NU64)(((NU) (y))));
+ return result;
+}
+static N_INLINE(void, rtlAddZCT__system_5308)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c) {
+ addZCT__system_5259((&gch__system_5212.zct), c);
+}
+static N_INLINE(void, decRef__system_5310)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c) {
+ (*c).refcount = minuspercent___system_716((*c).refcount, ((NI) 8));
+ {
+ NIM_BOOL T3_;
+ T3_ = (NIM_BOOL)0;
+ T3_ = ltpercent___system_1005((*c).refcount, ((NI) 8));
+ if (!T3_) goto LA4_;
+ rtlAddZCT__system_5308(c);
+ }
+ LA4_: ;
+}
+static N_INLINE(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*, usrToCell__system_5265)(void* usr) {
+ tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* result;
+ NI T1_;
+ result = (tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*)0;
+ T1_ = (NI)0;
+ T1_ = minuspercent___system_716(((NI) (ptrdiff_t) (usr)), ((NI) 16));
+ result = ((tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*) (T1_));
+ return result;
+}
+static N_INLINE(void, nimGCunrefNoCycle)(void* p) {
+ tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* T1_;
+ T1_ = (tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*)0;
+ T1_ = usrToCell__system_5265(p);
+ decRef__system_5310(T1_);
+}
+static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
+ void* T1_;
+ T1_ = (void*)0;
+ T1_ = memset(a, v, ((size_t) (size)));
+}
+static N_INLINE(void, nimZeroMem)(void* p, NI size) {
+ nimSetMem__systemZmemory_7(p, ((int) 0), size);
+}
+static N_INLINE(NI, pluspercent___system_696)(NI x, NI y) {
+ NI result;
+ result = (NI)0;
+ result = ((NI) ((NU)((NU64)(((NU) (x))) + (NU64)(((NU) (y))))));
+ return result;
+}
+static N_INLINE(void, incRef__system_5303)(tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* c) {
+ (*c).refcount = pluspercent___system_696((*c).refcount, ((NI) 8));
+}
+static N_INLINE(void, asgnRef)(void** dest, void* src) {
+ {
+ tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* T5_;
+ if (!!((src == NIM_NIL))) goto LA3_;
+ T5_ = (tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*)0;
+ T5_ = usrToCell__system_5265(src);
+ incRef__system_5303(T5_);
+ }
+ LA3_: ;
+ {
+ tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw* T10_;
+ if (!!(((*dest) == NIM_NIL))) goto LA8_;
+ T10_ = (tyObject_Cell__bP7dB0nNeqVXKcR6F9axfyw*)0;
+ T10_ = usrToCell__system_5265((*dest));
+ decRef__system_5310(T10_);
+ }
+ LA8_: ;
+ (*dest) = src;
+}
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_8)(void) {
+ nimGCvisit((void*)fmtRes__example_40, 0);
+}
+static N_INLINE(void, nimCopyMem)(void* dest, void* source, NI size) {
+ void* T1_;
+ T1_ = (void*)0;
+ T1_ = memcpy(dest, source, ((size_t) (size)));
+}
+static N_INLINE(void, copyMem__system_1727)(void* dest, void* source, NI size) {
+ nimCopyMem(dest, source, size);
+}
+static N_INLINE(void, appendString)(NimStringDesc* dest, NimStringDesc* src) {
+ {
+ if (!!((src == ((NimStringDesc*) NIM_NIL)))) goto LA3_;
+ copyMem__system_1727(((void*) ((&(*dest).data[(*dest).Sup.len]))), ((void*) ((*src).data)), ((NI) ((NI)((*src).Sup.len + ((NI) 1)))));
+ (*dest).Sup.len += (*src).Sup.len;
+ }
+ LA3_: ;
+}
+static N_NIMCALL(void, TM__DfQaFFoJOv5Rj9bYYIj8A9cg_14)(void) {
+ nimGCvisit((void*)o__example_213, 0);
+}
+static N_INLINE(void, initStackBottomWith)(void* locals) {
+ nimGC_setStackBottom(locals);
+}
+
+N_LIB_PRIVATE void PreMainInner(void) {
+}
+
+N_LIB_PRIVATE int cmdCount;
+N_LIB_PRIVATE char** cmdLine;
+N_LIB_PRIVATE char** gEnv;
+N_LIB_PRIVATE void PreMain(void) {
+ void (*volatile inner)(void);
+ inner = PreMainInner;
+ atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_DatInit000();
+ initStackBottomWith((void *)&inner);
+ atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_Init000();
+ atmexampledotnim_DatInit000();
+ (*inner)();
+}
+
+N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
+ NimMainModule();
+}
+
+N_CDECL(void, NimMain)(void) {
+ void (*volatile inner)(void);
+ PreMain();
+ inner = NimMainInner;
+ initStackBottomWith((void *)&inner);
+ (*inner)();
+}
+
+int main(int argc, char** args, char** env) {
+ cmdLine = args;
+ cmdCount = argc;
+ gEnv = env;
+ NimMain();
+ return nim_program_result;
+}
+
+N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
+{
+ TFrame FR_; FR_.len = 0;
+
+ nimRegisterGlobalMarker(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_3);
+
+
+ nimRegisterGlobalMarker(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_7);
+
+
+ nimRegisterGlobalMarker(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_8);
+
+
+ nimRegisterGlobalMarker(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_14);
+
+}/* preInitProc end */
+{
+ genericAssign((void*)people__example_5, (void*)TM__DfQaFFoJOv5Rj9bYYIj8A9cg_4, (&NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_));
+ {
+ NI i;
+ i = ((NI) 0);
+ {
+ while (1) {
+ NimStringDesc* T4_;
+ tyArray__nHXaesL0DJZHyVS07ARPRA T5_;
+ NI TM__DfQaFFoJOv5Rj9bYYIj8A9cg_11;
+ T4_ = NIM_NIL;
+ T4_ = person__example_31.name; person__example_31.name = copyStringRC1(people__example_5[(i)- 0].name);
+ if (T4_) nimGCunrefNoCycle(T4_);
+ person__example_31.age = people__example_5[(i)- 0].age;
+ nimZeroMem((void*)T5_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+ asgnRef((void**) (&fmtRes__example_40), NIM_NIL);
+ asgnRef((void**) (&fmtRes__example_40), rawNewString(((NI) 59)));
+ formatValue__pureZstrformat_162((&fmtRes__example_40), person__example_31.name, ((NimStringDesc*) NIM_NIL));
+ asgnRef((void**) (&fmtRes__example_40), resizeString(fmtRes__example_40, 4));
+appendString(fmtRes__example_40, ((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_9));
+ formatValue__example_46((&fmtRes__example_40), person__example_31.age, ((NimStringDesc*) NIM_NIL));
+ asgnRef((void**) (&fmtRes__example_40), resizeString(fmtRes__example_40, 10));
+appendString(fmtRes__example_40, ((NimStringDesc*) &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_10));
+ T5_[0] = copyString(fmtRes__example_40);
+ echoBinSafe(T5_, 1);
+ {
+ if (!(((NI) 1) <= ((NI) (i)))) goto LA8_;
+ goto LA2;
+ }
+ LA8_: ;
+ if (nimAddInt(i, ((NI) 1), &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_11)) { raiseOverflow(); };
+ if (TM__DfQaFFoJOv5Rj9bYYIj8A9cg_11 < 0 || TM__DfQaFFoJOv5Rj9bYYIj8A9cg_11 > 1){ raiseOverflow(); }
+ i = (NI)(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_11);
+ }
+ } LA2: ;
+ }
+ {
+ {
+ NI x;
+ NI i_2;
+ x = (NI)0;
+ i_2 = ((NI) 0);
+ {
+ while (1) {
+ NI TM__DfQaFFoJOv5Rj9bYYIj8A9cg_13;
+ x = TM__DfQaFFoJOv5Rj9bYYIj8A9cg_12[(i_2)- 0];
+ {
+ tyArray__nHXaesL0DJZHyVS07ARPRA T18_;
+ if (!((NI)(x % ((NI) 2)) == ((NI) 1))) goto LA16_;
+ odd__example_154 = x;
+ nimZeroMem((void*)T18_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+ T18_[0] = dollar___systemZdollars_3(odd__example_154);
+ echoBinSafe(T18_, 1);
+ }
+ LA16_: ;
+ {
+ if (!(((NI) 5) <= ((NI) (i_2)))) goto LA21_;
+ goto LA12;
+ }
+ LA21_: ;
+ if (nimAddInt(i_2, ((NI) 1), &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_13)) { raiseOverflow(); };
+ if (TM__DfQaFFoJOv5Rj9bYYIj8A9cg_13 < 0 || TM__DfQaFFoJOv5Rj9bYYIj8A9cg_13 > 5){ raiseOverflow(); }
+ i_2 = (NI)(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_13);
+ }
+ } LA12: ;
+ }
+ }
+ {
+ NI i_3;
+ i_3 = ((NI) 0);
+ {
+ while (1) {
+ NimStringDesc* T26_;
+ tyArray__nHXaesL0DJZHyVS07ARPRA T27_;
+ NI TM__DfQaFFoJOv5Rj9bYYIj8A9cg_19;
+ T26_ = NIM_NIL;
+ T26_ = o__example_213; o__example_213 = copyStringRC1(opcodes__example_187[(i_3)- 0]);
+ if (T26_) nimGCunrefNoCycle(T26_);
+ nimZeroMem((void*)T27_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+ T27_[0] = copyString(o__example_213);
+ echoBinSafe(T27_, 1);
+ {
+ if (!(((NI) 3) <= ((NI) (i_3)))) goto LA30_;
+ goto LA24;
+ }
+ LA30_: ;
+ if (nimAddInt(i_3, ((NI) 1), &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_19)) { raiseOverflow(); };
+ if (TM__DfQaFFoJOv5Rj9bYYIj8A9cg_19 < 0 || TM__DfQaFFoJOv5Rj9bYYIj8A9cg_19 > 3){ raiseOverflow(); }
+ i_3 = (NI)(TM__DfQaFFoJOv5Rj9bYYIj8A9cg_19);
+ }
+ } LA24: ;
+ }
+}
+}
+
+N_LIB_PRIVATE N_NIMCALL(void, atmexampledotnim_DatInit000)(void) {
+static TNimNode* TM__DfQaFFoJOv5Rj9bYYIj8A9cg_2_2[2];
+static TNimNode TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[3];
+NTIperson__NF2Erj5R8mAkjQbMRdkMjg_.size = sizeof(tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg);
+NTIperson__NF2Erj5R8mAkjQbMRdkMjg_.align = NIM_ALIGNOF(tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg);
+NTIperson__NF2Erj5R8mAkjQbMRdkMjg_.kind = 18;
+NTIperson__NF2Erj5R8mAkjQbMRdkMjg_.base = 0;
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_2_2[0] = &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[1];
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[1].kind = 1;
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[1].offset = offsetof(tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg, name);
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[1].typ = (&NTIstring__77mFvmsOLKik79ci2hXkHEg_);
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[1].name = "name";
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_2_2[1] = &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[2];
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[2].kind = 1;
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[2].offset = offsetof(tyObject_Person__NF2Erj5R8mAkjQbMRdkMjg, age);
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[2].typ = (&NTIint__hLlQjbV9bLNq5PFxYcqacsA_);
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[2].name = "age";
+TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[0].len = 2; TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[0].kind = 2; TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[0].sons = &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_2_2[0];
+NTIperson__NF2Erj5R8mAkjQbMRdkMjg_.node = &TM__DfQaFFoJOv5Rj9bYYIj8A9cg_0[0];
+NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_.size = sizeof(tyArray__3ZLM5yW0QMKoSQQYqBR4sQ);
+NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_.align = NIM_ALIGNOF(tyArray__3ZLM5yW0QMKoSQQYqBR4sQ);
+NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_.kind = 16;
+NTIarrayL48OO49_personT__3ZLM5yW0QMKoSQQYqBR4sQ_.base = (&NTIperson__NF2Erj5R8mAkjQbMRdkMjg_);
+}
+
diff --git a/prescheme-nim-local/nim/@msimd.nim.c b/prescheme-nim-local/nim/@msimd.nim.c
new file mode 100644
index 0000000..99e738c
--- /dev/null
+++ b/prescheme-nim-local/nim/@msimd.nim.c
@@ -0,0 +1,188 @@
+/* Generated by Nim Compiler v1.6.12 */
+/* Compiled for: Linux, amd64, gcc */
+/* Command for C compiler:
+ gcc -c -w -fmax-errors=3 -mavx -I/gnu/store/xqah57hhkjdyp880dvxmqpvn58g5j7mv-nim-1.6.12/lib -I/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim -o /home/wrk/.cache/nim/simd_d/@msimd.nim.c.o /home/wrk/.cache/nim/simd_d/@msimd.nim.c */
+#define NIM_INTBITS 64
+
+#include "nimbase.h"
+#include "xmmintrin.h"
+#include <string.h>
+#include "immintrin.h"
+#undef LANGUAGE_C
+#undef MIPSEB
+#undef MIPSEL
+#undef PPC
+#undef R3000
+#undef R4000
+#undef i386
+#undef linux
+#undef mips
+#undef near
+#undef far
+#undef powerpc
+#undef unix
+ # define nimfr_(proc, file) \
+ TFrame FR_; \
+ FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = 0; nimFrame(&FR_);
+
+ # define nimfrs_(proc, file, slots, length) \
+ struct {TFrame* prev;NCSTRING procname;NI line;NCSTRING filename; NI len; VarSlot s[slots];} FR_; \
+ FR_.procname = proc; FR_.filename = file; FR_.line = 0; FR_.len = length; nimFrame((TFrame*)&FR_);
+
+ # define nimln_(n, file) \
+ FR_.line = n; FR_.filename = file;
+ typedef struct NimStringDesc NimStringDesc;
+typedef struct TGenericSeq TGenericSeq;
+struct TGenericSeq {
+NI len;
+NI reserved;
+};
+struct NimStringDesc {
+ TGenericSeq Sup;
+NIM_CHAR data[SEQ_DECL_SIZE];
+};
+typedef NimStringDesc* tyArray__nHXaesL0DJZHyVS07ARPRA[1];
+typedef NF32 tyArray__9aTCwbdg1cSQimdVd0OEKVw[4];
+typedef NF tyArray__jOGfJgrdxgfAJsLC7WNNEw[4];
+N_LIB_PRIVATE N_NIMCALL(void, echoBinSafe)(NimStringDesc** args, NI argsLen_0);
+static N_INLINE(void, nimZeroMem)(void* p, NI size);
+static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___simd_70)(tyArray__9aTCwbdg1cSQimdVd0OEKVw x);
+N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, dollar___simd_192)(tyArray__jOGfJgrdxgfAJsLC7WNNEw x);
+static N_INLINE(void, initStackBottomWith)(void* locals);
+N_LIB_PRIVATE N_NOINLINE(void, nimGC_setStackBottom)(void* theStackBottom);
+static N_INLINE(void, nimFrame)(TFrame* s);
+N_LIB_PRIVATE N_NOINLINE(void, callDepthLimitReached__system_2997)(void);
+static N_INLINE(void, popFrame)(void);
+N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_DatInit000)(void);
+N_LIB_PRIVATE N_NIMCALL(void, atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_Init000)(void);
+N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void);
+STRING_LITERAL(TM__NqVfYNeiCrBLDU2vGCYO9bA_3, "TESTING AVX", 11);
+static NIM_CONST tyArray__nHXaesL0DJZHyVS07ARPRA TM__NqVfYNeiCrBLDU2vGCYO9bA_2 = {((NimStringDesc*) &TM__NqVfYNeiCrBLDU2vGCYO9bA_3)}
+;
+N_LIB_PRIVATE __m128 a__simd_2;
+N_LIB_PRIVATE __m128 b__simd_3;
+N_LIB_PRIVATE __m128 c__simd_4;
+N_LIB_PRIVATE tyArray__jOGfJgrdxgfAJsLC7WNNEw l1__simd_122 = {1.0,
+2.1,
+3.2,
+4.3}
+;
+N_LIB_PRIVATE tyArray__jOGfJgrdxgfAJsLC7WNNEw l2__simd_123 = {0.0,
+1.1,
+2.1,
+3.3}
+;
+N_LIB_PRIVATE __m256d regs1__simd_124;
+N_LIB_PRIVATE __m256d regs2__simd_125;
+N_LIB_PRIVATE __m256d result__simd_126;
+extern TFrame* framePtr__system_2564;
+extern TFrame* framePtr__system_2564;
+extern TFrame* framePtr__system_2564;
+extern TFrame* framePtr__system_2564;
+extern TFrame* framePtr__system_2564;
+extern TFrame* framePtr__system_2564;
+static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
+ void* T1_;
+ T1_ = (void*)0;
+ T1_ = memset(a, v, ((size_t) (size)));
+}
+static N_INLINE(void, nimZeroMem)(void* p, NI size) {
+ nimSetMem__systemZmemory_7(p, ((int) 0), size);
+}
+static N_INLINE(void, initStackBottomWith)(void* locals) {
+ nimGC_setStackBottom(locals);
+}
+static N_INLINE(void, nimFrame)(TFrame* s) {
+ {
+ if (!(framePtr__system_2564 == ((TFrame*) NIM_NIL))) goto LA3_;
+ (*s).calldepth = ((NI16) 0);
+ }
+ goto LA1_;
+ LA3_: ;
+ {
+ (*s).calldepth = (NI16)((*framePtr__system_2564).calldepth + ((NI16) 1));
+ }
+ LA1_: ;
+ (*s).prev = framePtr__system_2564;
+ framePtr__system_2564 = s;
+ {
+ if (!((*s).calldepth == ((NI16) 2000))) goto LA8_;
+ callDepthLimitReached__system_2997();
+ }
+ LA8_: ;
+}
+static N_INLINE(void, popFrame)(void) {
+ framePtr__system_2564 = (*framePtr__system_2564).prev;
+}
+
+N_LIB_PRIVATE void PreMainInner(void) {
+}
+
+N_LIB_PRIVATE int cmdCount;
+N_LIB_PRIVATE char** cmdLine;
+N_LIB_PRIVATE char** gEnv;
+N_LIB_PRIVATE void PreMain(void) {
+ void (*volatile inner)(void);
+ inner = PreMainInner;
+ atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_DatInit000();
+ initStackBottomWith((void *)&inner);
+ atmdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsdotdotatsgnuatsstoreatsxqah57hhkjdyp880dvxmqpvn58g5j7mvminusnimminus1dot6dot12atslibatssystemdotnim_Init000();
+ (*inner)();
+}
+
+N_LIB_PRIVATE N_CDECL(void, NimMainInner)(void) {
+ NimMainModule();
+}
+
+N_CDECL(void, NimMain)(void) {
+ void (*volatile inner)(void);
+ PreMain();
+ inner = NimMainInner;
+ initStackBottomWith((void *)&inner);
+ (*inner)();
+}
+
+int main(int argc, char** args, char** env) {
+ cmdLine = args;
+ cmdCount = argc;
+ gEnv = env;
+ NimMain();
+ return nim_program_result;
+}
+
+N_LIB_PRIVATE N_NIMCALL(void, NimMainModule)(void) {
+{
+ tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
+ union { __m128 source; tyArray__9aTCwbdg1cSQimdVd0OEKVw dest; } LOC2;
+ tyArray__nHXaesL0DJZHyVS07ARPRA T3_;
+ union { __m256d source; tyArray__jOGfJgrdxgfAJsLC7WNNEw dest; } LOC4;
+ nimfr_("simd", "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ nimln_(12, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ echoBinSafe(TM__NqVfYNeiCrBLDU2vGCYO9bA_2, 1);
+ nimln_(16, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ a__simd_2 = _mm_set1_ps(1.0f);
+ nimln_(17, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ b__simd_3 = _mm_set1_ps(2.0f);
+ nimln_(18, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ c__simd_4 = _mm_mul_ps(a__simd_2, b__simd_3);
+ nimln_(21, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+ LOC2.source = c__simd_4;
+ T1_[0] = dollar___simd_70(LOC2.dest);
+ echoBinSafe(T1_, 1);
+ nimln_(29, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ regs1__simd_124 = _mm256_loadu_pd(((void*) ((&l1__simd_122[(((NI) 0))- 0]))));
+ nimln_(30, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ regs2__simd_125 = _mm256_loadu_pd(((void*) ((&l2__simd_123[(((NI) 0))- 0]))));
+ nimln_(31, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ result__simd_126 = _mm256_sub_pd(regs1__simd_124, regs2__simd_125);
+ nimln_(32, "/export/local/home/wrk/iwrk/opensource/lisp/prescheme-explore/nim/simd.nim");
+ nimZeroMem((void*)T3_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+ LOC4.source = result__simd_126;
+ T3_[0] = dollar___simd_192(LOC4.dest);
+ echoBinSafe(T3_, 1);
+ popFrame();
+}
+}
+
diff --git a/prescheme-nim-local/nim/contrib/nimsimd b/prescheme-nim-local/nim/contrib/nimsimd
new file mode 160000
+Subproject e485e9fdf604bd54bd5b2616a34979b7715ff8a
diff --git a/prescheme-nim-local/nim/example.nim b/prescheme-nim-local/nim/example.nim
new file mode 100644
index 0000000..6757120
--- /dev/null
+++ b/prescheme-nim-local/nim/example.nim
@@ -0,0 +1,51 @@
+# Example from nim front page. Compile with:
+#
+# nim -c -d:release c example && ./example
+
+import std/strformat
+
+type
+ Person = object
+ name: string
+ age: Natural # Ensures the age is positive
+
+let people = [
+ Person(name: "John", age: 45),
+ Person(name: "Kate", age: 30)
+]
+
+for person in people:
+ # Type-safe string interpolation,
+ # evaluated at compile time.
+ echo(fmt"{person.name} is {person.age} years old")
+
+
+# Thanks to Nim's 'iterator' and 'yield' constructs,
+# iterators are as easy to write as ordinary
+# functions. They are compiled to inline loops.
+iterator oddNumbers[Idx, T](a: array[Idx, T]): T =
+ for x in a:
+ if x mod 2 == 1:
+ yield x
+
+for odd in oddNumbers([3, 6, 9, 12, 15, 18]):
+ echo odd
+
+
+# Use Nim's macro system to transform a dense
+# data-centric description of x86 instructions
+# into lookup tables that are used by
+# assemblers and JITs.
+import macros, strutils
+
+macro toLookupTable(data: static[string]): untyped =
+ result = newTree(nnkBracket)
+ for w in data.split(';'):
+ result.add newLit(w)
+
+const
+ data = "mov;btc;cli;xor"
+ opcodes = toLookupTable(data)
+
+for o in opcodes:
+ echo o
diff --git a/prescheme-nim-local/nim/readme.md b/prescheme-nim-local/nim/readme.md
new file mode 100644
index 0000000..556eb5d
--- /dev/null
+++ b/prescheme-nim-local/nim/readme.md
@@ -0,0 +1,65 @@
+# NIM
+
+Compiles to C with
+
+ nim -c -d:release c example
+
+See ~/.cache/nim/example_r/\@mexample.nim.c
+
+# Using simde
+
+https://github.com/guzba/nimsimd/tree/master
+
+```nim
+# SIMD floating point multiplication
+let
+ a = mm_set1_ps(1.0) # Vector of 4 float32 each with value 1.0
+ b = mm_set1_ps(2.0) # Vector of 4 float32 each with value 2.0
+ c = mm_mul_ps(a, b) # SIMD vector multiplication operator
+# Cast the vector to echo as separate float32 values
+echo cast[array[4, float32]](c)
+```
+
+Translates to C
+
+```C
+tyArray__nHXaesL0DJZHyVS07ARPRA T1_;
+union { __m128 source; tyArray__9aTCwbdg1cSQimdVd0OEKVw dest; } LOC2;
+
+echoBinSafe(TM__NqVfYNeiCrBLDU2vGCYO9bA_2, 1);
+a__simd_2 = _mm_set1_ps(1.0f);
+b__simd_3 = _mm_set1_ps(2.0f);
+c__simd_4 = _mm_mul_ps(a__simd_2, b__simd_3);
+nimZeroMem((void*)T1_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+LOC2.source = c__simd_4;
+T1_[0] = dollar___simd_70(LOC2.dest);
+echoBinSafe(T1_, 1);
+```
+
+```nim
+var l1 = [1.0, 2.1, 3.2, 4.3]
+var l2 = [0.0, 1.1, 2.1, 3.3]
+
+var regs1 = mm256_loadu_pd(l1[0].addr)
+var regs2 = mm256_loadu_pd(l2[0].addr)
+var result = mm256_sub_pd(regs1,regs2)
+echo cast[array[4, float64]](result)
+```
+
+```C
+regs1__simd_124 = _mm256_loadu_pd(((void*) ((&l1__simd_122[(((NI) 0))- 0]))));
+regs2__simd_125 = _mm256_loadu_pd(((void*) ((&l2__simd_123[(((NI) 0))- 0]))));
+result__simd_126 = _mm256_sub_pd(regs1__simd_124, regs2__simd_125);
+nimZeroMem((void*)T3_, sizeof(tyArray__nHXaesL0DJZHyVS07ARPRA));
+LOC4.source = result__simd_126;
+T3_[0] = dollar___simd_192(LOC4.dest);
+echoBinSafe(T3_, 1);
+```
+
+Output:
+
+```
+TESTING AVX
+[2.0, 2.0, 2.0, 2.0]
+[1.0, 1.0, 1.1, 1.0]
+```
diff --git a/prescheme-nim-local/nim/simd.nim b/prescheme-nim-local/nim/simd.nim
new file mode 100644
index 0000000..4c1e93b
--- /dev/null
+++ b/prescheme-nim-local/nim/simd.nim
@@ -0,0 +1,29 @@
+# Trying simd stuff. Compile with:
+#
+# nim --path:contrib/nimsimd/src c simd && ./simd
+# nim --path:contrib/nimsimd/src -c -d:release c simd && ./simd
+
+when defined(gcc) or defined(clang):
+ {.localPassc: "-mavx".}
+
+
+import nimsimd/avx2
+
+echo "TESTING AVX"
+
+# SIMD floating point multiplication
+let
+ a = mm_set1_ps(1.0) # Vector of 4 float32 each with value 1.0
+ b = mm_set1_ps(2.0) # Vector of 4 float32 each with value 2.0
+ c = mm_mul_ps(a, b) # SIMD vector multiplication operator
+
+# Cast the vector to echo as separate float32 values
+echo cast[array[4, float32]](c)
+
+var l1 = [1.0, 2.1, 3.2, 4.3]
+var l2 = [0.0, 1.1, 2.1, 3.3]
+
+var regs1 = mm256_loadu_pd(l1[0].addr)
+var regs2 = mm256_loadu_pd(l2[0].addr)
+var result = mm256_sub_pd(regs1,regs2)
+echo cast[array[4, float64]](result)