Request for reviews (L): 6823354: Add intrinsics for{Integer,Long}.{numberOfLeadingZeros,numberOfTrailingZeros}()

Christian Thalinger Christian.Thalinger at Sun.COM
Tue May 5 01:57:55 PDT 2009


On Mon, 2009-05-04 at 14:36 -0700, Vladimir Kozlov wrote:
> Christian,
> 
> assembler_x86.hpp - could you use one #ifdef ?
> 
> +
> + #ifdef _LP64
> +   void bsfq(Register dst, Register src);
> + #endif
> +
> +   void bsrl(Register dst, Register src);
> +
> + #ifdef _LP64
> +   void bsrq(Register dst, Register src);
> + #endif

Sure.  I just followed the style in the file, where all methods are
strictly ordered.

> x86_32.ad - Why you did not remove TEMP dst? Do you need it?
> 
> +   effect(TEMP dst

I think I kept it because I'm not sure if one register of a long
register pair can be the same as the dst register.  Can it?

> connode.cpp - new Ideal methods should be Value methods since
> it is the value transformation and it misses checks for Top:
> 
> const Type* CountLeadingZerosINode::Value( PhaseTransform *phase ) const {
>     const Type *t = phase->type( in(1) );
>     if( t == Type::TOP ) return Type::TOP;
>     const TypeInt *ti = t->isa_int();
>     if (ti && ti->is_con()) {

I see.  I'm currently trying to change that but I have some problems.
Could you explain a little how Value() is supposed to work?

-- Christian




More information about the hotspot-compiler-dev mailing list