Calling Conventions Prof Hakim Weatherspoon CS 3410 Spring
![Calling Conventions Prof. Hakim Weatherspoon CS 3410, Spring 2015 Computer Science Cornell University See Calling Conventions Prof. Hakim Weatherspoon CS 3410, Spring 2015 Computer Science Cornell University See](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-1.jpg)
![Announcement Upcoming agenda • PA 1 due yesterday • PA 2 available and discussed Announcement Upcoming agenda • PA 1 due yesterday • PA 2 available and discussed](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-2.jpg)
![Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-3.jpg)
![Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-4.jpg)
![MIPS Register Recap Return address: $31 (ra) Stack pointer: $29 (sp) Frame pointer: $30 MIPS Register Recap Return address: $31 (ra) Stack pointer: $29 (sp) Frame pointer: $30](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-5.jpg)
![r 0 r 1 r 2 r 3 r 4 r 5 r 6 r 0 r 1 r 2 r 3 r 4 r 5 r 6](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-6.jpg)
![• • Recap: Conventions so far first four arg words passed in $a • • Recap: Conventions so far first four arg words passed in $a](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-7.jpg)
![Globals and Locals Global variables in data segment • Exist for all time, accessible Globals and Locals Global variables in data segment • Exist for all time, accessible](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-8.jpg)
![Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-9.jpg)
![Caller-saved vs. Callee-saved Callee-save register: • Assumes register not changed across procedure call • Caller-saved vs. Callee-saved Callee-save register: • Assumes register not changed across procedure call •](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-10.jpg)
![Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-11.jpg)
![Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-12.jpg)
![Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-13.jpg)
![Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-14.jpg)
![Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-15.jpg)
![Callee-Save main: addiu $sp, -32 sw $31, 28($sp) sw $30, 24($sp) sw $17, 20($sp) Callee-Save main: addiu $sp, -32 sw $31, 28($sp) sw $30, 24($sp) sw $17, 20($sp)](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-16.jpg)
![Callee-Save main: addiu $sp, -32 sw $ra, 28($sp) sw $fp, 24($sp) sw $s 1, Callee-Save main: addiu $sp, -32 sw $ra, 28($sp) sw $fp, 24($sp) sw $s 1,](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-17.jpg)
![Caller-Save main: … [use $8 & $9] … addiu $sp, -8 sw $9, 4($sp) Caller-Save main: … [use $8 & $9] … addiu $sp, -8 sw $9, 4($sp)](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-18.jpg)
![Caller-Save main: … [use $t 0 & $t 1] … addiu $sp, -8 sw Caller-Save main: … [use $t 0 & $t 1] … addiu $sp, -8 sw](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-19.jpg)
![• • Recap: Conventions so far first four arg words passed in $a • • Recap: Conventions so far first four arg words passed in $a](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-20.jpg)
![Frame Layout on Stack fp saved ra saved fp saved regs ($s 0. . Frame Layout on Stack fp saved ra saved fp saved regs ($s 0. .](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-21.jpg)
![Frame Layout on Stack fp blue sp saved ra saved fp saved regs arguments Frame Layout on Stack fp blue sp saved ra saved fp saved regs arguments](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-22.jpg)
![Frame Layout on Stack saved ra blue saved fp saved regs arguments fp saved Frame Layout on Stack saved ra blue saved fp saved regs arguments fp saved](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-23.jpg)
![Frame Layout on Stack saved ra blue saved fp saved regs arguments saved ra Frame Layout on Stack saved ra blue saved fp saved regs arguments saved ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-24.jpg)
![Activity #1: Calling Convention Example int test(int a, int b) { int tmp = Activity #1: Calling Convention Example int test(int a, int b) { int tmp =](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-25.jpg)
![Activity #2: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra Activity #2: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-26.jpg)
![Next Goal Can we optimize the assembly code at all? Next Goal Can we optimize the assembly code at all?](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-27.jpg)
![Activity #3: Calling Convention Example int test(int a, int b) { int tmp = Activity #3: Calling Convention Example int test(int a, int b) { int tmp =](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-28.jpg)
![Activity #3: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra Activity #3: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-29.jpg)
![Minimum stack size for a standard function? Minimum stack size for a standard function?](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-30.jpg)
![Minimum stack size for a standard function? $fp saved ra saved fp saved regs Minimum stack size for a standard function? $fp saved ra saved fp saved regs](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-31.jpg)
![Leaf Functions Leaf function does not invoke any other functions int f(int x, int Leaf Functions Leaf function does not invoke any other functions int f(int x, int](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-32.jpg)
![Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-33.jpg)
![Activity #4: Debugging init(): 0 x 400000 printf(s, …): 0 x 4002 B 4 Activity #4: Debugging init(): 0 x 400000 printf(s, …): 0 x 4002 B 4](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-34.jpg)
![Recap • How to write and Debug a MIPS program using calling convention • Recap • How to write and Debug a MIPS program using calling convention •](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-35.jpg)
- Slides: 35
![Calling Conventions Prof Hakim Weatherspoon CS 3410 Spring 2015 Computer Science Cornell University See Calling Conventions Prof. Hakim Weatherspoon CS 3410, Spring 2015 Computer Science Cornell University See](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-1.jpg)
Calling Conventions Prof. Hakim Weatherspoon CS 3410, Spring 2015 Computer Science Cornell University See P&H 2. 8 and 2. 12, and A. 5 -6
![Announcement Upcoming agenda PA 1 due yesterday PA 2 available and discussed Announcement Upcoming agenda • PA 1 due yesterday • PA 2 available and discussed](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-2.jpg)
Announcement Upcoming agenda • PA 1 due yesterday • PA 2 available and discussed during lab section this week • PA 2 Work-in-Progress due Monday, March 16 th • PA 2 due Thursday, March 26 th • HW 2 available next week, due before Prelim 2 in April • Spring break: Saturday, March 28 th to Sunday, April 5 th
![Goals for Today Review Calling Conventions call a routine i e transfer Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-3.jpg)
Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer control to procedure) pass arguments • • return to the caller • • fixed length, variable length, recursively Putting results in a place where caller can find them Manage register Today • • More on Calling Conventions globals vs local accessible data callee vs caller saved registers Calling Convention examples and debugging
![Goals for Today Review Calling Conventions call a routine i e transfer Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-4.jpg)
Goals for Today Review: Calling Conventions • • call a routine (i. e. transfer control to procedure) pass arguments • • return to the caller • • fixed length, variable length, recursively Putting results in a place where caller can find them Manage register Today • • More on Calling Conventions globals vs local accessible data callee vs caller saved registers Calling Convention examples and debugging Warning: There is no one true MIPS calling convention. lecture != book != gcc != spim != web
![MIPS Register Recap Return address 31 ra Stack pointer 29 sp Frame pointer 30 MIPS Register Recap Return address: $31 (ra) Stack pointer: $29 (sp) Frame pointer: $30](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-5.jpg)
MIPS Register Recap Return address: $31 (ra) Stack pointer: $29 (sp) Frame pointer: $30 (fp) First four arguments: $4 -$7 (a 0 -a 3) Return result: $2 -$3 (v 0 -v 1) Callee-save free regs: $16 -$23 (s 0 -s 7) Caller-save free regs: $8 -$15, $24, $25 (t 0 -t 9) Reserved: $26, $27 Global pointer: $28 (gp) Assembler temporary: $1 (at)
![r 0 r 1 r 2 r 3 r 4 r 5 r 6 r 0 r 1 r 2 r 3 r 4 r 5 r 6](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-6.jpg)
r 0 r 1 r 2 r 3 r 4 r 5 r 6 r 7 r 8 r 9 r 10 r 11 r 12 r 13 r 14 r 15 MIPS Register Conventions $zero $at assembler temp $v 0 function return values $v 1 $a 0 $a 1 function arguments $a 2 $a 3 $t 0 $t 1 $t 2 $t 3 temps $t 4 (caller save) $t 5 $t 6 $t 7 r 16 r 17 r 18 r 19 r 20 r 21 r 22 r 23 r 24 r 25 r 26 r 27 r 28 r 29 r 30 r 31 $s 0 $s 1 $s 2 $s 3 $s 4 $s 5 $s 6 $s 7 $t 8 $t 9 $k 0 $k 1 $gp $sp $fp $ra saved (callee save) more temps (caller save) reserved for kernel global data pointer stack pointer frame pointer return address
![Recap Conventions so far first four arg words passed in a • • Recap: Conventions so far first four arg words passed in $a](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-7.jpg)
• • Recap: Conventions so far first four arg words passed in $a 0, $a 1, $a 2, $a 3 remaining arg words passed in parent’s stack frame Bottom of return value (if any) in $v 0, $v 1 current stack frame at $sp stack frame – contains $ra (clobbered on JAL to sub-functions) saved ra $fp – contains $fp saved fp – contains local vars (possibly clobbered by sub-functions) saved regs ($s 0. . . $s 7) – contains extra arguments to sub-functions (i. e. argument “spilling) – contains space for first 4 arguments locals to sub-functions Top of • callee save regs are preserved the stack • caller save regs are not $sp • Global data accessed via $gp outgoing args
![Globals and Locals Global variables in data segment Exist for all time accessible Globals and Locals Global variables in data segment • Exist for all time, accessible](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-8.jpg)
Globals and Locals Global variables in data segment • Exist for all time, accessible to all routines Dynamic variables in heap segment • Exist between malloc() and free() Local variables in stack frame • Exist solely for the duration of the stack frame Dangling pointers into freed heap mem are bad Dangling pointers into old stack frames are bad • C lets you create these, Java does not • int *foo() { int a; return &a; }
![Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-9.jpg)
Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 x 7 ffffffc stack dynamic data (heap) 0 x 10000000 static data 0 x 00400000 0 x 0000 code (text) system reserved . data PC. text bottom
![Callersaved vs Calleesaved Calleesave register Assumes register not changed across procedure call Caller-saved vs. Callee-saved Callee-save register: • Assumes register not changed across procedure call •](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-10.jpg)
Caller-saved vs. Callee-saved Callee-save register: • Assumes register not changed across procedure call • Thus, callee must save the previous contents of the register on procedure entry, restore just before procedure return • E. g. $ra, $fp, $s 0 -s 7 Caller-save register: • Assumes that a caller can clobber contents of register • Thus, caller must save the previous contents of the register before proc call • Caller, then, restores after the call • E. g. $a 0 -a 3, $v 0 -$v 1, $t 0 -$t 9 MIPS calling convention supports both
![Callersaved vs Calleesaved Callersave If necessary t 0 t 9 save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-11.jpg)
Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before calling anything; restore after it returns Callee-save: Always… ($s 0. . $s 7) • save before modifying; restore before returning Caller-save registers are responsibility of the caller Save if want to • Caller-save register values saved only if used after call/return use after a call • The callee function can use caller-saved registers Callee-save register are the responsibility of the callee • Values must be saved by callee before they can be used • Caller can assume that these registers will be restored Save before use
![Callersaved vs Calleesaved Callersave If necessary t 0 t 9 save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-12.jpg)
Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before calling anything; restore after it returns Callee-save: Always… ($s 0. . $s 7) • save before modifying; restore before returning MIPS ($t 0 -$t 9), x 86 (eax, ecx, and edx) are caller-save… • … a function can freely modify these registers • … but must assume that their contents have been destroyed if it in turns calls a function. MIPS ($s 0 - $s 7), x 86 (ebx, esi, edi, ebp, esp) are callee-save • A function may call another function and know that the callee-save registers have not been modified • However, if it modifies these registers itself, it must restore them to their original values before returning.
![Callersaved vs Calleesaved Callersave If necessary t 0 t 9 save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-13.jpg)
Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before calling anything; restore after it returns Callee-save: Always… ($s 0. . $s 7) • save before modifying; restore before returning A caller-save register must be saved and restored around any call to a subroutine. In contrast, for a callee-save register, a caller need do no extra work at a call site (the callee saves and restores the register if it is used).
![Callersaved vs Calleesaved Callersave If necessary t 0 t 9 save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-14.jpg)
Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before calling anything; restore after it returns Callee-save: Always… ($s 0. . $s 7) • save before modifying; restore before returning CALLER SAVED: MIPS calls these temporary registers, $t 0 -t 9 • the calling routine saves the registers that it does not want a called procedure to overwrite • register values are NOT preserved across procedure calls CALLEE SAVED: MIPS calls these saved registers, $s 0 -s 8 • register values are preserved across procedure calls • the called procedure saves register values in its Activation Record (AR), uses the registers for local variables, restores register values before it returns.
![Callersaved vs Calleesaved Callersave If necessary t 0 t 9 save before Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-15.jpg)
Caller-saved vs. Callee-saved Caller-save: If necessary… ($t 0. . $t 9) • save before calling anything; restore after it returns Callee-save: Always… ($s 0. . $s 7) • save before modifying; restore before returning Registers $t 0 -$t 9 are caller-saved registers • … that are used to hold temporary quantities • … that need not be preserved across calls Registers $s 0 -s 8 are callee-saved registers • … that hold long-lived values • … that should be preserved across calls
![CalleeSave main addiu sp 32 sw 31 28sp sw 30 24sp sw 17 20sp Callee-Save main: addiu $sp, -32 sw $31, 28($sp) sw $30, 24($sp) sw $17, 20($sp)](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-16.jpg)
Callee-Save main: addiu $sp, -32 sw $31, 28($sp) sw $30, 24($sp) sw $17, 20($sp) sw $16, 16($sp) addiu $30, $sp, 28 … [use $16 and $17] … lw $31, 28($sp) lw $30, 24($sp) lw $17, 20$sp) lw $16, 16($sp) addiu $sp, 32 jr $31 Assume caller is using the registers Callee must save on entry, restore on exit Pays off if caller is actually using the registers, else the save and restore are wasted
![CalleeSave main addiu sp 32 sw ra 28sp sw fp 24sp sw s 1 Callee-Save main: addiu $sp, -32 sw $ra, 28($sp) sw $fp, 24($sp) sw $s 1,](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-17.jpg)
Callee-Save main: addiu $sp, -32 sw $ra, 28($sp) sw $fp, 24($sp) sw $s 1, 20($sp) sw $s 0, 16($sp) addiu $fp, $sp, 28 … [use $s 0 and $s 1] … lw $ra, 28($sp) lw $fp, 24($sp) lw $s 1, 20$sp) lw $s 0, 16($sp) addiu $sp, 32 jr $ra Assume caller is using the registers Callee must save on entry, restore on exit Pays off if caller is actually using the registers, else the save and restore are wasted
![CallerSave main use 8 9 addiu sp 8 sw 9 4sp Caller-Save main: … [use $8 & $9] … addiu $sp, -8 sw $9, 4($sp)](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-18.jpg)
Caller-Save main: … [use $8 & $9] … addiu $sp, -8 sw $9, 4($sp) sw $8, 0($sp) jal mult lw $9, 4($sp) lw $8, 0($sp) addiu $sp, 8 … [use $8 & $9] Assume the registers are free for the taking, clobber them But since other subroutines will do the same, must protect values that will be used later By saving and restoring them before and after subroutine invocations Pays off if a routine makes few calls to other routines with values that need to be preserved
![CallerSave main use t 0 t 1 addiu sp 8 sw Caller-Save main: … [use $t 0 & $t 1] … addiu $sp, -8 sw](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-19.jpg)
Caller-Save main: … [use $t 0 & $t 1] … addiu $sp, -8 sw $t 1, 4($sp) sw $t 0, 0($sp) jal mult lw $t 1, 4($sp) lw $t 0, 0($sp) addiu $sp, 8 … [use $t 0 & $t 1] Assume the registers are free for the taking, clobber them But since other subroutines will do the same, must protect values that will be used later By saving and restoring them before and after subroutine invocations Pays off if a routine makes few calls to other routines with values that need to be preserved
![Recap Conventions so far first four arg words passed in a • • Recap: Conventions so far first four arg words passed in $a](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-20.jpg)
• • Recap: Conventions so far first four arg words passed in $a 0, $a 1, $a 2, $a 3 remaining arg words passed in parent’s stack frame Bottom of return value (if any) in $v 0, $v 1 current stack frame at $sp stack frame – contains $ra (clobbered on JAL to sub-functions) saved ra $fp – contains $fp saved fp – contains local vars (possibly clobbered by sub-functions) saved regs ($s 0. . . $s 7) – contains extra arguments to sub-functions (i. e. argument “spilling) – contains space for first 4 arguments locals to sub-functions Top of • callee save regs are preserved the stack • caller save regs are not $sp • Global data accessed via $gp outgoing args
![Frame Layout on Stack fp saved ra saved fp saved regs s 0 Frame Layout on Stack fp saved ra saved fp saved regs ($s 0. .](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-21.jpg)
Frame Layout on Stack fp saved ra saved fp saved regs ($s 0. . . $s 7) locals sp outgoing args ADDIU $sp, -32 # allocate frame SW $ra, 28($sp) # save $ra SW $fp, 24($sp) # save old $fp SW $s 1, 20($sp) # save. . . SW $s 0, 16($sp) # save. . . ADDIU $fp, $sp, 28 # set new frame ptr …. . . BODY …. . . LW $s 0, 16($sp) # restore … LW $s 1, 20($sp) # restore … LW $fp, 24($sp) # restore old $fp LW $ra, 28($sp) # restore $ra ADDIU $sp, 32 # dealloc frame JR $ra
![Frame Layout on Stack fp blue sp saved ra saved fp saved regs arguments Frame Layout on Stack fp blue sp saved ra saved fp saved regs arguments](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-22.jpg)
Frame Layout on Stack fp blue sp saved ra saved fp saved regs arguments blue() { pink(0, 1, 2, 3, 4, 5); }
![Frame Layout on Stack saved ra blue saved fp saved regs arguments fp saved Frame Layout on Stack saved ra blue saved fp saved regs arguments fp saved](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-23.jpg)
Frame Layout on Stack saved ra blue saved fp saved regs arguments fp saved ra saved fp pink saved regs local variables sp arguments blue() { pink(0, 1, 2, 3, 4, 5); } pink(int a, int b, int c, int d, int e, int f) { orange(10, 11, 12, 13, 14); }
![Frame Layout on Stack saved ra blue saved fp saved regs arguments saved ra Frame Layout on Stack saved ra blue saved fp saved regs arguments saved ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-24.jpg)
Frame Layout on Stack saved ra blue saved fp saved regs arguments saved ra saved fp pink saved regs local variables arguments fp saved ra orange saved fp sp local variables blue() { pink(0, 1, 2, 3, 4, 5); } pink(int a, int b, int c, int d, int e, int f) { orange(10, 11, 12, 13, 14); } orange(int a, int b, int c, int, d, int e) { char buf[100]; gets(buf); // read string, no check! } buf[100]
![Activity 1 Calling Convention Example int testint a int b int tmp Activity #1: Calling Convention Example int test(int a, int b) { int tmp =](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-25.jpg)
Activity #1: Calling Convention Example int test(int a, int b) { int tmp = (a&b)+(a|b); int s = sum(tmp, 1, 2, 3, 4, 5); int u = sum(s, tmp, b, a); return u + a + b; }
![Activity 2 Calling Convention Example Prologue Epilogue test allocate frame save ra Activity #2: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-26.jpg)
Activity #2: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra # save old $fp # callee save. . . # set new frame ptr. . . # restore … # restore old $fp # restore $ra # dealloc frame
![Next Goal Can we optimize the assembly code at all Next Goal Can we optimize the assembly code at all?](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-27.jpg)
Next Goal Can we optimize the assembly code at all?
![Activity 3 Calling Convention Example int testint a int b int tmp Activity #3: Calling Convention Example int test(int a, int b) { int tmp =](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-28.jpg)
Activity #3: Calling Convention Example int test(int a, int b) { int tmp = (a&b)+(a|b); int s = sum(tmp, 1, 2, 3, 4, 5); int u = sum(s, tmp, b, a); return u + a + b; } How can we optimize the assembly code?
![Activity 3 Calling Convention Example Prologue Epilogue test allocate frame save ra Activity #3: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-29.jpg)
Activity #3: Calling Convention Example: Prologue, Epilogue test: # allocate frame # save $ra # save old $fp # callee save. . . # set new frame ptr. . . # restore … # restore old $fp # restore $ra # dealloc frame
![Minimum stack size for a standard function Minimum stack size for a standard function?](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-30.jpg)
Minimum stack size for a standard function?
![Minimum stack size for a standard function fp saved ra saved fp saved regs Minimum stack size for a standard function? $fp saved ra saved fp saved regs](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-31.jpg)
Minimum stack size for a standard function? $fp saved ra saved fp saved regs ($s 0. . . $s 7) locals $sp outgoing args
![Leaf Functions Leaf function does not invoke any other functions int fint x int Leaf Functions Leaf function does not invoke any other functions int f(int x, int](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-32.jpg)
Leaf Functions Leaf function does not invoke any other functions int f(int x, int y) { return (x+y); } Optimizations? $fp saved ra saved fp saved regs ($s 0. . . $s 7) locals $sp outgoing args
![Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-33.jpg)
Anatomy of an executing program 0 xfffffffc top system reserved 0 x 80000000 0 x 7 ffffffc stack dynamic data (heap) 0 x 10000000 static data 0 x 00400000 0 x 0000 code (text) system reserved . data PC. text bottom
![Activity 4 Debugging init 0 x 400000 printfs 0 x 4002 B 4 Activity #4: Debugging init(): 0 x 400000 printf(s, …): 0 x 4002 B 4](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-34.jpg)
Activity #4: Debugging init(): 0 x 400000 printf(s, …): 0 x 4002 B 4 vnorm(a, b): 0 x 40107 C main(a, b): 0 x 4010 A 0 pi: 0 x 10000000 str 1: 0 x 10000004 What func is running? Who called it? Has it called anything? Will it? Args? Stack depth? Call trace? CPU: $pc=0 x 004003 C 0 $sp=0 x 7 FFFFFAC $ra=0 x 00401090 0 x 0000 0 x 0040010 c 0 x 7 FFFFFF 4 0 x 00000000 0 x 004010 c 4 0 x 7 FFFFFDC 0 x 00000000 0 x 00000015 0 x 7 FFFFFB 0 0 x 10000004 0 x 00401090
![Recap How to write and Debug a MIPS program using calling convention Recap • How to write and Debug a MIPS program using calling convention •](https://slidetodoc.com/presentation_image/f71ff2ac7fd7a0a3045d18afdf05bdc7/image-35.jpg)
Recap • How to write and Debug a MIPS program using calling convention • first four arg words passed in $a 0, $a 1, $a 2, $a 3 • remaining arg words passed in parent’s stack frame • return value (if any) in $v 0, $v 1 saved ra $fp • stack frame at $sp saved fp – contains $ra (clobbered on JAL to sub-functions) saved regs – contains $fp ($s 0. . . $s 7) – contains local vars (possibly clobbered by sub-functions) – contains extra arguments to sub-functions locals (i. e. argument “spilling) – contains space for first 4 arguments outgoing to sub-functions • callee save regs are preserved • caller save regs are not • Global data accessed via $gp $sp args
Cs6410
Caller saved vs callee saved
Cs 3410
Rfc3410
Cs 3410
Cornell cs 3410
Cs 3410
Cs 3410
Cs 3410
Cs 3410
Kim ki duk spring summer fall winter
Spring fall summer winter
Interpretasi
Dedi budiman hakim
Hakim salim khan
Resisue
Cecep maskanul hakim
Hakim isa
Hakim yang bertugas di mahkamah an nazar fil mazalim
Dr mazen al hakim
Cavok açılımı
Hakim abdul hameed
Manda ve himaye ilk kez hangi kongrede reddedildi
Hakim boulouiz
Wasim hakim
Walk worthy of your calling
Who is propaganda
I could hear hawaii calling my name
What is name-calling examples
You must disclose your name when calling the complyline
Propaganda definition
Guidelines for ethical speaking
The calling of saint matthew caravaggio
Come home come home jesus is calling
The teapot dome scandal centered around *
Pinless dialing