summaryrefslogtreecommitdiff
path: root/closures/compiler/alpha/agaxpgas.pas
diff options
context:
space:
mode:
Diffstat (limited to 'closures/compiler/alpha/agaxpgas.pas')
-rw-r--r--closures/compiler/alpha/agaxpgas.pas126
1 files changed, 126 insertions, 0 deletions
diff --git a/closures/compiler/alpha/agaxpgas.pas b/closures/compiler/alpha/agaxpgas.pas
new file mode 100644
index 0000000000..eefa51a367
--- /dev/null
+++ b/closures/compiler/alpha/agaxpgas.pas
@@ -0,0 +1,126 @@
+{
+ Copyright (c) 1998-2000 by Florian Klaempfl
+
+ This unit implements an asm for the DEC Alpha
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+unit agaxpgas;
+
+ {$i fpcdefs.inc}
+
+ interface
+
+ uses
+ globals,systems,aasmbase,aasmtai,aasmdata,
+ aggas,cpubase;
+
+ type
+ TAXPGNUAssembler=class(TGNUAssembler)
+ procedure WriteInstruction(hp : tai);override;
+ end;
+
+ const
+ gas_reg2str : array[tregister] of string[4] = (
+ '',
+ '','','','','','','','','','',
+ '','','','','','','','','','',
+ '','','','','','','','','','',
+ '','',
+ '','','','','','','','','','',
+ '','','','','','','','','','',
+ '','','','','','','','','','',
+ '',''
+ );
+
+ implementation
+
+ const
+ op2str : array[tasmop] of string[14] = (
+ 'addf','addg','addl','addq',
+ 'adds','addt','amask','and','beq','bge',
+ 'bgt','bic','bis','blbc','blbs','ble',
+ 'blt','bne','br','bsr','call_pal','cmoveq',
+ 'cmovge','cmovgt','cmovlbc','cmovlbs','cmovle','cmovlt',
+ 'cmovne','cmpbge','cmpeq','cmpgeq','cmpgle','cmpglt',
+ 'cmple','cmplt','cmpteq','cmptle','cmptlt','cmptun',
+ 'cmpule','cmpult','cpys','cpyse','cpysn','ctlz',
+ 'ctpop','cttz','cvtdg','cvtgd','cvtgf','cvtgq',
+ 'cvtlq','cvtqf','cvtqg','cvtql','cvtqs','cvtqt',
+ 'cvtst','cvttq','cvtts','divf','divg','divs',
+ 'divt','ecb','eqv','excb','extbl','extlh',
+ 'extll','extqh','extql','extwh','extwl','fbeq',
+ 'fbge','fbgt','fble','fblt','fbne','fcmoveq',
+ 'fcmovge','fcmovgt','fcmovle','fcmovlt','fcmovne','fetch',
+ 'fetch_m','ftois','ftoit','implver','insbl','inslh',
+ 'insll','insqh','insql','inswh','inswl','itoff',
+ 'itofs','itoft','jmp','jsr','jsr_coroutine','lda',
+ 'ldah','ldbu','ldwu','ldf','ldg','ldl',
+ 'ldl_l','ldq','ldq_l','ldq_u','lds','ldt',
+ 'maxsb8','maxsw4','maxub8','maxuw4','mb','mf_fpcr',
+ 'minsb8','minsw4','minub8','minuw4','mskbl','msklh',
+ 'mskll','mskqh','mskql','mskwh','mskwl','mt_fpcr',
+ 'mulf','mulg','mull','mulq',
+ 'muls','mult','ornot','perr','pklb','pkwb',
+ 'rc','ret','rpcc','rs','s4addl','s4addq',
+ 's4subl','s4subq','s8addl','s8addq','s8subl','s8subq',
+ 'sextb','sextw','sll','sqrtf','sqrtg','sqrts',
+ 'sqrtt','sra','srl','stb','stf','stg',
+ 'sts','stl','stl_c','stq','stq_c','stq_u',
+ 'stt','stw','subf','subg','subl',
+ 'subq','subs','subt','trapb','umulh','unpkbl',
+ 'unpkbw','wh64','wmb','xor','zap','zapnot',
+ 'ldgp');
+
+ procedure TAXPGNUAssembler.WriteInstruction (hp : tai);
+ begin
+(*
+ op:=paicpu(hp)^.opcode;
+ calljmp:=is_calljmp(op);
+ { call maybe not translated to calll }
+ s:=#9+att_op2str[op]+cond2str[paicpu(hp)^.condition];
+ if (not calljmp) and
+ (not att_nosuffix[op]) and
+ not(
+ (paicpu(hp)^.oper[0].typ=top_reg) and
+ (paicpu(hp)^.oper[0].reg in [R_ST..R_ST7])
+ ) then
+ s:=s+att_opsize2str[paicpu(hp)^.opsize];
+ { process operands }
+ if paicpu(hp)^.ops<>0 then
+ begin
+ { call and jmp need an extra handling }
+ { this code is only called if jmp isn't a labeled instruction }
+ if calljmp then
+ s:=s+#9+getopstr_jmp(paicpu(hp)^.oper[0])
+ else
+ begin
+ for i:=0to paicpu(hp)^.ops-1 do
+ begin
+ if i=0 then
+ sep:=#9
+ else
+ sep:=',';
+ s:=s+sep+getopstr(paicpu(hp)^.oper[i])
+ end;
+ end;
+ end;
+ AsmWriteLn(s);
+*)
+ end;
+
+end.