main:
	BR nbody_main		; Jump to main
nbody_main:
main_top0:
	PRINTS "init nbody..."		; Print string
	CYCLES 		; print cycles
	MOVECC 0, q1		; se = how far away to locate object? who knows...
	SPAWNC q1, nbody_SimEngine_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 5, q0		; send return q
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	PRINTS "starting nbody..."		; Print string
	CYCLES 		; print cycles
	SPAWNC @q5, nbody_SimEngine_start, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q5, q0		; send this se
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
nbody_main_end:
	HALT 		; end of method
nbody_Semaphore__lookup:
	SHRC @q0, 32, q1		; extract high order bits
	BRNZ q1, nbody_Semaphore__lookup_int		; interface?
	SHLC q0, 1, q1		; compute jump offset
	BREL q1		; branch rel based on method number
	MOVECL nbody_Semaphore_assignParent, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_Semaphore_assignChildren, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_Semaphore_assignLeaves, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_Semaphore_go, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_Semaphore_signal, q1		; move method addr to temp
	JMP q0		; return to caller
nbody_Semaphore__lookup_int:
	HALT 		; Whoops; didn't match anything!
nbody_Semaphore_assignParent:
	MMS q5, q6		; open store queue
	MOVE q0, q7		; save this
	MOVE q0, q8		; move par to it's allocated q
assignParent_top1:
	MOVE @q7, q5		; Access this
	MOVECL 2, q5		; Send ivar offset parent
	MOVE q8, q6		; (THIS).parent = par
nbody_Semaphore_assignParent_end:
	EEQ q5		; ensure stores done
	UNMAPQ q5		; disconnect from store addr
	UNMAPQ q6		; disconnect from store data
	FLUSHQ q7		; get rid of this
	HALT 		; end of method
nbody_Semaphore_assignChildren:
	MMS q5, q6		; open store queue
	MOVE q0, q7		; save this
	MOVE q0, q8		; move s1 to it's allocated q
	MOVE q0, q9		; move s2 to it's allocated q
assignChildren_top2:
	MOVE @q7, q5		; Access this
	MOVECL 8, q5		; Send ivar offset sem1
	MOVE q8, q6		; (THIS).sem1 = s1
	MOVECL 9, q5		; Send ivar offset sem2
	MOVE q9, q6		; (THIS).sem2 = s2
nbody_Semaphore_assignChildren_end:
	EEQ q5		; ensure stores done
	UNMAPQ q5		; disconnect from store addr
	UNMAPQ q6		; disconnect from store data
	FLUSHQ q7		; get rid of this
	HALT 		; end of method
nbody_Semaphore_constructor:
	MMS q5, q6		; open store queue
	MOVE q0, q8		; save return context id
	MOVE q0, q8		; save return queue
	PROCID q1		; storage is near constructor thread
	ALLOCATEC q1, 10, q7		; allocate space for object
	MOVE @q7, q5		; store method lookup pointer
	MOVECL 0, q5		; pointer is first element
	MOVECL nbody_Semaphore__lookup, q6		; stash pointer
	EEQ q6		; make sure it's saved before continuing
	MOVE q0, q9		; move isTop to it's allocated q
	MOVE q0, q10		; move eng to it's allocated q
	MOVE q0, q11		; move isBot to it's allocated q
constructor_top3:
	MOVE @q9, q1		; test isTop
	BRZ q1, after_if5		; if false, do false
true_branch4:
	PRINTS "created top object"		; Print string
after_if5:
	MOVE @q7, q5		; Access this
	MOVECL 1, q5		; Send ivar offset semCount
	MOVECL 0, q6		; (THIS).semCount = 0
	MOVECL 3, q5		; Send ivar offset top
	MOVE q9, q6		; (THIS).top = isTop
	MOVECL 5, q5		; Send ivar offset se
	MOVE q10, q6		; (THIS).se = eng
	MOVECL 4, q5		; Send ivar offset bottom
	MOVE q11, q6		; (THIS).bottom = isBot
	SIC @q8, q1		; got return capability?
	BRZ q1, nbody_Semaphore_constructor_end		; should return?
	MOVE q8, q1		; ready return id
	MAPQ q8, q8, q1		; map to return point
	MOVE @q7, q8		; return this
	EEQ q8		; make sure it's sent
	UNMAPQ q8		; disconnect from caller
nbody_Semaphore_constructor_end:
	EEQ q5		; ensure stores done
	UNMAPQ q5		; disconnect from store addr
	UNMAPQ q6		; disconnect from store data
	FLUSHQ q8		; get rid of return point
	FLUSHQ q7		; get rid of this
	HALT 		; end of method
nbody_Semaphore_go:
	MML q5, q6		; open load queue
	MOVE q0, q7		; save this
go_top6:
	MOVE @q7, q5		; Access this
	MOVECL 4, q5		; Send ivar offset bottom
	MOVE q6, q1		; test (THIS).bottom
	BRZ q1, false_branch9		; if false, do false
true_branch7:
	MOVECL 6, q5		; Send ivar offset child1
	MOVE q6, q8		; TEMP$0 = (THIS).child1
	SPAWNC @q8, nbody_Body_move, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q8, q0		; send this TEMP$0
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q7, q5		; Access this
	MOVECL 7, q5		; Send ivar offset child2
	MOVE q6, q9		; TEMP$1 = (THIS).child2
	SPAWNC @q9, nbody_Body_move, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q9, q0		; send this TEMP$1
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
after_if8:
nbody_Semaphore_go_end:
	UNMAPQ q5		; disconnect from load
	FLUSHQ q7		; get rid of this
	HALT 		; end of method
false_branch9:
	MOVECL 8, q5		; Send ivar offset sem1
	MOVE q6, q10		; TEMP$2 = (THIS).sem1
	SPAWNC @q10, nbody_Semaphore_go, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q10, q0		; send this TEMP$2
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q7, q5		; Access this
	MOVECL 9, q5		; Send ivar offset sem2
	MOVE q6, q11		; TEMP$3 = (THIS).sem2
	SPAWNC @q11, nbody_Semaphore_go, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q11, q0		; send this TEMP$3
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	BR after_if8
nbody_Semaphore_assignLeaves:
	MMS q5, q6		; open store queue
	MOVE q0, q7		; save this
	MOVE q0, q8		; move c1 to it's allocated q
	MOVE q0, q9		; move c2 to it's allocated q
assignLeaves_top10:
	MOVE @q7, q5		; Access this
	MOVECL 6, q5		; Send ivar offset child1
	MOVE q8, q6		; (THIS).child1 = c1
	MOVECL 7, q5		; Send ivar offset child2
	MOVE q9, q6		; (THIS).child2 = c2
nbody_Semaphore_assignLeaves_end:
	EEQ q5		; ensure stores done
	UNMAPQ q5		; disconnect from store addr
	UNMAPQ q6		; disconnect from store data
	FLUSHQ q7		; get rid of this
	HALT 		; end of method
nbody_Semaphore_signal:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
signal_top11:
	MOVE @q9, q5		; Access this
	MOVECL 1, q5		; Send ivar offset semCount
	MOVE q6, q10		; TEMP$0 = (THIS).semCount
	ADDC q10, 1, q11		; TEMP$1 = TEMP$0 + 1
	MOVE @q9, q7		; Access this
	MOVECL 1, q7		; Send ivar offset semCount
	MOVE q11, q8		; (THIS).semCount = TEMP$1
	MOVECL 1, q5		; Send ivar offset semCount
	MOVE q6, q10		; TEMP$0 = (THIS).semCount
	SEQC q10, 2, q1		; test TEMP$0 == 2
	BRZ q1, after_if17		; if false, do false
true_branch12:
	MOVECL 1, q7		; Send ivar offset semCount
	MOVECL 0, q8		; (THIS).semCount = 0
	MOVECL 3, q5		; Send ivar offset top
	MOVE q6, q12		; TEMP$2 = (THIS).top
	SEQC q12, 0, q1		; test !TEMP$2
	BRZ q1, after_if14		; if false, do false
true_branch13:
	PRINTS "signalling semaphore"		; Print string
	MOVECL 2, q5		; Send ivar offset parent
	MOVE q6, q13		; TEMP$3 = (THIS).parent
	SPAWNC @q13, nbody_Semaphore_signal, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q13, q0		; send this TEMP$3
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
after_if14:
	MOVE @q9, q5		; Access this
	MOVECL 3, q5		; Send ivar offset top
	MOVE q6, q1		; test (THIS).top
	BRZ q1, after_if16		; if false, do false
true_branch15:
	PRINTS "signalling top"		; Print string
	MOVECL 5, q5		; Send ivar offset se
	MOVE q6, q14		; TEMP$4 = (THIS).se
	SPAWNC @q14, nbody_SimEngine_signal, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q14, q0		; send this TEMP$4
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
after_if16:
after_if17:
nbody_Semaphore_signal_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_SimEngine__lookup:
	SHRC @q0, 32, q1		; extract high order bits
	BRNZ q1, nbody_SimEngine__lookup_int		; interface?
	SHLC q0, 1, q1		; compute jump offset
	BREL q1		; branch rel based on method number
	MOVECL nbody_SimEngine_signal, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_SimEngine_step, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_SimEngine_start, q1		; move method addr to temp
	JMP q0		; return to caller
nbody_SimEngine__lookup_int:
	HALT 		; Whoops; didn't match anything!
nbody_SimEngine_constructor:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q10		; save return context id
	MOVE q0, q10		; save return queue
	PROCID q1		; storage is near constructor thread
	ALLOCATEC q1, 4, q9		; allocate space for object
	MOVE @q9, q7		; store method lookup pointer
	MOVECL 0, q7		; pointer is first element
	MOVECL nbody_SimEngine__lookup, q8		; stash pointer
	EEQ q8		; make sure it's saved before continuing
constructor_top18:
	MOVECL 32, q11		; NUMPLANETS = 32
	MOVECF 400.000000, q12		; xsize = 400.0
	MOVECF 400.000000, q13		; ysize = 400.0
	MOVECF 0.000000, q14		; TEMP$0 = (float)
	FSUBC q14, 9.700000, q15		; G = TEMP$0 - 9.7
	MOVE @q9, q7		; Access this
	MOVECL 2, q7		; Send ivar offset numIter
	MOVECL 10, q8		; (THIS).numIter = 10
	MOVECL 3, q7		; Send ivar offset iter
	MOVECL 0, q8		; (THIS).iter = 0
	PROCID q1		; bodies = locate array near current thread
	ALLOCATE q1, @q11, q16		; new Body[(COPY NO NUMPLANETS)]NUMPLANETS
	DIVC @q11, 2, q17		; TEMP$1 = NUMPLANETS / 2
	PROCID q1		; sem0 = locate array near current thread
	ALLOCATE q1, q17, q18		; new Semaphore[(DEQUEUE NO TEMP$1)]TEMP$1
	MOVECL 0, q19		; i = 0
while_test19:
	SLT @q19, @q11, q1		; test i < NUMPLANETS
	BRZ q1, after_while24		; if false, do false
while_body20:
	MOVECC 0, q1		; sem = how far away to locate object? who knows...
	SPAWNC q1, nbody_Semaphore_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 20, q0		; send return q
	MOVECL 0, q0		; send arg: false
	MOVE @q9, q0		; send arg: this
	MOVECL 1, q0		; send arg: true
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SEQC @q19, 20, q1		; test i == 20
	BRZ q1, false_branch23		; if false, do false
true_branch21:
	FRANDOM q0		; generate an fp random number
	MOVE q0, q21		; TEMP$2 = Move return value to dest
	MOVE q21, q22		; TEMP$3 = TEMP$2
	FMUL q22, @q12, q23		; TEMP$4 = TEMP$3 * xsize
	FRANDOM q0		; generate an fp random number
	MOVE q0, q24		; TEMP$5 = Move return value to dest
	MOVE q24, @q25		; TEMP$6 = TEMP$5
	FMUL @q25, @q13, q26		; TEMP$7 = TEMP$6 * ysize
	MOVECC 0, q1		; TEMP$8 = how far away to locate object? who knows...
	SPAWNC q1, nbody_Body_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 27, q0		; send return q
	MOVE q23, q0		; send arg: TEMP$4
	MOVE q26, q0		; send arg: TEMP$7
	MOVECF 500.000000, q0		; send arg: 500.0
	MOVECF 5.000000, q0		; send arg: 5.0
	MOVECF 0.000000, q0		; send arg: 0.0
	MOVECF 0.000000, q0		; send arg: 0.0
	MOVE @q19, q0		; send arg: i
	MOVE q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q16, q7		; Access array bodies
	MOVE @q19, q7		; Send array offset i
	MOVE q27, q8		; (COPY NO bodies)[(COPY NO i)] = TEMP$8
after_if22:
	ADDC q19, 1, q19		; i = i + 1
	FRANDOM q0		; generate an fp random number
	MOVE q0, q21		; TEMP$2 = Move return value to dest
	MOVE q21, q22		; TEMP$3 = TEMP$2
	FMUL q22, @q12, q23		; TEMP$4 = TEMP$3 * xsize
	FRANDOM q0		; generate an fp random number
	MOVE q0, q24		; TEMP$5 = Move return value to dest
	MOVE q24, q25		; TEMP$6 = TEMP$5
	FMUL @q25, @q13, q26		; TEMP$7 = TEMP$6 * ysize
	MOVECF 0.000100, q1		; left-hand constants not allowed
	FMUL q1, @q15, q28		; TEMP$9 = 1.0E-4 * G
	FMUL q28, @q15, q29		; TEMP$10 = TEMP$9 * G
	MOVECF 0.000100, q1		; left-hand constants not allowed
	FMUL q1, @q15, q30		; TEMP$11 = 1.0E-4 * G
	FMUL q30, @q15, q31		; TEMP$12 = TEMP$11 * G
	MOVECC 0, q1		; TEMP$14 = how far away to locate object? who knows...
	SPAWNC q1, nbody_Body_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 32, q0		; send return q
	MOVE q23, q0		; send arg: TEMP$4
	MOVE q26, q0		; send arg: TEMP$7
	MOVECF 1.000000, q0		; send arg: 1.0
	MOVECF 1.000000, q0		; send arg: 1.0
	MOVE q29, q0		; send arg: TEMP$10
	MOVE q31, q0		; send arg: TEMP$12
	MOVE @q19, q0		; send arg: i
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q19, q7		; Send array offset i
	MOVE q32, q8		; (COPY NO bodies)[(COPY NO i)] = TEMP$14
	ADDC q19, 1, q19		; i = i + 1
	SUBC @q19, 2, q17		; TEMP$1 = i - 2
	MOVE @q16, q5		; Access array bodies
	MOVE q17, q5		; Send array offset TEMP$1
	MOVE q6, q27		; TEMP$8 = (COPY NO bodies)[(DEQUEUE NO TEMP$1)]
	SUBC @q19, 1, q33		; TEMP$15 = i - 1
	MOVE q33, q5		; Send array offset TEMP$15
	MOVE q6, q34		; TEMP$16 = (COPY NO bodies)[(DEQUEUE NO TEMP$15)]
	SPAWNC @q20, nbody_Semaphore_assignLeaves, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE @q20, q0		; send this sem
	MOVE q27, q0		; send arg: TEMP$8
	MOVE q34, q0		; send arg: TEMP$16
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	DIVC @q19, 2, q17		; TEMP$1 = i / 2
	SUBC q17, 1, q33		; TEMP$15 = TEMP$1 - 1
	MOVE @q18, q7		; Access array sem0
	MOVE q33, q7		; Send array offset TEMP$15
	MOVE q20, q8		; (COPY NO sem0)[(DEQUEUE NO TEMP$15)] = sem
	PRINTS "."		; Print string
	CYCLES 		; print cycles
	BR while_test19
false_branch23:
	FRANDOM q0		; generate an fp random number
	MOVE q0, q21		; TEMP$2 = Move return value to dest
	MOVE q21, q22		; TEMP$3 = TEMP$2
	FMUL q22, @q12, q23		; TEMP$4 = TEMP$3 * xsize
	FRANDOM q0		; generate an fp random number
	MOVE q0, q24		; TEMP$5 = Move return value to dest
	MOVE q24, @q25		; TEMP$6 = TEMP$5
	FMUL @q25, @q13, q26		; TEMP$7 = TEMP$6 * ysize
	MOVECF 0.000100, q1		; left-hand constants not allowed
	FMUL q1, @q15, q28		; TEMP$9 = 1.0E-4 * G
	FMUL q28, @q15, q29		; TEMP$10 = TEMP$9 * G
	MOVECF 0.000100, q1		; left-hand constants not allowed
	FMUL q1, @q15, q30		; TEMP$11 = 1.0E-4 * G
	FMUL q30, @q15, q31		; TEMP$12 = TEMP$11 * G
	MOVECC 0, q1		; TEMP$13 = how far away to locate object? who knows...
	SPAWNC q1, nbody_Body_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 35, q0		; send return q
	MOVE q23, q0		; send arg: TEMP$4
	MOVE q26, q0		; send arg: TEMP$7
	MOVECF 1.000000, q0		; send arg: 1.0
	MOVECF 1.000000, q0		; send arg: 1.0
	MOVE q29, q0		; send arg: TEMP$10
	MOVE q31, q0		; send arg: TEMP$12
	MOVE @q19, q0		; send arg: i
	MOVE q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q16, q7		; Access array bodies
	MOVE @q19, q7		; Send array offset i
	MOVE q35, q8		; (COPY NO bodies)[(COPY NO i)] = TEMP$13
	BR after_if22
after_while24:
	MOVECL 0, @q19		; i = 0
	MOVE q16, q36		; lbodies = bodies
	MOVE @q11, q37		; NP = NUMPLANETS
while_test25:
	SLT @q19, @q37, q1		; test i < NP
	BRZ q1, after_while30		; if false, do false
while_body26:
	MOVE @q36, q5		; Access array lbodies
	MOVE @q19, q5		; Send array offset i
	MOVE q6, q38		; b = (COPY NO lbodies)[(COPY NO i)]
	MOVE q38, q5		; Access (DEQUEUE NO b)b
	MOVECL 9, q5		; Send ivar offset planets
	MOVE q6, @q39		; planets = (DEQUEUE NO b).planets
	MOVECL 0, @q40		; j = 0
	MOVE @q36, q5		; Access array lbodies
	MOVE @q40, q5		; Send array offset j
	MOVE q6, q27		; TEMP$8 = (COPY NO lbodies)[(COPY NO j)]
	MOVE @q39, q7		; Access array planets
	MOVE @q40, q7		; Send array offset j
	MOVE q27, q8		; (COPY NO planets)[(COPY NO j)] = TEMP$8
	ADDC q40, 1, q40		; j = j + 1
while_test27:
	SLT @q40, @q37, q1		; test j < NP
	BRZ q1, after_while29		; if false, do false
while_body28:
	MOVE @q40, q5		; Send array offset j
	MOVE q6, q27		; TEMP$8 = (COPY NO lbodies)[(COPY NO j)]
	MOVE @q40, q7		; Send array offset j
	MOVE q27, q8		; (COPY NO planets)[(COPY NO j)] = TEMP$8
	ADDC q40, 1, q40		; j = j + 1
	BR while_test27
after_while29:
	ADDC q19, 1, q19		; i = i + 1
	PRINTS "+"		; Print string
	CYCLES 		; print cycles
	BR while_test25
after_while30:
	MSYNC 		; ensure store data sent
	MOVECL 0, @q19		; i = 0
	DIVC @q11, 4, q17		; TEMP$1 = NUMPLANETS / 4
	PROCID q1		; sem1 = locate array near current thread
	ALLOCATE q1, q17, q41		; new Semaphore[(DEQUEUE NO TEMP$1)]TEMP$1
while_test31:
	DIVC @q11, 2, q17		; TEMP$1 = NUMPLANETS / 2
	SLT @q19, q17, q1		; test i < TEMP$1
	BRZ q1, after_while33		; if false, do false
while_body32:
	MOVECC 0, q1		; sem = how far away to locate object? who knows...
	SPAWNC q1, nbody_Semaphore_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 20, q0		; send return q
	MOVECL 0, q0		; send arg: false
	MOVE @q9, q0		; send arg: this
	MOVECL 0, q0		; send arg: false
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q18, q5		; Access array sem0
	MOVE @q19, q5		; Send array offset i
	MOVE q6, @q42		; semA = (COPY NO sem0)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	MOVE @q19, q5		; Send array offset i
	MOVE q6, q43		; semB = (COPY NO sem0)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	SPAWNC @q20, nbody_Semaphore_assignChildren, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE @q20, q0		; send this sem
	MOVE @q42, q0		; send arg: semA
	MOVE @q43, q0		; send arg: semB
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q42, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q42, q0		; send this semA
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q43, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q43, q0		; send this semB
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	DIVC @q19, 2, q17		; TEMP$1 = i / 2
	SUBC q17, 1, q33		; TEMP$15 = TEMP$1 - 1
	MOVE @q41, q7		; Access array sem1
	MOVE q33, q7		; Send array offset TEMP$15
	MOVE q20, q8		; (COPY NO sem1)[(DEQUEUE NO TEMP$15)] = sem
	PRINTS "-"		; Print string
	CYCLES 		; print cycles
	BR while_test31
after_while33:
	MOVECL 0, @q19		; i = 0
	DIVC @q11, 8, q17		; TEMP$1 = NUMPLANETS / 8
	PROCID q1		; sem2 = locate array near current thread
	ALLOCATE q1, q17, @q44		; new Semaphore[(DEQUEUE NO TEMP$1)]TEMP$1
while_test34:
	DIVC @q11, 4, q17		; TEMP$1 = NUMPLANETS / 4
	SLT @q19, q17, q1		; test i < TEMP$1
	BRZ q1, after_while36		; if false, do false
while_body35:
	MOVECC 0, q1		; sem = how far away to locate object? who knows...
	SPAWNC q1, nbody_Semaphore_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 20, q0		; send return q
	MOVECL 0, q0		; send arg: false
	MOVE @q9, q0		; send arg: this
	MOVECL 0, q0		; send arg: false
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q41, q5		; Access array sem1
	MOVE @q19, q5		; Send array offset i
	MOVE q6, @q42		; semA = (COPY NO sem1)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	MOVE @q19, q5		; Send array offset i
	MOVE q6, q43		; semB = (COPY NO sem1)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	SPAWNC @q20, nbody_Semaphore_assignChildren, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE @q20, q0		; send this sem
	MOVE @q42, q0		; send arg: semA
	MOVE @q43, q0		; send arg: semB
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q42, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q42, q0		; send this semA
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q43, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q43, q0		; send this semB
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	DIVC @q19, 2, q17		; TEMP$1 = i / 2
	SUBC q17, 1, q33		; TEMP$15 = TEMP$1 - 1
	MOVE @q44, q7		; Access array sem2
	MOVE q33, q7		; Send array offset TEMP$15
	MOVE q20, q8		; (COPY NO sem2)[(DEQUEUE NO TEMP$15)] = sem
	PRINTS "/"		; Print string
	CYCLES 		; print cycles
	BR while_test34
after_while36:
	MOVECL 0, @q19		; i = 0
	DIVC @q11, 16, q17		; TEMP$1 = NUMPLANETS / 16
	PROCID q1		; sem3 = locate array near current thread
	ALLOCATE q1, q17, q45		; new Semaphore[(DEQUEUE NO TEMP$1)]TEMP$1
while_test37:
	DIVC @q11, 8, q17		; TEMP$1 = NUMPLANETS / 8
	SLT @q19, q17, q1		; test i < TEMP$1
	BRZ q1, after_while39		; if false, do false
while_body38:
	MOVECC 0, q1		; sem = how far away to locate object? who knows...
	SPAWNC q1, nbody_Semaphore_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 20, q0		; send return q
	MOVECL 0, q0		; send arg: false
	MOVE @q9, q0		; send arg: this
	MOVECL 0, q0		; send arg: false
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q44, q5		; Access array sem2
	MOVE @q19, q5		; Send array offset i
	MOVE q6, @q42		; semA = (COPY NO sem2)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	MOVE @q19, q5		; Send array offset i
	MOVE q6, q43		; semB = (COPY NO sem2)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	SPAWNC @q20, nbody_Semaphore_assignChildren, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE @q20, q0		; send this sem
	MOVE @q42, q0		; send arg: semA
	MOVE @q43, q0		; send arg: semB
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q42, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q42, q0		; send this semA
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q43, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q43, q0		; send this semB
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	DIVC @q19, 2, q17		; TEMP$1 = i / 2
	SUBC q17, 1, q33		; TEMP$15 = TEMP$1 - 1
	MOVE @q45, q7		; Access array sem3
	MOVE q33, q7		; Send array offset TEMP$15
	MOVE q20, q8		; (COPY NO sem3)[(DEQUEUE NO TEMP$15)] = sem
	PRINTS "*"		; Print string
	CYCLES 		; print cycles
	BR while_test37
after_while39:
	MOVECL 0, @q19		; i = 0
	DIVC @q11, 32, q17		; TEMP$1 = NUMPLANETS / 32
	PROCID q1		; TEMP$17 = locate array near current thread
	ALLOCATE q1, q17, q46		; new Semaphore[(DEQUEUE NO TEMP$1)]TEMP$1
	MOVE @q9, q7		; Access this
	MOVECL 1, q7		; Send ivar offset sem4
	MOVE q46, q8		; (THIS).sem4 = TEMP$17
while_test40:
	DIVC @q11, 16, q17		; TEMP$1 = NUMPLANETS / 16
	SLT @q19, q17, q1		; test i < TEMP$1
	BRZ q1, after_while42		; if false, do false
while_body41:
	MOVECC 0, q1		; sem = how far away to locate object? who knows...
	SPAWNC q1, nbody_Semaphore_constructor, q1		; spawn thread for constructor
	MAPQC q0, q0, q1		; map to new thread
	PROCID q0		; send return context
	MOVECL 20, q0		; send return q
	MOVECL 1, q0		; send arg: true
	MOVE @q9, q0		; send arg: this
	MOVECL 0, q0		; send arg: false
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q45, q5		; Access array sem3
	MOVE @q19, q5		; Send array offset i
	MOVE q6, @q42		; semA = (COPY NO sem3)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	MOVE @q19, q5		; Send array offset i
	MOVE q6, q43		; semB = (COPY NO sem3)[(COPY NO i)]
	ADDC q19, 1, q19		; i = i + 1
	SPAWNC @q20, nbody_Semaphore_assignChildren, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE @q20, q0		; send this sem
	MOVE @q42, q0		; send arg: semA
	MOVE @q43, q0		; send arg: semB
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q42, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q42, q0		; send this semA
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	SPAWNC @q43, nbody_Semaphore_assignParent, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q43, q0		; send this semB
	MOVE @q20, q0		; send arg: sem
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	MOVE @q9, q5		; Access this
	MOVECL 1, q5		; Send ivar offset sem4
	MOVE q6, q47		; TEMP$18 = (THIS).sem4
	DIVC @q19, 2, q48		; TEMP$19 = i / 2
	SUBC q48, 1, q49		; TEMP$20 = TEMP$19 - 1
	MOVE q47, q7		; Access array TEMP$18
	MOVE q49, q7		; Send array offset TEMP$20
	MOVE q20, q8		; (DEQUEUE NO TEMP$18)[(DEQUEUE NO TEMP$20)] = sem
	PRINTS "#"		; Print string
	CYCLES 		; print cycles
	BR while_test40
after_while42:
	SIC @q10, q1		; got return capability?
	BRZ q1, nbody_SimEngine_constructor_end		; should return?
	MOVE q10, q1		; ready return id
	MAPQ q10, q10, q1		; map to return point
	MOVE @q9, q10		; return this
	EEQ q10		; make sure it's sent
	UNMAPQ q10		; disconnect from caller
	FLUSHQ q19		; empty i
	FLUSHQ q44		; empty sem2
	FLUSHQ q13		; empty ysize
	FLUSHQ q40		; empty j
	FLUSHQ q18		; empty sem0
	FLUSHQ q42		; empty semA
	FLUSHQ q21		; empty TEMP$2
	FLUSHQ q39		; empty planets
	FLUSHQ q20		; empty sem
	FLUSHQ q11		; empty NUMPLANETS
	FLUSHQ q47		; empty TEMP$18
	FLUSHQ q41		; empty sem1
	FLUSHQ q12		; empty xsize
	FLUSHQ q15		; empty G
	FLUSHQ q32		; empty TEMP$14
	FLUSHQ q37		; empty NP
	FLUSHQ q43		; empty semB
	FLUSHQ q36		; empty lbodies
	FLUSHQ q45		; empty sem3
nbody_SimEngine_constructor_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q10		; get rid of return point
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_SimEngine_step:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
step_top43:
	MOVE @q9, q5		; Access this
	MOVECL 2, q5		; Send ivar offset numIter
	MOVE q6, q10		; TEMP$0 = (THIS).numIter
	MOVE @q9, q7		; Access this
	MOVECL 3, q7		; Send ivar offset iter
	MOVE q10, q8		; (THIS).iter = TEMP$0
	MOVECL 1, q5		; Send ivar offset sem4
	MOVE q6, q11		; TEMP$1 = (THIS).sem4
	MOVE q11, q5		; Access array TEMP$1
	MOVECL 0, q5		; Send array offset 0
	MOVE q6, q12		; s = (DEQUEUE NO TEMP$1)[0]
	SPAWNC @q12, nbody_Semaphore_go, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q12, q0		; send this s
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
nbody_SimEngine_step_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_SimEngine_signal:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
signal_top44:
	MOVE @q9, q5		; Access this
	MOVECL 3, q5		; Send ivar offset iter
	MOVE q6, q10		; TEMP$0 = (THIS).iter
	MOVECL 2, q5		; Send ivar offset numIter
	MOVE q6, q11		; TEMP$1 = (THIS).numIter
	SLT q10, q11, q1		; test TEMP$0 < TEMP$1
	BRZ q1, false_branch47		; if false, do false
true_branch45:
	MOVECL 3, q5		; Send ivar offset iter
	MOVE q6, q10		; TEMP$0 = (THIS).iter
	ADDC q10, 1, q12		; TEMP$2 = TEMP$0 + 1
	MOVE @q9, q7		; Access this
	MOVECL 3, q7		; Send ivar offset iter
	MOVE q12, q8		; (THIS).iter = TEMP$2
	MOVECL 1, q5		; Send ivar offset sem4
	MOVE q6, q13		; TEMP$3 = (THIS).sem4
	MOVE q13, q5		; Access array TEMP$3
	MOVECL 0, q5		; Send array offset 0
	MOVE q6, q14		; s = (DEQUEUE NO TEMP$3)[0]
	PRINTS "barrier"		; Print string
	CYCLES 		; print cycles
	SPAWNC @q14, nbody_Semaphore_go, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q14, q0		; send this s
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
after_if46:
nbody_SimEngine_signal_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
false_branch47:
	PRINTS "done"		; Print string
	CYCLES 		; print cycles
	BR after_if46
nbody_SimEngine_start:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
start_top48:
	MOVE @q9, q7		; Access this
	MOVECL 3, q7		; Send ivar offset iter
	MOVECL 0, q8		; (THIS).iter = 0
	MOVE @q9, q5		; Access this
	MOVECL 1, q5		; Send ivar offset sem4
	MOVE q6, q10		; TEMP$0 = (THIS).sem4
	MOVE q10, q5		; Access array TEMP$0
	MOVECL 0, q5		; Send array offset 0
	MOVE q6, q11		; s = (DEQUEUE NO TEMP$0)[0]
	SPAWNC @q11, nbody_Semaphore_go, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q11, q0		; send this s
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
nbody_SimEngine_start_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_Body__lookup:
	SHRC @q0, 32, q1		; extract high order bits
	BRNZ q1, nbody_Body__lookup_int		; interface?
	SHLC q0, 1, q1		; compute jump offset
	BREL q1		; branch rel based on method number
	MOVECL nbody_Body_assignBody, q1		; move method addr to temp
	JMP q0		; return to caller
	MOVECL nbody_Body_move, q1		; move method addr to temp
	JMP q0		; return to caller
nbody_Body__lookup_int:
	HALT 		; Whoops; didn't match anything!
nbody_Body_move:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
move_top49:
	MOVE @q9, q5		; Access this
	MOVECL 2, q5		; Send ivar offset NUMPLANETS
	MOVE q6, q10		; size = (THIS).NUMPLANETS
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q11		; ax = (THIS).ax
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q12		; ay = (THIS).ay
	MOVECL 3, q5		; Send ivar offset x
	MOVE q6, q13		; x = (THIS).x
	MOVECL 4, q5		; Send ivar offset y
	MOVE q6, q14		; y = (THIS).y
	MOVECL 8, q5		; Send ivar offset radius
	MOVE q6, q15		; radius = (THIS).radius
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q16		; mass = (THIS).mass
	MOVECL 12, q5		; Send ivar offset sticky
	MOVE q6, q17		; sticky = (THIS).sticky
	MOVECL 10, q5		; Send ivar offset myIndex
	MOVE q6, q18		; TEMP$0 = (THIS).myIndex
	SEQC q18, 20, q1		; test TEMP$0 != 20
	SEQC q1, 0, q1		; flip due to inst set lacks
	BRZ q1, false_branch52		; if false, do false
true_branch50:
	MOVE @q13, q0		; send arg: x
	MOVE @q14, q0		; send arg: y
	MOVE q0, q1		; 
	PRINTSPEC q0, q1		; 
after_if51:
	FADD q13, @q11, q13		; x = x + ax
	FADD q14, @q12, q14		; y = y + ay
	MOVECL 0, q19		; jj = 0
while_test53:
	SLT @q19, @q10, q1		; test jj < size
	BRZ q1, after_while62		; if false, do false
while_body54:
	MOVE @q9, q5		; Access this
	MOVECL 10, q5		; Send ivar offset myIndex
	MOVE q6, q20		; TEMP$1 = (THIS).myIndex
	SEQ q20, @q19, q1		; test TEMP$1 != jj
	SEQC q1, 0, q1		; flip due to inst set lacks
	BRZ q1, after_if61		; if false, do false
true_branch55:
	MOVECL 9, q5		; Send ivar offset planets
	MOVE q6, q21		; TEMP$2 = (THIS).planets
	MOVE q21, q5		; Access array TEMP$2
	MOVE @q19, q5		; Send array offset jj
	MOVE q6, q22		; body = (DEQUEUE NO TEMP$2)[(COPY NO jj)]
	MOVE @q22, q5		; Access (COPY NO body)body
	MOVECL 3, q5		; Send ivar offset x
	MOVE q6, q23		; TEMP$3 = (COPY NO body).x
	FSUB @q13, q23, q24		; dx = x - TEMP$3
	MOVECL 4, q5		; Send ivar offset y
	MOVE q6, q25		; TEMP$4 = (COPY NO body).y
	FSUB @q14, q25, q26		; dy = y - TEMP$4
	FMUL @q24, @q24, q23		; TEMP$3 = dx * dx
	FMUL @q26, @q26, q27		; TEMP$5 = dy * dy
	FADD q23, q27, q28		; rad = TEMP$3 + TEMP$5
	FMUL @q15, @q15, q23		; TEMP$3 = radius * radius
	MOVECL 8, q5		; Send ivar offset radius
	MOVE q6, q25		; TEMP$4 = (COPY NO body).radius
	MOVECL 8, q5		; Send ivar offset radius
	MOVE q6, q29		; TEMP$6 = (COPY NO body).radius
	FMUL q25, q29, q30		; TEMP$7 = TEMP$4 * TEMP$6
	FADD q23, q30, q31		; TEMP$8 = TEMP$3 + TEMP$7
	FSLE @q28, q31, q1		; test rad <= TEMP$8
	BRZ q1, after_if60		; if false, do false
true_branch56:
	MOVE @q17, q1		; test sticky
	BRZ q1, false_branch59		; if false, do false
true_branch57:
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q32		; tempy = (COPY NO body).ay
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q33		; tempx = (COPY NO body).ax
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q25		; TEMP$4 = (COPY NO body).ax
	FMUL q23, q25, q34		; force = TEMP$3 * TEMP$4
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q23		; TEMP$3 = (COPY NO body).ax
	FDIV q34, @q16, q25		; TEMP$4 = force / mass
	FSUB q23, q25, q27		; TEMP$5 = TEMP$3 - TEMP$4
	MOVE @q22, q7		; Access (COPY NO body)body
	MOVECL 5, q7		; Send ivar offset ax
	MOVE q27, q8		; (COPY NO body).ax = TEMP$5
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q25		; TEMP$4 = (COPY NO body).ay
	FMUL q23, q25, q34		; force = TEMP$3 * TEMP$4
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q23		; TEMP$3 = (COPY NO body).ay
	FDIV q34, @q16, q25		; TEMP$4 = force / mass
	FSUB q23, q25, q27		; TEMP$5 = TEMP$3 - TEMP$4
	MOVECL 6, q7		; Send ivar offset ay
	MOVE q27, q8		; (COPY NO body).ay = TEMP$5
	FMUL @q16, q33, q34		; force = mass * tempx
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	FDIV q34, q23, q25		; TEMP$4 = force / TEMP$3
	FSUB q11, q25, q11		; ax = ax - TEMP$4
	FMUL @q16, q32, q34		; force = mass * tempy
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	FDIV q34, q23, q25		; TEMP$4 = force / TEMP$3
	FSUB q12, q25, q12		; ay = ay - TEMP$4
after_if58:
after_if60:
	MOVE @q9, q5		; Access this
	MOVECL 1, q5		; Send ivar offset G
	MOVE q6, q23		; TEMP$3 = (THIS).G
	MOVE q22, q5		; Access (DEQUEUE NO body)body
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q25		; TEMP$4 = (DEQUEUE NO body).mass
	FMUL q23, q25, q27		; TEMP$5 = TEMP$3 * TEMP$4
	FDIV q27, @q28, q35		; g = TEMP$5 / rad
	MOVE q28, q0		; rad = send arg: rad
	SQRT q0, q0		; compute a square root
	MOVE q0, q28		; Move return value to dest
	FDIV q24, @q28, q23		; TEMP$3 = dx / rad
	FMUL @q35, q23, q25		; TEMP$4 = g * TEMP$3
	FADD q11, q25, q11		; ax = ax + TEMP$4
	FDIV q26, q28, q23		; TEMP$3 = dy / rad
	FMUL q35, q23, q25		; TEMP$4 = g * TEMP$3
	FADD q12, q25, q12		; ay = ay + TEMP$4
after_if61:
	ADDC q19, 1, q19		; jj = jj + 1
	BR while_test53
false_branch52:
	MOVE @q13, q0		; send arg: x
	MOVE @q14, q0		; send arg: y
	MOVE q0, q1		; 
	PRINTSPECB q0, q1		; 
	BR after_if51
false_branch59:
	MOVE @q12, q32		; tempy = ay
	MOVE @q11, q33		; tempx = ax
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q25		; TEMP$4 = (COPY NO body).ax
	FMUL q23, q25, q34		; force = TEMP$3 * TEMP$4
	FDIV q34, @q16, q23		; TEMP$3 = force / mass
	FADD q11, q23, q11		; ax = ax + TEMP$3
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q23		; TEMP$3 = (COPY NO body).mass
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q25		; TEMP$4 = (COPY NO body).ay
	FMUL q23, q25, q34		; force = TEMP$3 * TEMP$4
	FDIV q34, @q16, q23		; TEMP$3 = force / mass
	FADD q12, q23, q12		; ay = ay + TEMP$3
	FMUL @q16, q33, q34		; force = mass * tempx
	MOVECL 5, q5		; Send ivar offset ax
	MOVE q6, q23		; TEMP$3 = (COPY NO body).ax
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q25		; TEMP$4 = (COPY NO body).mass
	FDIV q34, q25, q27		; TEMP$5 = force / TEMP$4
	FADD q23, q27, q29		; TEMP$6 = TEMP$3 + TEMP$5
	MOVE @q22, q7		; Access (COPY NO body)body
	MOVECL 5, q7		; Send ivar offset ax
	MOVE q29, q8		; (COPY NO body).ax = TEMP$6
	FMUL @q16, q32, q34		; force = mass * tempy
	MOVECL 6, q5		; Send ivar offset ay
	MOVE q6, q23		; TEMP$3 = (COPY NO body).ay
	MOVECL 7, q5		; Send ivar offset mass
	MOVE q6, q25		; TEMP$4 = (COPY NO body).mass
	FDIV q34, q25, q27		; TEMP$5 = force / TEMP$4
	FADD q23, q27, q29		; TEMP$6 = TEMP$3 + TEMP$5
	MOVECL 6, q7		; Send ivar offset ay
	MOVE q29, q8		; (COPY NO body).ay = TEMP$6
	BR after_if58
after_while62:
	MOVE @q9, q7		; Access this
	MOVECL 3, q7		; Send ivar offset x
	MOVE q13, q8		; (THIS).x = x
	MOVECL 4, q7		; Send ivar offset y
	MOVE q14, q8		; (THIS).y = y
	MOVECL 5, q7		; Send ivar offset ax
	MOVE q11, q8		; (THIS).ax = ax
	MOVECL 6, q7		; Send ivar offset ay
	MOVE q12, q8		; (THIS).ay = ay
	MOVE @q9, q5		; Access this
	MOVECL 11, q5		; Send ivar offset mySem
	MOVE q6, q36		; TEMP$9 = (THIS).mySem
	SPAWNC @q36, nbody_Semaphore_signal, q1		; spawn thread for method near obj
	MAPQC q0, q0, q1		; map to new thread
	MOVE q36, q0		; send this TEMP$9
	EEQ q0		; ensure they're sent
	UNMAPQ q0		; disconnect
	FLUSHQ q15		; empty radius
	FLUSHQ q16		; empty mass
	FLUSHQ q19		; empty jj
	FLUSHQ q17		; empty sticky
	FLUSHQ q10		; empty size
nbody_Body_move_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_Body_constructor:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q10		; save return context id
	MOVE q0, q10		; save return queue
	PROCID q1		; storage is near constructor thread
	ALLOCATEC q1, 13, q9		; allocate space for object
	MOVE @q9, q7		; store method lookup pointer
	MOVECL 0, q7		; pointer is first element
	MOVECL nbody_Body__lookup, q8		; stash pointer
	EEQ q8		; make sure it's saved before continuing
	MOVE q0, q11		; move x_ to it's allocated q
	MOVE q0, q12		; move y_ to it's allocated q
	MOVE q0, q13		; move mass_ to it's allocated q
	MOVE q0, q14		; move radius_ to it's allocated q
	MOVE q0, q15		; move ax_ to it's allocated q
	MOVE q0, q16		; move ay_ to it's allocated q
	MOVE q0, q17		; move index to it's allocated q
	MOVE q0, q18		; move sem to it's allocated q
constructor_top63:
	MOVECF 0.000000, q19		; TEMP$0 = (float)
	FSUBC q19, 9.700000, q20		; TEMP$1 = TEMP$0 - 9.7
	MOVE @q9, q7		; Access this
	MOVECL 1, q7		; Send ivar offset G
	MOVE q20, q8		; (THIS).G = TEMP$1
	MOVECL 2, q7		; Send ivar offset NUMPLANETS
	MOVECL 32, q8		; (THIS).NUMPLANETS = 32
	MOVECL 12, q7		; Send ivar offset sticky
	MOVECL 0, q8		; (THIS).sticky = false
	MOVECL 3, q7		; Send ivar offset x
	MOVE q11, q8		; (THIS).x = x_
	MOVECL 4, q7		; Send ivar offset y
	MOVE q12, q8		; (THIS).y = y_
	MOVECL 7, q7		; Send ivar offset mass
	MOVE q13, q8		; (THIS).mass = mass_
	MOVECL 8, q7		; Send ivar offset radius
	MOVE q14, q8		; (THIS).radius = radius_
	MOVECL 5, q7		; Send ivar offset ax
	MOVE q15, q8		; (THIS).ax = ax_
	MOVECL 6, q7		; Send ivar offset ay
	MOVE q16, q8		; (THIS).ay = ay_
	MOVE @q9, q5		; Access this
	MOVECL 2, q5		; Send ivar offset NUMPLANETS
	MOVE q6, q21		; TEMP$2 = (THIS).NUMPLANETS
	PROCID q1		; TEMP$3 = locate array near current thread
	ALLOCATE q1, q21, q22		; new Body[(DEQUEUE NO TEMP$2)]TEMP$2
	MOVECL 9, q7		; Send ivar offset planets
	MOVE q22, q8		; (THIS).planets = TEMP$3
	MOVECL 10, q7		; Send ivar offset myIndex
	MOVE q17, q8		; (THIS).myIndex = index
	MOVECL 11, q7		; Send ivar offset mySem
	MOVE q18, q8		; (THIS).mySem = sem
	SIC @q10, q1		; got return capability?
	BRZ q1, nbody_Body_constructor_end		; should return?
	MOVE q10, q1		; ready return id
	MAPQ q10, q10, q1		; map to return point
	MOVE @q9, q10		; return this
	EEQ q10		; make sure it's sent
	UNMAPQ q10		; disconnect from caller
nbody_Body_constructor_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q10		; get rid of return point
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
nbody_Body_assignBody:
	MML q5, q6		; open load queue
	MMS q7, q8		; open store queue
	MOVE q0, q9		; save this
	MOVE q0, q10		; move index to it's allocated q
	MOVE q0, q11		; move partner to it's allocated q
assignBody_top64:
	MOVE @q9, q5		; Access this
	MOVECL 9, q5		; Send ivar offset planets
	MOVE q6, q12		; TEMP$0 = (THIS).planets
	MOVE q12, q7		; Access array TEMP$0
	MOVE q10, q7		; Send array offset index
	MOVE q11, q8		; (DEQUEUE NO TEMP$0)[(DEQUEUE NO index)] = partner
nbody_Body_assignBody_end:
	UNMAPQ q5		; disconnect from load
	EEQ q7		; ensure stores done
	UNMAPQ q7		; disconnect from store addr
	UNMAPQ q8		; disconnect from store data
	FLUSHQ q9		; get rid of this
	HALT 		; end of method
; Functions included from library
