I actually had some time this morning so I couldn't control my curiousity and gave the new madmac backend a spin.
Once again I am using the test asm output file from the Jaguars only risc gcc.
Code: Select all
;GCC for Atari Jaguar GPU/DSP (Jun 12 1995) (C)1994-95 Brainstorm
MACRO _RTS
load (ST),TMP
jump T,(TMP)
addqt #4,ST ;rts
ENDM
_test_start::
.GPU
.ORG $F03000
ST .REGEQU r18
FP .REGEQU r17
TMP .REGEQU r16
GT .CCDEF $15
gcc2_compiled_for_madmac:
;(.DATA)
.LONG
_global::
.DC.L 5
;(.TEXT)
.EVEN
_GetTest1::
subqt #4,ST
store FP,(ST)
move ST,FP ;link
subqt #8,ST
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #4,r2 ;isubqtsi3 r2-#4->r2
move r2,r3 ;movsi r2->r3
store r0,(r3) ;movsi r0->(r3)
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #0,r6 ;movsi #0->r6
store r6,(r0) ;movsi r6->(r0)
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #4,r4 ;isubqtsi3 r4-#4->r4
move r4,r0 ;movsi r4->r0
load (r0),r4 ;movsi (r0)->r4
moveq #9,r0 ;movsi #9->r0
cmp r4,r0 ;rcmpsi r4,r0
movei #L2,TMP
jump GT,(TMP)
nop ;jgt L2
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
movei #100,r6 ;movsi #100->r6
store r6,(r0) ;movsi r6->(r0)
movei #L3,TMP
jump T,(TMP)
nop ;jt L3
.EVEN
L2:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #4,r4 ;isubqtsi3 r4-#4->r4
move r4,r0 ;movsi r4->r0
load (r0),r4 ;movsi (r0)->r4
moveq #9,r0 ;movsi #9->r0
cmp r4,r0 ;rcmpsi r4,r0
movei #L4,TMP
jump GT,(TMP)
nop ;jgt L4
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #10,r6 ;movsi #10->r6
store r6,(r0) ;movsi r6->(r0)
movei #L5,TMP
jump T,(TMP)
nop ;jt L5
.EVEN
L4:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #4,r4 ;isubqtsi3 r4-#4->r4
move r4,r0 ;movsi r4->r0
load (r0),r4 ;movsi (r0)->r4
cmpq #0,r4 ;tstsi r4
movei #L6,TMP
jump EQ,(TMP)
nop ;jeq L6
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #1,r6 ;movsi #1->r6
store r6,(r0) ;movsi r6->(r0)
L6:
L5:
L3:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r5 ;movsi r4->r5
load (r5),r0 ;movsi (r5)->r0
movei #L1,TMP
jump T,(TMP)
nop ;jt L1
.EVEN
L1:
move FP,ST
load (ST),FP
addqt #4,ST ;unlk
_RTS
.EVEN
_GetTest2::
subqt #4,ST
store FP,(ST)
move ST,FP ;link
subqt #8,ST
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #4,r2 ;isubqtsi3 r2-#4->r2
move r2,r3 ;movsi r2->r3
store r0,(r3) ;movsi r0->(r3)
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #0,r6 ;movsi #0->r6
store r6,(r0) ;movsi r6->(r0)
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #4,r4 ;isubqtsi3 r4-#4->r4
move r4,r5 ;movsi r4->r5
load (r5),r0 ;movsi (r5)->r0
moveq #9,r4 ;movsi #9->r4
cmp r4,r0 ;cmpsi r4,r0
movei #L18,TMP
jump GT,(TMP)
nop ;jgt L18
moveq #1,r4 ;movsi #1->r4
cmp r4,r0 ;cmpsi r4,r0
movei #L18,TMP
jump MI,(TMP)
nop ;jlt L18
movei #L9,TMP
jump T,(TMP)
nop ;jt L9
.EVEN
L9:
L10:
L11:
L12:
L13:
L14:
L15:
L16:
L17:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #1,r6 ;movsi #1->r6
store r6,(r0) ;movsi r6->(r0)
movei #L8,TMP
jump T,(TMP)
nop ;jt L8
.EVEN
L18:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r0 ;movsi r4->r0
moveq #10,r6 ;movsi #10->r6
store r6,(r0) ;movsi r6->(r0)
L8:
move FP,r0 ;movsi FP->r0
move FP,r4 ;movsi FP->r4
subqt #8,r4 ;isubqtsi3 r4-#8->r4
move r4,r5 ;movsi r4->r5
load (r5),r0 ;movsi (r5)->r0
movei #L7,TMP
jump T,(TMP)
nop ;jt L7
.EVEN
L7:
move FP,ST
load (ST),FP
addqt #4,ST ;unlk
_RTS
.EVEN
_Test3::
subqt #4,ST
store FP,(ST)
move ST,FP ;link
subqt #32,ST
subqt #8,ST
move ST,r14
store r19,(ST)
store r20,(r14+1)
store r21,(r14+2)
store r22,(r14+3)
store r23,(r14+4)
store r24,(r14+5)
move FP,r19 ;movsi FP->r19
move FP,r20 ;movsi FP->r20
subqt #4,r20 ;isubqtsi3 r20-#4->r20
move r20,r21 ;movsi r20->r21
store r0,(r21) ;movsi r0->(r21)
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #8,r1 ;isubqtsi3 r1-#8->r1
move r1,r0 ;movsi r1->r0
moveq #0,r3 ;movsi #0->r3
store r3,(r0) ;movsi r3->(r0)
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #16,r1 ;isubqtsi3 r1-#16->r1
move r1,r0 ;movsi r1->r0
moveq #0,r3 ;movsi #0->r3
store r3,(r0) ;movsi r3->(r0)
L21:
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #8,r1 ;isubqtsi3 r1-#8->r1
move r1,r0 ;movsi r1->r0
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #4,r2 ;isubqtsi3 r2-#4->r2
move r2,r1 ;movsi r2->r1
load (r0),r0 ;movsi (r0)->r0
load (r1),r1 ;movsi (r1)->r1
cmp r1,r0 ;cmpsi r1,r0
movei #L24,TMP
jump MI,(TMP)
nop ;jlt L24
movei #L22,TMP
jump T,(TMP)
nop ;jt L22
.EVEN
L24:
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #12,r1 ;isubqtsi3 r1-#12->r1
move r1,r0 ;movsi r1->r0
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #8,r2 ;isubqtsi3 r2-#8->r2
move r2,r1 ;movsi r2->r1
moveq #1,r2 ;movsi #1->r2
load (r1),r1 ;movsi (r1)->r1
neg r1 ;negsi2 r1->r1
sha r1,r2 ;iashlsi3 r2<<r1->r2
neg r1 ;negsi2 r1->r1
store r2,(r0) ;movsi r2->(r0)
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #16,r1 ;isubqtsi3 r1-#16->r1
move r1,r22 ;movsi r1->r22
move ST,r0 ;movsi ST->r0
move FP,r1 ;movsi FP->r1
move FP,r0 ;movsi FP->r0
subqt #8,r0 ;isubqtsi3 r0-#8->r0
move r0,r1 ;movsi r0->r1
load (r1),r0 ;movsi (r1)->r0
movei #_GetTest1,r23 ;movsi #_GetTest1->r23
move PC,TMP
subqt #4,ST
addqt #10,TMP
jump T,(r23)
store TMP,(ST) ;call r23->r0
move r0,r23 ;movsi r0->r23
move ST,r0 ;movsi ST->r0
move FP,r1 ;movsi FP->r1
move FP,r0 ;movsi FP->r0
subqt #12,r0 ;isubqtsi3 r0-#12->r0
move r0,r1 ;movsi r0->r1
load (r1),r0 ;movsi (r1)->r0
movei #_GetTest2,r24 ;movsi #_GetTest2->r24
move PC,TMP
subqt #4,ST
addqt #10,TMP
jump T,(r24)
store TMP,(ST) ;call r24->r0
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #16,r2 ;isubqtsi3 r2-#16->r2
move r2,r1 ;movsi r2->r1
add r23,r0 ;iaddsi3 r23+r0->r0
load (r1),r1 ;movsi (r1)->r1
add r1,r0 ;iaddsi3 r1+r0->r0
store r0,(r22) ;movsi r0->(r22)
L23:
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #8,r1 ;isubqtsi3 r1-#8->r1
move r1,r0 ;movsi r1->r0
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #8,r2 ;isubqtsi3 r2-#8->r2
move r2,r0 ;movsi r2->r0
move FP,r1 ;movsi FP->r1
move FP,r2 ;movsi FP->r2
subqt #8,r2 ;isubqtsi3 r2-#8->r2
move r2,r1 ;movsi r2->r1
load (r1),r2 ;movsi (r1)->r2
move r2,r1 ;movsi r2->r1
addqt #1,r1 ;iaddqtsi3 #1+r1->r1
move r1,r2 ;movsi r1->r2
store r2,(r0) ;movsi r2->(r0)
movei #L21,TMP
jump T,(TMP)
nop ;jt L21
.EVEN
L22:
move FP,r0 ;movsi FP->r0
move FP,r1 ;movsi FP->r1
subqt #16,r1 ;isubqtsi3 r1-#16->r1
move r1,r2 ;movsi r1->r2
load (r2),r0 ;movsi (r2)->r0
movei #L20,TMP
jump T,(TMP)
nop ;jt L20
.EVEN
L20:
move ST,r14
load (ST),r19
load (r14+1),r20
load (r14+2),r21
load (r14+3),r22
load (r14+4),r23
load (r14+5),r24
move FP,ST
load (ST),FP
addqt #4,ST ;unlk
_RTS
.LONG
.68000
_test_end::
_test_size .EQU *-_test_start
.GLOBL _test_size
.IF _test_size>$1000
.PRINT "Code size (",/l/x _test_size,") is over $1000"
.FAIL
.ENDIF
My limited understanding is that everything past the .68000 directive is all m68k asm code. For a first run I think this is very very impressive. Have reported these bugs already.