    # MIPS assembly: native format
    # Automatically generated by ASM.MIPSGenerator

	.data
	.align 2
data_base:
	.space 8
	.asciiz "FAIL: shadow by formal: %d %d\n"
	.asciiz "FAIL: shadow by local: %d %d\n"
	.asciiz "FAIL: proc sideeffect in first operand: %d %d\n"
	.asciiz "proc sideeffect OK\n"
	.asciiz "shadow by local OK\n"
	.asciiz "shadow by formal OK\n"
	.asciiz "Runtime exception: array index out of bounds.  Aborting.\n"
	.asciiz "Runtime exception: control fell off the end of a non-void procedure.  Aborting.\n"
	.text
	.globl main
main:
	la $23,data_base
	jal _main
	nop		# Function call: 0 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	jal exit
	nop		# Clean up from callout
	nop		# Function callout sequence completed
_main:
	.ent _main
	sw $30,-4($29)
	move $30,$29
	sw $31,-8($29)
	sw $16,-12($29)
	sw $17,-16($29)
	sw $18,-20($29)
	sw $19,-24($29)
	sw $20,-28($29)
	sw $21,-32($29)
	sw $22,-36($29)
	sub $29,$29,112
	nop		# main begins here
	li $2,0
	sw $2,-100($30)
	li $2,2
	sw $2,4($23)
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	lw $4,4($23)
	jal _m1
	nop		# Clean up from call
	nop		# Function call sequence completed
	sw $2,-76($30)
	lw $2,-76($30)
	sw $2,-100($30)
	lw $2,4($23)
	seq $25,$2,2
	sw $25,-72($30)
	lw $2,-72($30)
	bne $2,$0,label_10
label_9:
	nop		# Function call: 3 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	lw $6,0($23)
	lw $5,4($23)
	la $4,data_base + 8
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	sw $2,-68($30)
label_11:
	li $2,2
	sw $2,4($23)
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	lw $4,4($23)
	jal _m2
	nop		# Clean up from call
	nop		# Function call sequence completed
	move $22,$2
	move $2,$22
	sw $2,-100($30)
	lw $2,4($23)
	seq $21,$2,2
	move $2,$21
	bne $2,$0,label_6
label_5:
	nop		# Function call: 3 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	lw $6,0($23)
	lw $5,4($23)
	la $4,data_base + 39
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	move $20,$2
label_7:
	li $2,2
	sw $2,4($23)
	li $2,3
	sw $2,0($23)
	lw $2,0($23)
	add $19,$2,100
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	move $4,$19
	jal _m3
	nop		# Clean up from call
	nop		# Function call sequence completed
	move $18,$2
	lw $2,0($23)
	sub $17,$2,50
	add $16,$18,$17
	move $2,$16
	sw $2,0($23)
	lw $2,4($23)
	seq $25,$2,4
	sw $25,-112($30)
	lw $2,-112($30)
	bne $2,$0,label_2
label_1:
	nop		# Function call: 3 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	lw $6,0($23)
	lw $5,4($23)
	la $4,data_base + 69
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	sw $2,-108($30)
label_3:
	nop		# main's epilogue
	move $29,$30
	lw $30,-4($29)
	lw $31,-8($29)
	lw $16,-12($29)
	lw $17,-16($29)
	lw $18,-20($29)
	lw $19,-24($29)
	lw $20,-28($29)
	lw $21,-32($29)
	lw $22,-36($29)
	jr $31
	.end _main
label_2:
	lw $2,0($23)
	seq $25,$2,56
	sw $25,-104($30)
	lw $2,-104($30)
	bne $2,$0,label_0
	b label_1
label_0:
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	la $4,data_base + 116
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	sw $2,-96($30)
	b label_3
label_6:
	lw $2,-100($30)
	seq $25,$2,1002
	sw $25,-92($30)
	lw $2,-92($30)
	bne $2,$0,label_4
	b label_5
label_4:
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	la $4,data_base + 136
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	sw $2,-88($30)
	b label_7
label_10:
	lw $2,-100($30)
	seq $25,$2,1
	sw $25,-84($30)
	lw $2,-84($30)
	bne $2,$0,label_8
	b label_9
label_8:
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	la $4,data_base + 156
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	sw $2,-80($30)
	b label_11
_m3:
	.ent _m3
	sw $30,-4($29)
	move $30,$29
	sw $31,-8($29)
	sw $16,-12($29)
	sw $17,-16($29)
	sw $18,-20($29)
	sw $19,-24($29)
	sw $20,-28($29)
	sw $21,-32($29)
	sw $22,-36($29)
	sub $29,$29,48
	nop		# m3 begins here
	move $2,$4
	move $16,$2
	li $2,4
	sw $2,4($23)
	move $2,$16
	sw $2,0($23)
	lw $2,0($23)
	sub $17,$2,100
	move $2,$17
label_12:
	nop		# m3's epilogue
	move $29,$30
	lw $30,-4($29)
	lw $31,-8($29)
	lw $16,-12($29)
	lw $17,-16($29)
	lw $18,-20($29)
	lw $19,-24($29)
	lw $20,-28($29)
	lw $21,-32($29)
	lw $22,-36($29)
	jr $31
	.end _m3
_m2:
	.ent _m2
	sw $30,-4($29)
	move $30,$29
	sw $31,-8($29)
	sw $16,-12($29)
	sw $17,-16($29)
	sw $18,-20($29)
	sw $19,-24($29)
	sw $20,-28($29)
	sw $21,-32($29)
	sw $22,-36($29)
	sub $29,$29,48
	nop		# m2 begins here
	li $2,0
	move $18,$2
	move $2,$4
	move $16,$2
	add $17,$16,1000
	move $2,$17
	move $18,$2
	move $2,$18
label_13:
	nop		# m2's epilogue
	move $29,$30
	lw $30,-4($29)
	lw $31,-8($29)
	lw $16,-12($29)
	lw $17,-16($29)
	lw $18,-20($29)
	lw $19,-24($29)
	lw $20,-28($29)
	lw $21,-32($29)
	lw $22,-36($29)
	jr $31
	.end _m2
_m1:
	.ent _m1
	sw $30,-4($29)
	move $30,$29
	sw $31,-8($29)
	sw $16,-12($29)
	sw $17,-16($29)
	sw $18,-20($29)
	sw $19,-24($29)
	sw $20,-28($29)
	sw $21,-32($29)
	sw $22,-36($29)
	sub $29,$29,48
	nop		# m1 begins here
	li $2,0
	move $18,$2
	move $2,$4
	move $17,$2
	move $2,$17
	move $18,$2
	li $2,100
	move $17,$2
	sub $16,$18,1
	move $2,$16
label_14:
	nop		# m1's epilogue
	move $29,$30
	lw $30,-4($29)
	lw $31,-8($29)
	lw $16,-12($29)
	lw $17,-16($29)
	lw $18,-20($29)
	lw $19,-24($29)
	lw $20,-28($29)
	lw $21,-32($29)
	lw $22,-36($29)
	jr $31
	.end _m1
array_bounds_runtime_exception:
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	la $4,data_base + 177
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	nop		# Function call: 0 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	jal exit
	nop		# Clean up from callout
	nop		# Function callout sequence completed
fell_off_end_runtime_exception:
	nop		# Function call: 1 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	la $4,data_base + 235
	jal printf
	nop		# Clean up from callout
	nop		# Function callout sequence completed
	nop		# Function call: 0 args, 0 callersaves, 0 padding
	nop		# Placement of arguments
	jal exit
	nop		# Clean up from callout
	nop		# Function callout sequence completed

