aboutsummaryrefslogtreecommitdiff
path: root/prescheme-nim-local/notes.md
diff options
context:
space:
mode:
Diffstat (limited to 'prescheme-nim-local/notes.md')
-rw-r--r--prescheme-nim-local/notes.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/prescheme-nim-local/notes.md b/prescheme-nim-local/notes.md
new file mode 100644
index 0000000..62b64e2
--- /dev/null
+++ b/prescheme-nim-local/notes.md
@@ -0,0 +1,94 @@
+# Thinks that tripped me up
+
+# Underscores
+
+Using _ for Lisp names.
+
+# typedef struct
+
+```C
+typedef struct
+{
+ size_t size;
+ size_t stride;
+ double * data;
+ gsl_block * block;
+ int owner;
+} gsl_vector;
+```
+
+prescheme generated this syntax for
+
+```lisp
+(define-wrapper-type gsl-vector)
+```
+
+```C
+struct gsl_vector {
+};
+
+struct gsl_vector *vector_3X;
+```
+
+resulting in
+
+```
+expected 'gsl_vector *' but argument is of type 'struct gsl_vector *'
+ 82 | void gsl_vector_free (gsl_vector * v);
+```
+
+how to map one to the other? If you take out the struct it works. So, somehow, I need to create an opaque data structure.
+
+```
+(define (gsl-create-vector size) ; gsl_vector_alloc (3);
+ ((external "gsl_vector_alloc" (=> (integer) (^ unit)))
+ size))
+
+(define (gsl-destroy-vector vector)
+ ((external "gsl_vector_free" (=> (address) unit))
+ vector))
+```
+
+as unit translate to void that works - but there is no type safety. Well, at least not at the prescheme level.
+
+ps-compiler/prescheme/type.scm
+make-pointer-type
+
+For now I solved it by having sed edit out the 'struct' from the C code.
+
+# Floating point
+
+Initializing with 1.0 (leading zero) works. But 1.1 does not. The c-code becomes an empty space.
+
+```
+openblas.c:36:108: error: expected expression before ')' token
+ 36 | else {gsl_vector_set(vector_2X, 0, 0.0);gsl_vector_set(vector_2X, 1, 1.0);gsl_vector_set(vector_2X, 2, );gsl_vector_set(vector_2X, 3, 4.0);gsl_vector_set(vector_2X, 4, 5.0);
+```
+
+This was fixed by Andrew Whatson for me!
+
+# Loading a module
+
+Requires restarting prescheme? Note that file prescheme/memory.scm is loaded with ps-memory.
+
+```
+(define-structure openblas (export main)
+ (open prescheme)
+ ;; (open ps-receive)
+ (open ps-memory)
+ ;; (open prescheme interface)
+ (open ps-utils)
+ (open ps-string)
+ (open ps-vector)
+ ;; (open prescheme interfaces)
+ (files openblas))
+```
+
+# SIMDE
+
+Let's try to multiply a vector with a scalar.
+
+```
+const __m128 scalar = _mm_set1_ps(s);
+__m128 result = _mm_mul_ps(vector, scalar);
+```