[Openmcl-devel] ash

Gary Byers gb at clozure.com
Mon Oct 14 15:57:32 UTC 2002



On 14 Oct 2002, Marco Baringer wrote:

>
> ? (lisp-implementation-version)
> "Version (Beta: Darwin) 0.13"
> ? (let ((i #xffffffff)) (declare (type (unsigned-byte 32) i)) (ash i -24))
> > Error: NIL : value doesn't match constraint :U8CONST in template for CCL::U32-SHIFT-RIGHT .
> > While executing: CCL::MATCH-VREG
> > Type :POP to abort.
> Type :? for other options.
> 1 >
>
> declaring i to be of type (unsigned-byte 33) works as does leaving out
> the declaration all together. yet, (typep #xffffffff '(unsigned-byte
> 32)) is true. this error happens only when the count arg to ash is
> negative.
>
> according to my reading of l0-numbers.lisp (bignum-ashift-right
> #xffffffff 8) is what is being called, but calling bignum-ashift-right
> directly results in no errors (and the proper result). all i've been
> able to figure out is that u32-shift-right is being called with count
> and not (- count) as it should be, but i don't see where the call to
> u32-shift-right happens.
>

The error message is coming from the compiler: CCL::U32-SHIFT-RIGHT is
a "template" that tells it how to generate code to generate a right-shift
of an (UNSIGNED-BYTE 32) argument by a small constant amount.

It -should- ideally just constant-fold this; as is, it tries to generate
code to shift one constant (well, a constant-valued variable) by another.

Aside from the question of whether it should be doing this at all: I can't
reproduce the problem.  I get the (correct) answer of 255 both under version
0.13 and under the development version of 0.14 I'm working on.

Could you please try:

? (trace ccl::acode-fixnum-form-p)
[...]
? (let ((i #xffffffff)) (declare (type (unsigned-byte 32) i)) (ash i -24))
[...]

and send me the output that TRACE generates ?

> --
> -Marco
> Ring the bells that still can ring.
> Forget your perfect offering.
> There is a crack in everything.
> That's how the light gets in.
>      -Leonard Cohen
>
> p.s. - what's the function to delete a directory?
>
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/cgi-bin/mailman/listinfo/openmcl-devel
>
>


_______________________________________________
Openmcl-devel mailing list
Openmcl-devel at clozure.com
http://clozure.com/cgi-bin/mailman/listinfo/openmcl-devel



More information about the Openmcl-devel mailing list