CS429: Computer Organization and Architecture

Similar documents
Machine-Level Programming II: Control

Machine-Level Programming II: Control

2/12/2016. Today. Machine-Level Programming II: Control. Condition Codes (Implicit Setting) Processor State (x86-64, Partial)

Machine Level Programming: Control

CS367. Program Control

Outline. Review: Assembly/Machine Code View. Processor State (x86-64, Par2al) Condi2on Codes (Explicit Se^ng: Compare) Condi2on Codes (Implicit Se^ng)

Carnegie Mellon. Bryant and O Hallaron, Computer Systems: A Programmer s Perspective, Third Edition

Machine-Level Programming II: Control

Machine-Level Programming (2)

Assembly II: Control Flow. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

x86 Programming III CSE 351 Autumn 2016 Instructor: Justin Hsia

Assembly II: Control Flow

L09: Assembly Programming III. Assembly Programming III. CSE 351 Spring Guest Lecturer: Justin Hsia. Instructor: Ruth Anderson

x86 Programming II CSE 351 Winter

x86-64 Programming II

CS 33. Machine Programming (2) CS33 Intro to Computer Systems XII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

The Hardware/Software Interface CSE351 Spring 2013

Assembly Programming III

Control flow (1) Condition codes Conditional and unconditional jumps Loops Conditional moves Switch statements

CS 33. Machine Programming (2) CS33 Intro to Computer Systems XI 1 Copyright 2018 Thomas W. Doeppner. All rights reserved.

x86 64 Programming II

Credits to Randy Bryant & Dave O Hallaron

Machine- Level Programming II: Arithme6c & Control

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Machine Level Programming II: Arithmetic &Control

Roadmap. Java: Assembly language: OS: Machine code: Computer system:

Machine-Level Programming II: Arithmetic & Control /18-243: Introduction to Computer Systems 6th Lecture, 5 June 2012

x64 Cheat Sheet Fall 2014

Machine-Level Programming II: Arithmetic & Control. Complete Memory Addressing Modes

x86-64 Programming III & The Stack

Machine Language CS 3330 Samira Khan

Controlling Program Flow

Machine-Level Programming II: Control Flow

Machine-Level Programming II: Control and Arithmetic

ASSEMBLY II: CONTROL FLOW. Jo, Heeseung

Assembly II: Control Flow. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Assembly Programming IV

%r8 %r8d. %r9 %r9d. %r10 %r10d. %r11 %r11d. %r12 %r12d. %r13 %r13d. %r14 %r14d %rbp. %r15 %r15d. Sean Barker

x86-64 Programming III

CS 107. Lecture 13: Assembly Part III. Friday, November 10, Stack "bottom".. Earlier Frames. Frame for calling function P. Increasing address

CS241 Computer Organization Spring Addresses & Pointers

Condition Codes The course that gives CMU its Zip! Machine-Level Programming II Control Flow Sept. 13, 2001 Topics

Compiling C Programs Into X86-64 Assembly Programs

Sungkyunkwan University

Machine- Level Representa2on: Procedure

Foundations of Computer Systems

Homework 0: Given: k-bit exponent, n-bit fraction Find: Exponent E, Significand M, Fraction f, Value V, Bit representation

Assembly Programming IV

Condition Codes. Lecture 4B Machine-Level Programming II: Control Flow. Setting Condition Codes (cont.) Setting Condition Codes (cont.

CF Carry Flag SF Sign Flag ZF Zero Flag OF Overflow Flag. ! CF set if carry out from most significant bit. "Used to detect unsigned overflow

Machine Programming 2: Control flow

CS429: Computer Organization and Architecture

CSC 252: Computer Organization Spring 2018: Lecture 6

Machine- Level Programming II: Arithme c & Control

Giving credit where credit is due

CS429: Computer Organization and Architecture

CS356 Unit 5. Translation to Assembly. Translating HLL to Assembly ASSEMBLY TRANSLATION EXAMPLE. x86 Control Flow

Lecture 4: x86_64 Assembly Language

Topics of this Slideset. CS429: Computer Organization and Architecture. Instruction Set Architecture. Why Y86? Instruction Set Architecture

Control flow. Condition codes Conditional and unconditional jumps Loops Switch statements

CISC 360. Machine-Level Programming II: Control Flow Sep 23, 2008

Page # CISC 360. Machine-Level Programming II: Control Flow Sep 23, Condition Codes. Setting Condition Codes (cont.)

Machine- Level Programming II: Arithme6c & Control

Assembly Language II: Addressing Modes & Control Flow

Chapter 3 Machine-Level Programming II Control Flow

CSE351 Spring 2018, Midterm Exam April 27, 2018

CISC 360. Machine-Level Programming II: Control Flow Sep 17, class06

Page 1. Condition Codes CISC 360. Machine-Level Programming II: Control Flow Sep 17, Setting Condition Codes (cont.)

Where We Are. Optimizations. Assembly code. generation. Lexical, Syntax, and Semantic Analysis IR Generation. Low-level IR code.

Intel x86-64 and Y86-64 Instruction Set Architecture

Processor state. Information about currently executing program. %rax, %rdi, ... %r14 %r15. %rsp. %rip CF ZF SF OF. Temporary data

5.1. CS356 Unit 5. x86 Control Flow

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 5

Areas for growth: I love feedback

CS 261 Fall Mike Lam, Professor. x86-64 Control Flow

last time Assembly part 2 / C part 1 condition codes reminder: quiz

Computer Organization: A Programmer's Perspective

System Programming and Computer Architecture (Fall 2009)

Review addressing modes

Basic Data Types. CS429: Computer Organization and Architecture. Array Allocation. Array Access

Computer Architecture I: Outline and Instruction Set Architecture. CENG331 - Computer Organization. Murat Manguoglu

cmovxx ra, rb 2 fn ra rb irmovq V, rb 3 0 F rb V rmmovq ra, D(rB) 4 0 ra rb mrmovq D(rB), ra 5 0 ra rb OPq ra, rb 6 fn ra rb jxx Dest 7 fn Dest

Sungkyunkwan University

Machine- level Programming II: Control Flow

Systems Programming and Computer Architecture ( )

The Hardware/Software Interface CSE351 Spring 2015

CS 261 Fall Mike Lam, Professor. x86-64 Control Flow

CS429: Computer Organization and Architecture

Assembly I: Basic Operations. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Foundations of Computer Systems

Mechanisms in Procedures. CS429: Computer Organization and Architecture. x86-64 Stack. x86-64 Stack Pushing

How Software Executes

Questions about last homework? (Would more feedback be useful?) New reading assignment up: due next Monday

Credits and Disclaimers

CS 3330 Exam 1 Fall 2017 Computing ID:

Sungkyunkwan University

Machine/Assembler Language Putting It All Together

CSCI 2021: x86-64 Control Flow

Control. Young W. Lim Mon. Young W. Lim Control Mon 1 / 16

Computer Systems C S Cynthia Lee

Transcription:

CS429: Computer Organization and Architecture Dr. Bill Young Department of Computer Sciences University of Texas at Austin Last updated: February 26, 2018 at 12:02 CS429 Slideset 8: 1

Controlling Program Execution We can now generate programs that execute linear sequences of instructions: access registers and memory, perform computations But what about loops, conditions, etc.? Need ISA support for: comparing and testing data values directing program control jump to some instruction that isn t just the next one in sequence Do so based on some condition that has been tested. CS429 Slideset 8: 2

Processor State (x86-64, Partial) Information about currently executing program. Temporary data (%rax,...) Location of runtime stack (%rsp) Location of current code control point (%rip) Status of recent tests (CF, ZF, SF, OF) Registers %rax %r8 %rbx %r9 %rcx %r10 %rdx %r11 %rsi %r12 %rdi %r13 %rsp %r14 %rbp %r15 %rip Instruction pointer CF ZF SF OF Condition codes CS429 Slideset 8: 3

PC-relative Addressing Don t use %rip as a general purpose register. However, the compiler may generate PC-relative addressing. jmp 0x10(%rip ) The effective address for a PC-relative instruction address is the offset parameter added to the address of the next instruction. This offset is signed to allow reference to code both before and after the instruction. Can you guess why the compiler might generate such code? CS429 Slideset 8: 4

Condition Codes (Implicit Setting) Single bit registers CF: carry flag (for unsigned) ZF: zero flag SF: sign flag (for signed) OF: overflow flag (for signed) Implicitly set by arithmetic operations E.g., addq Src, Dest C analog: t = a + b; CF set if carry out from most significant bit (unsigned overflow) ZF set if t == 0 SF set if t < 0 (as signed) OF set if two s complement overflow: (a>0 && b>0 && t<0) (a<0 && b<0 && t >=0) Condition codes not set by lea instruction. CS429 Slideset 8: 5

Setting Condition Codes (Explicit Setting) Explicitly set by Compare instruction cmpq Src2, Src1 cmpq b, a is like computing (a - b) without setting destination. CF set if carry out from most significant bit; used for unsigned computations. ZF set if a == b SF set if (a-b) < 0 OF set if two s complement (signed) overflow: (a>0 && b>0 && (a-b)<0) (a<0 && b<0 && (a-b)>=0) CS429 Slideset 8: 6

Setting Condition Codes: Test Instruction Explicitly set by Test instruction testq Src2, Src1 Sets condition codes based on value of (Src1 & Src2). Often useful to have one of the operands be a mask. testq b, a is like computing a&b, without setting a destination. ZF set iff (a & b) == 0 SF set iff (a & b) < 0 CF and OF are set to 0. How could you use testq to jump if the value in %rbx is even? CS429 Slideset 8: 7

Setting Condition Codes: Test Instruction Explicitly set by Test instruction testq Src2, Src1 Sets condition codes based on value of (Src1 & Src2). Often useful to have one of the operands be a mask. testq b, a is like computing a&b, without setting a destination. ZF set iff (a & b) == 0 SF set iff (a & b) < 0 CF and OF are set to 0. How could you use testq to jump if the value in %rbx is even? odd: testq $1, %rbx je even CS429 Slideset 8: 8

Reading Condition Codes SetX Instructions: Set low order bytes of destination to 0 or 1, based on combinations of condition codes. Does not alter remaining 7 bytes. SetX Condition Description sete ZF Equal / Zero setne ~ZF Not equal / not zero sets SF Negative setns ~SF Nonnegative setg ~(SF^OF)&~ZF Greater (signed) setge ~(SF^OF) Greater or equal (signed) setl (SF^OF) Less (signed) setle (SF^OF) ZF Less or equal (signed) seta ~CF&~ZF Above (unsigned) setb CF Below (unsigned) CS429 Slideset 8: 9

x86-64 Registers: Least Significant Byte %rax %al %r8 %r8b %rbx %bl %r9 %r9b %rcx %cl %r10 %r10b %rdx %dl %r11 %r11b %rsi %sil %r12 %r12b %rdi %dil %r13 %r13b %rsp %spl %r14 %r14b %rbp %bpl %r15 %r15b Can reference the low-order byte. CS429 Slideset 8: 10

Reading Condition Codes SetX instructions Set single byte based on combinations of conditions codes. Argument is one of addressable byte registers. does not alter remaining bytes; typically use movzbl to finish the job (will also zero 4 high order bytes). int gt(long x, long y) { return x > y; Register Use(s) %rdi Argument x %rsi Argument y %rax return value cmpq %rsi, %rdi # compare x:y setg %al # Set if > movzbl %al, %eax # Zero rest of %rax retq CS429 Slideset 8: 11

Jumping jx Instructions: Jump to different parts of the code depending on condition codes. jx Condition Description jmp 1 Unconditional je ZF Equal / Zero jne ~ZF Not equal / not zero js SF Negative jns ~SF Nonnegative jg ~(SF^OF)&~ZF Greater (signed) jge ~(SF^OF) Greater or equal (signed) jl (SF^OF) Less (signed) jle (SF^OF) ZF Less or equal (signed) ja ~CF&~ZF Above (unsigned) jb CF Below (unsigned) CS429 Slideset 8: 12

Conditional Branch Example (Old Style) Generation: gcc -Og -fno-if-conversion control.c long absdiff (long x, long y) { long result ; if (x > y) result = x y; else result = y x; return result ; absdiff : cmpq %rsi, %rdi # x:y jle.l4 movq %rdi, %rax subq %rsi, %rax retq.l4 : # x <= y movq %rsi, %rax subq %rdi, %rax retq Register Use(s) %rdi Argument x %rsi Argument y %rax return value CS429 Slideset 8: 13

Converting C into Assembly Machine Models C Memory Processor Data Control 1) char 1) loops 2) int, float 2) conditionals 3) double 3) switch 4) struct, array 4) proc. call 5) pointer 5) proc. return Memory Stack Assembly Regs c codes Processor ALU 1) byte 1) branch/jump 2) 2-byte word 2) call 3) 4-byte long word 3) ret 4) 8-byte quad word 5) contiguous byte allocation 6) address of initial byte A common compilation strategy is to take a C construct and rewrite it into an equivalent C version that is closer to assembly, as an intermediate step toward assembly. CS429 Slideset 8: 14

Expressing with Goto Code C allows goto as a means of transferring control. Jump to position designated by label. Generally considered bad coding style in high level language. long absdiff (long x, long y) { long result ; if (x > y) result = x y; else result = y x; return result ; long absdiff j (long x, long y) { long result ; int ntest = x <= y; if ( ntest ) goto Else ; result = x y; goto Done; Else : result = y x; Done: return result ; CS429 Slideset 8: 15

General Conditional Expression Translation C Code: val = Test? Then Expr : Else Expr ; Example: val = x>y? x y : y x; Goto Version: ntest =! Test if ( ntest ) goto Else ; val = Then Expr ; goto Done; Else : val = Else Expr ; Done:... Create separate code regions for then and else expressions. Execute the appropriate one. CS429 Slideset 8: 16

Conditional Move Instructions Refer to generically as cmovxx Based on values of condition codes Conditionally copy value from source to destination. Can be used to eliminate conditional jump. CS429 Slideset 8: 17

Conditional Move Instructions Inst. Synonym Description cmove cmovz Equal / zero cmovne cmovnz Not equal / not zero cmovs Negative cmovns Not negative cmovg cmovnle Greater (signed) cmovge cmovnl Greater or equal (signed) cmovl cmovnge Less (signed) cmovle cmovng Less or equal (signed) cmova cmovnbe Above (unsigned) cmovae cmovnb Above or equal (unsigned) cmovb cmovnae Below (unsigned) cmovbe cmovna Below or equal (unsigned) CS429 Slideset 8: 18

Using Conditional Moves Conditional Move Instructions Why? Instruction supports: if (Test) Dest Src Supported in post-1995 x86 processors GCC tries to use them, but only when safe Branches are very disruptive to instruction flow through pipelines. Conditional moves do not require control transfer. C Code val = Test? Then Expr : Else Expr Goto Version result = Then Expr ; eval = Else Expr ; nt =! Test ; if (nt) result = eval ; return result ; CS429 Slideset 8: 19

Conditional Move Example long absdiff (long x, long y) { long result ; if (x > y) result = x y; else result = y x; return result ; Register Use(s) %rdi Argument x %rsi Argument y %rax return value absdiff : movq %rdi, %rax # x subq %rsi, %rax # result = x y movq %rsi, %rdx subq %rdi, %rdx # eval = y x cmpq %rsi, %rdi # x:y cmovle %rdx, %rax # if <=, result = eval retq CS429 Slideset 8: 20

Bad Cases for Conditional Move Expensive Computations: val = Test(x)? Hard1(x) : Hard2(x) ; Both values get computed Only makes sense when computations are very simple Risky Computations: val = p? p : 0; Both values get computed May have undesirable side effects. Computations with Side Effects: val = x > 0? x = 7 : x += 3; Both values get computed Must be side effect free CS429 Slideset 8: 21

Do-While Loop Example Following our strategy of rewriting a C construct into a semantically equivalent C version that is closer to assembly. C Code: long pcount do (unsigned long x) { long result = 0; do { result += x & 0x1; x >>= 1; while (x) ; return result ; Goto Version: long pcount goto (unsigned long x) { loop : result += x & 0x1; x >>= 1; if (x) goto loop ; return result ; Count number of 1 s in argument x ( popcount ) Use conditional branch to either continue looping or to exit loop CS429 Slideset 8: 22

Do-While Loop Compilation Goto Version: long pcount goto (unsigned long x) { loop : result += x & 0x1; x >>= 1; if (x) goto loop ; return result ; Register Use(s) %rdi Argument x %rax return value movl $0, %eax # result = 0.L2 : # loop : movq %rdi, %rdx andl $1, %edx # t = x & 0x1 addq %rdx, %rax # result += t shrq $1, %rdi # x >>= 1 jne.l2 # if (x) goto loop retq CS429 Slideset 8: 23

General Do-While Translation C Code: do Body while (Test) ; Goto Version: loop : Body if (Test) goto loop ; Body can be any C statement, typically is a compound statement. Test is an expression returning an integer. If it evaluates to 0, that s interpreted as false. If it evaluates to anything but 0, that s interpreted as true. CS429 Slideset 8: 24

General While Translation #1 Jump-to-middle translation Used with -Og Goto version While version while (Test) Body goto test ; loop : Body test : if (Test) goto loop ; done : CS429 Slideset 8: 25

While Loop Example #1 C Code long pcount while (unsigned long s) { long result = 0; while (x) { result += x & 0x1; x >>= 1; return result ; Jump to Middle long pcount goto jtm (unsigned long x) { long result = 0; goto test ; loop : result += x & 0x1; x >>= 1; test : if (x) goto loop ; return result ; Compare to do-while version of function Initial goto starts loop at test CS429 Slideset 8: 26

General While Translation C Code while (Test) Body which is equivalent to: Do-While Version if (! Test) goto done ; do Body while (Test) ; done : which gets compiled as if it were: Goto Version if (! Test) goto done ; loop : Body if (Test) goto loop ; done : Are all three versions semantically equivalent? CS429 Slideset 8: 27

While Loop Example #2 C Code long pcount while (unsigned long x) { long result = 0; while (x) { result += x & 0x1; x >>= 1; return result ; Do-While version long pcount goto dw (unsigned long x) { long result = 0; if (!x) goto done ; loop : result += x & 0x1; x >>= 1; if (x) goto loop ; done : return result ; Compare to do-while version of function Initial conditional guards entrance to loop CS429 Slideset 8: 28

For Loop Form General Form for ( Init ; Test ; Update) Body #define WSIZE 8 sizeof (long) long pcount for (unsigned long x) { size t i ; long result = 0; for ( i=0; i<wsize; i++) { unsigned bit = (x >> i ) & 0x1; result += bit ; return result ; Init i = 0 Test i < WSIZE Update i++ Body { unsigned bit = (x >> i ) & 0x1; result += bit ; CS429 Slideset 8: 29

For Loop to While Loop For version for ( Init ; Test ; Update) Body translates to: While version Init ; while (Test) { Body; Update ; CS429 Slideset 8: 30

For-While Conversion Example Init i = 0 Test i < WSIZE Update i++ Body { unsigned bit = (x >> i ) & 0x1; result += bit ; long pcount for while (unsigned long x) { size t i ; long result = 0; i = 0; while ( i < WSIZE) { unsigned bit = (x >> i ) & 0x1; result += bit ; i++; return result ; CS429 Slideset 8: 31

For Loop Do-While Conversion C Code: long pcount for (unsigned long x) { size t i ; long result = 0; for ( i=0; i<wsize; i++) { unsigned bit = (x >> i ) & 0x1; result += bit ; return result ; Note that the initial test is not needed. Why? CS429 Slideset 8: 32 long pcount for goto dw (unsigned long x) { size t i ; long result = 0; i = 0; loop : { if (!( i < WSIZE)) # drop goto done ; # drop unsigned bit = (x >> i ) & 0x1; result += bit ; i++; if ( i < WSIZE) goto loop ; done : return result ;

Switch Statement Example long switch eq (long x, long y, long z) { long w = 1; switch (x) { case 1: w = y z ; break ; case 2: w = y/z ; / Fall through / case 3: w += z ; break ; case 5: case 6: w = z ; break ; default : w = 2; return w; Multiple case labels (e.g., 5, 6) Fall through cases (e.g., 2) Missing cases (e.g., 4) CS429 Slideset 8: 33

Jump Table Structure Switch Form switch (x) { case val 0 : Block 0 case val 1 : Block 1... case val n 1: Block n 1 Translation (Extended C) goto JTab[x ]; JTab: Jump Table Targ0 Targ1 Targ2... Targn-1 Jump Targets Targ0: Code Block 0 Targ1: Code Block 1 Targ2: Code Block 2... Targn-1: Code Block n-1 CS429 Slideset 8: 34

Switch Example long switch eq ( long x, long y, long z ) { long w = 1; switch (x) {... return w; Setup: switch eq : movq %rdx, %rcx cmpq $6, %rdi # x:6 ja.l8 jmp.l4 (, %rdi, 8) Register Use(s) %rdi Argument x %rsi Argument y %rdx Argument z %rax return value Note that w is not initialized here. CS429 Slideset 8: 35

Switch Statement Example long switch eq ( long x, long y, long z) { long w = 1; switch (x) {... return w; Jump table.section.rodata.align 8.L4 :.quad.l8 # x = 0.quad.L3 # x = 1.quad.L5 # x = 2.quad.L9 # x = 3.quad.L8 # x = 4.quad.L7 # x = 5.quad.L7 # x = 6 Setup: switch eq : movq %rdx, %rcx cmpq $6, %rdi # x:6 ja.l8 # use default jmp.l4 (, %rdi, 8) # goto JTAB[x], # indirect jump CS429 Slideset 8: 36

Assembly Setup Explanation Table Structure Each target requires 8 bytes Base address at.l4 Jumping Direct: jmp.l8 Jump target is denoted by label.l8 Indirect: jmp *.L4(, %rdi, 8) Start of jump table:.l4 Must scale by factor of 8 (addresses are 8 bytes) Fetch target from effective address (.L4 + x*8), but only for 0 x 6 CS429 Slideset 8: 37.section.rodata.align 8.L4 :.quad.l8 # x = 0.quad.L3 # x = 1.quad.L5 # x = 2.quad.L9 # x = 3.quad.L8 # x = 4.quad.L7 # x = 5.quad.L7 # x = 6

Jump Table Jump Table:.section.rodata.align 8.L4 :.quad.l8 # x = 0.quad.L3 # x = 1.quad.L5 # x = 2.quad.L9 # x = 3.quad.L8 # x = 4.quad.L7 # x = 5.quad.L7 # x = 6 long switch eq (long x, long y, long z) { long w = 1; switch (x) { case 1: w = y z ; break ; case 2: w = y/z ; / Fall through / case 3: w += z ; break ; case 5: case 6: w = z ; break ; default : w = 2; return w; CS429 Slideset 8: 38

Code Blocks (x == 1) switch (x) { case 1: //.L3 w = y z ; break ;....L3 : movq %rsi, %rax # y imulq %rdx, %rax # y z retq Register Use(s) %rdi Argument x %rsi Argument y %rdx Argument z %rax return value CS429 Slideset 8: 39

Handling Fall-Through long w = 1;... switch (x) {... case 2: w = y/z ; / Fall Through / case 3: w += z ; break ;... case 2: w = y/z ; goto merge;... case 3: w = 1; merge: w += z ; CS429 Slideset 8: 40

Code Blocks (x == 2, x == 3) long w = 1;... switch (x) {... case 2: w = y/z ; / Fall Through / case 3: w += z ; break ;....L5 : #Case 2 movq %rsi, %rax cqto idivq %rcx # y/z jmp.l6 # goto merge.l9 : #Case 3 movl $1, %eax # w = 1.L6 : # merge: addq %rcx, %rax # w += z retq Register Use(s) %rdi Argument x %rsi Argument y %rdx Argument z %rax return value CS429 Slideset 8: 41

Code Blocks (x == 5, x == 6, default) switch (x) {... case 5: //.L7 case 6: //.L7 w = z ; break ; default : //.L8 w = 2;.L7 : # Case 5, 6 movl $1, %eax # w = 1 subq %rdx, %rax # w = z retq.l8 : # default movl $2, %eax # 2 Register Use(s) %rdi Argument x %rsi Argument y %rdx Argument z %rax return value CS429 Slideset 8: 42

Jump Table Structure Suppose you have a set of switch labels that are sparse (widely separated). In this case, it doesn t make sense to use a jump table. If there are only a few labels, simply use a nested if structure. If there are many, build a balanced binary search tree. The compiler decides the appropriate thresholds for what s sparse, what are a few, etc. switch (x) { case 0: Block 0 case 620: Block 620... case 1040: Block 1040 CS429 Slideset 8: 43

Summarizing C Control if-then-else do-while while, for switch Assembler Control Conditional jump Conditional move Indirect jump (via jump tables) Compiler generates code sequence to implement more complex control Standard Techniques Loops converted to do-while or jump-to-middle form Large switch statements use jump tables Sparse switch statements may use decision trees CS429 Slideset 8: 44