diff options
Diffstat (limited to 'closures/compiler/alpha/agaxpgas.pas')
-rw-r--r-- | closures/compiler/alpha/agaxpgas.pas | 126 |
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. |