Income the cupbees! Oh look at them so cute! Hello everybody and welcome to another episode of Jurassic World The Life! What we've got! We've got so much news! Sssssssssssssssssssssssssssss! Ssssssssssssssssssssssss! So much news! We have new dinosaurs, new events... Oh my god! I don't even know where to start, really! Okay, so! What has happened? Where I've been? Where has Jurassic World been? Be the world the same, well, alive and the game of being hehehehe. Oh man HAHAHAHA Trust me, all the life has actually updated. They've done a huge update I will say huge as far as I can tell There's new dinosaurs and that's that's a big update But there's also other things and these dinosaurs that have come out, you know Normally you might get like a T-Rex animation or something But no these guys are big big updates because it's a lot of time and effort And I kind of just want to praise Lydia for a second for just the sheer scale of effort that they've put into this also I Will put out a lure to see if we can grab one of the you the The new dinosaurs to unlock it But you know there's a Baryonyx gen 2 right here So we're gonna go over all the new creatures how to unlock said new creatures Yeah, we're gonna have a really good time There is a lot to go over because not only are these new dinosaurs with new animations and everything like that But they also have a new Like a new abilities a new attack battles things that we've never seen before Also, I didn't notice there's a dare-dark cheeky dare-dark or is in the background Oh, so I have been up since six o'clock this morning. I went to bed at 3 a.m So I've had about three hours sleep and it is now Half to so I've almost been up for a full 12 hours, and I'm about a kilo over and die But actually I've got a lot to do today as well. Oh Lord. No need this video So if you want to subscribe to my patreon and give me money, thank you Where's the sad music that's the one Okay, okay, so the new the new creatures, right we should oh Can't say can't say no to that can I or a little bit of that? No, give me more no We're gonna jump into the sanctuary is to see the new creatures already Well the level five one somebody's put in a doo-doo. So let's go check out the doo-doo So normally it's one creature Swarms we have frigging swarms. So this is a said dodo So I we're gonna see it's eating animation first I love this look at the amount of you've got all of the different personalities And then you got the greedy one who wants a like extra when it's going away in fact actually well I was doing stuff today. I was I was looking at my back garden and I saw I've lost me wax guys. It's dire straights here in the beaver household. It really is I was I was watching the back garden There's a there's a stalling and then a baby stalling and the stalling was like back give me give you Beautiful and let's have a look at the place do they play with the ball of cheese? Mount Jeddah. Oh, it's like he's oh bless He's like he's sitting on we definitely got a dominant dodo here. I need for who follow Hold on. Let's get it. Let's get a funny sound effect for that one That's the one okay, so interact me There's no point really doing interact because you know what it's gonna be This is just they do a little dance and that's mainly So I think there is a no one if we go to this sanctuary that somebody has placed a Yeah, here it is. Are you ready? Are you ready guys? These are come so good novice and they have the I mean We've seen a lot of brutal animations when it comes to eating the goat Lidia spares no expense when it comes to brutality For goats So we're gonna start with the play first because you know Play but look at it's not any animation is I mean the run animation is a bit similar there. I love it. I love it. Oh The level of like imagine the yeah, like the time and resources it takes to I mean modeling It's the same. It's a different color though on the skin, but the animations are all different Except for when they run over there that looked like it was the same animation, but mainly they're all different and now this is where This is where we get like Okay, let's just I'll just show you I'll show you Thank you. Yeah, that was horrendous. Oh my god There's a nice little Easter egg here now I don't know whether it was a sound team the sound design team that did this but when that goat dies We'll do it one more time. Sorry if you didn't see it, but if you listen closely listen to the goat That bit there that sound effect is from J pod when a large carnival Picks up a goat and shakes it but then proceeds to walk around with the goat the goat makes this I get the Well, that sound effect is like The maze of rendition I know bro. Can we get the bravo sound effect? That's the one. That's the one. Yes. Yes. That's one So we have comes in and we have Dodo's I will check the other sanctuary to see if any others have been put in But I don't think anybody else has and I think I think maybe it's those too. I could be wrong So now if we jump over to the update release notes on the update 2.7 So introducing flocks so the Dodo and compi have this new ability or passive a keyword called flock tiny creatures Have made their way into dross a wool the lag in the form of flocks flocks are groups of three creatures who work as one in battle each flock counts as one member of your team So it's just like a regular dinosaur at the moment. It's all the same. So what does a flock do absorb? So with absorb flocks can withstand powerful attacks and keep fighting only losing one flock member at a time But watch out for group attacks. These can take out the entire flock and ones and in this it really feels like They've I don't they're changing the game and I love it So let's say you have a Thor door, right? Thor door is this dinosaur and like Mortar Rex or whatever. It's called in this. I think it's oh no It is more Rex. Yes, imagine a Mortar Rex has a really big attack, right? It could kill anything in one hit. It's fast.  I basically you've got three lives and that's it I'm assuming that they don't have too much help each and It would be interesting if I find some footage of somebody who's actually unlocked a copy to see it in combat How that looks there's a rally so with rally flocks can call a new member into the fray After one is defeated, but remember regular healing abilities cannot trigger a rally Okay, so how do you get a rally by defeating an opponent? So we've seen copy the epic. There's also comes up. Nathan's gen 2 Who has absorb a swarm passive? Yes. I'll alert the flock which is a passive I don't know what that means exactly a courageous alert Hop and mock impact and run and we also have puppies a new dinosaur Bumpy's the best friend of Ben pink who's on Netflix's Jurassic World camp cretaceous welcome this affectionate and Kyla saw With one large horn to Jurassic World alive With one large home. Oh Okay, welcome. Okay, gotcha The interesting thing is it doesn't look. Oh, no, maybe it is like then Kyla saw and what if they've done a different model stunning alert passive interesting superior vulnerability instant Invincibility taught and group taunting. Sorry. Am I like Like really close. I apologize And the don't know which also has the absorb Flightless strike which seems completely ludicrous what you you you increase their attack or you increase your attack Decrease your crit chance, but then have I am no idea alert decoy And you also have a comms on natus, which has the cunning strike the hop and mark an alert Scurry, so it's gonna be quite interesting how you get extra flock members to your group in this rally ability and already We have two hybrids. I think we have the dodo severe, which is the dodo and Instruct severe that one also hold on. I will put out. We'll jump back into here for a second. I Will oh oh that well, I mean there's a Demetrodon if we needed one or we've got one We don't need one though, but hey ho here it is So, let's just start this I need to continue to read but I can't continue to read because I'm darting Oh, it's been a busy day. It's been a busy day. I've been up. Normally. I get up at what like ten ten Or eleven o'clock. I've been up since six so already I've been up for six hours more than I then I should be I think I'm gonna die, but it's okay. I'm fine through it. I push through it. I can do it so that's 276 and so we will put down a Gigaset let's see what we get with a gigaset and we'll put that down the whole time Hope you will fish for a dodo or something. We never know so it's a dodo and an instruct severe That has the protective alert revenge distracting impact alert a decoy Interesting Maybe that's the alert decoy. We get another one to it and the new unique which is come so can a this of the epic and Diplo callous gen 2 so guys be prepared. You're gonna need you're gonna see a lot of Diplo callous gen 2 Alerts coming through so I have 52,000 so we should be okay. It's already level 15 because I think it's oh There it is. Oh Wow, look at them. Oh, they look they look fantastic That's brilliant. Oh, we do need a level 20 though So we will I will spend the coin needed to get this thing to level 20 in preparation So this thing well, it will have absorb cunning strike hop and mock restricted group distraction and alert Scurry which is interesting and some of the biggest news is The new raid ball that we are gonna be getting very soon You know, we've had more Rex gorgotrubex Sarah Magnus had to sort looks I think that's it for a week. So we're now gonna have five even more Why ten of dudes I am I have a group I have I have a guy who invites me all the time. Thank you David Much appreciated all the work you do basically I just go on and he just sorts it all out And I can't I'm more appreciative that especially like just the amount of time you have to put in the game anyway Just as even stay on top of things So the new battle of the new boss is a Delofa source Is a tricky competitor can't oh, sorry catch it hiding in the reeds to distract its prey then moving in for the attack At the moment their enemy is weakest So it has swap in distraction. It's gonna swap in or is that was that when we unlock it cutting strike alert? Notification cutting rampage and super distraction. I have no idea. So now we get into the new abilities So flock creatures have come with a new ability which is set alert abilities alert abilities have different effects based on the flock's total remaining HP Which represents how many are gonna be in the flock if the flock dips to two or one members The alert abilities threatened state will trigger Some other creatures now have alert abilities to with a threshold in their total HP Deciding between secure and threatening states We are really seeing levels of Pokemon coming through here Like it you used you have abilities in Pokemon where if a Pokemon as health is reduced to less than 50% It's attack is half and I'm wondering what what what we have here So I'm reading so I think this is it This is the ability while secure after receiving and surviving a physical attack reduce attackers damage Minus 10% but if you survive it when you're less Then whatever that percentage it's for it's went sorry when your ability is set to threatened Your damage you'll do minus 15% for the for the attack. So every move that has this icon this one here the up and down arrow Means that it basically changes depending on your your health So song like the the counter is better if you're lower health This one the alert decoy. It's ability is completely disabled if you're threatened So you're low you've lost a few members It seems like if it's if it's something that has something to do with distraction Then having a threatened state seems to be better It's really gonna be what like look at all this all of these things It's it's gonna be a case of just you know You unlock the dinosaur and then you see Just what you can do with this, but yeah that that seems to be the majority of the updates going into Looking because it is actually Wednesday now. So we're already part way through the week Is there anything here that we could need So we've already missed them on the Tuesday Wednesday Thursday Friday, we've got arctops gorgon ops and haste eagle gen 2 I think arctops and haste eagle have hybrids. Maybe gorgon ops does too We've got a legendary incubator on the Friday to look forward to Saturday and Sunday Blue trodon and haste eagle now the only one with a hybrid I think is blue with Indo gen 2 haste eagle Ah haste eagle might actually unless it's haste eagle gen 2. I don't think trodon does, but um Of all those I don't know. Oh, hold on. Oh, we got a freaking cool as such as gen 2 We're gonna grab that out of those guys. I think I would it's either haste eagle or trodon I don't need interrupt to gen 2. I haven't needed. I think I've got level 29 interrupt to gen 2 actually Because I ended up boosting it because I thought that Ludia just weren't gonna fix the game and interrupt to gen 2 It was just gonna be the best creature in the game forever I didn't look at it. They changed it just like if you remember velociraptor was a friggin sweet Dinosaur for the longest time Not anymore though not for a long time But the biggest pains was velociraptor then you had Indoraptor gen 2 and it doesn't really look at look at those little chonkers a little glip-do-don Giant Indoraptor. Oh, oh, we got a legendary.  Oh, it's a darn optics. Never mind Let's go catch this shall we? Oh, we're getting all of them. I don't even have to leave the comfort of my own house But not only have we had all these updates We're also at the moment in the midst of a boost reshuffle So if you want to you can now switch your boost to any dinosaur doesn't matter What it is you will get a hundred percent of your boost refunded. Oh power raptor. Oh heck Yeah, I'll take that another one. We're doing so good here. What's going on? Um Yeah, I can't remember to say. Oh, yeah the boost so we got a boost reshuffle and which I think is good I mean, it's definitely step in the right direction Towards the better option that is you can just freely swap around your boost without any penalty That would be the dream however Chances of that happening seem to be very low because this is the third time up to the music decided to stop I missed one damn it Still haven't got that that thing. What's it called? The miss a hundred epic shots haven't haven't achieved that one yet One thing we'll look at here. Look at this. Look at this. Can I look at my rewards? Look? I've changed from eggs I know sacrilegious and I went to goat because goat is now the best because I don't know whether the person I was facing in a PVP realized it or not But we both drew he had a chance to kill me But decided to go for a lethal wound and it was during the tournament I think we were both the talak or somilia, so whatever it's called the one that can do rendering and lethal It's an epic hybrid that one and he could have killed me But he decided to go for lethal and I'm wondering if he knew because he could get this reward So you only get this badge if you draw a battle in a PVP in a season battle So it's pretty it's pretty well trucked with that leak Oh, we also have a t-rex gen 2. We've got to grab that as well So now is the time that I might be able to take off all my boosts from Erla-dominus. Oh the music stopped again brilliant So I might do that might take all my boosts off the Erla-dominus and put them onto earless fix because if I've got to be honest Earless fix seems to be the better dino The fact that it's a me it's well. It's immune to distraction. I think it's not immune to the speed reduction I think Erla-dominus might also be immune to it I left I left I left over check. Oh Lord speaking of a leko. There's an earlickus oris So let's go grab this one. Shall we? Wow loads of good dinosaurs at the moment. This is brilliant Oh, and the game's just not happy with me a few fixes that I think that they could Do with in my honest opinion is I don't whether it's my phone but I can never seem to load up recently the Alliance chat it just never loads up. I'm just stuck on this spinning icon with maybe a couple of Collections they collect the DNA I've requested So maybe that could be done with a quick look into Ludia recently has been doing a pretty good job reading the community and Listening to their feedback and adding things in or taking things out A lot more. I'm also one to add another attack boost to It could be hadrasaur But Sarah Magnus is pretty decent and I think I will increase our Magnus so at the moment I think I've got 10. I've got 10 into the health I have not increased its its speed at all because pretty much when you do the the speed ability You're gonna be faster than most things maybe one or two. Maybe get it to 120 speed But if I can get 10 on health and then 20 as a 15 max It might be 15 max being at 10 or max out a max out attack I think I'm pretty happy with that. So there you go even better Sarah Magnus So let's do it. Let's see what kind of bars we can get. It's probably not gonna be Very easy because we're in the gyrosphere depot and gyrosphere depot means bad means that uh, Although saying that I don't know if it doesn't mean too bad listening What's what's a good one? We could start with magnetator, but I'm tender for Dio now Dio I have not boosted at all and maybe I could be tempted to put no I wouldn't put speed on Dio I won't be the point putting speed on Dio if a Dio be Dio happens. You actually want to be the slower Dio Perfect So he probably oh I was actually tempted to go for the shield. I thought he would just go for nullifying but I Mean what's his attack four thousand four hundred? Yeah, he probably would have killed me Now he's not faster than my early Dominus, so I'm kind of okay with that. Yeah, he'll go for that We don't want to risk it. I could have went for instant invincibility. Maybe he would have just went for the regular hit But we'll go we'll go for early Dominus and and from here.  I'm reading on tissue. Oh, we get hit by crit Hope we don't get a hit by crit on this as well good Okay, so I think the best thing to do here is go for nullifying Yes, okay, I think we might have lost this. Oh Hello, I'll give you a bumpy. There we go bump. Oh, here's a thought on this is kind of what I was worried about Cuz we can go for a big hit And then he's probably gonna kill us or we can go for Sarah Magnus get the stun and then go for a charge Oh, you saw you were dead either way. We did we may as well try the Sarah Magnus, right? We're gonna die either way So there it is didn't even get this done didn't even get this done didn't know what what are their chances? What I mean, he's probably just gonna go for instant charge Always got the goat idea I was gonna die either way. Oh, at least I got to see some new emotes and they may be in the new update because they put some new Emotes in here I think I was killed by Jojo and I use Dio There is oh have we just clocked over. Oh my god. Oh my god. We've clocked over. We've got all the hasteagles Archaeopsies. Oh Dometridon's appeared again. We'll take it to Metrodon. He's a freebie Also, we've got a super rare incubator to collect there, too. Oh, is the music gonna play the whole time? whoa Although saying that the sound effects for the Dometridon have stopped You can have one but you can't have both. You're not allowed to have both says Ludi There you go. That'll do hundred a six again. I'm doing this on my iPad. So It's kind of like rather than just be like who on me thumb So let's see what what else do we have out here anything new that might have spawned in as well No loads of hasteagles. So I'll have to think is it one ball or is it two? Oh, it's one ball Let's do it. I feel like Ludi will soon resist Trying to make apexes the be all and end all because of course not all players can have it and in fact I think I've also noticed. Oh, I love killed him unless he know. Yeah, he's definitely dead Because I've seen I've been going up even though. I don't think I've done anything different I've been going up in the rankings and I think that's because I am using like Mortem Rex had a soul looks and Sarah Magnus in my team. I haven't used a Gorgotra Bex But I think it would probably be about time for me to go on the the stat thing and see just what I can do with Gorgotra Bex, so we're gonna get 500 hasteagle as well as 241 Oh That was happy day. I didn't expect to actually unlock a compi today. Let's touch the copies copies Look at how cute they are. Oh these what they kind of look like they're feather, but then they're obviously not So do these guys go into anything and they just cutie pies Oh, oh, so we get to see what it looks like in game So you have the little up and down icon there. I should just use these against somebody Should we should we do that guy? Should we use copies against like a super high tier thing? No, oh no mine guys I don't even need to do that I could just do one of these bottles and we'll get to see just what a compi can do I'm excited. I think they've got like or maybe they don't but some compi has a swap inability Which distracts. I don't know if it's these compi. So yeah, they do have a swap inability. Oh Should we try that? Should we try swapping look has even got the open down arrows that are black. I think they should make that a little bit More easily to see I can see it on my iPad because my iPod is massive But on a phone Maybe make them red like I don't know just maybe put like a stroke around them or something I'm kind of tempted to swap in just to see what happens Because I think what they've been trying to do is put a hundred percent stone on a swap in these days But let's see So what happened oh look we got a little No, we're lost one already. There was no swap in Okay, what do we do? What do we do? Secure so it's still insecure So what do we get for that? Self HP over 471. Okay lowest 8 414 attack Okay, what about this one? Cleanse torn lasting chances to dodge Lasting two turns. Okay. Okay. Let's go for some Dodgers. Oh, they just fade. Oh Bless they're just gone. I thought he would stay there for the whole. Oh, here comes high pounds. Oh lord. Oh, he survives Yes Run. Oh, well, we kind of resisted it, but hey, oh, um, should we should we get out of dodge? No, we're not we're gonna stay in courageous alert. Yes Oh, it'd be so cool if the more that stayed in the more damage they would do Absorbed. Oh, here we go. It's down to one. So we're in a threatened state now We've alerted the swarm. Oh, was that when he tried to swap out? Lord knows anyway, keep going alert kill the raptor. It's just one blessing The comrades I've lost Won't stop hurting No, they all go down. Oh bless So I don't know how you recover extra or can you there is a rally, but maybe it's so maybe that can't be didn't have it Bless that was so cool though That was awesome. Oh the the things you can do with this game that that's thinking outside the box And that's I really appreciate that lady. That's really I think you could do even more So maybe some dinosaurs if there's more of them they do more damage or they do multiple hits So if you had dinosaurs that did multiple hits it could set off counters multiple times So, you know, maybe if it was a tricor sore or something that counted hit You know if it got hit three times it would do one two three and completely take out the compi And maybe that could be a counter to the compi. Oh man. Oh, that is so cool So cool, I can't wait to see like all of these copies and stuff and all the different combos you can do I mean, I will try my best to unlock the comps organize hybrid as quickly as I can but Unless we have I mean at the moment. It's very early days. Like I said if we go into the into here They go into the the sanctuaries Really, I don't think these are like heavily restricted to what people can put in so I'd be very surprised Yeah, there's not in there if there was other copies in there, but there's somebody has put copies in there It just means that if I do it multiple times is kind of like it's gonna take a while because it's gonna be even slower But anyway guys. Oh look, we dropped down brilliant. We lost so many cups there. Oh my god Oh dear. Well anyway guys, if you enjoyed that video Don't forget link in description below if you want your own books Just click it and follow it on the on the device that you open dressable play dressable live on and you will Know me but you don't have to go say you'll not only support me. I don't get anything for it It's for you. I mean I can click it myself and get books. I suppose. Oh, yeah But we're gonna be joined the video leave like until next time. I'll see you later. Oh Bob. Hi


The IAEA Director General has been touring the Pacific to discuss the nuclear agency's assessment of the planned Fukushima water release. Rafael Mariano Grossi first met with local leaders from the Fukushima province, who are particularly concerned with how the release will affect the region's fish industry. He spoke to mayors, fishing associations and youth groups, among others, to hear their concerns and explain the science and impartiality behind the IAEA's report. The Director General then visited Fukushima Daiichi to view experiments growing fish in Alps treated water and to visit the planned discharge point. Next, the IAEA team travelled to South Korea to answer questions from authorities and local media there. The science is clear. Japan's plans to deal with the water accumulated at the Fukushima nuclear power plant are in conformity with international nuclear safety standards, but there are concerns. We are aware of those. This is why the IAEA is here to reassure communities to provide clear answers in full transparency. Finally, the Director General travelled to New Zealand and on to the Cook Islands, the current chair of the Pacific Island Forum. The Pacific Islands deserve to have their concerns heard, to understand that the effects of the operations from the Fukushima Daiichi nuclear power plant will be legitimately negligible and there will be no harm to the ocean environment. Importantly, the IAEA will stay providing continuous review and assessment and sharing those findings with the local communities.


HBCU Digest Radio, welcome back to intriguing conversations with leaders from the historically black college and university sector. Today is a distinguished pleasure for me, a friend of the show, a dear brother who appears in as many commercials as you can without being named LeBron James, but remains elusive on the Digest and gave me 20 minutes today, so I am eternally grateful, the former president and CEO of the Thurgood Marshall College Fund, and now the same namesake for the Society of Human Resources Management, he is also the chair of the White House Board of Advisors on Historically Black College and Universities, Johnny Taylor, Jr., so Attorney Taylor. First, it is an honor to always have you on, and I ask you this question as we ask all guests, how are you doing in managing during the pandemic, brother?  But I got to tell you, the bigger concern is, and I know we're going to talk about it, but what's happening to our schools and our community broadly, right? Because this, you got the effects of the pandemic on the black community, HBCUs, add to it all of the social unrest, and the dynamic is a lot for 2020, let's say that.  When you started at TMCF in 2010, there were 266,000 students at HBCUs, enrolled at HBCUs, and as of 2018, that number was now 224. So we're down plus 30,000 students. And for all that you have seen as a fundraiser, as a lobbyist, as an advocate at state and federal levels, what is the common thread that you think creates that? Because this is a precipitous drop in less than a decade. Yeah, so you know, and you know, I was talking about this, gosh, 10 years ago, to your point, in 2010, exactly a decade later. And sadly, almost as if I was writing the book, The George Orwells 1984, much of this was predictable. And now I don't want to make it sound like it, we can't fix it. But we've got to fix it, because for the people who were looking at me saying, no, no, that won't happen. Sadly, I was right. And those of us who stayed real close to the HBCU space and the higher ed space generally knew a couple of things were at play. One, Americans stopped having children. Since the year 2000, the birth rate has been on a decline, period. And that's black, white, the Latino community has been growing. But largely, the rest of us have not been having as many children. So we started out with a birth rate problem. And that's going to persist for a little while. At least another five or six years, we're seeing, you know, we have tough economic times, people decide, well, I can't afford to have children. So they have even fewer children. We saw that from 2008, the economic crisis. So that's number one. Number two, you got to be careful what we pray for. In some ways, and I've said this repeatedly, as much as we are pushing for the majority institutions to be more diverse, where do you think they're getting the diversity problem? So they are now directly competing. Years ago, I talked about Georgia State and it become it ultimately having more black students in the Atlanta market than Spelman, Morehouse and Clark combined. So the reality is, the majority institutions, we put pressure on them to be more diverse, specifically to recruit more African American students. And they did it, which means they're putting serious pressure on HBCUs. So that's the second thing. The third thing, and COVID really made it real clear for us is all of this focus on technology. You remember back in the day, making it sound like, you know, five, six, seven years ago, when I was really pushing us to focus on partnering with, if we didn't have the resources, partnering with the for-profit colleges just to get the infrastructure, technology infrastructure. And there were all the naysayers and the people who said, I'm selling out to them and they're competitors. And I said, guys, if we can find a way for the Strayers and the Phoenixes and those folks that they'll allow us to use some of their technology and white label it, we're going to be better for it. And so many schools didn't do it when we had a lead time on it. And by not doing it, COVID made it nearly impossible. I mean, we were scrambling trying to put together virtual learning online options. Had we done that five, six, seven years ago, we'd be prepared for it right now. So it isn't interesting, all of those three things together. Birth rate, you know, what the online technology, and I admit it takes a ton of investment dollars, but we knew that. And then, you know, the fact of the matter is the majority of institutions have gotten a lot more aggressive. Now, all of this, frankly, was made worse because of parent plus loan situation.  You and a lot of folks that are in the orbit of the White House have done an extraordinary job of advocating for more resources to come to the HBCUs in creative ways. So we've seen, you know, loans being deferred, loans being eliminated. We've seen higher increases in funding. We see an unprecedented farm bill. There's so much stuff that we've seen over the last several years, but we have a lot of folks, including presidents, who say, you know, that ain't a lot. You know, that ain't nothing. What do you think when you have actors within the sector who are detracting from our political gains because of who's at the head? I mean, but you're at the same table saying, oh, you know, we need more, we need more, we need more. Man, you nailed it. Listen, I understand that you've had years and years of neglect and failure to invest that, you know, listen, this is the, they want a message that there's a need for more, but you can't keep asking for more without thanking the people. And by the way, that's Congress and the White House and the advocacy organizations like UNCF and TMCF, Thurgood Marshall, a lot of folks are working to get the resources that we're now getting. And here's what scares us is if it's never enough, if the response is, oh, that's not enough, that's not any money, then what incentive does the White House, no matter who's in it, what incentive does Congress have to continue investing or to increase it if it's never enough? So I would ask those in the space, not that you should be grateful in the traditional sense somehow that, you know, somehow you should vote for the president because he's funding HBCUs. But what I am saying is you got to give credit what credit is due. And there's no given that the president is getting, you know, at the last election got eight, depending upon what the numbers are, 9% of the black vote. You know, it could be very, very compelling for him to say, let me fund the groups that will fund, that will vote for me. But instead he gave, you know, and continues to support HBCUs. And those are some tough arguments. I took this role as the advisor to the White House on HBCU issues because they made a commitment to fund us. And frankly, over these last three and a half years, no one can take that away. And I think the universe of HBCUs, the community, would do itself well to at least acknowledge that, vote for whomever you want to vote for, but at least acknowledge that the funding that we've received over the last three and a half years has been frankly, significant and significantly more than that we've gotten any time. COVID, we continue to get special COVID funding. And when they do the next stimulus bill, I think HBCUs are going to be very, very pleased, I hope, with the level of investment in the institution. It's funny that someone pointed out today, well, you know, that's not a lot of money. I said, you know, we use the 3% number a lot. We say we make up 3% of higher educational institutions, but have an outside delivery in terms of the number of professionals and graduates we produce black graduates. And that's true. The flip side is you get 3% of the institutions got 14% of the stimulus funding this last time. So, you know, if you want to talk about punchin' above its weight, the administration on this issue, specifically HBCUs, is doing more than, frankly, it could argue that many argue that it should. What do you say to the institutions that are running a substantial risk on enrollment? For a lot of reasons. We're seeing a lot of data that says students want to go back to campus, they are, you know, willing to take whatever risk maybe associated with being on campus, that the institutions are trying to balance that with the notion that, you know, we got to outfit this place for to be safe. What is some of the political calculus as you see it, when you have an administration that's saying, hey, look, we, y'all, we got to get used to this thing. The virus ain't going away. So at some point, you got to figure out how to do business versus the reality of, you know, the disproportionate impact of COVID on Black folks, the fear of some Black folks to be back on campus. What do you think the political considerations are that we have to take and then share with each other to try to figure out how we do this? Right. So, I'm going to take for just a second the politics out of it and try to just focus on real hard data and policy so that we make really strong policy decisions. Let's start with the fact that you ultimately have to say, are you necessarily going to be safer back in your communities? Right. That's the big question. If the answer is no, then even if you are relatively, you know, safe, you're safer on campus is my point. And we know this. We know that we're seeing this over and over. This COVID is ravaging many of the Black communities. So frankly, in some ways, the kid might be safer coming to your campus, because you can control for it. We can give them the right PPE, the personal protective equipment. We can socially distance. We can kind of give people an environment that they don't have. Think about it. If you live in a two or three bedroom house with five or six, seven, eight people, many of whom have to work every day because they're in those essential jobs, you're being exposed every day to whomever it is, your mom, your dad, your sister, your brothers are exposed to when they go to work. We have a better shot, I would argue, at making, creating a safer place, safer. Not 100% safe, but safer for our students if we can get them back on campus. But here's the reality. If we don't, and I'm telling you, we collect this data at Charm, my day job, these kids are saying, I've been at home for 17, 18 years waiting for this moment to go away to college. And so if my HBCU doesn't open, then guess what? I'm going to go to the majority institution that does. And so you want to talk about an added threat. And once you lose that kid and they go on to these majority campuses and make it their credits and get that experience, it's going to be harder and harder to find that student to replace him or her. So the reality is you just got to do, life is full of risk. I fundamentally believe life is full of risk and you're taking some risk. All of us, the day we get behind a wheel to get in a car every day, you take some risk. And I think we have to teach our students and our community, our professors and everyone to be healthy and try to reduce the risk, the chances that it will do serious harm. But I just don't know any other way. But to get our campuses back open, and then we should do it in a hybrid fashion. And for people who just absolutely either have health risks themselves or, you know, there are things you got to do. I'm not saying going live and opening up your campus for every person is ideal, but we simply can't just have a rule that says online because we also know that the virtual learning while good is not great. It's suboptimal, especially for kids who have many of whom have had substandard K through 12 education, they come into college, they need assistance, and there's nothing like think about what we've sold the HPC experience, we nurture you, we take care of you, we, you know, we do all of that stuff. Well, that's really hard to do, not impossible, but it's really hard to do virtually. So all in all, my sense is that when you balance the risk of not some of these kids not enrolling at school at all, or getting a substandard virtual education that, you know, and all that comes with that, then I think it's worth us trying to figure out how to open our campuses. I will say this though, anyone listening, if the leadership of the institution cannot create some level of safety, not guaranteed safety, but take the necessary precautions, then I think the right thing is not to open, but that's going to come with some serious risks to the institution's long term viability. Let me ask you this because I know you got to run to another meeting. I always appreciate your time, brother. One of the things that you introduced to the sector some years ago was a conversation about how a lot of public systems were running around presidential search processes. They weren't giving the campus the opportunity to meet, greet, and then vet their own presidential and chancellor candidates. And that's still going on a lot today. When you think about that and other threats to HPCs at the state level, particularly, and we, excuse me, we see stuff like Cheney, you know, in conversations with merger, we see stuff happening in Georgia all over the place. What can alumni do to support what the stuff that you're doing at the federal level with having conversations about, hey, can you rein some of this stuff in some of the things that we're doing on the state level? Can you rein some of this stuff in can alumni and students, even in a pandemic mode, be aggressive about pushing certain HBCU nuances to the forefront and saying, look, we're not going to tolerate this because we know that in a pandemic where everybody's focused on getting through it, there may be some actors that'll say, this is the time to do what we've always wanted to do to some of these black colleges. Well, without a doubt, and you know how passionately pissed, maybe that's the the way it is to say it on the podcast. I was about that, but we saw this. I mean, I saw it in Mississippi at Alcorn State, if you recall, and what they what I predicted at the time was they were testing to see if the community would fight back. We saw it in some of the North Carolina jobs and we didn't respond. We seemed to sort of let it go and you established precedent that it was okay. And when you do that a couple of times, they were testing this system out three, four, five years ago and the alumni associations didn't stand up and speak out against it. And so now, unfortunately, they're doing it brazenly. It's like, this is a path that we've gone down. If you ask me in an election year, I think, you know, when you think about what our platform should be, sure you want to know who the president is, sure you want to know who members of Congress are. But at the end of the day, in these states, these state legislators need to know that they're going to be held accountable by our groups, by HVCU alumni, if they make decisions for us, as if, I mean, you want to talk about the height of disrespect, the idea that you all know best for us and you know what leaders we should have. Some will say, well, you know, some of the schools haven't done a great job selecting leaders. Well, that's the case with a lot of the majority institutions too. They too have their problems. But it has these institutions are for us and by us.  So if you ask me in this big election year, again, the presidential election is everyone, everyone's focused on that. But the people who really impact your lives are local elected officials and state officials. And if I'm in a state, and I know you're specifically talking about what North Carolina has just recently done, and I think the HVCU alumni need to take that to the election box, or in this case, if you're mailing in, you need to hold these folks accountable for making these decisions. If you don't make it an issue, then it's not going to be an issue, and they're going to continue doing it.


The one thing you don't want to do is leave a whole bunch of them in one of these little tiny cells to try and fight for nutrition and fight for space. If you have too many in there, their roots, you know, they're just going to become weak and end up being spindly little seedlings that probably won't transplant very good. So you want to make sure that you keep up on that thinning process throughout the next few weeks.


Welcome to part 2 of machine code generation. So, in the part 1, part 1 of the lecture, we considered the main issues in machine code generation and I also gave you a sample of generated code. So, today we will continue looking at the samples and other material. So, this is the sample code that we saw last time.  The activation record for both the functions f 1 and f 2 are shown here. So, the activation record takes 48 bytes for f 1 and 76 bytes for f 2 because, we do not have any jump subroutine instruction, we really store the return address and then you know jump to the subroutine itself. So, because of that we require a slot in the activation record of the callee to store the return address as well. Here is the code that is generated by the machine code for function f 1. So, the code for action code segment 1 you know so that is here. Now, it is time to call the function f 2. So, to begin with we store the return address. So, remember there is no need to you know allocate activation records it is static allocation. So, the activation records have already been set up in memory and they are permanent. So, the activation record for f 1 spans the addresses 600 to 647 and the activation record for f 2 spans the addresses from 648 to 723. So, this is just a replica of this picture return address data da variable x variable y. So, you can see that and similarly this as well. So, before we jump to the subroutine the return address, which is this particular address of action code segment 2 that is moved on actually it is moved into location 648, which is the slot to store the return address in the activation record of f 2. Then the parameter is actually pushed or moved into location 652.  So, when we go to function f 2 we execute the code and now use the return address, which is given on the activation record at location 648. So, indirect jump will take us back to this particular address 264. So, here we execute action code segment 2 and then halt. So, this is the scheme when we do not have any jump subroutine instruction and it is static allocation. So, let us see what happens with jump subroutine instruction. The address code is 3 address code is the same it is just that this activation record does not have a slot for return address here. So, the number of bytes required is 44 here and 72 here what about the code itself the machine code now is slightly simpler. So, this would be you know action code segment 1 then. So, here suppose we and I have also changed a little bit in the f 2. So, there is no parameter either just to simplify the code. So, here we execute action code segment 1 and now since the return address is automatically stored on the hardware stack when we execute the jump subroutine instruction there is no reason to store it. So, we execute j s r 400 which automatically stores the address 248 on the hardware stack. So, we go to this particular address start executing it and then we say return it automatically picks up the return address from the stack and returns to this particular address 248. Activation record format remains the same except that there is no space for the return address otherwise there is not much change. Now, the other variety is dynamic allocation and no jump subroutine instruction.  So, the return address is stored here because we do not have a jump subroutine instruction and there is local data and other information all the other temporaries etcetera stored here. So, we require 68 bytes here and 96 bytes here. So, there is also a parameter in the function f 2. Now, we need to set up activation records when we call functions. So, we must initialize the stack pointer say some value 800 that is where the stack may begin. So, let us move that into the stack pointer. So, that it is a valid address. So, this is the address at which the stack begins. Now, the code for f 1 it has code for the action code segment 1. Now, this part is the allocation of the activation record add 96 to sp. So, that means, we increment the stack pointer by 96. So, thereby allocating you know 96 bytes for the activation record of f 2. So, now, we move 258 which is the return address to the first location on the stack pointer move the parameter to the next location and then execute a jump. So, except for this part the rest of it is the same the of course. So, there is a minor difference we use the stack pointer with indirect addressing in order to access the information on the activation record or put something into the activation record. So, all the information is accessed through sp. So, that is why the indirect addressing scheme is required. Once we jump to 300 that is the code for f 2. So, this has code for the action code segment 3. Now, there is a recursive call. So, the size of the activation record here the size of the activation record for f 2 was 96 the size of the activation record here for f 1 is 68. So, 68 is added to sp thereby allocating the activation record for f 1 on the stack. The rest of it is similar the return address and there is no parameter. So, jump to 200. So, the again you know the action would come to this point when the code executes. So, once the code completes it the there is a return using the sp. So, indirect sp. So, that is precisely what brings us to you know the return point. So, that is 258 right. So, that is it this is the point. So, we when we execute sorry not this point here. So, from here we the return address would be 364. So, 364 is the place where we return after we call to f 1 is completed. So, at this point we must deallocate the activation record. So, subtract 68 from sp. So, that brings us back to the original position. Now, the code for segment 4 is you know present then there is another recursive call. So, please see that there is a recursive call to f 2 again. So, again the stack allocation of the activation record happens return address is pushed on to the stack. The parameter is also pushed on to the activation record and a jump to 300 that is this code itself happens. So, this is how the recursive call you know takes place. So, the point I am trying to make is that there is no difference between the recursive call and non recursive call. The activation records are created in both cases dynamically. Rest of it is simple you know whenever there is a return from the subroutine it comes back and you know and so on and so forth. Finally, dynamic allocation with jump subroutine instruction the only difference is there is no return you know slot there is no slot to store the return second address. Rest of it is the same. So, we have to allocate the activation record now the size is slightly less and then we jump subroutine to 290 that is the address of f 2. So, this implies the return address is stored on the hardware stack and then the control goes here. So, even for the you know for example, the recursive call to f 1 it just allocates the activation record and jumps to 200 using the J S R instruction. Similarly, when we have a recursive call to f 2 we again allocate another activation record move the parameter and then jump to the beginning of f 2 it is using the J S R instruction. So, J S R return automatically takes care of you know returning to this particular address following the place where we called because the return address is stored on the activation in the hardware stack. So, that is about the instructions which are really going to be generated for various types of intermediate code. So, now let us begin our discussion on the code generator itself. What is the design that we adopt for a code generator and there are at least two simple code generators that we are going to discuss. The scheme A for example, it treats each quadruple as a macro. So, if you take the quadruple A equal to B plus C as a generic quadruple plus need not stand for the plus operator it could be plus minus star slash any one of these. So, the code generated would be either this or this. So, the point is every time we want to do an operation on an operand we will load it into a register do the operation store it back into that memory location. So, that no registers are resumed to be in use in any particular translation scheme.  So, after the code is executed both R 1 and R 2 are free.  So, the advantage of doing this is we do not have to perform any register location and we can simply write a macro for each one of the quadruples the macro will be expanded by and whenever we instead of you know the code for A equal to B plus C will be just that call to the macro corresponding to the quadruple. So, the final output would be a sequence of macro calls it should be expanded by the macro assembler and the machine code would be generated. The difficulty here is inefficient code repeated you know load store of registers. So, every time since we load the value from the register to the location rather load the register from the location it implies load and again and again. So, we are not you reusing the value which is already present in a register in some other quadruple. So, this is very inefficient and but very simple to implement. So, if we are looking at a prototype compiler then the first cut code generator could be based on macro. So, and slowly gradually as the code is the compiler is debugged you know we could start designing a better code generator. Then scheme B scheme B is slightly more complicated. So, here we track the values which are present in registers and try to reuse them. So, the basic rule is if any off-rand is already in a register take advantage of it. So, this also makes the code generator a little more complicated. We require to track the value of the registers when and make sure that we know when it changes values and so on and so forth. For that purpose we use register descriptors and address descriptors. So, these are two data structures that we apply a register descriptor actually tracks register and variable name pairs. So, for each register it says which are the you know variables that contain the value at the same time you know. So, if a single variable can be present in different registers then that is also possible right. So, many registers can contain the value of a single variable or a single register can contain the values of multiple variables. We try to avoid the first situation that is many registers containing the same value of the same variable make by making sure that we use the same register whenever there is a need to use it. So, the other situation is what we need to worry about that is a single register containing values of multiple names you know if they are all copies. So, we need to track this and make sure that whenever that variable name occurs the same register is used. So, pairs of this kind are stored in the register descriptor for register and what are the variable names that it can correspond to. In some way the inverse of that would be with a variable name what are the locations corresponding to it. So, it is possible that a single variable name may have its value in multiple locations it will be definitely in memory, but it may also be in register and if it is a stack machine it may be on the stack as well. So, it is necessary to track such pairs as well and in the process of code generation these two data structures would be repeatedly updated. So, the basic principle is to leave the computed result in the register as long as possible. So, what does that mean. So, we try to use a different register whenever we need a an extra register and if there are no registers only then we see now it is time to empty a register and store its value back in the memory location corresponding to it. So, every variable has what is known as a home location corresponding to it. So, the home location will be updated whenever the register corresponding to it cannot be allowed to keep the value anymore. The other point when we need to empty a register would be the end of a basic block. So, I already mentioned that the register will have to be emptied when the register is needed for another computation, but at the end of the basic block also we need to empty the register. The reason is our code generation scheme is a basic block oriented scheme. It does not look at any other basic block when it is generating code for a particular basic block. So, at the end of the basic block it stores all the registers back into their home locations and then you know make sure that the register set is vacant empty for the next basic block. So, at the end of the basic block do we have to store every you know register into its home location. In other words do we have to generate instructions to store every register into its home location not necessarily. For example, we use the concept of liveness to help us in this in making this decision. We will discuss liveness in great detail later during data flow analysis, but for a basic block the definition is very simple. A variable is live at a point if it is used later and of course, if it is used in other basic blocks then also it is live, but we will not be bothered about such a usage because it requires data flow analysis to track such usage. But suppose we know that data flow analysis has been performed liveness analysis has also been performed. So, at the end of the basic block we know which variables are going to be used in other basic blocks and which variables may will not be used definitely in other basic blocks. If this information is known to us I am now talking about something which we have not yet discussed liveness is available by data flow analysis that is the assumption here. Then we can make a sophisticated decision. So, on exit from a basic block we need to store only those live variables that are not in their memory locations already. So, if you look at the address descriptor it will tell you where the variable has its value is it in the home location also or is it just in the register. If it is only in the register then you know then we need to generate an instruction to copy the register value to its home location, but if it is also in its home location then we do not have to generate such an instruction that is one. The second is what if the variable is not live at all if the variable is not live then it will not be used further. So, whether it is in the register or home location it really does not matter. So, we do not have to generate any instruction to store it back into their home location. If the liveness information is not known to us then we must assume that all variables are live at all times. So, this is the you know most pessimistic assumption which leads to bad code, but under certain circumstances we may have to live with this assumption. Let us take an example here is a quadruple a equal to b plus c as I said plus is a generic operator. If b and c are in registers in say in R 1 and R 2. So, b is in R 1 c is in R 2. So, now we can possibly generate an instruction add R 2 comma R 1 which brings the result into R 1 cost of course, is 1 because it uses only registers when is this legal. According to the scheme that we are using we need to keep the value of a variable in a register as long as possible. So, this scheme this instruction is legal only if b is not live after the statement. So, b is in R 1 and now we are over writing b rather R 1. So, the value available in R 1 is lost. If the value of R 1 is going to be used later we would possibly have not you know updated its home location. So, generating this instruction when R 1 b is still live rather then it would be incorrect this is legal only if b is not live. Otherwise if we are forced to empty the register R 1 we will have to generate an instruction to move the contents of R 1 to the home location of b and then use the register R 1. So, we will see that also a little later. So, this is you know that means we need to check where to generate the rather where to store the result. The second possibility is R 1 contains b, but c is in memory. Well we could simply add c comma R 1. So, generate this instruction cost is slightly higher than the previous one that is cost 2 that is understandable because c is in memory, but the result is in R 1. Again this is legal only if b is not live after the statement. So, that is another thing that we need to keep in mind. Third possibility is we load c into R 2 then add R 2 comma R 1. So, again the cost is even higher and the result is in R 1. Again this is live legal only if b is not live after the statement, but this could be attractive if the value of c is subsequently used. So, it can be now taken from R 2 itself. So, because we have loaded it into R 2. So, the examples were supposed to give you some idea of the complexity involved in code generation that is we need to check the address and register descriptors at various points in time. We also require some extra information called the next use information to make an informed decision about which register to use etcetera. So, next use information is used both in code generation and our local register location which we are going to discuss very soon. So, what is the definition of the next use information? So, the next use of a in quadruple i is j. So, in other words we have a quadruple i which defines a value for a. So, there is an assignment a equal to something and then we have I know several other quadruples before quadruple j which uses a. The most important point here is control flows from i to j, but there are no more assignments to a. So, the value of a is not changed then the value computed here is used in this quadruple. So, we say that next use of a in quadruple i is j. So, we have to compute the next use information we will see how to use it little later. Obviously, we need to check for this condition and then attach information about the next use of i to the quadruple next use of a to the quadruple i. So, in computing next use we assume that on exit from the basic block all temporaries are considered non-live. So, this is a correct decision because we do not reuse temporaries across basic blocks we generate new temporaries whenever necessary. All programmer defined variables and non-temporary variables are supposed to be live. So, we did not perform any lameness analysis data flow analysis and that is the reason why we are assuming this. So, then each procedure and our function call is supposed to start a new basic block. I already discussed this in the you know basic block discussion lecture on basic blocks. So, otherwise we have a problem of killing all the quadruples in the basic block. So, this is best you know sent to a different basic block. Next use is computed in a backwards scan on the quadruples in a basic block starting from the end. I will give you an example to explain the procedure and of course, the next use information is stored in the symbol table. So, for that particular variable the next use information is also attached. So, here is the example for computing next use. So, here this is a simple basic block it is the same dot product example. It is just that the quadruples some of them are in a different shape prod equal to prod T 6 instead of you know some temporary equal to prod plus T 6 and temporary equal to prod rather prod equal to temporary and similarly, here. So, this is slightly already improved version in other words local optimization has been applied and some code rewriting has also been done to take care of such possibilities. So, we start from here this quadruple it uses i right there is no writing into i it only reads i. So, along with the variable i in the symbol table we attach the information the first field says live or not live the second field says what is the last use of that variable and the third field says either next use and a number of the quadruple or says no next use. So, in this case the variable i is a programmer defined variable. So, it is live even after exit from the basic block the last use of the variable i is 11 self quadruple and then there is no next use of the variable because the basic block ends here. So, when then we go to the previous quadruple i equal to i plus 1. So, here i is used on the left hand side and also the right hand side. So, when we say i is live that means it must be used it is being assigned here and the assigned value must be used later it is indeed being used later. So, the variable is live this can be inferred very easily by looking at the symbol table for i we are updating it. So, i was actually live and of course, it will be live even now because it is a programmer defined variable and the last use was 11. So, if the last use information was 0 then this would have been the first definition of i, but the last use information says 11. So, i value which is defined here will be used in 11. So, that is why this is the variable is live the last use is 10. So, that is the self quadruple right hand side and then the next use is 11 that is this quadruple. So, we have updated the information of this. So, how did we say a new 11 that was picked up from a new 11 and copied into this place. Then this quadruple I will explain just this to show you the procedure prod equal to prod plus t 6. So, there are two variables prod and t 6 for prod it is live because it is a programmer defined variable which is defined here and then you know possibly use later. The last use of the variable is 9. So, that is the right hand side part which is here and there is no next use for the variable within the basic block because this is the last definition and it is not used again. The variable t 6 is a temporary. So, this is the first use of that variable and there is no next use again. So, this is not live and then from the you know when I say first use when we are in the scanning process it is not live because there are no more uses here. Last use is 9 that is this basic block and there is no next use of t 6 within the basic block itself. So, this continues. So, let us look at this quadruple at address 5 it is t 3 equal to t 2 bracket t 1 indexed assignment. So, t 3 is now you know is defined here right. So, then you know it is the liveness ends here right because it is being defined here and then the last use is 0 because it is defined here right and then the next use is 8 that is because t 3 is being used here. So, from this definition the usage is up to this point. So, that is the next use 8 sorry that is the next use 8 correct. So, we say last use is 0 because t 3 is defined here. So, the whatever value it had is destroyed whereas, in this case there was a usage here that is why the last use was set as 9. So, whenever it is a defined definition t c is equal to t 3 star t 5 l u will be 0. So, here also then here also and here also here as well here as well. The next use information tells you where that particular variable will be used. So, t 2 and t 1. So, t 2 is not live because you know it is not used anymore and then last use was 5. So, that is this itself and then there is no next use for t 2. Similarly, for t 1 it is not live last use was self quadruple, but there is a next use in quadruple 7. So, that is this use. So, this can be picked up from the symbol table for t 1 itself. So, the symbol table for t 1 here says last use 7. So, that would have been picked up and copied here. So, this is the way in which we compute the next use information by doing a backward traversal of the quadruple array. So, now we have the next use information already computed. Now, we are ready to discuss the algorithm for code generation. So, we as I already mentioned we deal with one basic block at a time and we assume that there is no global register location. There is a local register location which is called getreg. We are going to discuss that in a few more minutes. So, here is the code generation algorithm for each quadruple a equal to b of c do the following. First of all we need to find a location to perform the operation b of c say that is l, but how do we find l? This is a return by the function call getreg. It could be a register or it could be a memory location, but a preference is always given to a register. We will see details of getreg later. So, let us assume that a location either a register or a memory location has been returned by getreg and that is where the operation b of c will have to be performed.  If we look up the address descriptor for b it will tell us where b is. To begin with when we generate code for the first quadruple in the basic block all these descriptors are empty. So, the variable b will not even be found anywhere you know it will be only in the home location that is the only thing we can say. So, always at the beginning all the variables will be in their home locations and all the registers would be empty, but as we go on generating code very soon we will see that some of the variables will be found in registers. So, we find the place b prime or the location b prime where b is present and obviously, we prefer the register for b prime if it is already available both in memory and register. Suppose b prime is not in l. So, l is the place where we perform b of c. So, we generate the instruction lower b prime comma l. So, it moves the contents of b prime to the location l and gets it ready to perform the operation of along with another variable c. The same thing will have to be done to c as well. So, we need to answer the question where is c we find the place c prime using the address descriptor for c and the same rule holds prefer a register if it is available. Now, we are ready to generate the instruction of c prime comma l. So, c prime is the place where c is present l is the place where b is present if it was not present we have moved it and now the location l will also have the result after the execution of this instruction. So, that is the translation which is generated for a equal to b of c, but after this we are still not you know done anything to the descriptors. So, the descriptors for l and a must be updated. So, if l was a register we have to update the register descriptor if l was a location we must update the address descriptor the same holds for a as well. So, remember we there a is not in the picture anywhere here we have not generated any instruction to move the result into a not yet that is why this updating the register descriptor for a becomes very important assume that l is a register most of the time it is. So, let us assume that l is a register now some register r contains the value at execution time after this instruction is executed. So, that is the value of a. So, we are going to associate r with a in both the descriptors in the register descriptor we will say r and a are associated and in the address descriptor we will say a and r are associated. So, now remember a is home location is not updated it is now just present in a register. So, we must keep this in mind when we want to empty the register we will have to move the generate an instruction to move the value of the register into the home location for a. The second updating that we need to do or the book keeping that we need to do is if b r c b and r c have no next uses. So, next use is available in the symbol table. So, if there is no next use that means we must update the descriptors to reflect this information. So that there is no need to you know keep the values of b and c in the registers that they are supposed to correspond to. So, we can discard that value. So, what is left is to discuss the function get reg. So, it finds the location l for computing a equal to b of c first of possibility. If b is in a register say r and r holds no other names this is important. If r corresponds to many variables then we cannot return the register r because we would be destroying more than one variable. So, we do not do that. Secondly b has no next use and b is not live after the basic block. So that means the value of b will be used in this instruction and then it is useless. So, in such a case if b is available in a register we can very happily use that register to store the final result also this is the best possible situation. So, return r suppose this is not possible failing one return an empty register if available. So, we will have a stack of rather a set of registers available. So, return one of the empty registers, but if we have used up all the registers then two is also not possible. So, failing two if a has a next use in the block that means a will be used again or if b of c needs a register. So, you cannot do without this operation of cannot be done without a register for example, op is an indexing operator. So, we have a equal to b square bracket c. So, in such a case the op is an indexing operator which can be executed only using a register. So, in both cases we must compulsorily assign a register to l and there are no registers which are free. So, we must use a heuristic to find an occupied register and then empty it. So, what possibility is exist in empty you know in finding an occupied register. One possibility is a register whose contents are referenced farthest in the future. So, the basic block has many instructions and at a particular point you know the register that we want to free may be used only much much later. So, we can say may be there will be a free register at that time. So, let us not worry too much and free that register. So, this is a heuristic to find an occupied register. Another possible heuristic is the number of next uses is the smallest. So, look at all the registers see which one has the smallest number of next uses smallest number of next uses. So, then you know we can release that particular register which has the smallest number of next uses. So, that means if we release the register which has the smallest number of next uses the number of loads for that particular variable will be kind of minimum. So, these are the two popular heuristics which are used in local register location. So, we have found a register now, but it contains some valid value. So, we must spill it by generating an instruction move r comma mem where mem is the home location for the variable in r. So, and that variable obviously should not be already available in mem if it is then there is no need to generate this instruction. Then obviously, we must update the register and address descriptors to say that this value which was corresponding to this r is you know now will hold a different variable and so on and so forth. If a is not used in the block or no suitable register can be found then return a memory location for l. So, this is possible provided the architecture permits you know memories law operands also as instructions. In the case of risk architectures you cannot have any other instruction except load in store with memory operands. So, we must compulsorily use a register when we use when we whatever operation is to be performed. If there is not the case then we can return a memory location. Here is a simple example of how to generate code for a small basic block. The variables t u and v are temporaries they are not live at the end of the basic block. W is a programmer defined variable or non-temporary and it is live at the end of the basic blocks and we have two registers available to us. So, at the end of the basic block we must store w back into its home location. So, that and we can ignore the values of t u and v which are present in registers at the end of the basic block. The first quadruple is t equal to a star b the basic block you know we are just at the beginning of the basic block. So, of both the registers are free they do not contain any value. So, obviously the only possibility is to generate a return the register of R 0 that is an empty register because neither a nor b are in registers. So, because we return R 0 and it does not contain a we generate instruction load a comma R 0 then mult b comma R 0 assuming that you know memory instructions are possible. Now, the register and address descriptors apparently read R 0 contains t and t in R 0 right. So, t is in R 0 and R 0 contains t the next instruction is u equal to a plus c now we destroyed a right. So, here a was loaded into register R 0, but then we destroyed R 0 sorry not a now we need to load it again from the memory location corresponding to a to the register R 1 because R 0 which contain t has a next use it will be used later. So, we do not want to release R 0 and there is an empty register. So, we will release R 1 a was not present in any register neither was c. So, we released R 1 since a was not present in R 1 we moved a into R 1 by this instruction this was generated and then add c comma R 1 that is the operation. Now, the descriptors read as visual R 0 contains t and t in R 0 from the previous instruction and then now R 1 contains u and u in R 1. So, now we have run out of registers no more let us see what happens v equal to t minus u fortunately t is in a register right and t is not live at the end of the basic block it is a temporary. So, we can use the register of t as the register for the result. So, that is R 0.  So, this is the instruction which is generated.  So, this is what it reads the last instruction in the basic block is w equal to v star u. So, v is in a register that is R 0 u is in the other register that is R 1. So, that information is obtained from the descriptors automatically. So, this address descriptor tells us that it. So, happens that both v and u can be dispensed at the end of the basic block. So, we do not need those registers they are not live at all. So, we can the register of v can be used to store the value of w. So, mult R 1 comma R 0 is generated. Now, R 0 will contain the result and it is assigned the it is actually going to contain the value of w. So, the descriptors now reflect that as well. At the end of the basic block since w is live we must generate an instruction to store R 0 into its home location w. So, that is restored. So, that ends the basic block code generation. So, this is how we generate code. So, let us see better schemes of code generation now. The basic block code generation that we discussed does not guarantee any optimality. So, it simply says whenever something is available in a register let us try to keep it in the same register as long as possible. So, there is some reuse, but the literature also explains you know carries descriptions of what are known as optimal algorithms. So, we are going to discuss two of these one is the Sethe-Ulman algorithm which is somewhat restricted and other is the dynamic programming based algorithm which is more general. So, let us begin our discussion on the Sethe-Ulman algorithm. The Sethe-Ulman algorithm generates the shortest sequence of instructions for a particular machine model and it possibly provably optimal. So, it is with respect to the length of the sequence. So, the optimality is with respect to the number of instructions that the algorithm generates for a particular program. Again, this is at the basic block level and the basic block is assumed to be an expression tree. So, if it is a DAG it does not work. So, we need to break the DAG into trees and then apply the Sethe-Ulman algorithm on each tree separately. So, what is the machine model that is used here? The machine model says all the computations are carried out and registers. So, in other words computation itself cannot use any registers, but there are some exceptions. So, instructions are always of the form op r comma r op m comma r. So, this is the these are the only two possibilities as far as the instructions are concerned. So, but the major or most of the major computations are all carried out in registers. So, this op can only be a load or store. So, we cannot really have a plus or minus or star as this particular op it has to be this op. So, we will have to do that. It always computes the left sub tree into a register and then reuses it immediately. So, this is very important the left sub tree must be computed into a register and then reused immediately. This is required even for the proof of correctness and optimality etcetera etcetera. So, we will see how to you know liberal make the instruction formats a little more liberal later, but in this case they must be of the form op r comma r op m comma r. There are two phases in this particular algorithm. The first phase is called the labeling phase and the second phase is called as the code generation phase. What is the labeling phase? The labeling phase is very important it tries to it computes the minimum number of registers required to evaluate the tree with no intermediate stores to memory. So, let me show you a picture. So, if you take this particular tree expression tree right the labeling algorithm computes a number called I know which with value 2 as the min-reg value of this particular tree. The implication is you require 2 and definitely not more or not less than 2 registers to evaluate this tree and how there will be no stores into memory locations at any one of the descendants of this particular tree every result will be stored in a register itself. So, this is the significance of this particular labeling algorithm. So, what does it say? It says if n is the left most child of its parent then label of that node is 1 otherwise label is 0 and for internal nodes it takes if i 1 is not equal to l 1 is not equal to l 2 then label of n is the max of l 1 comma l 2 and if they are equal it simply increments it by 1.  Let me explain the algorithm with this example. So, we have this tree. So, for this parent this is the left most leaf. So, this becomes a 1 this becomes a 0 similarly this is the left most child.  So, these are the leaves for this parent this l 1 is not equal to l 2. So, the max is 1 similarly for this it is 1 and for this also it is 1 for this parent l 1 equal to l 2. So, this is l 1 plus 1. So, this is 2 and for this parent again l 1 not equal to l 2. So, this is max. So, this is 2. So, 2 is the Mindrack value. So, let us see how the code really evaluates this tree. So, this is very simple I can load this value into a register. So, it value goes into a goes into r 0 that is the instruction and then this can be in memory. So, I can say op of this r 0 comma b then the result will be in r 0. Similarly, this result will be computed into r 1. Now, I have result in r 0 and r 1 and the final result of n 3 will be in r 0 I can compute this in r 0.   So, this result can be computed into r 0 by op r 0 comma r 1. So, this is the way I can compute the tree into a register without intermediate stores into memory locations with just two registers. We will stop here and continue the lecture next time. Thank you.