src/dst register for andI_rReg_imm255 and andI_rReg_imm65535

Christian Thalinger Christian.Thalinger at Sun.COM
Tue Sep 22 01:38:30 PDT 2009


Vladimir Kozlov wrote:
> The src is not register, it is Int constant which could be immediate
> value. We use "movzbl  $dst, $dst" to avoid immediate value and reduce
> the instruction size.
> 
> instruct andI_rReg_imm255(rRegI dst, immI_255 src)
> %{
>    match(Set dst (AndI dst src));

Sorry, I really should be more verbose when explaining my problems :-/

What I actually meant was, why it's not defined this way:

instruct andI_rReg_imm255(rRegI dst, rRegI src, immI_255 mask) %{
  match(Set dst (AndI src mask));

  format %{ "movzbl  $dst, $src\t# int & 0xFF" %}
  ins_encode %{
    __ movzbl($dst$$Register, $src$$Register);
  %}
  ins_pipe(ialu_reg);
%}

This way src and dst still can be the same register and produce the same
code as before (if required).

> 
> The spill you see is to preserve the original value (which should be
> used later again) since the dst will be modified. The spill
> should not be related to int constant value "src".
> 
> Could you show assembler?

I just sent one in reply to Tom's message.

-- Christian


More information about the hotspot-compiler-dev mailing list