![Page 1: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/1.jpg)
AnneBracyCS3410
ComputerScienceCornellUniversity
The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon, Bala, Bracy, McKee, and Sirer.
![Page 2: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/2.jpg)
Write-BackMemory
InstructionFetch Execute
InstructionDecode
extend
registerfile
control
alu
memory
din dout
addrPC
programmemory
newpc
inst
IF/ID ID/EX EX/MEM MEM/WB
imm
BA
ctrl
ctrl
ctrl
BD D
M
computejump/branch
targets
+4
forwardunitdetect
hazard
2
![Page 3: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/3.jpg)
0xfffffffc
0x00000000
top
bottom
0x7ffffffc0x80000000
0x10000000
0x00400000
systemreserved
stack
systemreserved
code(text)
staticdata
dynamicdata(heap)
“DataMemory”
“ProgramMemory”
3
![Page 4: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/4.jpg)
Stackcontainsstackframes(aka“activationrecords”)• 1stackframeperdynamicfunction• Existsonlyforthedurationoffunction• Growsdown,“top”ofstackis$sp,r29• Example:lw $r1,0($sp)putswordattopofstackinto$r1Eachstackframecontains:• Localvariables,returnaddress(later),register
backups(later) myfn stackframe
myfn stackframesystemreserved
stack
systemreserved
codestaticdata
heap
main stackframe
int main(…) {...
myfn(x);}int myfn(int n) {
...
myfn();}
$spà
4
![Page 5: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/5.jpg)
Heapholdsdynamicallyallocatedmemory• Programmustmaintainpointerstoanythingallocated
• Example:if$r3holdsx• lw $r1,0($r3)getsfirstwordxpointsto
• Dataexistsfrommalloc()tofree()
2000bytes
1000bytes
systemreserved
stackxyz
systemreserved
codestaticdata
heap
3000bytes
void some_function() {int *x = malloc(1000);int *y = malloc(2000);free(y);int *z = malloc(3000);
}
5
![Page 6: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/6.jpg)
Datasegmentcontainsglobalvariables• Existforalltime,accessibletoallroutines• Accessedw/globalpointer
• $gp,r28,pointstomiddleofsegment• Example:lw $r1,0($gp)getsmiddle-mostword
(here,max_players)
systemreserved
stack
systemreserved
codestaticdata
heap
int max_players = 4;
int main(...) {...
}
gpà 4
6
![Page 7: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/7.jpg)
int n = 100;int main (int argc, char* argv[ ]) {
int i, m = n, sum = 0; int* A = malloc(4*m + 4);for (i = 1; i <= m; i++) {
sum += i; A[i] = sum; }printf ("Sum 1 to %d is %d\n", n, sum);
}
Variables Visibility Lifetime Location
Function-Local
Global
Dynamic
7
![Page 8: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/8.jpg)
Variables Visibility Lifetime Location
Function-Local
Global
Dynamic
i,m,sum,A
n,str
w/infunction functioninvocation stack
wholeprogram programexecution .data
b/wmallocandfree heap
Anywherethathasapointer*A
int n = 100;int main (int argc, char* argv[ ]) {
int i, m = n, sum = 0; int* A = malloc(4*m + 4);for (i = 1; i <= m; i++) {
sum += i; A[i] = sum; }printf ("Sum 1 to %d is %d\n", n, sum);
}8
![Page 9: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/9.jpg)
Don’teverwritecodelikethis!
void some_function() {int *x = malloc(1000);int *y = malloc(2000);free(y);int *z = malloc(3000);y[20] = 7;
}
void f1() {int *x = f2();int y = *x + 2;
}int *f2() {
int a = 3;return &a;
}
Danglingpointersintofreedheapmem
Danglingpointersintooldstackframes
9
![Page 10: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/10.jpg)
Whichofthefollowingistrouble-freecode?
10
int *bubble(){ int a; …return &a;
}
int *toil() { s = malloc(20); … return s;
}
A char *rubble() { char s[20];gets(s); return s;
}
int *trouble() { s = malloc(20); … free(s); … return s;
}
B
C D
![Page 11: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/11.jpg)
int main (int argc, char* argv[ ]) {int n = 9;int result = myfn(n);
}
int myfn(int n) {int f = 1;int i = 1;int j = n – 1;while(j >= 0) {
f *= i;i++;j = n - i;
}return f;
}11
![Page 12: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/12.jpg)
TransferControl• Callerà Routine• Routineà Caller
PassArgumentstoandfromtheroutine• fixedlength,variablelength,recursively• Getreturnvaluebacktothecaller
ManageRegisters• Alloweachroutinetouseregisters• Preventroutinesfromclobberingeachothers’data
WhatisaConvention?Warning: ThereisnoonetrueMIPScallingconvention.
lecture!=book!=gcc !=spim !=web 12
![Page 13: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/13.jpg)
main: j myfn
after1:add $1,$2,$3
j myfnafter2:
sub $3,$4,$5
myfn: …
…j after1
JumpstothecalleeJumpsbackWhataboutmultiplesites?
???Changetargetonthefly???
j after2
1
2
3
4
13
![Page 14: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/14.jpg)
JALsavesthePCinregister$31Subroutinereturnsbyjumpingto$31
r31
main: jal myfn
after1:add $1,$2,$3
jal myfnafter2:
sub $3,$4,$5
myfn: …
…jr $31
after11
2
14
Firstcall
![Page 15: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/15.jpg)
JALsavesthePCinregister$31Subroutinereturnsbyjumpingto$31Whathappensforrecursiveinvocations?
r31
main: jal myfn
after1:add $1,$2,$3
jal myfnafter2:
sub $3,$4,$5
myfn: …
…jr $31
after21
2
4
3
15
Secondcall
![Page 16: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/16.jpg)
Problemswithrecursion:• overwritescontentsof$31
r31
main: jal myfn
after1:add $1,$2,$3
myfn:if (test)jal myfn
after2:
jr $31
after11
16
Firstcall
![Page 17: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/17.jpg)
Problemswithrecursion:• overwritescontentsof$31
r31
main: jal myfn
after1:add $1,$2,$3
myfn:if (test)jal myfn
after2:
jr $31
after21
2
17
RecursiveCall
![Page 18: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/18.jpg)
Problemswithrecursion:• overwritescontentsof$31
r31
main: jal myfn
after1:add $1,$2,$3
myfn:if (test)jal myfn
after2:
jr $31
12
3
18
ReturnfromRecursiveCall after2
![Page 19: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/19.jpg)
Problemswithrecursion:• overwritescontentsof$31
r31
main: jal myfn
after1:add $1,$2,$3
myfn:if (test)jal myfn
after2:
jr $31
12
34 Stuck!
19
ReturnfromOriginalCall??? after2
![Page 20: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/20.jpg)
Problemswithrecursion:• overwritescontentsof$31• Cometothinkofit…overwritesall theregisters!
r31
main: jal myfn
after1:add $1,$2,$3
myfn:
jal myfnafter2:
jr $31
after1
addi r1, r0, 5
addi r1, r1, 5
r1 5
12
…
20
1st timethroughmyfn
![Page 21: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/21.jpg)
Problemswithrecursion:• overwritescontentsof$31• Cometothinkofit…overwritesall theregisters!
r31
main: jal myfn
after1:add $1,$2,$3
myfn:
jal myfnafter2:
jr $31
after2
addi r1, r0, 5
addi r1, r1, 5
r1 10
12
…
21
2nd timethroughmyfn
![Page 22: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/22.jpg)
x2000x1FD0
StackManipulatedbypush/pop operationsContext:after2nd JALtomyfn (frommyfn)PUSH: ADDIU$sp,$sp,-20//movespdown
SW$31,16($sp)//storeretn PC1st
Context:2nd myfn isdone(r31==???)POP: LW$31,16($sp) //restoreretn PCàr31
ADDIU$sp,$sp,20//movespupJR$31 //return
myfn stackframe
mainstackframe
myfn stackframe
after2r31r29
x2000
Fornow:Assumeeachframe=x20bytes(justtomakethisexampleconcrete)
x1FD0
after2
XXXX22
![Page 23: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/23.jpg)
WhydoweneedaJALinstructionforprocedurecalls?
A. TheonlywaytochangethePCofyourprogramiswithaJALinstruction.
B. Thesystemwon’tletyoujumptoaprocedurewithjustaJMPinstruction.
C. IfyouJMPtoafunction,itdoesn’tknowwheretoreturntouponcompletion.
D. Actually,JALonlyworksforthefirstfunctioncall.Withmultipleactivefunctions,JALisnottherightinstructiontouse.
23
![Page 24: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/24.jpg)
TransferControl• Callerà Routine• Routineà Caller
PassArgumentstoandfromtheroutine• fixedlength,variablelength,recursively• Getreturnvaluebacktothecaller
ManageRegisters• Alloweachroutinetouseregisters• Preventroutinesfromclobberingeachothers’data
24
![Page 25: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/25.jpg)
Firstfourarguments:passedinregisters$4-$7
• aka$a0,$a1,$a2,$a3Returnedresult:passedbackinaregister
• Specifically,$2,aka$v0main:
li $a0, 6li $a1, 7jal myfnaddi $r1, $v0, 2
main() {int x = myfn(6, 7);x = x + 2;
}
Note:Thisisnottheentirestoryfor1-4arguments.PleaseseetheFullStoryslides.
25
![Page 26: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/26.jpg)
Firstfourarguments:passedin$4-$7
• aka$a0-$a3Subsequentarguments:”spill”ontothestack
main: li $a0, 0li $a1, 1li $a2, 2li $a3, 3addiu $sp,$sp,-8li $8, 4sw $8, 0($sp)li $8, 5sw $8, 4($sp)jal myfn
main() {myfn(0,1,2,3,4,5);…
}
Note:Thisisnottheentirestoryfor5+arguments.PleaseseetheFullStoryslides.
spà
54
spà
26
![Page 27: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/27.jpg)
Arguments1-4:passedin$4-$7roomonstackArguments5+:placedonstack
main: li $a0, 0li $a1, 1li $a2, 2li $a3, 3addiu $sp,$sp,-24li $8, 4sw $8, 16($sp)li $8, 5sw $8, 20($sp)jal myfn
main() {myfn(0,1,2,3,4,5);…
}
spà
spà
4spacefora3spacefora2spacefora1spacefora0
5
0($sp)
4($sp)
8($sp)
12($sp)
16($sp)
20($sp)
Stackdecrimented bymax(16,#args x4)Here:max(16,24)=24
27
![Page 28: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/28.jpg)
• Consistentwayofpassingargumentstoandfromsubroutines
• Createssinglelocationforallarguments• Callermakesroomfor$a0-$a3onstack• Callee mustcopyvaluesfrom$a0-$a3tostack
à callee maytreatallargs asanarrayinmemory• Particularlyhelpfulforfunctionsw/variablelength
inputs:printf(“Scores: %d %d %d\n”, 1, 2, 3);
• Aside:notabadplacetostoreinputsifcalleeneedstocallafunction(yourinputcannotstayin$a0ifyouneedtocallanotherfunction!)
28
![Page 29: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/29.jpg)
Callowspassingwholestructs• int dist(struct Point p1, struct Point p2);
• Treatedascollectionofconsecutive32-bitarguments– Registersforfirst4words,stackforrest
• Better:int dist(struct Point *p1, struct Point *p2);
Wherearetheargumentsto:void sub(int a, int b, int c, int d, int e);void isalpha(char c);void treesort(struct Tree *root);
Wherearethereturnvaluesfrom:struct Node *createNode();struct Node mynode();
Manycombinationsofchar,short,int,void*,struct,etc.• MIPStreatschar,short,int andvoid*identically 29
![Page 30: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/30.jpg)
Whichisatruestatementabouttheargumentstothefunctionvoid sub(int a, int b, int c, int d, int e);
A. Argumentsa-e areallpassedinregisters.B. Argumentsa-e areallstoredonthestack.C. Onlyeisstoredonthestack,butspaceis
allocatedforall5arguments.D. Onlya-darestoredonthestack,butspaceis
allocatedforall5arguments.30
![Page 31: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/31.jpg)
4spacefora3spacefora2spacefora1spacefora0
5
pink’sRetAddr
blue() {pink(0,1,2,3,4,5);
}pink(int a, int b, int c, int d, int e, int f) {
…}
blue’sRetAddr
pink’sstackframe
spà
spà
blue’sstackframe
Notice• Pink’sargumentsareonblue’s stack• spchangesasfunctionscallother
functions, complicatesaccessesà Convenienttokeeppointertobottomofstack==framepointer
$30,aka$fpcanbeusedtorestore$sponexitß fp
31
![Page 32: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/32.jpg)
TransferControl• Callerà Routine• Routineà Caller
PassArgumentstoandfromtheroutine• fixedlength,variablelength,recursively• Getreturnvaluebacktothecaller
ManageRegisters• Alloweachroutinetouseregisters• Preventroutinesfromclobberingeachothers’data
32
![Page 33: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/33.jpg)
Functions:• Arecompiledinisolation• Makeuseofgeneralpurposeregisters• Callotherfunctionsinthemiddleoftheirexecution
• Thesefunctionsalsousegeneralpurposeregisters!• Nowaytocoordinatebetweencaller&callee
à Needaconventionforregistermanagement
33
![Page 34: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/34.jpg)
Registersthatthecallercaresabout:$t0…$t9Abouttocallafunction?• Needvalueinat-registerafterfunctionreturns?
à saveittothestackbeforefn callà restoreitfromthestackafterfn returns
• Don’tneedvalue?à donothing
Functions• Canfreelyusetheseregisters• Mustassumethattheircontentsaredestroyedbyotherfunctions
void myfn(int a) {int x = 10;int y = max(x, a);int z = some_fn(y);return (z + y);
}
Suppose:$t0holdsx$t1holdsy$t2holdsz
Wheredowesaveandrestore?
34
![Page 35: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/35.jpg)
Registersafunctionintendstouse:$s0…$s9Abouttouseans-register?YouMUST:• Savethecurrentvalueonthestackbeforeusing• Restoretheoldvaluefromthestackbeforefn returns
Functions• Mustsavetheseregistersbeforeusingthem
• Mayassumethattheircontentsarepreservedevenacrossfn calls
void myfn(int a) {int x = 10;int y = max(x, a);int z = some_fn(y);return (z + y);
}
Suppose:$t0holdsx$s1holdsy$s2holdsz
Wheredowesaveandrestore?
35
![Page 36: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/36.jpg)
Assumetheregistersarefreeforthetaking,usewithnooverhead
Sincesubroutineswilldothesame,mustprotectvaluesneededlater:
Savebeforefn callRestoreafterfn call
Notice:Goodregisterstouseifyoudon’tcalltoomanyfunctionsorifthevaluesdon’tmatterlateronanyway.
main:…[use$t0&$t1]…addiu $sp,$sp,-8sw $t1,4($sp)sw $t0,0($sp)jal multlw $t1,4($sp)lw $t0,0($sp)addiu $sp,$sp,8…[use$t0&$t1]
36
![Page 37: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/37.jpg)
AssumecallerisusingtheregistersSaveonentryRestoreonexit
Notice:Goodregisterstouseifyoumakealotoffunctioncallsandneedvaluesthatarepreservedacrossallofthem.Also,goodifcallerisactuallyusingtheregisters,otherwisethesaveandrestoresarewasted.Buthardtoknowthis.
main:addiu $sp,$sp,-32sw $ra,28($sp)sw $fp,24($sp)sw $s1,20($sp)sw $s0,16($sp)addiu $fp,$sp,28
…[use$s0and$s1]…
lw $ra,28($sp)lw $fp,24($sp)lw $s1,20$sp)lw $s0,16($sp)addiu $sp,$sp,32jr $ra 37
![Page 38: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/38.jpg)
• firstfourarg wordspassedin$a0-$a3• remainingargs passedinparent’sstackframe• returnvalue(ifany)in$v0,$v1• stackframe($fpto$sp)contains:
• $ra (clobberedonJALs)• localvariables• spacefor4argumentstoCallees• arguments5+toCallees
• callee saveregs:preserved• callersaveregs:notpreserved• globaldataaccessedvia$gp
savedrasavedfpsavedregs($s0...$s7)
locals
outgoingargs
$fpà
$spà 38
![Page 39: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/39.jpg)
r0 $zero zeror1 $at assemblertempr2 $v0 function
returnvaluesr3 $v1r4 $a0
functionarguments
r5 $a1r6 $a2r7 $a3r8 $t0
temps(callersave)
r9 $t1r10 $t2r11 $t3r12 $t4r13 $t5r14 $t6r15 $t7
r16 $s0
saved(callee save)
r17 $s1r18 $s2r19 $s3r20 $s4r21 $s5r22 $s6r23 $s7r24 $t8 moretemps
(caller save)r25 $t9r26 $k0 reservedfor
kernelr27 $k1r28 $gp globaldatapointerr29 $sp stackpointerr30 $fp framepointerr31 $ra returnaddress 39
![Page 40: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/40.jpg)
Assumeafunctionusestwocallee-saveregisters.Howdoweallocateastackframe?Howlargeisthestackframe?Whatshouldbestoredinthestackframe?Whereshouldeverythingbestored?
savedrasavedfpsavedregs($s0...$s7)
locals
outgoingargs
fpà
spà
40
![Page 41: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/41.jpg)
ADDIU$sp,$sp,-32 #allocateframeSW$ra,28($sp) #save$raSW$fp,24($sp) #saveold$fpSW$s1,20($sp) #save...SW$s0,16($sp) #save...ADDIU$fp,$sp,28 #setnewframeptr… ...BODY… ...LW$s0,16($sp) #restore…LW$s1,20($sp) #restore…LW$fp,24($sp) #restoreold$fpLW$ra,28($sp) #restore$raADDIU$sp,$sp,32 #dealloc frameJR$ra
savedrasavedfpsavedregs($s0...$s7)
locals
outgoingargs
fpà
spà
41
![Page 42: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/42.jpg)
pink’sra
blue() {pink(0,1,2,3,4,5);
}pink(int a, int b, int c, int d, int e, int f) {
int x;orange(10,11,12,13,14);
}orange(int a, int b, int c, int, d, int e) {
char buf[100];gets(buf); // no bounds check!
}
Whathappensifmorethan100bytesiswrittentobuf?
savedregsargs forpink
savedfp
savedfp
savedregs
blue’sra
pink’sstackframe
fpà
blue’sstackframe
xargs fororange
spà
pink’srasavedfpsavedregs
orangestackframe
buf[100]
42
![Page 43: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/43.jpg)
Leaffunctiondoesnotinvokeanyotherfunctionsint f(int x, int y) {
return (x+y); }
Optimizations?Nosavedregs (orlocals)NooutgoingargsDon’tpush$raNoframeatall?Possibly…
savedrasavedfpsavedregs($s0...$s7)
locals
outgoingargs
$fpà
$spà43
![Page 44: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/44.jpg)
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,b,a);return u + a + b;
}
CorrectOrder:1. BodyFirst2. Determinestackframesize3. CompletePrologue/Epilogue
44
![Page 45: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/45.jpg)
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,b,a);return u + a + b;
}
test:
MOVE$s0,$a0MOVE$s1,$a1AND$t0,$a0,$a1OR$t1,$a0,$a1ADD$t0,$t0,$t1MOVE$a0,$t0LI$a1,1LI$a2,2LI$a3,3LI$t1,4SW$t116($sp)LI$t1,5SW$t1,20($sp)SW$t0,24($sp)JALsumNOPLW$t0,24($sp)
Prologue
We’llassumetheyellowinordertoforceyourhandontherest.$s0for$a0/a$s1for$a1/b$t0fortmp
CanwegetridoftheNOP?Wewanttodothelw… 45
![Page 46: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/46.jpg)
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,b,a);return u + a + b;
}
MOVE$a0,$v0#sMOVE$a1,$t0#tmpMOVE$a2,$s1#bMOVE$a3,$s0#aSW$s1,16($sp)#bSW$s0,20($sp)#aJALsumNOP
ADD$v0,$v0,$s0#u+aADD$v0,$v0,$s1#+b
Epilogue
46
![Page 47: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/47.jpg)
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,b,a);return u + a + b;
}
How many bytes dowe need to allocate for the stack frame?a) 24b) 36c) 44d) 48e) 52Minimumstacksizeforastandardfunction?
savedrasavedfpsavedregs
($s0and$s1)
locals($t0)
outgoingargsspacefora0- a3and5th and6th arg 47
![Page 48: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/48.jpg)
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,b,a);return u + a + b;
}savedrasavedfpsavedregs
($s0and$s1)
locals($t0)
outgoingargsspacefora0- a3and5th and6th arg
savedrasavedfp
fpà
spà
savedreg $s1savedreg $s0local$t0
outgoing6th argoutgoing5th argspacefor$a3spacefor$a2spacefor$a1spacefor$a0
48
1216
0
202428323640
How many bytes dowe need to allocate for the stack frame?
44Minimumstacksizeforastandardfunction?
$ra +$fp+4args =6x4bytes=24bytes
48
![Page 49: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/49.jpg)
#allocateframe#save$ra#saveold$fp#callee save...#callee save...#setnewframeptr
...
...
#restore…#restore…#restoreold$fp#restore$ra#dealloc frame
49
![Page 50: Anne Bracy CS 3410 · 2016-10-18 · Anne Bracy CS 3410 Computer Science Cornell University The slides are the product of many rounds of teaching CS 3410 by Professors Weatherspoon,](https://reader034.vdocument.in/reader034/viewer/2022050323/5f7c97959e16892a51330ffa/html5/thumbnails/50.jpg)
#allocateframe#save$ra#saveold$fp#callee save...#callee save...#setnewframeptr
...
...
#restore…#restore…#restoreold$fp#restore$ra#dealloc frame
savedrasavedfp
savedreg $s1savedreg $s0local$t0
outgoing6th argoutgoing5th argspacefor$a3spacefor$a2spacefor$a1spacefor$a0
48
1216
0
202428323640fpà
spà
ADDIU$sp,$sp,-44SW$ra,40($sp)SW $fp,36($sp)SW$s1,32($sp)SW$s0,28($sp)ADDIU$fp,$sp,40
LW$s0,28($sp)LW $s1,32($sp)LW$fp,36($sp)LW$ra,40($sp)ADDIU$sp,$sp,44JR$raNOP
Body(previousslide,Activity#1)
50