hi, I'm having some trouble while understanding the generated assembly code for trampoline by mips back-end.
Following is the code for which i'm trying to undertsand the generated trampoline code. int foo(int (*f)()){ (*f)(); } main(){ int i; int g(){printf("hello,%d",i);} foo(g); } Parts of generated assembly code which are confusing are $LTRAMP0: .word 0x03e00821 # move $1,$31 .word 0x04110001 # bgezal $0,.+8 .word 0x00000000 # nop .word 0x8fe30014 # lw $3,20($31) .word 0x8fe20018 # lw $2,24($31) .word 0x0060c821 # move $25,$3 (abicalls) .word 0x00600008 # jr $3 .word 0x0020f821 # move $31,$1 .word 0x00000000 # <function address> .word 0x00000000 # <static chain value> .globl _flush_cache main: - - - - - - - - - - - - addiu $sp,$sp,-80 sw $31,72($sp) sw $fp,68($sp) sw $16,64($sp) move $fp,$sp addiu $2,$fp,20 addiu $16,$2,4 lui $2,%hi($LTRAMP0) move $3,$16 addiu $2,$2,%lo($LTRAMP0) li $5,40 # 0x28 move $4,$2 jal memcpy nop lui $2,%hi(g.1238) addiu $2,$2,%lo(g.1238) sw $2,32($16) move $3,$16 li $4,40 # 0x28 li $5,3 # 0x3 jal _flush_cache nop addiu $2,$fp,20 addiu $2,$2,4 move $3,$2 jal foo nop A bit of explaination of above code will be helpful