Software > Coding

Syntaxanpassungen für GNU as?

(1/2) > >>

simonsunnyboy:
Hallo zusammen,

wie ich gerade feststellen musste, hat der GNU as einen ziemlichen anderen, um nicht obskuren Syntax.
Kann mir daher jmd sagen, wie ich a) folgendes Codestück mit Devpac/TurboAssembler/PureC/AHCC Syntax auf den GNU as Syntax für meinen Crsscompiler umbiege


--- Code: ---; *******************************************
; clear truecolor screen 320x240 pixels at a0
; *******************************************
TC320x240_CLS:
          movem.l d0-a6,-(sp)
          move.l #((320*240/16)-1),d0
          lea clrbuf(PC),a1
          movem.l (a1),d1-d7/a2
clrloop:
          movem.l d1-d7/a2,(a0)
          lea 32(a0),a0   ; 32 = 4*8 bytes
          dbra d0,clrloop
          movem.l (sp)+,d0-a6
          rts
clrbuf:   DC.L 0,0,0,0,0,0,0,0
          EVEN
--- Ende Code ---

und b) ob da ggfs Coldfire unverträgliche Opcodes drin sind? Ich versuch aktuell mit dem gcc 030/Coldfire kompatibeles Zeugs zu erzeugen, und nebenbei vom AHCC auf gcc zu wechseln...

Grüße,
ssb

mfro:
a)

--- Code: ---| *******************************************
| clear truecolor screen 320x240 pixels at a0
| *******************************************
TC320x240_CLS:
          movem.l d0-a6,-(sp)
          move.l #320*240/16-1,d0
          lea clrbuf(PC),a1
          movem.l (a1),d1-d7/a2
clrloop:
          movem.l d1-d7/a2,(a0)
          lea 32(a0),a0   | 32 = 4*8 bytes
          dbra d0,clrloop
          movem.l (sp)+,d0-a6
          rts
clrbuf:   DC.L 0,0,0,0,0,0,0,0
          .align(2)
--- Ende Code ---

b)
bis auf die movem's (Coldfire kann kein movem mit Prädekrement oder Postinkrement) und dbra (gibt's im Coldfire-Befehlssatz nicht mehr) ist die Codesequenz "Coldfire-clean".

simonsunnyboy:
Danke für die schnelle Antwort, mit nachgeschobenem *würg*
Gerade die movems sind sowas von nützlich :(

Ich schätz, ich kompilier wieder nur für 030 und Bienenuser müssen halt FireTOS nehmen...

Die Callingconvention beim gcc ist immer noch a0-a1 für Adressen, d0-d2 für normale Variablen?
(Meine bisherigen Disassemblies scheinen das zu bestätigen, ich möchte nur sichergehen.)

mfro:

--- Zitat von: simonsunnyboy am So 03.11.2013, 16:01:23 ---Danke für die schnelle Antwort, mit nachgeschobenem *würg*
Gerade die movems sind sowas von nützlich :(

Ich schätz, ich kompilier wieder nur für 030 und Bienenuser müssen halt FireTOS nehmen...

--- Ende Zitat ---
Wo liegt das Problem?

68000:

--- Code: ---movem.l d0-a6, -(sp)

--- Ende Code ---

Coldfire:

--- Code: ---lea -15 * 4(sp),sp
movem.l d0-a6, (sp)
--- Ende Code ---




--- Zitat von: simonsunnyboy am So 03.11.2013, 16:01:23 ---Die Callingconvention beim gcc ist immer noch a0-a1 für Adressen, d0-d2 für normale Variablen?
(Meine bisherigen Disassemblies scheinen das zu bestätigen, ich möchte nur sichergehen.)

--- Ende Zitat ---
gcc übergibt alle Variablen auf dem Stack. War das die Frage?

simonsunnyboy:
Wenn die 2 Befehle gleich viele Zyklen auf dem 030 brauchen wie das movem mit Post/Prädekrement, könnte ich es mir überlegen....

"Alles auf dem Stack" ist eine Antwort, auch die macht mir ein *würg*, und fast noch ein größeres als die fehlenden Opcodes :P

Ich fürchte, gcc/gas ist für Atari keine Option, wenn man halbwegs syntaxkompatiblen und unsauberen Code (Demos/Games) schreiben will. Für sauberen Kram wohl ne gute Wahl....

Sieht schwer danach aus, daß ich doch bei AHCC bleiben werde....

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln