48 lines
680 B
ArmAsm
48 lines
680 B
ArmAsm
the_function:
|
|
cmpwi cr6, r3, 3
|
|
bgt .case_3
|
|
lis r11, .the_table@h
|
|
addi r11, r11, .the_table@l
|
|
slwi r3, r3, 2
|
|
lwzx r3, r11, r3
|
|
mtspr ctr, r3
|
|
bctr
|
|
.the_table:
|
|
.long .case_0
|
|
.long .case_1
|
|
.long .case_2
|
|
.long .case_3
|
|
.case_0:
|
|
li r11, 8
|
|
b .the_divide
|
|
.case_1:
|
|
li r11, 16
|
|
b .the_divide
|
|
.case_2:
|
|
li r11, 24
|
|
b .the_divide
|
|
.case_3:
|
|
li r11, 32
|
|
.the_divide:
|
|
extsw r11, r11
|
|
tdllei r11, 0
|
|
divdu r4, r4, r11
|
|
blr
|
|
|
|
test_jumptable_constants:
|
|
mfspr r12, lr
|
|
li r3, 0
|
|
li r4, 1024
|
|
bl the_function
|
|
li r3, 1
|
|
li r4, 1024
|
|
bl the_function
|
|
li r3, 2
|
|
li r4, 1024
|
|
bl the_function
|
|
li r3, 3
|
|
li r4, 1024
|
|
bl the_function
|
|
mtspr lr, r12
|
|
blr
|