src/dst register for andI_rReg_imm255 and andI_rReg_imm65535
Christian Thalinger
Christian.Thalinger at Sun.COM
Tue Sep 22 01:56:07 PDT 2009
Christian Thalinger wrote:
> Tom Rodriguez wrote:
>> On Sep 21, 2009, at 12:06 PM, Christian Thalinger wrote:
>>
>>> Vladimir Kozlov wrote:
>>>> Christian,
>>>>
>>>> Can you tell more about the problem you see?
>>>> The instructions you pointing use dst register only:
>>>>
>>>> "movzbl $dst, $dst\t# int & 0xFF"
>>> Right. Well, it's not a problem, I just wonder why it does not use
>>> the
>>> src register:
>>>
>>> "movzbl $dst, $src\t# int & 0xFF"
>>>
>>> but instead we have to emit a spill instruction to move src to dst.
>> That will occur if there are other users of src. If it's the last use
>> then we shouldn't emit the spill.
>
> I was looking at some assembly output while testing something else and I
> noticed that it's not the case. Maybe LoopUnrollLimit=1 changes the way
> code is emitted, but in this small loop there is no other use of src and
> we have a spill:
>
> 042 B2: # B2 B3 <- B1 B2 Loop: B2-B2 inner stride: not constant
> Freq: 1e+06
> 042 movl R11, RBP # spill
> 045 movzbl R11, R11 # int & 0xFF
> 049 addl RBX, R11 # int
> 04c incl RBP # int
> 04e cmpl RBP, #2147483647
> 054 jl,s B2 # loop end P=1.000000 C=809121.000000
Seems I'm a bit confused today... of course there is another use of src.
But what is the reason we need a spill here? src doesn't get changed
in the movzbl instruction.
-- Christian
More information about the hotspot-compiler-dev
mailing list