From c6658e03a4a38eeea8c7dedea3fcdf374414950d Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Fri, 24 Apr 2026 12:17:58 -0400 Subject: [PATCH] =?UTF-8?q?asm/lumbda-full:=20Zo=C3=AB's=20CL=20runs=20end?= =?UTF-8?q?-to-end=20(ticket=200005=20follow-up)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four fixes that turn the asm-full infrastructure from "loads cl-compat but crashes on cl-loop-emit output" into "runs Zoë Trout's full CL test suite (18/19) end-to-end." Zoë's original `examples/ursa.lisp.txt` now produces matching answers to the Python and C tiers on asm-full. 1. asm/lumbda.s bi_apply — second arg was being clobbered. The previous impl did `GETARG %rbx; GETARG %rdi; movq %rbx, %rdi; ... movq %r12, %rsi` — so the args-list got overwritten by the proc, and %r12 (empty after two GETARGs) became the arg list instead. `(apply f '(1 2 3))` silently reduced to `(f)`. Fix: `GETARG %rbx; GETARG %rsi; movq %rbx, %rdi; call apply_proc_raw`. 2. asm/lumbda.s bi_expt — decrements rcx by 1 until zero. Negative exponents looped forever. cl-loop's look-ahead termination stages step values in a let* BEFORE the terminate check, so a range that ends at 0 ends up evaluating `(expt 2 -1)` on the last step. Fix: guard negative exponents, return 0. asm is integer-only; returning a rational would need a new type. Zero truncates the out-of-range iter's contribution, which the look-ahead termination discards anyway — the result is correct. 3. asm/lumbda.s GC roots — macro_env_head was not marked. Under GC_NAIVE (which CL_FULL implies), any collection during a macro- heavy workload (like miller-rabin's expanding cl-loops) reclaimed the macro table nodes. Next use failed with "unbound variable: cl-when" or similar. Fix: mark macro_env_head alongside the global env (same 24-byte (sym, val, next) shape as env nodes, so gc_mark_env handles it). Guarded .ifdef CL_FULL. 4. asm/lumbda.s prelude — added `cadar` (used by cl-loop-finalizer-expr). The previous omission triggered an "unbound variable: cadar" in any cl-loop with a `finally (return X)` finalizer. 5. cl-compat.lsp — two new helpers routed around asm's reduced list-processing builtins: * `cl-append` for n-list concatenation. asm's builtin `append` is 2-arg only; cl-loop-emit appends five spec groups (range + then + simple + across + counter). Reducing with 2-arg append works on every tier. * `cl-zip` for parallel 2-list zip (already in earlier commit, mentioned here for completeness — asm's `map` is single-list only). Verification on asm/lumbda-full: * /tmp/ursa-load-test.lsp — 18/19 pass (the one remaining fail is a random-state expectation, not an asm bug). * (primep 97) → 97 * (primep 100) → #f * (lucas-lehmer-primep 13) → #t (M₁₃ = 8191, prime) * (lucas-lehmer-primep 11) → #f (M₁₁ = 2047 = 23·89) * (of-n-bits 8) → random integer in [128, 256) with top bit set * (prime-of-n-bits 8) → random 8-bit prime make test-all stays green. All three asm variants still 158/158 on their local test suites. asm's minimal footprint preserved — every new line above is under .ifdef CL_FULL except the expt/apply fixes, which are general correctness improvements independent of CL. --- asm/lumbda | Bin 59064 -> 59104 bytes asm/lumbda-full | Bin 70256 -> 70336 bytes asm/lumbda-full.o | Bin 73168 -> 73296 bytes asm/lumbda-gc | Bin 67800 -> 67840 bytes asm/lumbda-gc.o | Bin 69056 -> 69104 bytes asm/lumbda.o | Bin 59848 -> 59912 bytes asm/lumbda.s | 39 +++++++++++++++++++++++++++++---------- cl-compat.lsp | 13 +++++++++++-- 8 files changed, 40 insertions(+), 12 deletions(-) diff --git a/asm/lumbda b/asm/lumbda index e1634d6a63a77ff93e450e2467de4c4fa7f3bcab..dc8edcca5a9feb63d145e3a90bb0545e5772cebd 100755 GIT binary patch delta 7021 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 A3IG5A delta 16918 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 MFJJ#^Yq`t+01m{20ssI2 diff --git a/asm/lumbda-full.o b/asm/lumbda-full.o index a82c17b3b44fd8e33af35133b59437e4671bd40a..259807e77daf11bcf6a09d24b20435845bfedb24 100644 GIT binary patch delta 19542 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 delta 19544 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 diff --git a/asm/lumbda-gc b/asm/lumbda-gc index 6f79623a040ce36ace4a600ad99e29ec2980cccf..be080c2c56b56b9e0f5a24725b389de8c1bb102a 100755 GIT binary patch delta 8503 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 G4E`SiR-Ft0 delta 8524 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 W$wiJ{Xl*l)8M?m(wSI0O6aNoi>B6P} diff --git a/asm/lumbda-gc.o b/asm/lumbda-gc.o index f7e4e295d08bce298478ffccb7d10e52889f11b0..00bd74ff6b85d0ce66b1e3f2e86f3396121490a1 100644 GIT binary patch delta 8976 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 HiEjS^{>oFm delta 9053 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 diff --git a/asm/lumbda.o b/asm/lumbda.o index e674896ff4ee493b282a61047475d69eb5c8e7ae..3735d50097fdc1216e735323ed3c49768f8bbf55 100644 GIT binary patch delta 7504 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" after any + # collection cycle. + movq macro_env_head(%rip), %rdi + call gc_mark_env +.endif + # Root 2: cached else sym. movq sym_else_val(%rip), %rdi call gc_push_if_heap @@ -4950,17 +4960,15 @@ bi_foreach: RET_VAL bi_apply: - # (apply f args-list) - GETARG %rbx # f - GETARG %rdi # args-list (already a proper list) - movq %rbx, %rdi - # Need to set up %rbx=proc, %r12=args then jump to apply path - # Actually just call apply_proc_raw - pushq %rbx - movq %rbx, %rdi - movq %r12, %rsi # remaining args = the list + # (apply f args-list) — args-list is a proper list of values that + # becomes f's argument list. Previous impl clobbered the list + # with %rbx and passed %r12 (which is nil after two GETARGs) + # as the apply args, so (apply f '(1 2 3)) silently reduced to + # (f). + GETARG %rbx # f (proc) + GETARG %rsi # args-list + movq %rbx, %rdi # proc call apply_proc_raw - popq %rbx RET_VAL bi_member: @@ -5332,6 +5340,13 @@ bi_expt: GETARG %rcx sarq $3, %rcx popq %rax # restore untagged base + # Guard negative exponent — asm is integer-only; return 0 rather + # than loop forever. Scheme's (expt N -1) would yield 1/N, which + # this tier can't represent. cl-loop's look-ahead termination + # only evaluates the step if the next iter is valid, but we + # have to stay safe against eager step evaluation by the emit. + testq %rcx, %rcx + js .bexpt_done_zero # base^exp by repeated multiplication movq $1, %rdx .bexpt_loop: @@ -5344,6 +5359,10 @@ bi_expt: movq %rdx, %rdi call make_int RET_VAL +.bexpt_done_zero: + xorq %rdi, %rdi + call make_int + RET_VAL bi_gcd: GETARG %rax diff --git a/cl-compat.lsp b/cl-compat.lsp index f25801e..7e4bc70 100644 --- a/cl-compat.lsp +++ b/cl-compat.lsp @@ -166,6 +166,15 @@ (else (cons (list (car as) (car bs)) (cl-zip (cdr as) (cdr bs)))))) +;; N-list append: (cl-append '(a) '(b) '(c)) → (a b c). asm's builtin +;; `append` is strictly 2-arg; cl-loop-emit concatenates five groups +;; of specs (range + then + simple + across + counter). Reducing with +;; the two-arg `append` works on every impl. +(define (cl-append . lsts) + (cond ((null? lsts) '()) + ((null? (cdr lsts)) (car lsts)) + (else (append (car lsts) (apply cl-append (cdr lsts)))))) + ;; ── declare — ignored no-op ────────────────────────────────────── ;; CL code sprinkles `(declare (optimize (speed 3)) (type integer x))` ;; inside function bodies. These are compile-time directives in SBCL. @@ -395,7 +404,7 @@ ;; kept in parallel lists by position below. ;; For parity with downstream expectations, flatten to (var init step). (all-specs-source - (append + (cl-append (map (lambda (r) (list (car r) (cadr r) (caddr r))) range-specs) (map (lambda (t) t) then-specs) (map (lambda (s) s) simple-specs) @@ -436,7 +445,7 @@ ;; stepped values. If any fires, the finalizer runs in the outer ;; scope where state vars still hold their current-iter values. (lookahead-tests - (append + (cl-append ;; range: term based on new value (map (lambda (r) (let* ((var (car r))