freenode/#clasp - IRC Chatlog
Search
14:08:29
Bike
i figured an easy way to avoid vaslists for discriminating functions that don't branch to effective methods, so i'm trying that out
14:09:06
Bike
i think i should also clean things up so that effective method functions don't take another argument pointlessly
14:09:33
Bike
do we have an apply with known arguments that's as efficient as a call now? or close? because using that might be good
14:27:05
Bike
drmeister: i just noticed cc_read_stamp returns 123456 if the tag doesn't match any of the cases (which I think is impossible?) can we put an actual error in there or what
14:28:42
drmeister
Sure - just make sure that it does a simple call to a function that signals the error and doesn't inline a lot of code to do so.
14:31:43
Bike
instance-stamp takes a T_sp, then does obj.raw_, then does reinterpret_cast<void*>, then passes it to cc_read_stamp which does reinterpret_cast<uintptr_t>
14:31:56
Bike
can i start with a T_O* and just reinterpret_cast<uintptr_t> without bothering with the void*?
14:47:06
drmeister
Yes, core::make_fixnum is just an inline shift - but if you are going to do inline shifts yourself make sure you derive the shift from gctools::fixnum_shift defined in clasp/include/clasp/gctools/pointer_tagging.h - it is exported to Common Lisp.
14:47:59
drmeister
https://github.com/clasp-developers/clasp/blob/dev/include/clasp/gctools/pointer_tagging.h#L102
14:51:15
drmeister
obj.raw_(), reinterpret_cast<void*> and reinterpret_cast<uintptr_t> are zero cost abstractions - they don't generate a single extra instruction, they just get around the C++ compiler type checking.
14:52:15
drmeister
I'm reading and rereading what you typed to pull a question out of it. What is the question?
15:06:41
Bike
i switched it to use arguments instaead of a vaslist and there's no noticeable timing change for the simple example i was working with, so the only bottleneck left i can think of is instance-stamp, is why i'm looking at this
15:22:19
Bike
ok, so at this point if i completely cut out the bespoke compiler, build takes 37 minutes instead of 30. i think with instance-stamp inlined it ought to be fast enough.
19:01:24
drmeister
Imagine you are programming in a world... where there is no LOOP, there is no DOTIMES, there is no DO... You have just entered... The SCARY DOOR!
19:05:35
drmeister
I'm setting up clasp-builder.lsp so that it creates a hash-table of file-names/indexes that are used to compile and link the fasl together. We can reorder the compilation and the linking to our hearts content.
19:19:03
Bike
with instance-stamp inlined, a generic function with one fast method takes twice as long with baclasp as with bespoke (21 ms versus 10 ms)
19:30:18
drmeister
https://github.com/clasp-developers/clasp/blob/dev/include/clasp/gctools/globals.h#L37
19:31:08
drmeister
Crap - we should make those extern "C" symbols. Then we could link them directly and easily
19:32:29
drmeister
Wait - what am I talking about? Just write a builtin that tests a value if its equal to *global_tagged_Symbol_OP_unbound
19:36:01
drmeister
Ok. As the compiler gets better I should replace my weird C++ solutions with Common Lisp ones.
19:37:10
drmeister
The new file-order thing in clasp-builder is working great - here's the start of cclasp building...
19:38:26
drmeister
I pulled inline.lisp and fli.lsp to the start because they take the longest, but it still gives them numbers like [438 of 443] and [111 of 443] because their top level forms need to be evaluated at the right time at startup.
19:45:17
drmeister
https://github.com/clasp-developers/clasp/blob/dev/include/clasp/gctools/pointer_tagging.h#L347
19:45:45
drmeister
All of the tagged immediates have an untag_xxx, a tag_xxx and a tagged_xxxp template function.
19:46:37
drmeister
So if you have a size_t and you want to create a tagged fixnum T_O* use gctools::tag_fixnum<core::T_O*>((core::T_O*)size_t_value)
19:47:25
drmeister
I probably should have mentioned that earlier when you were talking about shifting things.
20:19:27
drmeister
It looks like it's telling me there https://usercontent.irccloud-cdn.com/file/syuOaLVT/image.png
20:26:21
Bike
thing i just noticed: we can do icmp-slt and stuff with pointers, so maybe we can use fixnums without doing ptrtoint?
20:27:41
Bike
shifting both operaands of a comparison by the same amount shouldn't be necessary regardless
21:08:05
drmeister
I guess if llvm is taking 60-70% of the time - if shuffle that into threads running in parallel - it's basically free. That still leaves 30-40% of the time generating AST's .
22:22:06
drmeister
This won't have a side-effect: #'(LAMBDA NIL (DECLARE (CORE:LAMBDA-NAME CLOS::PARSE-DEFAULT-INITARGS.LAMBDA)) :ASDF) .
22:25:06
drmeister
(funcall (cclasp-compile-in-env nil `(lambda () (progn #'(LAMBDA NIL (DECLARE (CORE:LAMBDA-NAME CLOS::PARSE-DEFAULT-INITARGS.LAMBDA)) :ASDF)))))
0:52:24
Bike
lambda lists full of gensyms with lets doing car cdr stuff and (ERROR "too many arguments supplied")
0:56:50
Bike
check that the place is a special variable, if it is just set the symbol value, otherwise punt to compile
0:59:24
drmeister
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/toplevel.lisp#L81
1:01:22
Bike
also, we should hopefully have a sane error when there's an odd number of arguments or whatever.
1:32:19
drmeister
What about these? #'(LAMBDA NIL (DECLARE (CORE:LAMBDA-NAME CLOS::PARSE-DEFAULT-INITARGS.LAMBDA)) NIL)