freenode/#clasp - IRC Chatlog
Search
13:04:52
Bike
The backtrace had something about get-internal-real-time, which is presumably not supposed to return a negative number, so it might be an sbcl thing
13:10:06
scymtym_
Bike: maybe https://bugs.launchpad.net/sbcl/+bug/1028026, although the specific type-error does not match
13:12:30
Bike
well, i saved the error but i probably can't reproduce it anyway. i can put it somewhere if that's necessary
13:13:34
scymtym_
i'm pretty sure this hasn't been fixed. people regularly suggest using a monotic clock source, but there is a downside, which i don't remember, to that
13:17:22
Bike
"C++11 has brought us a selection of new clock routines, including the monotonic steady_clock class. This has the advantage over the Windows- or POSIX-specific approaches that you only need to code one solution that will work on all platforms. However, the implementation of steady_clock in Visual Studio is NOT monotonic" programming sucks
16:03:44
drmeister
This is for X86_64. The registers that are used to pass arguments to functions are listed at the top
19:58:29
Bike
not sure how to work multiplication. but as it happens i don't think i totally understand the existing fixnum arithmetic anyway...
19:58:56
Bike
it's set up as branch on overflow, which makes perfect sense in the object code, but does cleavir need to know about it?
19:59:18
Bike
if we had an addition where we knew the result would be a fixnum, would we indicate that by having both fixnum-add branches go to the same place? that seems weird.
20:01:49
Bike
for multiplication, we end up with a result that's twice as wide as the intake, which we could represent with two locations, but do we really need that? the only ways to multiply that i can see are the normal case of possibly making a bignum, and the occasional case where you want wrapping
21:51:34
drmeister
I think Cleavir does need to know about it. Did I have fixnum addition already implemented? I recall that I did - I recall doing something with an add with overflow and then handling the overflow case in the HIR.
21:53:45
drmeister
Isn't multiplication the same then. Or I don't understand what you mean by "does cleavir need to know about it".
21:54:45
Bike
if addition overflows it's easy to get the bignum without doing more arithmetic, but with the same pattern with multiplication we'd need to multiply twice
21:55:17
Bike
by cleavir knowing about it i mean this branch pattern, or whatever we do for multiplication, being in the HIR
21:59:11
Bike
If we can do it with a builtin we don't need cleavir? Well, no, we can do whatever we want with a builtin
21:59:55
Bike
For example, since typeq is in cleavir, it can find and eliminate type checks. if type checks were implicit in builtins or functions we couldn't do so
22:01:07
drmeister
Ok, if I follow you then I don't think cleavir can do anything with it - but this is not a question I can answer with authority. You or beach may come to a different answer.
22:01:58
drmeister
The one thing I might add (and may be incorrect) is that it seems that C++/C aren't good at detecting overflows, but the llvm intrinsics do return overflows.
22:04:01
Bike
so, sign extend so that multiplication gives the full answer, then truncate and detruncate and compare that to the original to see if it overflowed
22:05:09
drmeister
Well, there is also this: https://llvm.org/docs/LangRef.html#llvm-smul-with-overflow-intrinsics
22:05:29
robink
drmeister: Looking through your latest commit; it seems to be looking in the Contents subdir of whatever directory it finds for CLASP_HOME. Does it make sense to maintain that OSX directory structure?