123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- {
- Copyright (c) 2020 by Karoly Balogh
- Convert m68kins.dat to a set of .inc files for the m68k backend
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- 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.
- **********************************************************************}
- program mk68kins;
- {$mode objfpc}{$H+}
- uses
- SysUtils,StrUtils;
- const
- Version = '1.0.0';
- HeaderStr = '{ don''t edit, this file is generated from m68kins.dat; to regenerate, run ''make insdat'' in the compiler directory }';
- max_operands = 6;
- type
- TOperandType = (
- OT_DATA,
- OT_ADDR,
- OT_ADDR_INDIR,
- OT_ADDR_INDIR_POSTINC,
- OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,
- OT_ADDR_IDX_DISP8,
- OT_ABS_SHORT,
- OT_ABS_LONG,
- OT_PC_DISP16,
- OT_PC_IDX_DISP8,
- OT_IMMEDIATE,
- OT_REG_LIST,
- OT_FPUREG_LIST,
- OT_FPUREG,
- OT_SPECIALREG
- );
- TOperandFlags = (
- OF_IMM_QUICK,
- OF_IMM_FLOAT,
- OF_IMM_64BIT,
- OF_SPECREG,
- OF_SPECREG_CCR,
- OF_SPECREG_SR,
- OF_SPECREG_USP,
- OF_SPECREG_FPIAR,
- OF_SPECREG_FPU,
- OF_BITFIELD,
- OF_BRANCH,
- OF_DOUBLE_REG,
- OF_KFACTOR,
- OF_NOSIZE
- );
- TOpSizeFlag = (
- OPS_UNSIZED,
- OPS_SHORT,
- OPS_BYTE,
- OPS_WORD,
- OPS_LONG,
- OPS_QUAD,
- OPS_SINGLE,
- OPS_DOUBLE,
- OPS_EXTENDED,
- OPS_PACKED,
- OPS_COLDFIRE
- );
- TOpSupported = (
- OS_M68000,
- OS_M68000UP,
- OS_M68010UP,
- OS_M68020,
- OS_M68020UP,
- OS_M68030,
- OS_M68040,
- OS_M68040UP,
- OS_M68060,
- OS_M68881,
- OS_M68851,
- OS_CPU32,
- OS_CF,
- OS_CF_ISA_A,
- OS_CF_ISA_APL,
- OS_CF_ISA_B,
- OS_CF_ISA_C,
- OS_CF_HWDIV,
- OS_CF_FPU,
- OS_CF_USP,
- OS_GNU_AS
- );
- TParamType = record
- id: string[32];
- modes: set of TOperandType;
- flags: set of TOperandFlags;
- end;
- TFlagsType = record
- id: string[32];
- flags: set of TOpSizeFlag;
- end;
- TSupportType = record
- id: string[32];
- flag: TOPSupported;
- end;
- const
- OpSizes: array[0..16] of TFlagsType = (
- (id: 'UNS'; flags: [OPS_UNSIZED]),
- (id: 'B'; flags: [OPS_BYTE]),
- (id: 'W'; flags: [OPS_WORD]),
- (id: 'L'; flags: [OPS_LONG]),
- (id: 'Q'; flags: [OPS_QUAD]),
- (id: 'BW'; flags: [OPS_BYTE,OPS_WORD]),
- (id: 'BWL'; flags: [OPS_BYTE,OPS_WORD,OPS_LONG]),
- (id: 'WL'; flags: [OPS_WORD,OPS_LONG]),
- (id: 'SBW'; flags: [OPS_SHORT,OPS_BYTE,OPS_WORD]),
- (id: 'SBWL'; flags: [OPS_SHORT,OPS_BYTE,OPS_WORD,OPS_LONG]),
- (id: 'CFWL'; flags: [OPS_WORD,OPS_LONG,OPS_COLDFIRE]),
- (id: 'CFBWL'; flags: [OPS_BYTE,OPS_WORD,OPS_LONG,OPS_COLDFIRE]),
- (id: 'FD'; flags: [OPS_DOUBLE]),
- (id: 'FX'; flags: [OPS_EXTENDED]),
- (id: 'FP'; flags: [OPS_PACKED]),
- (id: 'ANY'; flags: [OPS_BYTE,OPS_WORD,OPS_LONG,OPS_SINGLE,OPS_DOUBLE,OPS_EXTENDED,OPS_PACKED]),
- (id: 'CFANY'; flags: [OPS_BYTE,OPS_WORD,OPS_LONG,OPS_SINGLE,OPS_DOUBLE,OPS_COLDFIRE])
- );
- const
- OpSupport: array[0..19] of TSupportType = (
- (id: 'm68000up'; flag: OS_M68000UP),
- (id: 'm68010up'; flag: OS_M68010UP),
- (id: 'm68020'; flag: OS_M68020),
- (id: 'm68020up'; flag: OS_M68020UP),
- (id: 'm68030'; flag: OS_M68030),
- (id: 'm68040'; flag: OS_M68040),
- (id: 'm68040up'; flag: OS_M68040UP),
- (id: 'm68060'; flag: OS_M68060),
- (id: 'm68881'; flag: OS_M68881),
- (id: 'm68851'; flag: OS_M68851),
- (id: 'cpu32'; flag: OS_CPU32),
- (id: 'cf'; flag: OS_CF),
- (id: 'cf_isa_a'; flag: OS_CF_ISA_A),
- (id: 'cf_isa_apl'; flag: OS_CF_ISA_APL),
- (id: 'cf_isa_b'; flag: OS_CF_ISA_B),
- (id: 'cf_isa_c'; flag: OS_CF_ISA_C),
- (id: 'cf_hwdiv'; flag: OS_CF_HWDIV),
- (id: 'cf_fpu'; flag: OS_CF_FPU),
- (id: 'cf_usp'; flag: OS_CF_USP),
- (id: 'gnu_as'; flag: OS_GNU_AS)
- );
- const
- ParamTypes: array [0..63] of TParamType = (
- (id: 'void'; modes: []; flags: []),
- (id: '#imm'; modes: [OT_IMMEDIATE]; flags: []),
- (id: '#immq'; modes: [OT_IMMEDIATE]; flags: [OF_NOSIZE,OF_IMM_QUICK]),
- (id: '#immregs'; modes: [OT_IMMEDIATE]; flags: [OF_NOSIZE]),
- (id: 'Dx'; modes: [OT_DATA]; flags: []),
- (id: 'Dx:Dx'; modes: [OT_DATA]; flags: [OF_DOUBLE_REG]),
- (id: 'Rx'; modes: [OT_DATA, OT_ADDR]; flags: []),
- (id: 'Ax'; modes: [OT_ADDR]; flags: []),
- (id: '(Ax)'; modes: [OT_ADDR_INDIR]; flags: []),
- (id: '-(Ax)'; modes: [OT_ADDR_INDIR_PREDEC]; flags: []),
- (id: '(Ax)+'; modes: [OT_ADDR_INDIR_POSTINC]; flags: []),
- (id: 'd16(Ax)'; modes: [OT_ADDR_DISP16]; flags: []),
- (id: 'Dx-Ax'; modes: [OT_REG_LIST]; flags: []),
- (id: 'FPx'; modes: [OT_FPUREG]; flags: []),
- (id: 'FPx:FPx'; modes: [OT_FPUREG]; flags: [OF_DOUBLE_REG]),
- (id: 'FPx-FPx'; modes: [OT_FPUREG_LIST]; flags: []),
- (id: 'FPspec-list'; modes: [OT_FPUREG_LIST]; flags: [OF_SPECREG, OF_SPECREG_FPU]),
- (id: 'CCR'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG, OF_SPECREG_CCR]),
- (id: 'SR'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG, OF_SPECREG_SR]),
- (id: 'USP'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG, OF_SPECREG_USP]),
- (id: 'CTRL'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'FC'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'RP_030'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'RP_851'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'TC'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'AC'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'M1_B'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'BAD'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'BAC'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'PSR'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'PCSR'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'TT'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'VAL'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: 'FPIAR'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG, OF_SPECREG_FPIAR]),
- (id: 'FPspec'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG, OF_SPECREG_FPU]),
- (id: '<caches>'; modes: [OT_SPECIALREG]; flags: [OF_SPECREG]),
- (id: '<addr>'; modes: [OT_ABS_LONG]; flags: []),
- (id: '<dest>'; modes: [OT_ABS_LONG]; flags: [OF_BRANCH]),
- (id: '<value>'; modes: [OT_ABS_LONG]; flags: [OF_NOSIZE]),
- (id: '(Rx):(Rx)'; modes: [OT_ADDR_INDIR]; flags: [OF_DOUBLE_REG]),
- (id: '<ea-any>';
- modes: [OT_DATA,OT_ADDR,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8,OT_IMMEDIATE];
- flags: []),
- (id: '<ea-mem>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8,OT_IMMEDIATE];
- flags: []),
- (id: '<ea-mem-alter>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-mem-noimm>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8];
- flags: []),
- (id: '<ea-mem-fpuimm>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8,OT_IMMEDIATE];
- flags: [OF_IMM_FLOAT]),
- (id: '<ea-mem-alter-kf>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: [OF_KFACTOR]),
- (id: '<ea-mem-save>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-mem-restore>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-mem-imm64>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8,OT_IMMEDIATE];
- flags: [OF_IMM_64BIT]),
- (id: '<ea-data>';
- modes: [OT_DATA,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8,OT_IMMEDIATE];
- flags: []),
- (id: '<ea-data-noimm>';
- modes: [OT_DATA,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8];
- flags: []),
- (id: '<ea-data-alter>';
- modes: [OT_DATA,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-data-alter-bf>';
- modes: [OT_DATA,OT_ADDR_INDIR,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: [OF_BITFIELD]),
- (id: '<ea-data-control-bf>';
- modes: [OT_DATA,OT_ADDR_INDIR,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8];
- flags: [OF_BITFIELD]),
- (id: '<ea-control>';
- modes: [OT_ADDR_INDIR,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG,
- OT_PC_DISP16,OT_PC_IDX_DISP8];
- flags: []),
- (id: '<ea-control-alter>';
- modes: [OT_ADDR_INDIR,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-alter>';
- modes: [OT_DATA,OT_ADDR,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_ADDR_IDX_DISP8,OT_ABS_SHORT,OT_ABS_LONG];
- flags: []),
- (id: '<ea-movep>';
- modes: [OT_ADDR_INDIR,OT_ADDR_DISP16];
- flags: []),
- (id: '<cf-ea-mem-alter>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16];
- flags: []),
- (id: '<cf-ea-data-alter>';
- modes: [OT_DATA,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16];
- flags: []),
- (id: '<cf-ea-float>';
- modes: [OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_PC_DISP16];
- flags: []),
- (id: '<cf-ea-data-float>';
- modes: [OT_DATA,OT_ADDR_INDIR,OT_ADDR_INDIR_POSTINC,OT_ADDR_INDIR_PREDEC,
- OT_ADDR_DISP16,OT_PC_DISP16];
- flags: []),
- (id: '<cf-ea-movem>';
- modes: [OT_ADDR_INDIR,OT_ADDR_DISP16];
- flags: []),
- (id: '<cf-ea-fmovem-src>';
- modes: [OT_ADDR_INDIR,OT_ADDR_DISP16,OT_PC_DISP16];
- flags: [])
- );
- function OpTypeStr(idx: integer): string;
- var
- optyp: TOperandType;
- begin
- result:='';
- for optyp in ParamTypes[idx].modes do
- if result='' then
- WriteStr(result,optyp)
- else
- WriteStr(result,result,', ',optyp);
- end;
- function FlagsToStr(idx: integer): string;
- var
- flagtyp: TOperandFlags;
- begin
- result:='';
- for flagtyp in ParamTypes[idx].flags do
- if result='' then
- WriteStr(result,flagtyp)
- else
- WriteStr(result,result,', ',flagtyp);
- end;
- function OpSizeStr(idx: integer): string;
- var
- opsizeflag: TOpsizeFlag;
- begin
- result:='';
- for opsizeflag in Opsizes[idx].flags do
- if result='' then
- WriteStr(result,opsizeflag)
- else
- WriteStr(result,result,', ',opsizeflag);
- end;
- function OpSupportStr(const sa: TStringArray): string;
- var
- i: integer;
- s: string;
- flag: TOpSupported;
- idx: integer;
- begin
- result:='';
- for s in sa do
- begin
- idx:=-1;
- for I:=Low(OpSupport) to High(OpSupport) do
- if OpSupport[I].id=s then
- begin
- idx:=i;
- flag:=OpSupport[i].flag;
- break;
- end;
- if idx < 0 then
- raise Exception.Create('Invalid support type: '''+s+'''');
- if result='' then
- WriteStr(result,flag)
- else
- WriteStr(result,result,', ',flag);
- end;
- end;
- type
- { T68kInsDatOutputFiles }
- T68kInsDatOutputFiles = class
- public
- OpFile: TextFile;
- NOpFile: TextFile;
- StdOpNames: TextFile;
- InsTabFile: TextFile;
- constructor Create;
- destructor Destroy;override;
- end;
- constructor T68kInsDatOutputFiles.Create;
- begin
- AssignFile(OpFile,'m68kop.inc');
- Rewrite(OpFile);
- Writeln(OpFile,HeaderStr);
- Writeln(OpFile,'(');
- AssignFile(NOpFile,'m68knop.inc');
- Rewrite(NOpFile);
- Writeln(NOpFile,HeaderStr);
- AssignFile(StdOpNames,'m68kstd.inc');
- Rewrite(StdOpNames);
- Writeln(StdOpNames,HeaderStr);
- Writeln(StdOpNames,'(');
- AssignFile(InsTabFile,'m68ktab.inc');
- Rewrite(InsTabFile);
- Writeln(InsTabFile,HeaderStr);
- Writeln(InsTabFile,'(');
- end;
- destructor T68kInsDatOutputFiles.Destroy;
- begin
- CloseFile(OpFile);
- CloseFile(NOpFile);
- CloseFile(StdOpNames);
- CloseFile(InsTabFile);
- inherited Destroy;
- end;
- function FindParamType(const ParamTypeStr: string): Integer;
- var
- I: Integer;
- begin
- for I:=Low(ParamTypes) to High(ParamTypes) do
- if ParamTypes[I].id=ParamTypeStr then
- exit(I);
- raise Exception.Create('Invalid param type: '''+ParamTypeStr+'''');
- end;
- function FindOpsize(const SizeStr: string): Integer;
- var
- I: Integer;
- begin
- for I:=Low(Opsizes) to High(Opsizes) do
- if Opsizes[I].id=SizeStr then
- exit(I);
- raise Exception.Create('Invalid size: '''+SizeStr+'''');
- end;
- var
- InsDatFile: TextFile;
- OutputFiles: T68kInsDatOutputFiles=nil;
- S, op, ParamsStr: string;
- FirstIns: Boolean=true;
- OpCount: Integer=0;
- S_Split, S_Params, S_Support: TStringArray;
- ParamIdx: Integer;
- begin
- writeln('FPC m68k Instruction Table Converter Version ',Version);
- AssignFile(InsDatFile,'./m68kins.dat');
- Reset(InsDatFile);
- try
- OutputFiles:=T68kInsDatOutputFiles.Create;
- while not EoF(InsDatFile) do
- begin
- Readln(InsDatFile,S);
- S:=Trim(S);
- if AnsiStartsStr(';',S) then
- continue
- else if AnsiStartsStr('[',S) then
- begin
- op:=Copy(S,2,Length(S)-2);
- if not FirstIns then
- begin
- Writeln(OutputFiles.OpFile,',');
- Writeln(OutputFiles.StdOpNames,',');
- end;
- FirstIns:=False;
- Write(OutputFiles.OpFile,'A_'+op);
- Write(OutputFiles.StdOpNames,''''+LowerCase(op)+'''');
- end
- else if S<>'' then
- begin
- Inc(OpCount);
- if OpCount<>1 then
- Writeln(OutputFiles.InsTabFile,',');
- S_Split:=S.Split(' ',TStringSplitOptions.ExcludeEmpty);
- S_Params:=S_Split[0].Split(',',TStringSplitOptions.ExcludeEmpty);
- S_Support:=S_Split[4].Split(',',TStringSplitOptions.ExcludeEmpty);
- if (Length(S_Params)=1) and (S_Params[0]='void') then
- SetLength(S_Params,0);
- Writeln(OutputFiles.InsTabFile,' (');
- Writeln(OutputFiles.InsTabFile,' opcode : A_',op,';');
- Writeln(OutputFiles.InsTabFile,' ops : ',Length(S_Params),';');
- Write(OutputFiles.InsTabFile, ' optypes : (');
- if Length(S_Params)>max_operands then
- raise Exception.Create('Too many operands');
- for ParamIdx:=0 to max_operands-1 do
- begin
- if ParamIdx<>0 then
- Write(OutputFiles.InsTabFile,',');
- if ParamIdx<=High(S_Params) then
- Write(OutputFiles.InsTabFile,'[',OpTypeStr(FindParamType(S_Params[ParamIdx])),']')
- else
- Write(OutputFiles.InsTabFile,'[]');
- end;
- Writeln(OutputFiles.InsTabFile, ');');
- Write(OutputFiles.InsTabFile, ' opflags : (');
- if Length(S_Params)>max_operands then
- raise Exception.Create('Too many operands');
- for ParamIdx:=0 to max_operands-1 do
- begin
- if ParamIdx<>0 then
- Write(OutputFiles.InsTabFile,',');
- if ParamIdx<=High(S_Params) then
- Write(OutputFiles.InsTabFile,'[',FlagsToStr(FindParamType(S_Params[ParamIdx])),']')
- else
- Write(OutputFiles.InsTabFile,'[]');
- end;
- Writeln(OutputFiles.InsTabFile, ');');
- Writeln(OutputFiles.InsTabFile, ' codelen : ',S_Split[2],';');
- Writeln(OutputFiles.InsTabFile, ' code : (',S_Split[1],');');
- Writeln(OutputFiles.InsTabFile, ' support : [',OpSupportStr(S_Support),'];');
- Writeln(OutputFiles.InsTabFile, ' sizes : [',OpsizeStr(FindOpsize(S_Split[3])),'];');
- Write(OutputFiles.InsTabFile, ' )');
- end;
- end;
- Writeln(OutputFiles.OpFile,');');
- Writeln(OutputFiles.StdOpNames,');');
- Writeln(OutputFiles.NOpFile,OpCount,';');
- Writeln(OutputFiles.InsTabFile);
- Writeln(OutputFiles.InsTabFile,');');
- finally
- FreeAndNil(OutputFiles);
- CloseFile(InsDatFile);
- end;
- end.
|