HackerTrans
TopNewTrendsCommentsPastAskShowJobs

stassats

no profile record

comments

stassats
·5 months ago·discuss
I did that to write simd routines for sbcl: https://github.com/sbcl/sbcl/blob/master/src/code/arm64-simd... Probably the best way of writing assembly, can evaluate the function immediately, use macros and any other code to emit instructions, even can print register values (instruction-level stepping would be even better, but too much work).
stassats
·5 months ago·discuss
Still 40 years to go.
stassats
·5 months ago·discuss
I have also seen some outright crashes on the new GC.
stassats
·7 months ago·discuss
The tricks to avoid multiplication (and division) are probably worth a whole post.

  x * 6:
  lea eax, [rdi+rdi*2]
  add eax, eax

  x * 7:
  lea eax, [0+rdi*8]
  sub eax, edi
  
  x * 11:
  lea eax, [rdi+rdi*4]
  lea eax, [rdi+rax*2]
But with -Os you get imul eax, edi, 6

And on modern CPUs multiplication might not be actually all that slow (but there may be fewer multiply units).
stassats
·7 months ago·discuss
The text mentions that it can also do multiplication but doesn't expand on that.

E.g. for x * 5 gcc issues lea eax, [rdi+rdi*4].
stassats
·8 months ago·discuss
ABCL is really slow.
stassats
·10 months ago·discuss
A good strategy if you don't care about fixing bugs.
stassats
·10 months ago·discuss
That shouldn't mean that it doesn't return a NaN. Things are generally not optimized away because of NaNs. E.g. in GCC, abs(c) > -1.0 is not folded, unless building with -ffast-math
stassats
·10 months ago·discuss
That fix has limited applicability. x * x is also a non-negative float. But abs(x * x) is not optimized. Or abs(abs(x)+1). GCC, for example, does know that.
stassats
·10 months ago·discuss
(+ 2 (id "2")) may also produce a compile time warning. Nothing precludes from having a special rule for that. Like (+ 2 (print "2")) does warn.
stassats
·11 months ago·discuss
> changes in the Qt project made the technique used by the Qt4 bindings impractical for Qt5 or Qt6 - at least that was my understanding when I looked into it.

It was hard to do reasonably with qt4 already. The best solution would be to support the C++ ABI natively, but that's never going to happen.
stassats
·12 months ago·discuss
> Why does SBCL not use LLVM?

Why doesn't GCC use LLVM? Why is Zig writing their own backend?
stassats
·last year·discuss
> lack of tail-call elimination

But lisp doesn't need TCO.
stassats
·last year·discuss
You can turn them back into rationals, (rational (sqrt 2d0)) => 6369051672525773/4503599627370496

Or write your own operations that compute to the precision you want.
stassats
·last year·discuss
>(safety 0)

Please, don't do that!
stassats
·last year·discuss
>any system that relies on information that was typed into a REPL three-months ago and is now only stored in the binary state of that REPL and nowhere else is totally insane as a production product.

Nobody does that.
stassats
·2 years ago·discuss
> roadrunner is petaflops of FP32

Isn't it actually FP64?
stassats
·2 years ago·discuss
Using EAX is one byte shorter, so it might be doing that inadvertently.
stassats
·2 years ago·discuss
Common Lisp. The dynamic-extent declaration allows for stack allocation.
stassats
·2 years ago·discuss
> because 64-bit ARMv8.0 lacks a POPCNT instruction

It does have this: https://developer.arm.com/documentation/ddi0596/2021-09/SIMD...

And GCC happily uses it https://godbolt.org/z/dTW46f9Kf