Mein erstes switch
-Statement hat gerade fehlerfrei compiliert! Oh Mann, das ist soo cool, wie aus einem kleinen sinnlosen Programm richtiger Assembler-Code entsteht. Zwar ist es für die meisten nicht gerade erhellend, aber ich muß das einfach posten
# CS 561 : Compiler Construction
# Summer 2006
# SPIM S20 MIPS simulator.
# MIPS code for test/switch.c
.globl main
main:
addu $s7, $0, $ra
addi $tt0, $0, 3
addi $s0, $0, 4
la $s2, jt_0
# handle switch value not in interval
slt $s2, $tt0, $zero
bne $s2, $0, .switch_escape_2
slt $s2, $tt0, $s0
beq $s2, $0, .switch_escape_2
# switch performed by using jump table
add $s0, $tt0, $tt0
add $s0, $s0, $s0
add $s0, $s0, $s2
lw $s2, 0($s0)
jr $s2
L0:
addi $tt0, $0, 0
j .switch_escape_2
L1:
addi $tt0, $0, 2
j .switch_escape_2
L2:
addi $tt0, $0, 1
j .switch_escape_2
L3:
addi $tt0, $0, 0
j .switch_escape_2
.switch_escape_2:
addu $ra, $0, $s7
jr $ra
add $0, $0, $0
.data
jt_0: .word L0, L1, L2, L3
Und obwohl es immer noch ziemlich kompliziert ist, macht es im Moment sogar Spaß.