Compiler Design Spring 2018
|
|
- Cecil Taylor
- 5 years ago
- Views:
Transcription
1 Compiler Design Spring Templates (for code generation) 2.4 Template-based code generator Thomas R. Gross Computer Science Department ETH Zurich, Switzerland 26
2 2.3 Templates Templates decide how code generator behaves Quality of code Decide how each kind of IR node is handled Simple (for now) Minimal solution (for now) Next: Produce a catalogue of templates 27
3 Ground rules Set of rules to guide template design Reflect machine properties and/or desire to keep CG simple You could define your own rules Rules for now: 1. All templates leave result in a register Exception: ASSIGN nodes have no return value 2. All operands must be in a register Lots of memory traffic for 32-bit x86 Other options: (1) At least one operand must be in a register (2) At most one operand can be in memory 28
4 Data structures reg_pool: Pool (list) of free registers Methods get_register() free_register(register register) 29
5 2.3.1 CONST Value must be put into reg Template value v // bookkeeping // get a new register reg = reg_pool.getregister() // code generation emit movl $0x, reg // no more bookkeping return reg; 0x : hexadecimal representation of v 30
6 Potential problems No register in reg_pool Not today Value v does not fit into movl instruction v requires more than 32 bits v exceeds limit of immediate in instruction Options Delegate problem to assembler Can break v into pieces, shift/assembly in register Allocate entry in.data segment, load from memory Require that IR contains only constants that fit into movl Front-end must deal with problem Homework #1: Assume only values that fit 31
7 2.3.2 VAR Recall: VAR node on the left hand side of ASSIGN: delivers an address VAR node on the right hand side of ASSIGN (anywhere in tree): delivers a value Value is kept in a memory location (known to the compiler) Later: Other storage classes 32
8 VAR (at RHS) Value must be put into register Similar to CONST node Template // bookkeeping // get a new register reg = reg_pool.getregister() // code generation emit movl name, reg // name identifies location // no more bookkeping return reg; 33
9 Comment Assume name maps to a known location Various addressing modes exist For now: Simple scheme is sufficient 34
10 VAR (at LHS) Must deliver an address For now: Enough to deliver a name Template: Let parent use the name Assume we have a method that returns the name for a VAR node Only user so far: ASSIGN 35
11 37
12 OPERATOR Result must be put into reg Assume left and right evaluated into a register register reg_left OP + register reg_right reg_right reg_left Reuse one of the registers to hold result left right Take reg_right Free other register No longer needed: reg_left 38
13 OPERATOR Template // bookkeeping // code generation emit OP[Operator].txt reg_left, reg_right // bookkeeping // free reg_left reg_pool.free_register(reg_left) // no more bookkeping return reg_right; Could ask for a new register Benefit: Keeps around values for longer Not really an option with 32-bit x86 (limited # of registers) 39
14 2.3.4 ASSIGN Value must be put into reg Left hand side: Destination for a (named) variable Memory location of variable A VAR A = register reg_right right We can get the variable name Use variable name in assembly instruction Right hand side: result in register No return value 40
15 2.3.4 ASSIGN Template // preparation // code generation emit movl reg_right, name // bookkeeping // free reg_right reg_pool.free_register(reg_right) // no more bookkeping return null; 41
16 2.4 Putting the CG together Code for children must be generated before code for parents can be generated codegen(node n) { } Start with codegen(root) codegen(node n) Leafnode? Generate code Not leafnode? Visit children In which order? Code for node n 43
17 Skeleton Register codegen(node n) { Register reg_right, reg_left; case (typeof n) { ASSIGN: { reg_right = codegen(n.right_child); // Template } VAR : // Template CONST: //Template OP: } } 45
18 Right child first Register codegen(node n) { } Register reg_right, reg_left; case (typeof n) { } ASSIGN: { reg_right = codegen(n.right_child); // Template } VAR : // Template CONST: //Template OP: { reg_right = codegen(n.right_child); reg_left = codegen(n.left_child); // Template return reg_right; } 46
19 47
20 48
21 How does it work? Examples a = 1 a = b + c x = b + c + d + e 50
22 52
23 56
24 Compiler Design Spring Dynamic programming code generation Thomas R. Gross Computer Science Department ETH Zurich, Switzerland 1
25 Motivation: Recall right child first Register codegen(node n) { } register reg_right, reg_left; case (typeof n) { ASSIGN: { reg_right = codegen(n.right_child); // Template } VAR : // Template CONST: //Template OP: { reg_right = codegen(n.right_child); reg_left = codegen(n.left_child); // Template return reg_right; } } 2
26 Discussion We decided to Use reg_right for the result of an operation We decided to visit the right subtree first We could have decided to Visit the left subtree first (Use reg_left for the result of an operation won t show that here) 8
27 Left child first Register codegen(node n) { } register reg_right, reg_left; case (typeof n) { ASSIGN: { reg_right = codegen(n.right_child); // Template } VAR : // Template CONST: //Template OP: { reg_left = codegen(n.left_child); reg_right = codegen(n.right_child); // Template return reg_right; } } 9
28 How does it work (left-first) Example a = b + c + d + e 10
29 11
30 12
31 a = b + c + d + e reg_pool = {%eax,%ebx,%ecx,%edx} 14
32 Discussion Using a smaller number of registers is better than using a larger number of registers Right child first: 2 registers (%eax, %ebx) Left child first: 4 registers (%eax, %ebx, %ecx, %edx) Should we forget about left child first? 16
33 No evaluation order is the best Find an assignment statement (with only + as operand and four operands on the right hand side) such that for this statement the visit left child first strategy delivers a better result (smaller number of registers is needed) than the visit right child first strategy. You can jump right to the tree if you wish. 17
34 No evaluation order is the best Example x = (((z + w) + y) + v) 18
35 No evaluation order is the best Left child first = x * + v + y z w 19
36 20
37 No evaluation order is the best Right child first = x * + v + y z w 21
38 No evaluation order is the best No strategy is best for all possible trees Decide for each node how children should be evaluated Idea: 2-step approach Step 1: Determine strategy Visit node Determine which order is best (uses the smallest number of registers) Record order (right first or left first) Step 2: Generate code Visit node Look at result from first step to fix evaluation order 24
39 Dynamic programming code generation Step 1 must determine both the number of registers needed and the evaluation order need: number of registers right_first: boolean (true/false) If no difference, favor right first We must make some assumptions 25
40 Simplifications (in machine model) Assumptions All registers are equal All operations deliver result into a register All operands/results require a single register No optimizations (reuse of operands) Real machines do not always meet these assumptions Some offer new opportunities Example: Take one operand from memory (later) 26
41 2.5 Dynamic programming code generation Step 1 must determine both the number of registers needed and the evaluation order need: number of registers right_first: boolean (true/false) If no difference, favor right first Four kinds of nodes to consider VAR: need = 1 CONST: need = 1 ASSIGN: need determined by right child OPERATOR: see next slide 27
42 28
43 Key idea To get smallest number of registers: Evaluate larger subtree (expression) first Keep result in register Recall assumptions All registers created equally 29
44 OPERATOR node Case 1: right_child.need > left_child.need right_first = need = Case 2: right_child.need < left_child.need right_first = need = Case 3: right_child.need == left_child.need right_first = need = 30
45 OPERATOR node Case 1: right_child.need > left_child.need right_first = true need = right_child.need Case 2: right_child.need < left_child.need right_first = false need = left_child.need Case 3: right_child.need == left_child.need right_first = true need = right_child.need
46 Big picture Idea: 2-step approach Step 1: Determine strategy Visit node Determine which order is best (uses the smallest number of registers) Record order (right first or left first) Step 2: Generate code Visit node Look at result from first step to fix evaluation order 34
47 Register codegen(node n) { register reg_right, reg_left; case (typeof n) { ASSIGN: { reg_right = codegen(n.right_child); // Template } VAR : // Template CONST: //Template OP: { if (right_first) { reg_right = codegen(n.right_child); reg_left = codegen(n.left_child); } else { // left first reg_left = codegen(n.left_child); reg_right = codegen(n.right_child); } } } // Template return reg_right; } Step 2 35
48 How does it work? Example x = (((a + b) + (h + j)) + d) + (e + (f + g)) 36
49 37
50 What to do if there are not enough registers? Punt it OK for Homework 1 if the compiler exits gracefully Other approaches (not required by Homework 1) Free register Later recompute ( rematerialize ) Temporarily store value in memory ( spill ) usually on stack Restructure the tree Recall that this step may change the semantics 41
51 Restructuring trees : x = b + c + d + e x = b + c + d + e x = b + c + d + e = = x + x + b c + b c d e d e 42
52 43
53 What to do if there are not enough registers? Punt it OK for Homework 1 if the compiler exits gracefully Other approaches (not required by Homework 1) Free register Later recompute ( rematerialize ) Temporarily store value in memory ( spill ) usually on stack Restructure the tree Recall that this step may change the semantics Use special instructions Leave some operand in memory See next slides on code generator improvements 45
54 Improvements to the code generator Idea: Look at target machine and try to find special instructions that cover more than one IR node Produce better code Fewer registers needed Fewer instructions: Shorter code, (possibly) reduced execution time 46
55 Improvement #1 Some machines have an increment operation E.g., inc on 32-bit x86 Example: x = x x 1 Generated code movl 0x1, %rax movl x, %rbx addl %rbx, %rax Improved code movl x, %rax inc %rax 47
56 Implementation Extend template catalogue Subcases for existing template New templates For OPERATOR: Look for CONST child Possible restrictions on value For addition/subtraction: allow 1/-1 For multiplication: maybe allow 1, 2, 4, 8 Limit: your willingness to deal with details 49
57 Improvement #2 Observation: Some machines allow one operand in memory E.g., on x86 the following instructions are available ADD register, memory ADD memory, register (So far we ve used only ADD register, register) Idea: Use special instruction to leave an operand in memory 50
58 Example So far: 2 operands in registers Improved: 1 operand in register + + x + x + 51
59 Example So far: 2 operands in registers Improved: 1 operand in register + + %ebx x + %eax x + %eax movl x, %ebx addl %ebx, %eax addl x, %eax 53
60 Notes Improvements not required by Homework 1 Goals of Homework 1: Correctness + optimal # of registers You can look into optimizations if you want Emit code (instructions) to file Or to a buffer Can be processed before writing to file Add hints to emitted code IR node number Line number that generated IR Begin/end of a source language statement 54
61 Some admin issues Homework 1 Description / fragment out There will be a recitation session today Room: ETF E 1 Starts at 15:00 Discussion of Homework 1 ( Simple code generator ) Discussion of Javali framework 55
CS412/CS413. Introduction to Compilers Tim Teitelbaum. Lecture 21: Generating Pentium Code 10 March 08
CS412/CS413 Introduction to Compilers Tim Teitelbaum Lecture 21: Generating Pentium Code 10 March 08 CS 412/413 Spring 2008 Introduction to Compilers 1 Simple Code Generation Three-address code makes it
More informationMachine Program: Procedure. Zhaoguo Wang
Machine Program: Procedure Zhaoguo Wang Requirements of procedure calls? P() { y = Q(x); y++; 1. Passing control int Q(int i) { int t, z; return z; Requirements of procedure calls? P() { y = Q(x); y++;
More informationReview Questions. 1 The DRAM problem [5 points] Suggest a solution. 2 Big versus Little Endian Addressing [5 points]
Review Questions 1 The DRAM problem [5 points] Suggest a solution 2 Big versus Little Endian Addressing [5 points] Consider the 32-bit hexadecimal number 0x21d3ea7d. 1. What is the binary representation
More informationCompiler Construction D7011E
Compiler Construction D7011E Lecture 8: Introduction to code generation Viktor Leijon Slides largely by Johan Nordlander with material generously provided by Mark P. Jones. 1 What is a Compiler? Compilers
More informationYou may work with a partner on this quiz; both of you must submit your answers.
Instructions: Choose the best answer for each of the following questions. It is possible that several answers are partially correct, but one answer is best. It is also possible that several answers are
More informationWhat is a Compiler? Compiler Construction SMD163. Why Translation is Needed: Know your Target: Lecture 8: Introduction to code generation
Compiler Construction SMD163 Lecture 8: Introduction to code generation Viktor Leijon & Peter Jonsson with slides by Johan Nordlander Contains material generously provided by Mark P. Jones What is a Compiler?
More informationLecture 10 Return-oriented programming. Stephen Checkoway University of Illinois at Chicago Based on slides by Bailey, Brumley, and Miller
Lecture 10 Return-oriented programming Stephen Checkoway University of Illinois at Chicago Based on slides by Bailey, Brumley, and Miller ROP Overview Idea: We forge shellcode out of existing application
More informationWhere we are. Instruction selection. Abstract Assembly. CS 4120 Introduction to Compilers
Where we are CS 420 Introduction to Compilers Andrew Myers Cornell University Lecture 8: Instruction Selection 5 Oct 20 Intermediate code Canonical intermediate code Abstract assembly code Assembly code
More informationCompiler Design Spring 2017
Compiler Design Spring 2017 8.0 Data-Flow Analysis Dr. Zoltán Majó Compiler Group Java HotSpot Virtual Machine Oracle Corporation Admin issues There will be a code review session next week On Thursday
More informationRegister allocation. TDT4205 Lecture 31
1 Register allocation TDT4205 Lecture 31 2 Variables vs. registers TAC has any number of variables Assembly code has to deal with memory and registers Compiler back end must decide how to juggle the contents
More informationCSE 401/M501 Compilers
CSE 401/M501 Compilers x86-64, Running MiniJava, Basic Code Generation and Bootstrapping Hal Perkins Autumn 2018 UW CSE 401/M501 Autumn 2018 M-1 Running MiniJava Programs To run a MiniJava program Space
More informationCompilers and Code Optimization EDOARDO FUSELLA
Compilers and Code Optimization EDOARDO FUSELLA Contents Data memory layout Instruction selection Register allocation Data memory layout Memory Hierarchy Capacity vs access speed Main memory Classes of
More informationFunction Calls COS 217. Reading: Chapter 4 of Programming From the Ground Up (available online from the course Web site)
Function Calls COS 217 Reading: Chapter 4 of Programming From the Ground Up (available online from the course Web site) 1 Goals of Today s Lecture Finishing introduction to assembly language o EFLAGS register
More informationInstruction Selection. Problems. DAG Tiling. Pentium ISA. Example Tiling CS412/CS413. Introduction to Compilers Tim Teitelbaum
Instruction Selection CS42/CS43 Introduction to Compilers Tim Teitelbaum Lecture 32: More Instruction Selection 20 Apr 05. Translate low-level IR code into DAG representation 2. Then find a good tiling
More informationAssignment 11: functions, calling conventions, and the stack
Assignment 11: functions, calling conventions, and the stack ECEN 4553 & 5013, CSCI 4555 & 5525 Prof. Jeremy G. Siek December 5, 2008 The goal of this week s assignment is to remove function definitions
More informationCOMP 210 Example Question Exam 2 (Solutions at the bottom)
_ Problem 1. COMP 210 Example Question Exam 2 (Solutions at the bottom) This question will test your ability to reconstruct C code from the assembled output. On the opposing page, there is asm code for
More informationSystem Programming and Computer Architecture (Fall 2009)
System Programming and Computer Architecture (Fall 2009) Recitation 2 October 8 th, 2009 Zaheer Chothia Email: zchothia@student.ethz.ch Web: http://n.ethz.ch/~zchothia/ Topics for Today Classroom Exercise
More informationadministrivia today start assembly probably won t finish all these slides Assignment 4 due tomorrow any questions?
administrivia today start assembly probably won t finish all these slides Assignment 4 due tomorrow any questions? exam on Wednesday today s material not on the exam 1 Assembly Assembly is programming
More informationAssembly Language: Overview!
Assembly Language: Overview! 1 Goals of this Lecture! Help you learn:" The basics of computer architecture" The relationship between C and assembly language" IA-32 assembly language, through an example"
More informationBinary Trees Case-studies
Carlos Moreno cmoreno @ uwaterloo.ca EIT-4103 https://ece.uwaterloo.ca/~cmoreno/ece250 Standard reminder to set phones to silent/vibrate mode, please! Today's class: Binary Trees Case-studies We'll look
More informationCS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 12
CS24: INTRODUCTION TO COMPUTING SYSTEMS Spring 2017 Lecture 12 CS24 MIDTERM Midterm format: 6 hour overall time limit, multiple sittings (If you are focused on midterm, clock should be running.) Open book
More informationCredits and Disclaimers
Credits and Disclaimers 1 The examples and discussion in the following slides have been adapted from a variety of sources, including: Chapter 3 of Computer Systems 3 nd Edition by Bryant and O'Hallaron
More informationCompilers. Intermediate representations and code generation. Yannis Smaragdakis, U. Athens (original slides by Sam
Compilers Intermediate representations and code generation Yannis Smaragdakis, U. Athens (original slides by Sam Guyer@Tufts) Today Intermediate representations and code generation Scanner Parser Semantic
More informationCompiler construction in4303 lecture 9
Compiler construction in4303 lecture 9 Code generation Chapter 4.2.5, 4.2.7, 4.2.11 4.3 Overview Code generation for basic blocks instruction selection:[burs] register allocation: graph coloring instruction
More informationIntermediate Code & Local Optimizations. Lecture 20
Intermediate Code & Local Optimizations Lecture 20 Lecture Outline Intermediate code Local optimizations Next time: global optimizations 2 Code Generation Summary We have discussed Runtime organization
More informationDealing with Register Hierarchies
Dealing with Register Hierarchies Matthias Braun (MatzeB) / LLVM Developers' Meeting 2016 r1;r2;r3;r4 r0;r1;r2;r3 r0,r1,r2,r3 S0 D0 S1 Q0 S2 D1 S3 r3;r4;r5 r2;r3;r4 r1;r2;r3 r2;r3 r1,r2,r3,r4 r3,r4,r5,r6
More informationCompiler Internals. Reminders. Course infrastructure. Registering for the course
Compiler Internals 15-745 Optimizing Compilers Spring 2006 Peter Lee Reminders Get on the course mailing list Check out the web site http://www.cs.cmu.edu/afs/cs/ academic/class/15745-s06/web subscribe
More informationCompiler Design Spring 2017
Compiler Design Spring 2017 6.0 Runtime system and object layout Dr. Zoltán Majó Compiler Group Java HotSpot Virtual Machine Oracle Corporation 1 Runtime system Some open issues from last time Handling
More informationVariables vs. Registers/Memory. Simple Approach. Register Allocation. Interference Graph. Register Allocation Algorithm CS412/CS413
Variables vs. Registers/Memory CS412/CS413 Introduction to Compilers Tim Teitelbaum Lecture 33: Register Allocation 18 Apr 07 Difference between IR and assembly code: IR (and abstract assembly) manipulate
More informationCompiler Design Spring 2018
Compiler Design Spring 2018 Thomas R. Gross Computer Science Department ETH Zurich, Switzerland 1 Logistics Lecture Tuesdays: 10:15 11:55 Thursdays: 10:15 -- 11:55 In ETF E1 Recitation Announced later
More informationRegister Allocation, iii. Bringing in functions & using spilling & coalescing
Register Allocation, iii Bringing in functions & using spilling & coalescing 1 Function Calls ;; f(x) = let y = g(x) ;; in h(y+x) + y*5 (:f (x
More informationCSE 401 Final Exam. March 14, 2017 Happy π Day! (3/14) This exam is closed book, closed notes, closed electronics, closed neighbors, open mind,...
CSE 401 Final Exam March 14, 2017 Happy π Day! (3/14) Name This exam is closed book, closed notes, closed electronics, closed neighbors, open mind,.... Please wait to turn the page until everyone has their
More informationAgenda. CSE P 501 Compilers. Big Picture. Compiler Organization. Intermediate Representations. IR for Code Generation. CSE P 501 Au05 N-1
Agenda CSE P 501 Compilers Instruction Selection Hal Perkins Autumn 2005 Compiler back-end organization Low-level intermediate representations Trees Linear Instruction selection algorithms Tree pattern
More informationCS61 Section Solutions 3
CS61 Section Solutions 3 (Week of 10/1-10/5) 1. Assembly Operand Specifiers 2. Condition Codes 3. Jumps 4. Control Flow Loops 5. Procedure Calls 1. Assembly Operand Specifiers Q1 Operand Value %eax 0x104
More informationFall Compiler Principles Lecture 12: Register Allocation. Roman Manevich Ben-Gurion University
Fall 2014-2015 Compiler Principles Lecture 12: Register Allocation Roman Manevich Ben-Gurion University Syllabus Front End Intermediate Representation Optimizations Code Generation Scanning Lowering Local
More informationThe Software Stack: From Assembly Language to Machine Code
COMP 506 Rice University Spring 2018 The Software Stack: From Assembly Language to Machine Code source code IR Front End Optimizer Back End IR target code Somewhere Out Here Copyright 2018, Keith D. Cooper
More informationInterlude. Why Object Oriented Programming?
Interlude Why Object Oriented Programming? Announcements for This Lecture This Week Today is an Interlude Nothing today is on exam Big Picture lecture; may still be very helpful to you Thursday is Recursion
More information4) C = 96 * B 5) 1 and 3 only 6) 2 and 4 only
Instructions: The following questions use the AT&T (GNU) syntax for x86-32 assembly code, as in the course notes. Submit your answers to these questions to the Curator as OQ05 by the posted due date and
More informationStacks and Frames Demystified. CSCI 3753 Operating Systems Spring 2005 Prof. Rick Han
s and Frames Demystified CSCI 3753 Operating Systems Spring 2005 Prof. Rick Han Announcements Homework Set #2 due Friday at 11 am - extension Program Assignment #1 due Tuesday Feb. 15 at 11 am - note extension
More informationCS 31: Intro to Systems Functions and the Stack. Martin Gagne Swarthmore College February 23, 2016
CS 31: Intro to Systems Functions and the Stack Martin Gagne Swarthmore College February 23, 2016 Reminders Late policy: you do not have to send me an email to inform me of a late submission before the
More informationMachine/Assembler Language Putting It All Together
COMP 40: Machine Structure and Assembly Language Programming Fall 2015 Machine/Assembler Language Putting It All Together Noah Mendelsohn Tufts University Email: noah@cs.tufts.edu Web: http://www.cs.tufts.edu/~noah
More informationMemory Management. Kevin Webb Swarthmore College February 27, 2018
Memory Management Kevin Webb Swarthmore College February 27, 2018 Today s Goals Shifting topics: different process resource memory Motivate virtual memory, including what it might look like without it
More informationMachine Code and Assemblers November 6
Machine Code and Assemblers November 6 CSC201 Section 002 Fall, 2000 Definitions Assembly time vs. link time vs. load time vs. run time.c file.asm file.obj file.exe file compiler assembler linker Running
More informationTopic 6: Code Generation
Compilers 2008 Topic 6: 6.4 Conditional Instructions Status Flags Conditionals A special register exists called the FLAGS register Consists of a sequence of bits, which are set (1) or unset (0). These
More informationUniversity of Washington
Roadmap C: car *c = malloc(sizeof(car)); c->miles = 100; c->gals = 17; float mpg = get_mpg(c); free(c); Assembly language: Machine code: Computer system: get_mpg: pushq %rbp movq %rsp, %rbp... popq %rbp
More informationCS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2016 Lecture 12
CS24: INTRODUCTION TO COMPUTING SYSTEMS Spring 2016 Lecture 12 CS24 MIDTERM Midterm format: 6 hour overall time limit, multiple sittings (If you are focused on midterm, clock should be running.) Open book
More informationx86 Assembly Crash Course Don Porter
x86 Assembly Crash Course Don Porter Registers ò Only variables available in assembly ò General Purpose Registers: ò EAX, EBX, ECX, EDX (32 bit) ò Can be addressed by 8 and 16 bit subsets AL AH AX EAX
More informationCompiler Optimization Techniques
Compiler Optimization Techniques Department of Computer Science, Faculty of ICT February 5, 2014 Introduction Code optimisations usually involve the replacement (transformation) of code from one sequence
More informationOperating Systems (234123) Spring 2017 (Homework Wet 1) Homework 1 Wet
Homework 1 Wet Due Date: 30/4/2017 23:00 Teaching assistant in charge: Yehonatan Buchnik Important: the Q&A for the exercise will take place at a public forum Piazza only. Critical updates about the HW
More informationMODULE 32 DAG based Code Generation and Dynamic Programming
MODULE 32 DAG based Code Generation and Dynamic Programming In this module, we would try to understand the code generation algorithm from DAG after the DAG has been reordered and labeled. As another approach
More informationHow Software Executes
How Software Executes CS-576 Systems Security Instructor: Georgios Portokalidis Overview Introduction Anatomy of a program Basic assembly Anatomy of function calls (and returns) Memory Safety Programming
More informationCS 261 Fall Mike Lam, Professor. x86-64 Control Flow
CS 261 Fall 2018 Mike Lam, Professor x86-64 Control Flow Topics Condition codes Jumps Conditional moves Jump tables Motivation We cannot translate the following C function to assembly, using only data
More informationHomework. In-line Assembly Code Machine Language Program Efficiency Tricks Reading PAL, pp 3-6, Practice Exam 1
Homework In-line Assembly Code Machine Language Program Efficiency Tricks Reading PAL, pp 3-6, 361-367 Practice Exam 1 1 In-line Assembly Code The gcc compiler allows you to put assembly instructions in-line
More informationPutting the pieces together
IBM developerworks : Linux : Linux articles All of dw Advanced search IBM home Products & services Support & downloads My account Inline assembly for x86 in Linux e-mail it! Contents: GNU assembler syntax
More informationRegister Allocation, i. Overview & spilling
Register Allocation, i Overview & spilling 1 L1 p ::=(label f...) f ::=(label nat nat i...) i ::=(w
More informationSemantic actions for expressions
Semantic actions for expressions Semantic actions Semantic actions are routines called as productions (or parts of productions) are recognized Actions work together to build up intermediate representations
More informationTHEORY OF COMPILATION
Lecture 10 Code Generation THEORY OF COMPILATION EranYahav Reference: Dragon 8. MCD 4.2.4 1 You are here Compiler txt Source Lexical Analysis Syntax Analysis Parsing Semantic Analysis Inter. Rep. (IR)
More informationadministrivia final hour exam next Wednesday covers assembly language like hw and worksheets
administrivia final hour exam next Wednesday covers assembly language like hw and worksheets today last worksheet start looking at more details on hardware not covered on ANY exam probably won t finish
More informationAn Experience Like No Other. Stack Discipline Aug. 30, 2006
15-410 An Experience Like No Other Discipline Aug. 30, 2006 Bruce Maggs Dave Eckhardt Slides originally stolen from 15-213 15-410, F 06 Synchronization Registration If you're here but not registered, please
More informationReversing. Time to get with the program
Reversing Time to get with the program This guide is a brief introduction to C, Assembly Language, and Python that will be helpful for solving Reversing challenges. Writing a C Program C is one of the
More informationCS 31: Intro to Systems Pointers and Memory. Kevin Webb Swarthmore College October 2, 2018
CS 31: Intro to Systems Pointers and Memory Kevin Webb Swarthmore College October 2, 2018 Overview How to reference the location of a variable in memory Where variables are placed in memory How to make
More informationIntroduction to Code Optimization. Lecture 36: Local Optimization. Basic Blocks. Basic-Block Example
Lecture 36: Local Optimization [Adapted from notes by R. Bodik and G. Necula] Introduction to Code Optimization Code optimization is the usual term, but is grossly misnamed, since code produced by optimizers
More informationQuestion 4.2 2: (Solution, p 5) Suppose that the HYMN CPU begins with the following in memory. addr data (translation) LOAD 11110
Questions 1 Question 4.1 1: (Solution, p 5) Define the fetch-execute cycle as it relates to a computer processing a program. Your definition should describe the primary purpose of each phase. Question
More informationAssembly Language: Function Calls
Assembly Language: Function Calls 1 Goals of this Lecture Help you learn: Function call problems: Calling and returning Passing parameters Storing local variables Handling registers without interference
More informationW4118: PC Hardware and x86. Junfeng Yang
W4118: PC Hardware and x86 Junfeng Yang A PC How to make it do something useful? 2 Outline PC organization x86 instruction set gcc calling conventions PC emulation 3 PC board 4 PC organization One or more
More information6.1. CS356 Unit 6. x86 Procedures Basic Stack Frames
6.1 CS356 Unit 6 x86 Procedures Basic Stack Frames 6.2 Review of Program Counter (Instruc. Pointer) PC/IP is used to fetch an instruction PC/IP contains the address of the next instruction The value in
More informationBranching and Looping
Branching and Looping Ray Seyfarth August 10, 2011 Branching and looping So far we have only written straight line code Conditional moves helped spice things up In addition conditional moves kept the pipeline
More informationCS241 Computer Organization Spring 2015 IA
CS241 Computer Organization Spring 2015 IA-32 2-10 2015 Outline! Review HW#3 and Quiz#1! More on Assembly (IA32) move instruction (mov) memory address computation arithmetic & logic instructions (add,
More informationDigital Forensics Lecture 3 - Reverse Engineering
Digital Forensics Lecture 3 - Reverse Engineering Low-Level Software Akbar S. Namin Texas Tech University Spring 2017 Reverse Engineering High-Level Software Low-level aspects of software are often the
More informationCSE 351: Week 4. Tom Bergan, TA
CSE 35 Week 4 Tom Bergan, TA Does this code look okay? int binarysearch(int a[], int length, int key) { int low = 0; int high = length - ; while (low
More informationCS 3843 Final Exam Fall 2012
CS 3843 Final Exam Fall 2012 Name (Last), (First) ID Please indicate your session: Morning Afternoon You may use a calculator and two sheets of notes on this exam, but no other materials and no computer.
More informationRegister Allocation. Introduction Local Register Allocators
Register Allocation Introduction Local Register Allocators Copyright 2015, Pedro C. Diniz, all rights reserved. Students enrolled in the Compilers class at the University of Southern California have explicit
More informationIntermediate Code Generation
Intermediate Code Generation In the analysis-synthesis model of a compiler, the front end analyzes a source program and creates an intermediate representation, from which the back end generates target
More informationComputer Science 324 Computer Architecture Mount Holyoke College Fall Topic Notes: MIPS Instruction Set Architecture
Computer Science 324 Computer Architecture Mount Holyoke College Fall 2009 Topic Notes: MIPS Instruction Set Architecture vonneumann Architecture Modern computers use the vonneumann architecture. Idea:
More informationInside VMProtect. Introduction. Internal. Analysis. VM Logic. Inside VMProtect. Conclusion. Samuel Chevet. 16 January 2015.
16 January 2015 Agenda Describe what VMProtect is Introduce code virtualization in software protection Methods for circumvention VM logic Warning Some assumptions are made in this presentation Only few
More informationAssembly Language: Function Calls" Goals of this Lecture"
Assembly Language: Function Calls" 1 Goals of this Lecture" Help you learn:" Function call problems:" Calling and returning" Passing parameters" Storing local variables" Handling registers without interference"
More informationRISC I from Berkeley. 44k Transistors 1Mhz 77mm^2
The Case for RISC RISC I from Berkeley 44k Transistors 1Mhz 77mm^2 2 MIPS: A Classic RISC ISA Instructions 4 bytes (32 bits) 4-byte aligned Instructions operate on memory and registers Memory Data types
More informationP423/P523 Compilers Register Allocation
P423/P523 Compilers Register Allocation Deyaaeldeen Almahallawi 1 1 dalmahal@indiana.edu Indiana University March, 2015 Deyaaeldeen Almahallawi P423/P523 1/ 21 A bit of history During optimization, assume
More informationIntel assembly language using gcc
QOTD Intel assembly language using gcc Assembly language programming is difficult. Make no mistake about that. It is not for wimps and weaklings. - Tanenbaum s 6th, page 519 These notes are a supplement
More informationCS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 7
CS24: INTRODUCTION TO COMPUTING SYSTEMS Spring 2017 Lecture 7 LAST TIME Dynamic memory allocation and the heap: A run-time facility that satisfies multiple needs: Programs can use widely varying, possibly
More informationCS415 Compilers Register Allocation. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University
CS415 Compilers Register Allocation These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University Review: The Back End IR Instruction Selection IR Register
More informationAssembly Language: Function Calls" Goals of this Lecture"
Assembly Language: Function Calls" 1 Goals of this Lecture" Help you learn:" Function call problems:" Calling and urning" Passing parameters" Storing local variables" Handling registers without interference"
More informationWhat the CPU Sees Basic Flow Control Conditional Flow Control Structured Flow Control Functions and Scope. C Flow Control.
C Flow Control David Chisnall February 1, 2011 Outline What the CPU Sees Basic Flow Control Conditional Flow Control Structured Flow Control Functions and Scope Disclaimer! These slides contain a lot of
More informationComputer Science 104:! Y86 & Single Cycle Processor Design!
Computer Science 104: Y86 & Single Cycle Processor Design Alvin R. Lebeck Slides based on those from Randy Bryant 1 CS:APP Administrative Homework #4 My office hours today 11:30-12:30 Reading: text 4.3
More informationAssembly Language: Function Calls. Goals of this Lecture. Function Call Problems
Assembly Language: Function Calls 1 Goals of this Lecture Help you learn: Function call problems: Calling and urning Passing parameters Storing local variables Handling registers without interference Returning
More informationComputer Systems Organization V Fall 2009
Computer Systems Organization V22.0201 Fall 2009 Sample Midterm Exam ANSWERS 1. True/False. Circle the appropriate choice. (a) T (b) F At most one operand of an x86 assembly instruction can be an memory
More informationAssembly III: Procedures. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University
Assembly III: Procedures Jin-Soo Kim (jinsookim@skku.edu) Computer Systems Laboratory Sungkyunkwan University http://csl.skku.edu IA-32 (1) Characteristics Region of memory managed with stack discipline
More informationLecture #16: Introduction to Runtime Organization. Last modified: Fri Mar 19 00:17: CS164: Lecture #16 1
Lecture #16: Introduction to Runtime Organization Last modified: Fri Mar 19 00:17:19 2010 CS164: Lecture #16 1 Status Lexical analysis Produces tokens Detects & eliminates illegal tokens Parsing Produces
More informationSubprograms: Local Variables
Subprograms: Local Variables ICS312 Machine-Level and Systems Programming Henri Casanova (henric@hawaii.edu) Local Variables in Subprograms In all the examples we have seen so far, the subprograms were
More informationCS 406/534 Compiler Construction Putting It All Together
CS 406/534 Compiler Construction Putting It All Together Prof. Li Xu Dept. of Computer Science UMass Lowell Fall 2004 Part of the course lecture notes are based on Prof. Keith Cooper, Prof. Ken Kennedy
More informationProject 5: Extensions to the MiniJava Compiler
Project 5: Extensions to the MiniJava Compiler Due: Friday, March 7, 12:30 pm. In this assignment you will make two required extensions to the target code generator. You will also make an extension to
More informationTopic Notes: MIPS Instruction Set Architecture
Computer Science 220 Assembly Language & Comp. Architecture Siena College Fall 2011 Topic Notes: MIPS Instruction Set Architecture vonneumann Architecture Modern computers use the vonneumann architecture.
More informationCSE2421 FINAL EXAM SPRING Name KEY. Instructions: Signature
CSE2421 FINAL EXAM SPRING 2013 Name KEY Instructions: This is a closed-book, closed-notes, closed-neighbor exam. Only a writing utensil is needed for this exam. No calculators allowed. If you need to go
More informationRegister Allocation (via graph coloring) Lecture 25. CS 536 Spring
Register Allocation (via graph coloring) Lecture 25 CS 536 Spring 2001 1 Lecture Outline Memory Hierarchy Management Register Allocation Register interference graph Graph coloring heuristics Spilling Cache
More informationComputer Systems C S Cynthia Lee
Computer Systems C S 1 0 7 Cynthia Lee 2 Today s Topics LECTURE: More assembly code! NEXT TIME: More control flow Some misc. instructions you might see in your assign5 binary bomb Details of function call
More informationUnoptimized Code Generation
Unoptimized Code Generation Last time we left off on the procedure abstraction Saman Amarasinghe 2 6.035 MIT Fall 1998 The Stack Arguments 0 to 6 are in: %b %rbp %rsp %rdi, %rsi, %rdx, %rcx, %r8 and %r9
More informationCompiler Design Spring 2017
Compiler Design Spring 2017 Patterns (again) Dr. Zoltán Majó Compiler Group Java HotSpot Virtual Machine Oracle Corporation Why? Remember questionnaire (from the beginning of the semester)? Question 7:
More informationx86 assembly CS449 Fall 2017
x86 assembly CS449 Fall 2017 x86 is a CISC CISC (Complex Instruction Set Computer) e.g. x86 Hundreds of (complex) instructions Only a handful of registers RISC (Reduced Instruction Set Computer) e.g. MIPS
More informationFinal exam. Scores. Fall term 2012 KAIST EE209 Programming Structures for EE. Thursday Dec 20, Student's name: Student ID:
Fall term 2012 KAIST EE209 Programming Structures for EE Final exam Thursday Dec 20, 2012 Student's name: Student ID: The exam is closed book and notes. Read the questions carefully and focus your answers
More informationMachine Programming 3: Procedures
Machine Programming 3: Procedures CS61, Lecture 5 Prof. Stephen Chong September 15, 2011 Announcements Assignment 2 (Binary bomb) due next week If you haven t yet please create a VM to make sure the infrastructure
More information