From: Vitaly M. <v.m...@gm...> - 2008-12-04 16:09:31
|
At Thu, 4 Dec 2008 10:22:18 -0500, Paul Khuong wrote: > RCX is an UNSIGNED-REG. I think it might be noise from elided type > checking. If I add an explicit call to a no-op casting (unsigned-num Can you, please, say for me how does this no-op casting called? > to positive-fixnum) VOP, the same code is generated, but due to only > the cast. The result of the [elided] check for fixnumness can't share > storage due to conflicts in live ranges (IX is live throughout the > loop) and maybe storage class (unsigned-reg VS any-reg/descriptor- > reg). Similarly, the result of the casting VOP can't share the same > location as its argument because IX is still live (also, note that the > strict colouring allocator without live-range splitting makes a lot of > trickery useless). If I understand correctly, defining similar VOP with arg-type unsigned-num instead of positive-fixnum should help? I've defined d-v-r1/* with generating cost 4 (original d-v-r has 5), compiler uses d-v-r1, but register loading still exists. -- wbr, Vitaly |