Skip to contentSkip to conversation

Question about JUMP and LINK

DISCUSSION bill4carson 2 participants 3 messages Mar 16, 2012 – Mar 20, 2012

lore
Share & tools
lore
#0 lore raw

Hi, All

The question is simple.

func_a {

call func_b
}

func_b {

call func_c
}

func_c {

return to func_a
}

The compiler I use let func_c to return func_a directly, IOW when func_b calls func_c, it use JUMP, other JUMP and LINK, and it's definitely not a question about inline or noinline.

So can I ask why how to let the compiler use JUMP and LINK when func_b calls func_c?

If it's not the right place to post this, sorry for the noise.

thanks

Signature · 4 lines
I am a slow learner
but I will keep trying to fight for my dreams!

--bill
#1 lore raw

Hi Bill,

Quoted 20 lines · On Thu, Mar 15, 2012 at 11:52 PM, bill4carson <[email protected]> wrote:

Hi, All

The question is simple.

func_a {

? ?call func_b
}

func_b {

? ?call func_c
}

func_c {

? ? ? ?return to func_a
}

Quoted 6 lines

The compiler I use let func_c to return func_a directly, IOW when func_b calls func_c, it use JUMP, other JUMP and LINK, and it's definitely not a question about inline or noinline.

So can I ask why how to let the compiler use JUMP and LINK when func_b calls func_c?

This is called Tail Optimization. See
http://c2.com/cgi/wiki?TailCallOptimization

gcc (I'm using 4.4.4) with -O3 does this.

Quoted 1 line

If it's not the right place to post this, sorry for the noise.

The kernel newbies list is probably not the right place (since this has nothing to do with the kernel). It also has nothing to do with binutils. It's a gcc optimization, so picking a gcc list would probably be more appropriate.

Signature · 3 lines
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
#2 lore raw
Quoted 27 lines · Dave Hylands

Hi Bill,

Quoted 24 lines · On Thu, Mar 15, 2012 at 11:52 PM, bill4carson<[email protected]> wrote:

Hi, All

The question is simple.

func_a {

call func_b
}

func_b {

call func_c
}

func_c {

return to func_a
}

The compiler I use let func_c to return func_a directly, IOW when func_b calls func_c, it use JUMP, other JUMP and LINK, and it's definitely not a question about inline or noinline.

Quoted 8 lines
Quoted 2 lines

So can I ask why how to let the compiler use JUMP and LINK when func_b calls func_c?

This is called Tail Optimization. See
http://c2.com/cgi/wiki?TailCallOptimization

gcc (I'm using 4.4.4) with -O3 does this.

Thanks for the information.

Quoted 7 lines
Quoted 1 line

If it's not the right place to post this, sorry for the noise.

The kernel newbies list is probably not the right place (since this has nothing to do with the kernel). It also has nothing to do with binutils. It's a gcc optimization, so picking a gcc list would probably be more appropriate.

Signature · 4 lines
I am a slow learner
but I will keep trying to fight for my dreams!

--bill