I'm trying to understand how to interpret SPARC branching instructions
presented by mdb and am having some troubles.

On snv_111a I see:

> libc.so.1`fclose::dis
libc.so.1`fclose:               save      %sp, -0x60, %sp
libc.so.1`fclose+4:             orcc      %g0, %i0, %i1
libc.so.1`fclose+8:             bne,pn    %icc, +0x10   <libc.so.1`fclose+0x18>
libc.so.1`fclose+0xc:           nop
libc.so.1`fclose+0x10:          ret
libc.so.1`fclose+0x14:          restore   %g0, -0x1, %o0
libc.so.1`fclose+0x18:          call      +0x8          <libc.so.1`fclose+0x20>
...

At fclose+8, the instruction is saying to "branch to fclose+0x18" if
thingA is not equal to thingB.  Presumably thingA is %icc (which
itself is still a mystery to me) but I have no idea what thingB is.

Similar code in s10 looks a bit different. I am not sure how much of
the differences are due to mdb and how much are due to truly different
code.

> libc.so.1`fclose::dis
libc.so.1`fclose:               save      %sp, -0x60, %sp
libc.so.1`fclose+4:             orcc      %g0, %i0, %i1
libc.so.1`fclose+8:             bne       +0x10         <libc.so.1`fclose+0x18>
libc.so.1`fclose+0xc:           mov       %o7, %i3
libc.so.1`fclose+0x10:          ret
libc.so.1`fclose+0x14:          restore   %g0, -0x1, %o0
libc.so.1`fclose+0x18:          call      +0x8          <libc.so.1`fclose+0x20>
...

I assume the lack of ",pn" at fclose+8 in the s10 code is a legitimate
difference.  What about the missing %icc?  Is %icc implied?  If not,
what is "thingA" in this case?

Also, if there is a better place to ask questions about SPARC assembly
language, a pointer would be most appreciated.

Thanks in advance,
Mike

-- 
Mike Gerdts
http://mgerdts.blogspot.com/

Reply via email to