Skip to content

Instantly share code, notes, and snippets.

@joseanpg
Created December 13, 2012 21:45
Show Gist options
  • Save joseanpg/4280237 to your computer and use it in GitHub Desktop.
Save joseanpg/4280237 to your computer and use it in GitHub Desktop.
.text
.globl Main_init
.globl Int_init
.globl String_init
.globl Bool_init
.globl Main.main
Object_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
String_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Bool_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Int_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
IO_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal Object_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Main_init:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
jal IO_init
move $a0 $s0
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
Main.fibo:
addiu $sp $sp -20
sw $fp 20($sp)
sw $s0 16($sp)
sw $ra 12($sp)
addiu $fp $sp 4
move $s0 $a0
lw $s1 20($fp)
la $t2 int_const0
move $t1 $s1
la $a0 bool_const1
beq $t1 $t2 label2
la $a1 bool_const0
jal equality_test
label2:
lw $t1 12($a0)
beqz $t1 label0
la $a0 int_const0
b label1
label0:
lw $s1 20($fp)
la $t2 int_const1
move $t1 $s1
la $a0 bool_const1
beq $t1 $t2 label5
la $a1 bool_const0
jal equality_test
label5:
lw $t1 12($a0)
beqz $t1 label3
la $a0 int_const1
b label4
label3:
lw $s1 20($fp)
la $a0 int_const1
jal Object.copy
lw $t2 12($a0)
lw $t1 12($s1)
sub $t1 $t1 $t2
sw $t1 12($a0)
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label6
la $a0 str_const0
li $t1 1
jal _dispatch_abort
label6:
lw $t1 8($a0)
lw $t1 28($t1)
jalr $t1
move $s1 $a0
lw $s2 20($fp)
la $a0 int_const2
jal Object.copy
lw $t2 12($a0)
lw $t1 12($s2)
sub $t1 $t1 $t2
sw $t1 12($a0)
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
sw $s1 0($fp)
bne $a0 $zero label7
la $a0 str_const0
li $t1 1
jal _dispatch_abort
label7:
lw $t1 8($a0)
lw $t1 28($t1)
jalr $t1
lw $s1 0($fp)
jal Object.copy
lw $t2 12($a0)
lw $t1 12($s1)
add $t1 $t1 $t2
sw $t1 12($a0)
label4:
label1:
lw $fp 20($sp)
lw $s0 16($sp)
lw $ra 12($sp)
addiu $sp $sp 24
jr $ra
Main.main:
addiu $sp $sp -12
sw $fp 12($sp)
sw $s0 8($sp)
sw $ra 4($sp)
addiu $fp $sp 4
move $s0 $a0
la $a0 int_const3
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label8
la $a0 str_const0
li $t1 1
jal _dispatch_abort
label8:
lw $t1 8($a0)
lw $t1 28($t1)
jalr $t1
sw $a0 0($sp)
addiu $sp $sp -4
move $a0 $s0
bne $a0 $zero label9
la $a0 str_const0
li $t1 1
jal _dispatch_abort
label9:
lw $t1 8($a0)
lw $t1 16($t1)
jalr $t1
lw $fp 12($sp)
lw $s0 8($sp)
lw $ra 4($sp)
addiu $sp $sp 12
jr $ra
.data
.align 2
.globl class_nameTab
.globl Main_protObj
.globl Int_protObj
.globl String_protObj
.globl bool_const0
.globl bool_const1
.globl _int_tag
.globl _bool_tag
.globl _string_tag
_int_tag:
.word 3
_bool_tag:
.word 4
_string_tag:
.word 5
.globl _MemMgr_INITIALIZER
_MemMgr_INITIALIZER:
.word _NoGC_Init
.globl _MemMgr_COLLECTOR
_MemMgr_COLLECTOR:
.word _NoGC_Collect
.globl _MemMgr_TEST
_MemMgr_TEST:
.word 0
.word -1
str_const8:
.word 5
.word 5
.word String_dispTab
.word int_const0
.byte 0
.align 2
.word -1
str_const7:
.word 5
.word 6
.word String_dispTab
.word int_const4
.ascii "String"
.byte 0
.align 2
.word -1
str_const6:
.word 5
.word 6
.word String_dispTab
.word int_const5
.ascii "Bool"
.byte 0
.align 2
.word -1
str_const5:
.word 5
.word 5
.word String_dispTab
.word int_const6
.ascii "Int"
.byte 0
.align 2
.word -1
str_const4:
.word 5
.word 6
.word String_dispTab
.word int_const5
.ascii "Main"
.byte 0
.align 2
.word -1
str_const3:
.word 5
.word 5
.word String_dispTab
.word int_const2
.ascii "IO"
.byte 0
.align 2
.word -1
str_const2:
.word 5
.word 6
.word String_dispTab
.word int_const4
.ascii "Object"
.byte 0
.align 2
.word -1
str_const1:
.word 5
.word 8
.word String_dispTab
.word int_const7
.ascii "<basic class>"
.byte 0
.align 2
.word -1
str_const0:
.word 5
.word 6
.word String_dispTab
.word int_const8
.ascii "fibo.cl"
.byte 0
.align 2
.word -1
int_const8:
.word 3
.word 4
.word Int_dispTab
.word 7
.word -1
int_const7:
.word 3
.word 4
.word Int_dispTab
.word 13
.word -1
int_const6:
.word 3
.word 4
.word Int_dispTab
.word 3
.word -1
int_const5:
.word 3
.word 4
.word Int_dispTab
.word 4
.word -1
int_const4:
.word 3
.word 4
.word Int_dispTab
.word 6
.word -1
int_const3:
.word 3
.word 4
.word Int_dispTab
.word 15
.word -1
int_const2:
.word 3
.word 4
.word Int_dispTab
.word 2
.word -1
int_const1:
.word 3
.word 4
.word Int_dispTab
.word 1
.word -1
int_const0:
.word 3
.word 4
.word Int_dispTab
.word 0
.word -1
bool_const0:
.word 4
.word 4
.word Bool_dispTab
.word 0
.word -1
bool_const1:
.word 4
.word 4
.word Bool_dispTab
.word 1
class_nameTab:
.word str_const2
.word str_const3
.word str_const4
.word str_const5
.word str_const6
.word str_const7
class_objTab:
.word Object_protObj
.word Object_init
.word IO_protObj
.word IO_init
.word Main_protObj
.word Main_init
.word Int_protObj
.word Int_init
.word Bool_protObj
.word Bool_init
.word String_protObj
.word String_init
Object_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
String_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word String.length
.word String.concat
.word String.substr
Bool_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
Int_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
IO_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
Main_dispTab:
.word Object.abort
.word Object.type_name
.word Object.copy
.word IO.out_string
.word IO.out_int
.word IO.in_string
.word IO.in_int
.word Main.fibo
.word Main.main
.word -1
Object_protObj:
.word 0
.word 3
.word Object_dispTab
.word -1
String_protObj:
.word 5
.word 5
.word String_dispTab
.word int_const0
.word 0
.word -1
Bool_protObj:
.word 4
.word 4
.word Bool_dispTab
.word 0
.word -1
Int_protObj:
.word 3
.word 4
.word Int_dispTab
.word 0
.word -1
IO_protObj:
.word 1
.word 3
.word IO_dispTab
.word -1
Main_protObj:
.word 2
.word 3
.word Main_dispTab
.globl heap_start
heap_start:
.word 0
class Main inherits IO {
fibo(i:Int):Int {
if i=0 then
0
else if i=1 then
1
else
fibo(i-1)+fibo(i-2)
fi fi
};
main():Object {
out_int(fibo(15))
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment