runtime variables storage and access of variables
play

Runtime - Variables Storage and Access of Variables Three types of - PowerPoint PPT Presentation

Todays Topic Runtime - Variables Storage and Access of Variables Three types of data memory (variables) Globals , locals , and dynamic/heap (new) Focus on first two for now How does compiler manage allocation of, reading of, and


  1. Today’s Topic Runtime - Variables

  2. Storage and Access of Variables Three types of data memory (variables) • Globals , locals , and dynamic/heap (new) • Focus on first two for now • How does compiler manage allocation of, reading of, and storing into variables? Continue with base + offset base + offset strategy • Scope vars allocated in-order on Sparc • Oberon scope � Sparc base pointer (register) • Oberon var decl � offset from base pointer • Offset is sum of sizes of preceding variables Modelling of Oberon, compiler, Sparc memory

  3. Global Variables 0x00000000 gp � � gp VAR z : INTEGER; VAR w : REAL; Static PROC… split ... w + z… END; (* code *) (global) VAR A : ARRAY 5 OF INTEGER; � pc � pc Instructions (code) • Compiler symbol table & scopes? • Sparc Memory? • What is address of: Dynamic (Heap) ?? � � z z ?? sp � � sp w w LIFO A A (Stack) 0x07FFFFFF

  4. Global Variables Rewrite as C code and compile “cc –S” .seg "data" VAR z : INTEGER; VAR w : REAL; VAR z : INTEGER; VAR w : REAL; PROC… split ... w + z… END; .common _z _z, 0x4,"data" PROC… split ... w + z… END; VAR A : ARRAY 5 OF INTEGER; VAR A : ARRAY 5 OF INTEGER; .common _w _w, 0x4,"data" ... set _w _w,%o0 ; set address ld [%o0],%o0 ; load from address set _z _z,%o1 ld [%o1],%o1 More consistent with handling of locals: set _z _z, %g7 ; base is zero offset from first global … ld [%g7+4],%o0 ; true base + offset style ld [%g7+0],%o1

  5. Local Vars – hard due to recursion PROCEDURE quicksort( VAR A A : ARRAY OF INTEGER; sp � � sp Locals & temps low, high low high : INTEGER) VAR mid mid : INTEGER; State w/sv’d fp/sp/pc BEGIN � sp � Params & return sp IF low < high THEN fp � � mid fp (locals & temps) mid := split(A, low, high); Locals & temps quicksort(A, low, mid); other registers State w/sv’d fp/sp/pc (state) quicksort(A, mid+1, high); old sp Params & return END; old fp return pc END quicksort; return value Locals & temps high low State w/sv’d fp/sp/pc fp � � A fp What is the address of Params & return Call frame A A 0x07FFFFFF (bottom) low low Call stack with 3 frames high high mid mid

  6. Design Considerations “Code to specification” to get good interface • Approach top-down from use, incremental (start with INTEGER) • Implies “base” and “offset” methods for STO

  7. Design Considerations “Code to specification” to get good interface • Approach top-down from use, incremental (start with INTEGER) • Implies “base” and “offset” methods for STO Machine details deserve their own class • Machine architecture could change, use differently • A façade class on range of machine details – Register classes, allocation; machine instructions…

  8. Design Considerations “Code to specification” to get good interface • Approach top-down from use, incremental (start with INTEGER) • Implies “base” and “offset” methods for STO Machine details deserve their own class • Machine architecture could change, use differently • A façade class on range of machine details – Register classes, allocation; machine instructions… String base() { // ExprSTO if (this.isLocal()) { // “Local” property inherited from scope return Machine.localBase(); } else if … } // Now what about offset()?

  9. Design Considerations “Code to specification” to get good interface • Approach top-down from use, incremental (start with INTEGER) • Implies “base” and “offset” methods for STO Machine details deserve their own class • Machine architecture could change, use differently • A façade class on range of machine details – Register classes, allocation; machine instructions… String base() { // ExprSTO if (this.isLocal()) { // “Local” property inherited from scope return Machine.localBase(); } else if … } // Now what about offset()? int size() { // ExprSTO return this.type().size(); }

  10. Design Considerations “Code to specification” to get good interface • Approach top-down from use, incremental (start with INTEGER) • Implies “base” and “offset” methods for STO Machine details deserve their own class • Machine architecture could change, use differently • A façade class on range of machine details – Register classes, allocation; machine instructions… String base() { // ExprSTO if (this.isLocal()) { // “Local” property inherited from scope return Machine.localBase(); } else if … } // Now what about offset()? int size() { // ExprSTO return this.type().size(); } int size() // IntegerType { return Machine.intSize(); } // rep bool as int, BTW

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend