123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- {
- Copyright (c) 1998-2009 by Mazen NEIFER and David Zhang
- This unit contains the MIPS GAS instruction tables
- 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 itcpugas;
- {$i fpcdefs.inc}
- interface
- uses
- cpubase, cgbase;
- const
- gas_op2str: array[tasmop] of string[15] = ({$INCLUDE strinst.inc});
- function gas_regnum_search(const s: string): Tregister;
- function gas_regname(r: Tregister): string;
- implementation
- uses
- cutils, verbose;
- const
- gas_regname_table: array[tregisterindex] of string[7] = (
- {$i rmipsstd.inc}
- );
- gas_regname_index: array[tregisterindex] of tregisterindex = (
- {$i rmipssri.inc}
- );
- function findreg_by_gasname(const s: string): tregisterindex;
- var
- i, p: tregisterindex;
- begin
- for p := low(tregisterindex) to high(tregisterindex) do
- begin
- if gas_regname_table[gas_regname_index[p]] = s then
- begin
- findreg_by_gasname := gas_regname_index[p];
- exit
- end;
- end;
- findreg_by_gasname := 0;
- end;
- function gas_regnum_search(const s: string): Tregister;
- begin
- Result := regnumber_table[findreg_by_gasname(s)];
- end;
- function gas_regname(r: Tregister): string;
- var
- hr: tregister;
- p: longint;
- begin
- { Double uses the same table as single }
- hr := r;
- case getsubreg(hr) of
- R_SUBFD:
- setsubreg(hr, R_SUBFS);
- R_SUBL, R_SUBW, R_SUBD, R_SUBQ:
- setsubreg(hr, R_SUBD);
- end;
- p := findreg_by_number(hr);
- if p <> 0 then
- Result := gas_regname_table[p]
- else
- Result := generic_regname(r);
- end;
- end.
- {
- $Log: itcpugas.pas,v $
- Revision 1.7 2005/02/14 17:13:10 peter
- * truncate log
- }
|