Changeset 30

0 0

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ß.

0 Responses to “Changeset 30”


  1. No Comments

Leave a Reply




Flickr

RSS
Der Boss singt mit einem kleinen Jungen aus dem PublikumBoss-PanoramaDer Boss!DarkoDarko

Twitter

    digg