Figure 3-21. C Switch: Condition Register Logical Code Example
|
|
C Source Code
|
|
|
switch(i){
|
|
|
case 0: case 20: case 30: case 40:
|
|
|
i+=10; break;
|
|
|
}
|
|
|
|
|
|
|
|
Assembly Code
|
|
|
lwz
|
R3,i
|
# load i into R3
|
|
|
cmpwi
|
cr0,R3,0
|
# compare R3 to 0 -> cr0
|
|
|
cmpwi
|
cr1,R3,20
|
# compare R3 to 20 -> cr1
|
|
|
cmpwi
|
cr6,R3,30
|
# compare R3 to 30 -> cr6
|
|
|
cmpwi
|
cr7,R3,40
|
# compare R3 to 40 -> cr7
|
|
|
cror
|
cr5[eq],cr0[eq],cr1[eq]
|
# cr5[eq] = cr0[eq] | cr1[eq]
|
|
|
cror
|
cr0[eq],cr7[eq],cr6[eq]
|
# cr0[eq] = cr7[eq] | cr6[eq]
|
|
|
cror
|
cr1[eq],cr5[eq],cr0[eq]
|
# cr1[eq] = cr5[eq] | cr0[eq]
|
|
|
bne
|
cr1,out
|
# i != 0, 20, 30, 40, goto out
|
|
|
addi
|
R3,R3,10
|
# i += 10
|
|
|
stw
|
R3,i
|
# store new i
|
|
out:
|
|
|
|