	.file	"bsp1.c"
gcc2_compiled.:
	.section	".rodata"
	.align 2
.LC0:
	.string	"i: %d\tinv: %d\n"
	.section ".text"
	.align 2
	.globl main
	.type	 main,@function
main:
	stwu %r1,-16(%r1)
	mflr %r0
	stw %r31,12(%r1)
	stw %r0,20(%r1)
	mr %r31,%r1
.START:	
	addis %r9,0,i@ha	# Läd die oberen 16 Bit der Adresse von i
				# in die Bits 17 bis 32 des Registers r9.
				#
				# Die Konstruktion i@ha (anstelle von i@h)
				# ist dabei notwendig, um eine Veränderung
				# durch die Erweiterung mit einem Vorzeichen-
				# bit, die addis vornimmt, zu kompensieren.
	
	addi %r11,%r9,i@l	# Addiert die unteren 16 Bits der Adresse der
				# Variablen i zum Inhalt des Registers r9
				# (das die oberen 16 Bit enthält) und schreibt
				# das Ergebnis in das Register r11, welches
				# damit die komplette Adresse von i enthält.
	
	li %r0,1		# Abkürzung für addi %r0,0,1
				# Schreibt den Wert 1 in das Register r0.
	
	stw %r0,0(%r11)		# Schreibt den Inhalt von Register r0 (=1)
				# an die Adresse, die durch die Summe von 0
				# und dem Inhalt des Registers r11 definiert
				# ist.
				# Da r11 auf den Inhalt der Variablen i ver-
				# weist, wird ihr der Wert 1 zugewiesen.

				# i = 1
	
	addis %r9,0,i@ha
	addi %r11,%r9,i@l	# s.o.
	
	lwz %r0,0(%r11)		# Der Inhalt der Adresse 0+%r11 (der Inhalt
				# der Variablen i) wird in das Resister r0
				# geladen.
	
	cmpwi %cr1,%r0,0	# Abkürzung für cmpi 1,0,%r0,0
				# Vergleicht den Inhalt des Registers r0 mit
				# dem Wert 0 und schreibt die sich daraus
				# ergebenden Statusbits in das Register cr1.
				# Dabei wird u.a. das Bit 1 des cr1 (also Bit
				# 5 des CR) gesetzt:
				#  (r0>0)  -> Bit 5 auf 1
				#  (r0<=0) -> Bit 5 auf 0
				#
				# Die Bedeutung des einzelnen Bits im Register
				# CR kann im Programmers Reference Guide nach-
				# gelesen werden.
	
	bc 12,5,.L2		# Das 5. Bit des CR ist die Bedingung dieses
				# Sprungs.
				# Die 12 bedeutet:	
				# 011-- :	 Sprung, wenn Bedingung TRUE
		
	addis %r11,0,inv@ha	
	addi %r9,%r11,inv@l	# Schreibt Adresse von inv in Register r9.
	
	addis %r11,0,i@ha
	addi %r10,%r11,i@l	# Schreibt Adresse von i in Register r10.
	
	lwz %r0,0(%r10)		# Schreibt Inhalt der Adresse in r10 in
				# das Register r0.
	
	addic %r11,%r0,1	# Addiert eine 1 zum Wert in Register r0 und
				# schreibt das Ergebnis in r11 (= i+1).
	
	stw %r11,0(%r9)		# Schreibt den Wert aus r11 an die Adresse in
				# Register r9.
	
				# inv = i+1

	b .L3			# Sprung zu Label .L3
.L2:
	addis %r11,0,inv@ha	
	addi %r9,%r11,inv@l	# Schreibt Adresse von inv in Register r9.
	
	addis %r11,0,i@ha
	addi %r10,%r11,i@l	# Schreibt Adresse von i in Register r10.
	
	lwz %r0,0(%r10)		# Schreibt Inhalt der Adresse in r10 in das
				# Register r0.
	 
	addic %r11,%r0,-1	# Subtrahiert eine 1 vom Wert in Register r0
				# und schreibt das Ergebnis in Register 
				# r11 (= i-1)
	
	stw %r11,0(%r9)		# Schreibt den Wert aus r11 an die Adresse in
				# Register r9.

				# inv = i-1
.END:	
.L3:
	addis %r11,0,i@ha	# Ab hier erfolgt die Ausgabe des Ergebnis
	addi %r9,%r11,i@l
	addis %r10,0,inv@ha
	addi %r11,%r10,inv@l
	addis %r10,0,.LC0@ha
	addi %r3,%r10,.LC0@l
	lwz %r4,0(%r9)
	lwz %r5,0(%r11)
	crxor 6,6,6
	bl printf
.L1:
	lwz %r11,0(%r1)
	lwz %r0,4(%r11)
	mtlr %r0
	lwz %r31,-4(%r11)
	mr %r1,%r11
	blr
.Lfe1:
	.size	 main,.Lfe1-main
	.comm	i,4,4
	.comm	inv,4,4
	.ident	"GCC: (GNU) 2.8.1"
