diff options
Diffstat (limited to 'compiler')
96 files changed, 7448 insertions, 1718 deletions
diff --git a/compiler/aasmbase.pas b/compiler/aasmbase.pas index bb49dac49a..f3afa4465d 100644 --- a/compiler/aasmbase.pas +++ b/compiler/aasmbase.pas @@ -40,7 +40,7 @@ interface TAsmsymbind=( AB_NONE,AB_EXTERNAL,AB_COMMON,AB_LOCAL,AB_GLOBAL,AB_WEAK_EXTERNAL, { global in the current program/library, but not visible outside it } - AB_PRIVATE_EXTERN,AB_LAZY); + AB_PRIVATE_EXTERN,AB_LAZY,AB_IMPORT); TAsmsymtype=( AT_NONE,AT_FUNCTION,AT_DATA,AT_SECTION,AT_LABEL, @@ -61,6 +61,8 @@ interface type TAsmSectiontype=(sec_none, + { this section type allows to define a user named section } + sec_user, sec_code, sec_data, { read-only, but may contain relocations } diff --git a/compiler/aggas.pas b/compiler/aggas.pas index 81846462bb..683208cdba 100644 --- a/compiler/aggas.pas +++ b/compiler/aggas.pas @@ -259,7 +259,7 @@ implementation function TGNUAssembler.sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string; const - secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', '.text', '.data', { why doesn't .rodata work? (FK) } @@ -277,7 +277,7 @@ implementation {$if defined(m68k)} { Amiga/m68k GNU AS doesn't seem to like .rodata (KB) } '.data', {$else} - '.rodata', + '.rodata', {$endif} '.bss', '.threadvar', @@ -331,7 +331,7 @@ implementation '.obcj_nlcatlist', '.objc_protolist' ); - secnames_pic : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames_pic : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', '.text', '.data.rel', '.data.rel', @@ -419,6 +419,10 @@ implementation (target_info.system=system_i386_go32v2) then secname:='.data'; + { section type user gives the user full controll on the section name } + if atype=sec_user then + secname:=aname; + { For bss we need to set some flags that are target dependent, it is easier to disable it for smartlinking. It doesn't take up filespace } @@ -426,6 +430,7 @@ implementation create_smartlink_sections and (aname<>'') and (atype<>sec_toc) and + (atype<>sec_user) and { on embedded systems every byte counts, so smartlink bss too } ((atype<>sec_bss) or (target_info.system in systems_embedded)) then begin @@ -1514,6 +1519,7 @@ implementation (* Translation table - replace unsupported section types with basic ones. *) SecXTable: array[TAsmSectionType] of TAsmSectionType = ( sec_none, + sec_none, sec_code, sec_data, sec_data (* sec_rodata *), diff --git a/compiler/aoptobj.pas b/compiler/aoptobj.pas index 703a12b030..63a4edfd44 100644 --- a/compiler/aoptobj.pas +++ b/compiler/aoptobj.pas @@ -991,6 +991,7 @@ Unit AoptObj; strpnew('next label reused')))); {$endif finaldestdebug} l.increfs; + tasmlabel(hp.oper[0]^.ref^.symbol).decrefs; hp.oper[0]^.ref^.symbol := l; if not GetFinalDestination(hp,succ(level)) then exit; @@ -1037,6 +1038,12 @@ Unit AoptObj; (hp1.typ <> ait_label) do if not(hp1.typ in ([ait_label,ait_align]+skipinstr)) then begin + if (hp1.typ = ait_instruction) and + taicpu(hp1).is_jmp and + (taicpu(hp1).oper[0]^.typ = top_ref) and + assigned(taicpu(hp1).oper[0]^.ref^.symbol) and + (taicpu(hp1).oper[0]^.ref^.symbol is TAsmLabel) then + TAsmLabel(taicpu(hp1).oper[0]^.ref^.symbol).decrefs; asml.remove(hp1); hp1.free; end @@ -1051,6 +1058,7 @@ Unit AoptObj; begin hp2:=tai(hp1.next); asml.remove(p); + tasmlabel(taicpu(p).oper[0]^.ref^.symbol).decrefs; p.free; p:=hp2; continue; diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas index c4feae5fc2..dfb75b83b8 100644 --- a/compiler/arm/cgcpu.pas +++ b/compiler/arm/cgcpu.pas @@ -3479,6 +3479,8 @@ unit cgcpu; begin { restore int registers and return } list.concat(taicpu.op_reg_reg(A_MOV, NR_STACK_POINTER_REG, NR_FRAME_POINTER_REG)); + { Add 4 to SP to make it point to an "imaginary PC" which the paramanager assumes is there(for normal ARM) } + list.concat(taicpu.op_reg_const(A_ADD, NR_STACK_POINTER_REG, 4)); reference_reset(ref,4); ref.index:=NR_STACK_POINTER_REG; diff --git a/compiler/arm/cpuinfo.pas b/compiler/arm/cpuinfo.pas index 727f6a990d..e61bb46494 100644 --- a/compiler/arm/cpuinfo.pas +++ b/compiler/arm/cpuinfo.pas @@ -99,7 +99,9 @@ Const pocall_softfloat, { same as stdcall (requires that all const records are passed by reference, but that's already done for stdcall) } - pocall_mwpascal + pocall_mwpascal, + { used for interrupt handling } + pocall_interrupt ]; cputypestr : array[tcputype] of string[8] = ('', @@ -147,6 +149,19 @@ Const 'STELLARIS' ); + interruptvectors : array[tcontrollertype] of longint = + (0, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 12+59, { XL-density } + 12 { No model specified } + ); + vfp_scalar = [fpu_vfpv2,fpu_vfpv3]; { Supported optimizations, only used for information } diff --git a/compiler/cclasses.pas b/compiler/cclasses.pas index d568f33d31..9eb8f7159a 100644 --- a/compiler/cclasses.pas +++ b/compiler/cclasses.pas @@ -2208,6 +2208,9 @@ end; function TCmdStrListItem.GetCopy:TLinkedListItem; begin Result:=(inherited GetCopy); + { TLinkedListItem.GetCopy performs a "move" to copy all data -> reinit + the ansistring, so the refcount is properly increased } + Initialize(TCmdStrListItem(Result).FPStr); TCmdStrListItem(Result).FPStr:=FPstr; end; diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index 820927579f..af43bb64e8 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -451,6 +451,8 @@ unit cgobj; procedure g_incrrefcount(list : TAsmList;t: tdef; const ref: treference); procedure g_decrrefcount(list : TAsmList;t: tdef; const ref: treference); + procedure g_array_rtti_helper(list: TAsmList; t: tdef; const ref: treference; const highloc: tlocation; + const name: string); procedure g_initialize(list : TAsmList;t : tdef;const ref : treference); procedure g_finalize(list : TAsmList;t : tdef;const ref : treference); @@ -3509,6 +3511,8 @@ implementation end else begin + if is_open_array(t) then + InternalError(201103054); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); a_loadaddr_ref_cgpara(list,href,cgpara2); a_loadaddr_ref_cgpara(list,ref,cgpara1); @@ -3574,6 +3578,8 @@ implementation end else begin + if is_open_array(t) then + InternalError(201103053); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); a_loadaddr_ref_cgpara(list,href,cgpara2); a_loadaddr_ref_cgpara(list,ref,cgpara1); @@ -3587,6 +3593,50 @@ implementation cgpara1.done; end; + procedure tcg.g_array_rtti_helper(list: TAsmList; t: tdef; const ref: treference; const highloc: tlocation; const name: string); + var + cgpara1,cgpara2,cgpara3: TCGPara; + href: TReference; + hreg, lenreg: TRegister; + begin + cgpara1.init; + cgpara2.init; + cgpara3.init; + paramanager.getintparaloc(pocall_default,1,cgpara1); + paramanager.getintparaloc(pocall_default,2,cgpara2); + paramanager.getintparaloc(pocall_default,3,cgpara3); + + reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); + if highloc.loc=LOC_CONSTANT then + a_load_const_cgpara(list,OS_INT,highloc.value+1,cgpara3) + else + begin + if highloc.loc in [LOC_REGISTER,LOC_CREGISTER] then + hreg:=highloc.register + else + begin + hreg:=getintregister(list,OS_INT); + a_load_loc_reg(list,OS_INT,highloc,hreg); + end; + { increment, converts high(x) to length(x) } + lenreg:=getintregister(list,OS_INT); + a_op_const_reg_reg(list,OP_ADD,OS_INT,1,hreg,lenreg); + a_load_reg_cgpara(list,OS_INT,lenreg,cgpara3); + end; + + a_loadaddr_ref_cgpara(list,href,cgpara2); + a_loadaddr_ref_cgpara(list,ref,cgpara1); + paramanager.freecgpara(list,cgpara1); + paramanager.freecgpara(list,cgpara2); + paramanager.freecgpara(list,cgpara3); + allocallcpuregisters(list); + a_call_name(list,name,false); + deallocallcpuregisters(list); + + cgpara3.done; + cgpara2.done; + cgpara1.done; + end; procedure tcg.g_initialize(list : TAsmList;t : tdef;const ref : treference); var @@ -3605,6 +3655,8 @@ implementation a_load_const_ref(list,OS_ADDR,0,ref) else begin + if is_open_array(t) then + InternalError(201103052); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); a_loadaddr_ref_cgpara(list,href,cgpara2); a_loadaddr_ref_cgpara(list,ref,cgpara1); @@ -3638,6 +3690,8 @@ implementation end else begin + if is_open_array(t) then + InternalError(201103051); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); a_loadaddr_ref_cgpara(list,href,cgpara2); a_loadaddr_ref_cgpara(list,ref,cgpara1); diff --git a/compiler/comprsrc.pas b/compiler/comprsrc.pas index a0dbaffec2..62bbbe0818 100644 --- a/compiler/comprsrc.pas +++ b/compiler/comprsrc.pas @@ -377,18 +377,18 @@ end; function CopyResFile(inf,outf : TCmdStr) : boolean; var - src,dst : TCFileStream; + src,dst : TCCustomFileStream; begin { Copy .res file to units output dir. } Result:=false; - src:=TCFileStream.Create(inf,fmOpenRead or fmShareDenyNone); + src:=CFileStreamClass.Create(inf,fmOpenRead or fmShareDenyNone); if CStreamError<>0 then begin Message1(exec_e_cant_open_resource_file, src.FileName); Include(current_settings.globalswitches, cs_link_nolink); exit; end; - dst:=TCFileStream.Create(current_module.outputpath^+outf,fmCreate); + dst:=CFileStreamClass.Create(current_module.outputpath^+outf,fmCreate); if CStreamError<>0 then begin Message1(exec_e_cant_write_resource_file, dst.FileName); diff --git a/compiler/cstreams.pas b/compiler/cstreams.pas index 415345adab..ddd6e9c615 100644 --- a/compiler/cstreams.pas +++ b/compiler/cstreams.pas @@ -100,23 +100,38 @@ type property Size: Longint read GetSize write SetSize; end; +{ TCCustomFileStream class } + + TCCustomFileStream = class(TCStream) + protected + FFileName : String; + public + constructor Create(const AFileName: string;{shortstring!} Mode: Word); virtual; abstract; + function EOF: boolean; virtual; abstract; + property FileName : String Read FFilename; + end; + { TFileStream class } - TCFileStream = class(TCStream) + TCFileStream = class(TCCustomFileStream) Private - FFileName : String; FHandle: File; protected procedure SetSize(NewSize: Longint); override; public - constructor Create(const AFileName: string; Mode: Word); + constructor Create(const AFileName: string; Mode: Word); override; destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(Offset: Longint; Origin: Word): Longint; override; - property FileName : String Read FFilename; + function EOF: boolean; override; end; + TCFileStreamClass = class of TCCustomFileStream; +var + CFileStreamClass: TCFileStreamClass = TCFileStream; + +type { TCustomMemoryStream abstract class } TCCustomMemoryStream = class(TCStream) @@ -441,6 +456,11 @@ begin Result:=l; end; +function TCFileStream.EOF: boolean; +begin + EOF:=system.eof(FHandle); +end; + {****************************************************************************} {* TCustomMemoryStream *} @@ -489,11 +509,11 @@ end; procedure TCCustomMemoryStream.SaveToFile(const FileName: string); -Var S : TCFileStream; +Var S : TCCustomFileStream; begin Try - S:=TCFileStream.Create (FileName,fmCreate); + S:=CFileStreamClass.Create (FileName,fmCreate); SaveToStream(S); finally S.free; @@ -574,11 +594,11 @@ end; procedure TCMemoryStream.LoadFromFile(const FileName: string); -Var S : TCFileStream; +Var S : TCCustomFileStream; begin Try - S:=TCFileStream.Create (FileName,fmOpenRead); + S:=CFileStreamClass.Create (FileName,fmOpenRead); LoadFromStream(S); finally S.free; diff --git a/compiler/cwindirs.pp b/compiler/cwindirs.pp new file mode 100644 index 0000000000..077697d2a8 --- /dev/null +++ b/compiler/cwindirs.pp @@ -0,0 +1,123 @@ +{ this unit is temporarily included in the compiler sources till stable releases with + windirs from the rtl are shipped +} +unit cwindirs; + +{$mode objfpc} +{$H+} + +interface + +uses + windows, + strings; + +Const + CSIDL_PROGRAMS = $0002; { %SYSTEMDRIVE%\Program Files } + CSIDL_PERSONAL = $0005; { %USERPROFILE%\My Documents } + CSIDL_FAVORITES = $0006; { %USERPROFILE%\Favorites } + CSIDL_STARTUP = $0007; { %USERPROFILE%\Start menu\Programs\Startup } + CSIDL_RECENT = $0008; { %USERPROFILE%\Recent } + CSIDL_SENDTO = $0009; { %USERPROFILE%\Sendto } + CSIDL_STARTMENU = $000B; { %USERPROFILE%\Start menu } + CSIDL_MYMUSIC = $000D; { %USERPROFILE%\Documents\My Music } + CSIDL_MYVIDEO = $000E; { %USERPROFILE%\Documents\My Videos } + CSIDL_DESKTOPDIRECTORY = $0010; { %USERPROFILE%\Desktop } + CSIDL_NETHOOD = $0013; { %USERPROFILE%\NetHood } + CSIDL_TEMPLATES = $0015; { %USERPROFILE%\Templates } + CSIDL_COMMON_STARTMENU = $0016; { %PROFILEPATH%\All users\Start menu } + CSIDL_COMMON_PROGRAMS = $0017; { %PROFILEPATH%\All users\Start menu\Programs } + CSIDL_COMMON_STARTUP = $0018; { %PROFILEPATH%\All users\Start menu\Programs\Startup } + CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { %PROFILEPATH%\All users\Desktop } + CSIDL_APPDATA = $001A; { %USERPROFILE%\Application Data (roaming) } + CSIDL_PRINTHOOD = $001B; { %USERPROFILE%\Printhood } + CSIDL_LOCAL_APPDATA = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) } + CSIDL_COMMON_FAVORITES = $001F; { %PROFILEPATH%\All users\Favorites } + CSIDL_INTERNET_CACHE = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files } + CSIDL_COOKIES = $0021; { %USERPROFILE%\Cookies } + CSIDL_HISTORY = $0022; { %USERPROFILE%\Local settings\History } + CSIDL_COMMON_APPDATA = $0023; { %PROFILESPATH%\All Users\Application Data } + CSIDL_WINDOWS = $0024; { %SYSTEMROOT% } + CSIDL_SYSTEM = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME) } + CSIDL_PROGRAM_FILES = $0026; { %SYSTEMDRIVE%\Program Files } + CSIDL_MYPICTURES = $0027; { %USERPROFILE%\My Documents\My Pictures } + CSIDL_PROFILE = $0028; { %USERPROFILE% } + CSIDL_PROGRAM_FILES_COMMON = $002B; { %SYSTEMDRIVE%\Program Files\Common } + CSIDL_COMMON_TEMPLATES = $002D; { %PROFILEPATH%\All Users\Templates } + CSIDL_COMMON_DOCUMENTS = $002E; { %PROFILEPATH%\All Users\Documents } + CSIDL_COMMON_ADMINTOOLS = $002F; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools } + CSIDL_ADMINTOOLS = $0030; { %USERPROFILE%\Start Menu\Programs\Administrative Tools } + CSIDL_COMMON_MUSIC = $0035; { %PROFILEPATH%\All Users\Documents\my music } + CSIDL_COMMON_PICTURES = $0036; { %PROFILEPATH%\All Users\Documents\my pictures } + CSIDL_COMMON_VIDEO = $0037; { %PROFILEPATH%\All Users\Documents\my videos } + CSIDL_CDBURN_AREA = $003B; { %USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning } + CSIDL_PROFILES = $003E; { %PROFILEPATH% } + + CSIDL_FLAG_CREATE = $8000; { (force creation of requested folder if it doesn't exist yet) } + +Function GetWindowsSpecialDir(ID : Integer) : String; + +implementation + +uses + sysutils; + +Type + PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; + + +var + SHGetFolderPath : PFNSHGetFolderPath = Nil; + CFGDLLHandle : THandle = 0; + +Procedure InitDLL; + +Var + pathBuf: array[0..MAX_PATH-1] of char; + pathLength: Integer; +begin + { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185) + Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath + to shell32.dll whenever possible. } + pathLength:=GetSystemDirectory(pathBuf, MAX_PATH); + if (pathLength>0) and (pathLength<MAX_PATH-14) then { 14=length('\shfolder.dll'#0) } + begin + StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1); + CFGDLLHandle:=LoadLibrary(pathBuf); + + if (CFGDLLHandle<>0) then + begin + Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA'); + If @ShGetFolderPath=nil then + begin + FreeLibrary(CFGDLLHandle); + CFGDllHandle:=0; + end; + end; + end; + If (@ShGetFolderPath=Nil) then + Raise Exception.Create('Could not determine SHGetFolderPath Function'); +end; + +Function GetWindowsSpecialDir(ID : Integer) : String; + +Var + APath : Array[0..MAX_PATH] of char; + +begin + Result:=''; + if (CFGDLLHandle=0) then + InitDLL; + If (SHGetFolderPath<>Nil) then + begin + if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then + Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0])); + end; +end; + +Initialization +Finalization + if CFGDLLHandle<>0 then + FreeLibrary(CFGDllHandle); +end. + diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas index 6c0f27f793..f917a15a55 100644 --- a/compiler/defcmp.pas +++ b/compiler/defcmp.pas @@ -1260,7 +1260,9 @@ implementation find_real_objcclass_definition(tobjectdef(def_to),false)) then begin doconv:=tc_equal; - eq:=te_equal; + { exact, not equal, because can change between interface + and implementation } + eq:=te_exact; end { object pascal objects } else if (def_from.typ=objectdef) and diff --git a/compiler/finput.pas b/compiler/finput.pas index 47db6f7869..f385fcce0a 100644 --- a/compiler/finput.pas +++ b/compiler/finput.pas @@ -26,7 +26,7 @@ unit finput; interface uses - cutils,cclasses; + cutils,cclasses,cstreams; const InputFileBufSize=32*1024+1; @@ -91,7 +91,7 @@ interface function fileclose: boolean; override; procedure filegettime; override; private - f : file; { current file handle } + f : TCCustomFileStream; { current file handle } end; tinputfilemanager = class @@ -457,47 +457,46 @@ uses exit; end; { Open file } - ofm:=filemode; - filemode:=0; - Assign(f,filename); - {$I-} - reset(f,1); - {$I+} - filemode:=ofm; - fileopen:=(ioresult=0); + fileopen:=false; + try + f:=CFileStreamClass.Create(filename,fmOpenRead); + fileopen:=true; + except + end; end; function tdosinputfile.fileseek(pos: longint): boolean; begin - {$I-} - seek(f,Pos); - {$I+} - fileseek:=(ioresult=0); + fileseek:=false; + try + f.position:=Pos; + fileseek:=true; + except + end; end; function tdosinputfile.fileread(var databuf; maxsize: longint): longint; - var - w : longint; begin - blockread(f,databuf,maxsize,w); - fileread:=w; + fileread:=f.Read(databuf,maxsize); end; function tdosinputfile.fileeof: boolean; begin - fileeof:=eof(f); + fileeof:=f.eof(); end; function tdosinputfile.fileclose: boolean; begin - {$I-} - system.close(f); - {$I+} - fileclose:=(ioresult=0); + fileclose:=false; + try + f.Free; + fileclose:=true; + except + end; end; diff --git a/compiler/fmodule.pas b/compiler/fmodule.pas index ef9d14fa2d..cf7f602d78 100644 --- a/compiler/fmodule.pas +++ b/compiler/fmodule.pas @@ -544,7 +544,6 @@ implementation destructor tmodule.Destroy; var i : longint; - hpi : tprocinfo; begin if assigned(unitmap) then freemem(unitmap); @@ -582,12 +581,7 @@ implementation current_specializedef:=nil; end; { release procinfo tree } - while assigned(procinfo) do - begin - hpi:=tprocinfo(procinfo).parent; - tprocinfo(procinfo).free; - procinfo:=hpi; - end; + tprocinfo(procinfo).destroy_tree; end; DoneDebugInfo(self); used_units.free; @@ -642,7 +636,6 @@ implementation procedure tmodule.reset; var - hpi : tprocinfo; i : longint; begin if assigned(scanner) then @@ -664,12 +657,7 @@ implementation current_specializedef:=nil; end; { release procinfo tree } - while assigned(procinfo) do - begin - hpi:=tprocinfo(procinfo).parent; - tprocinfo(procinfo).free; - procinfo:=hpi; - end; + tprocinfo(procinfo).destroy_tree; end; if assigned(asmdata) then begin diff --git a/compiler/globals.pas b/compiler/globals.pas index 1c243c40f5..61e11d53e8 100644 --- a/compiler/globals.pas +++ b/compiler/globals.pas @@ -26,7 +26,7 @@ unit globals; interface uses -{$ifdef win32} +{$ifdef windows} windows, {$endif} {$ifdef os2} @@ -477,6 +477,13 @@ implementation {$ifdef macos} macutils, {$endif} +{$ifdef mswindows} +{$ifdef VER2_4} + cwindirs, +{$else VER2_4} + windirs, +{$endif VER2_4} +{$endif} comphook; {**************************************************************************** @@ -718,7 +725,18 @@ implementation Default Macro Handling ****************************************************************************} + procedure DefaultReplacements(var s:ansistring); +{$ifdef mswindows} + procedure ReplaceSpecialFolder(const MacroName: string; const ID: integer); + begin + // Only try to receive the special folders (and thus dynamically + // load shfolder.dll) when that's needed. + if pos(MacroName,s)>0 then + Replace(s,MacroName,GetWindowsSpecialDir(ID)); + end; + +{$endif mswindows} var envstr: string; envvalue: pchar; @@ -734,6 +752,15 @@ implementation Replace(s,'$FPCTARGET',target_os_string) else Replace(s,'$FPCTARGET',target_full_string); +{$ifdef mswindows} + ReplaceSpecialFolder('$LOCAL_APPDATA',CSIDL_LOCAL_APPDATA); + ReplaceSpecialFolder('$APPDATA',CSIDL_APPDATA); + ReplaceSpecialFolder('$COMMON_APPDATA',CSIDL_COMMON_APPDATA); + ReplaceSpecialFolder('$PERSONAL',CSIDL_PERSONAL); + ReplaceSpecialFolder('$PROGRAM_FILES',CSIDL_PROGRAM_FILES); + ReplaceSpecialFolder('$PROGRAM_FILES_COMMON',CSIDL_PROGRAM_FILES_COMMON); + ReplaceSpecialFolder('$PROFILE',CSIDL_PROFILE); +{$endif mswindows} { Replace environment variables between dollar signs } i := pos('$',s); while i>0 do @@ -980,7 +1007,8 @@ implementation 'SAFECALL', 'STDCALL', 'SOFTFLOAT', - 'MWPASCAL' + 'MWPASCAL', + 'INTERRUPT' ); var t : tproccalloption; diff --git a/compiler/globtype.pas b/compiler/globtype.pas index 8f114da397..f74b907019 100644 --- a/compiler/globtype.pas +++ b/compiler/globtype.pas @@ -360,7 +360,9 @@ interface pocall_softfloat, { Metrowerks Pascal. Special case on Mac OS (X): passes all } { constant records by reference. } - pocall_mwpascal + pocall_mwpascal, + { Special interrupt handler for embedded systems } + pocall_interrupt ); tproccalloptions = set of tproccalloption; @@ -377,7 +379,8 @@ interface 'SafeCall', 'StdCall', 'SoftFloat', - 'MWPascal' + 'MWPascal', + 'Interrupt' ); { Default calling convention } diff --git a/compiler/i386/ag386nsm.pas b/compiler/i386/ag386nsm.pas index aacdd133d2..eff3a08a5c 100644 --- a/compiler/i386/ag386nsm.pas +++ b/compiler/i386/ag386nsm.pas @@ -445,7 +445,7 @@ interface procedure T386NasmAssembler.WriteSection(atype:TAsmSectiontype;const aname:string); const - secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', '.text', '.data', '.data', diff --git a/compiler/i386/cgcpu.pas b/compiler/i386/cgcpu.pas index d82649f464..0fddb88fb1 100644 --- a/compiler/i386/cgcpu.pas +++ b/compiler/i386/cgcpu.pas @@ -371,6 +371,9 @@ unit cgcpu; getcpuregister(list,NR_EDI); a_load_loc_reg(list,OS_INT,lenloc,NR_EDI); list.concat(Taicpu.op_reg(A_INC,S_L,NR_EDI)); + { Now EDI contains (high+1). Copy it to ECX for later use. } + getcpuregister(list,NR_ECX); + list.concat(Taicpu.op_reg_reg(A_MOV,S_L,NR_EDI,NR_ECX)); if (elesize<>1) then begin if ispowerof2(elesize, power) then @@ -394,43 +397,22 @@ unit cgcpu; a_jmp_always(list,again); a_label(list,ok); - list.concat(Taicpu.op_reg_reg(A_SUB,S_L,NR_EDI,NR_ESP)); - ungetcpuregister(list,NR_EDI); - { now reload EDI } - getcpuregister(list,NR_EDI); - a_load_loc_reg(list,OS_INT,lenloc,NR_EDI); - list.concat(Taicpu.op_reg(A_INC,S_L,NR_EDI)); - - if (elesize<>1) then - begin - if ispowerof2(elesize, power) then - list.concat(Taicpu.op_const_reg(A_SHL,S_L,power,NR_EDI)) - else - list.concat(Taicpu.op_const_reg(A_IMUL,S_L,elesize,NR_EDI)); - end; - end - else + end; {$endif __NOWINPECOFF__} - list.concat(Taicpu.op_reg_reg(A_SUB,S_L,NR_EDI,NR_ESP)); + { If we were probing pages, EDI=(size mod pagesize) and ESP is decremented + by (size div pagesize)*pagesize, otherwise EDI=size. + Either way, subtracting EDI from ESP will set ESP to desired final value. } + list.concat(Taicpu.op_reg_reg(A_SUB,S_L,NR_EDI,NR_ESP)); { align stack on 4 bytes } list.concat(Taicpu.op_const_reg(A_AND,S_L,aint($fffffff4),NR_ESP)); { load destination, don't use a_load_reg_reg, that will add a move instruction that can confuse the reg allocator } list.concat(Taicpu.Op_reg_reg(A_MOV,S_L,NR_ESP,NR_EDI)); - { Allocate other registers } - getcpuregister(list,NR_ECX); + { Allocate ESI and load it with source } getcpuregister(list,NR_ESI); - - { load count } - a_load_loc_reg(list,OS_INT,lenloc,NR_ECX); - - { load source } a_loadaddr_ref_reg(list,ref,NR_ESI); - { scheduled .... } - list.concat(Taicpu.op_reg(A_INC,S_L,NR_ECX)); - { calculate size } len:=elesize; opsize:=S_B; @@ -446,7 +428,7 @@ unit cgcpu; len:=len shr 1; end; - if len<>0 then + if len>1 then begin if ispowerof2(len, power) then list.concat(Taicpu.op_const_reg(A_SHL,S_L,power,NR_ECX)) diff --git a/compiler/i386/i386att.inc b/compiler/i386/i386att.inc index 04e9e8387e..b34c6193fe 100644 --- a/compiler/i386/i386att.inc +++ b/compiler/i386/i386att.inc @@ -602,5 +602,82 @@ 'insertq', 'extrq', 'lzcnt', -'popcnt' +'pabsb', +'pabsw', +'pabsd', +'palignr', +'phaddw', +'phaddd', +'phaddsw', +'phsubw', +'phsubd', +'phsubsw', +'pmaddubsw', +'pmulhrsw', +'pshufb', +'psignb', +'psignw', +'psignd', +'blendps', +'blendpd', +'blendvps', +'blendvpd', +'dpps', +'dppd', +'extractps', +'insertps', +'movntdqa', +'mpsadbw', +'packusdw', +'pblendvb', +'pblendw', +'pcmpeqq', +'pextrb', +'pextrd', +'pextrq', +'phminposuw', +'pinsrb', +'pinsrd', +'pinsrq', +'pmaxsb', +'pmaxsd', +'pmaxud', +'pmaxuw', +'pminsb', +'pminsd', +'pminuw', +'pminud', +'pmovsxbw', +'pmovsxbd', +'pmovsxbq', +'pmovsxwd', +'pmovsxwq', +'pmovsxdq', +'pmovzxbw', +'pmovzxbd', +'pmovzxbq', +'pmovzxwd', +'pmovzxwq', +'pmovzxdq', +'pmuldq', +'ptest', +'roundps', +'roundpd', +'roundss', +'roundsd', +'pcmpestri', +'pcmpestrm', +'pcmpistri', +'pcmpistrm', +'pcmpgtq', +'popcnt', +'aesenc', +'aesenclast', +'aesdec', +'aesdeclast', +'aesimc', +'aeskeygen', +'stosq', +'lodsq', +'cmpsq' ); diff --git a/compiler/i386/i386atts.inc b/compiler/i386/i386atts.inc index f8a8d8d702..f012e395d6 100644 --- a/compiler/i386/i386atts.inc +++ b/compiler/i386/i386atts.inc @@ -602,5 +602,82 @@ attsufNONE, attsufNONE, attsufNONE, attsufINT, -attsufINT +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufINT, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE ); diff --git a/compiler/i386/i386int.inc b/compiler/i386/i386int.inc index 3e030b7150..a661e19278 100644 --- a/compiler/i386/i386int.inc +++ b/compiler/i386/i386int.inc @@ -602,5 +602,82 @@ 'insertq', 'extrq', 'lzcnt', -'popcnt' +'pabsb', +'pabsw', +'pabsd', +'palignr', +'phaddw', +'phaddd', +'phaddsw', +'phsubw', +'phsubd', +'phsubsw', +'pmaddubsw', +'pmulhrsw', +'pshufb', +'psignb', +'psignw', +'psignd', +'blendps', +'blendpd', +'blendvps', +'blendvpd', +'dpps', +'dppd', +'extractps', +'insertps', +'movntdqa', +'mpsadbw', +'packusdw', +'pblendvb', +'pblendw', +'pcmpeqq', +'pextrb', +'pextrd', +'pextrq', +'phminposuw', +'pinsrb', +'pinsrd', +'pinsrq', +'pmaxsb', +'pmaxsd', +'pmaxud', +'pmaxuw', +'pminsb', +'pminsd', +'pminuw', +'pminud', +'pmovsxbw', +'pmovsxbd', +'pmovsxbq', +'pmovsxwd', +'pmovsxwq', +'pmovsxdq', +'pmovzxbw', +'pmovzxbd', +'pmovzxbq', +'pmovzxwd', +'pmovzxwq', +'pmovzxdq', +'pmuldq', +'ptest', +'roundps', +'roundpd', +'roundss', +'roundsd', +'pcmpestri', +'pcmpestrm', +'pcmpistri', +'pcmpistrm', +'pcmpgtq', +'popcnt', +'aesenc', +'aesenclast', +'aesdec', +'aesdeclast', +'aesimc', +'aeskeygen', +'stosq', +'lodsq', +'cmpsq' ); diff --git a/compiler/i386/i386nop.inc b/compiler/i386/i386nop.inc index 5fe2125afc..9adbc468ce 100644 --- a/compiler/i386/i386nop.inc +++ b/compiler/i386/i386nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -1380; +1560; diff --git a/compiler/i386/i386op.inc b/compiler/i386/i386op.inc index 2077fbebdf..7386f7fcd5 100644 --- a/compiler/i386/i386op.inc +++ b/compiler/i386/i386op.inc @@ -602,5 +602,82 @@ A_MOVNTSD, A_INSERTQ, A_EXTRQ, A_LZCNT, -A_POPCNT +A_PABSB, +A_PABSW, +A_PABSD, +A_PALIGNR, +A_PHADDW, +A_PHADDD, +A_PHADDSW, +A_PHSUBW, +A_PHSUBD, +A_PHSUBSW, +A_PMADDUBSW, +A_PMULHRSW, +A_PSHUFB, +A_PSIGNB, +A_PSIGNW, +A_PSIGND, +A_BLENDPS, +A_BLENDPD, +A_BLENDVPS, +A_BLENDVPD, +A_DPPS, +A_DPPD, +A_EXTRACTPS, +A_INSERTPS, +A_MOVNTDQA, +A_MPSADBW, +A_PACKUSDW, +A_PBLENDVB, +A_PBLENDW, +A_PCMPEQQ, +A_PEXTRB, +A_PEXTRD, +A_PEXTRQ, +A_PHMINPOSUW, +A_PINSRB, +A_PINSRD, +A_PINSRQ, +A_PMAXSB, +A_PMAXSD, +A_PMAXUD, +A_PMAXUW, +A_PMINSB, +A_PMINSD, +A_PMINUW, +A_PMINUD, +A_PMOVSXBW, +A_PMOVSXBD, +A_PMOVSXBQ, +A_PMOVSXWD, +A_PMOVSXWQ, +A_PMOVSXDQ, +A_PMOVZXBW, +A_PMOVZXBD, +A_PMOVZXBQ, +A_PMOVZXWD, +A_PMOVZXWQ, +A_PMOVZXDQ, +A_PMULDQ, +A_PTEST, +A_ROUNDPS, +A_ROUNDPD, +A_ROUNDSS, +A_ROUNDSD, +A_PCMPESTRI, +A_PCMPESTRM, +A_PCMPISTRI, +A_PCMPISTRM, +A_PCMPGTQ, +A_POPCNT, +A_AESENC, +A_AESENCLAST, +A_AESDEC, +A_AESDECLAST, +A_AESIMC, +A_AESKEYGEN, +A_STOSQ, +A_LODSQ, +A_CMPSQ ); diff --git a/compiler/i386/i386prop.inc b/compiler/i386/i386prop.inc index 75aab26425..87dd25a2ac 100644 --- a/compiler/i386/i386prop.inc +++ b/compiler/i386/i386prop.inc @@ -602,5 +602,82 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_RRAX, Ch_WMemEDI, Ch_RWRDI)), +(Ch: (Ch_WRAX, Ch_RWRSI, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)) ); diff --git a/compiler/i386/i386tab.inc b/compiler/i386/i386tab.inc index 8c249e8c35..24bce17dff 100644 --- a/compiler/i386/i386tab.inc +++ b/compiler/i386/i386tab.inc @@ -7796,7 +7796,14 @@ ops : 3; optypes : (ot_reg32,ot_xmmreg,ot_immediate); code : #1#102#211#2#15#197#72#22; - flags : if_willamette or if_sse2 or if_sb or if_ar2 + flags : if_sse4 + ), + ( + opcode : A_PEXTRW; + ops : 3; + optypes : (ot_memory or ot_bits32,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#21#65#22; + flags : if_sse4 ), ( opcode : A_PINSRW; @@ -9608,7 +9615,7 @@ opcode : A_MOVNTSD; ops : 2; optypes : (ot_memory,ot_xmmreg,ot_none); - code : #192#220#213#211#2#15#43#0#65; + code : #192#220#213#211#2#15#43#65; flags : if_sse4 ), ( @@ -9647,17 +9654,1270 @@ flags : if_386 or if_sm or if_sse4 ), ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_mmxreg,ot_mmxreg,ot_immediate); + code : #217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_mmxreg,ot_memory,ot_immediate); + code : #193#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDPS; + ops : 3; + optypes : (ot_xmmreg or ot_signed,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#12#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPS; + ops : 3; + optypes : (ot_xmmreg or ot_signed,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#12#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#2#15#58#253#1#13#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#2#15#58#253#1#13#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPS; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#20#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPS; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#20#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#21#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#21#72; + flags : if_sse4 + ), + ( + opcode : A_DPPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#64#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#64#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#65#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#65#72#22; + flags : if_sse4 + ), + ( + opcode : A_EXTRACTPS; + ops : 3; + optypes : (ot_memory,ot_xmmreg,ot_immediate); + code : #1#102#213#3#15#58#23#65#22; + flags : if_sse4 + ), + ( + opcode : A_EXTRACTPS; + ops : 3; + optypes : (ot_reg32 or ot_bits64,ot_xmmreg,ot_immediate); + code : #1#102#192#3#15#58#23#65#22; + flags : if_sse4 + ), + ( + opcode : A_INSERTPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#33#72#22; + flags : if_sse4 + ), + ( + opcode : A_INSERTPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#33#72#22; + flags : if_sse4 + ), + ( + opcode : A_MOVNTDQA; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#42#72; + flags : if_sse4 + ), + ( + opcode : A_MPSADBW; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#66#72#22; + flags : if_sse4 + ), + ( + opcode : A_MPSADBW; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#66#72#22; + flags : if_sse4 + ), + ( + opcode : A_PACKUSDW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#43#72; + flags : if_sse4 + ), + ( + opcode : A_PACKUSDW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#43#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDVB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#16#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDVB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#16#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDW; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate or ot_signed); + code : #1#102#217#3#15#58#14#72#22; + flags : if_sse4 + ), + ( + opcode : A_PBLENDW; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate or ot_signed); + code : #1#102#193#217#3#15#58#14#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPEQQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#41#72; + flags : if_sse4 + ), + ( + opcode : A_PCMPEQQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#41#72; + flags : if_sse4 + ), + ( + opcode : A_PEXTRB; + ops : 3; + optypes : (ot_reg32,ot_xmmreg,ot_immediate); + code : #1#102#211#3#15#58#20#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRB; + ops : 3; + optypes : (ot_memory or ot_bits8,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#20#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRD; + ops : 3; + optypes : (ot_reg32,ot_xmmreg,ot_immediate); + code : #1#102#211#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRD; + ops : 3; + optypes : (ot_memory or ot_bits32,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRQ; + ops : 3; + optypes : (ot_reg64,ot_xmmreg,ot_immediate); + code : #1#102#214#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRQ; + ops : 3; + optypes : (ot_memory or ot_bits64,ot_xmmreg,ot_immediate); + code : #1#102#192#214#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PHMINPOSUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#65#72; + flags : if_sse4 + ), + ( + opcode : A_PHMINPOSUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#65#72; + flags : if_sse4 + ), + ( + opcode : A_PINSRB; + ops : 3; + optypes : (ot_xmmreg,ot_reg32,ot_immediate); + code : #1#102#217#3#15#58#32#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRB; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits8,ot_immediate); + code : #1#102#193#217#3#15#58#32#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRD; + ops : 3; + optypes : (ot_xmmreg,ot_reg32,ot_immediate); + code : #1#102#217#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRD; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits32,ot_immediate); + code : #1#102#193#217#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRQ; + ops : 3; + optypes : (ot_xmmreg,ot_reg64,ot_immediate); + code : #1#102#214#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRQ; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits64,ot_immediate); + code : #1#102#193#214#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PMAXSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#60#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#60#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#61#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#61#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#63#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#63#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#62#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#62#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#56#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#56#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#57#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#57#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#58#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#58#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#59#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#59#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#32#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#32#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#33#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#33#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#34#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#34#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#35#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#35#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#36#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#36#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#37#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#37#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#48#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#48#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#49#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#49#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#50#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#50#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#51#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#51#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#52#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#52#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#53#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#53#72; + flags : if_sse4 + ), + ( + opcode : A_PMULDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#40#72; + flags : if_sse4 + ), + ( + opcode : A_PMULDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#40#72; + flags : if_sse4 + ), + ( + opcode : A_PTEST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#23#72; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#8#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#8#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#9#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#9#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#10#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#10#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#11#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#11#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRI; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#97#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRI; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#97#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRM; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#96#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRM; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#96#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRI; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#99#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRI; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#99#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRM; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#98#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRM; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#98#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPGTQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#55#72; + flags : if_sse4 + ), + ( + opcode : A_PCMPGTQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#55#72; + flags : if_sse4 + ), + ( + opcode : A_POPCNT; + ops : 2; + optypes : (ot_reg16,ot_regmem or ot_bits16,ot_none); + code : #1#243#193#208#2#15#184#72; + flags : if_386 or if_sm or if_sse4 + ), + ( opcode : A_POPCNT; ops : 2; - optypes : (ot_reg16,ot_regmem,ot_none); - code : #208#219#193#211#2#15#184#72; + optypes : (ot_reg32,ot_regmem or ot_bits32,ot_none); + code : #1#243#193#208#2#15#184#72; flags : if_386 or if_sm or if_sse4 ), ( opcode : A_POPCNT; ops : 2; - optypes : (ot_reg32 or ot_bits64,ot_regmem,ot_none); - code : #209#219#193#211#2#15#184#72; + optypes : (ot_reg64,ot_regmem or ot_bits64,ot_none); + code : #1#243#193#208#2#15#184#72; flags : if_386 or if_sm or if_sse4 + ), + ( + opcode : A_AESENC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#220#72; + flags : if_sse4 + ), + ( + opcode : A_AESENC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#220#72; + flags : if_sse4 + ), + ( + opcode : A_AESENCLAST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#221#72; + flags : if_sse4 + ), + ( + opcode : A_AESENCLAST; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#221#72; + flags : if_sse4 + ), + ( + opcode : A_AESDEC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#222#72; + flags : if_sse4 + ), + ( + opcode : A_AESDEC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#222#72; + flags : if_sse4 + ), + ( + opcode : A_AESDECLAST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#223#72; + flags : if_sse4 + ), + ( + opcode : A_AESDECLAST; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#223#72; + flags : if_sse4 + ), + ( + opcode : A_AESIMC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#219#72; + flags : if_sse4 + ), + ( + opcode : A_AESIMC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#219#72; + flags : if_sse4 + ), + ( + opcode : A_AESKEYGEN; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#223#72#22; + flags : if_sse4 + ), + ( + opcode : A_AESKEYGEN; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#223#72#22; + flags : if_sse4 ) ); diff --git a/compiler/link.pas b/compiler/link.pas index b5ff4fae58..56f05043c6 100644 --- a/compiler/link.pas +++ b/compiler/link.pas @@ -150,7 +150,7 @@ Implementation begin result:=0; bufsize:=64*1024; - fs:=TCFileStream.Create(fn,fmOpenRead or fmShareDenyNone); + fs:=CFileStreamClass.Create(fn,fmOpenRead or fmShareDenyNone); if CStreamError<>0 then begin fs.Free; @@ -1051,6 +1051,9 @@ Implementation if ErrorCount>0 then goto myexit; + { parse linker options specific for output format } + exeoutput.ParseScript (linkscript); + { Create .exe sections and add .o sections } ParseScript_Order; exeoutput.RemoveUnreferencedSections; diff --git a/compiler/msg/errorct.msg b/compiler/msg/errorct.msg index 19e6f74a51..458e5b54b9 100644 --- a/compiler/msg/errorct.msg +++ b/compiler/msg/errorct.msg @@ -2100,7 +2100,7 @@ option_code_page_not_available=11039_E_La pàgina del codi no està disponible # option_logo=11023_[ Free Pascal Compiler versió $FPCFULLVERSION [$FPCDATE] per $FPCCPU -Copyright (c) 1993-2010 per Florian Klaempfl +Copyright (c) 1993-2011 per Florian Klaempfl ] # diff --git a/compiler/msg/errord.msg b/compiler/msg/errord.msg index 2b363c466c..2328a7e208 100644 --- a/compiler/msg/errord.msg +++ b/compiler/msg/errord.msg @@ -66,7 +66,7 @@ general_d_sourceos=01001_D_Quellbetriebssystem: $1 general_i_targetos=01002_I_Zielbetriebssystem: $1 % When the \var{-vd} switch is used, this line tells you what the target % operating system is. -general_t_exepath=01003_T_Der Pfad der ausfhrbaren Datei ist: $1 +general_t_exepath=01003_T_Der Pfad der ausfhrbaren Datei ist: $1 % When the \var{-vt} switch is used, this line tells you where the compiler % looks for its binaries. general_t_unitpath=01004_T_Der Unitpfad ist: $1 @@ -83,7 +83,7 @@ general_t_objectpath=01007_T_Der Objektdateienpfad: $1 % When the \var{-vt} switch is used, this line tells you where the compiler % looks for object files you link in (files used in \var{\{\$L xxx\}} statements). % You can set this path with the \var{-Fo} option. -general_i_abslines_compiled=01008_I_$1 Zeilen bersetzt, $2 Sekunden$3 +general_i_abslines_compiled=01008_I_$1 Zeilen bersetzt, $2 Sekunden$3 % When the \var{-vi} switch is used, the compiler reports the number % of lines compiled, and the time it took to compile them (real time, % not program time). @@ -152,7 +152,7 @@ scan_f_end_of_file=02000_F_Unerwartetes Dateiende % \item An include file ends in the middle of a statement. % \item A comment was not closed. % \end{itemize} -scan_f_string_exceeds_line=02001_F_Zeichenkette geht ber Zeilenende hinaus +scan_f_string_exceeds_line=02001_F_Zeichenkette geht ber Zeilenende hinaus % You forgot probably to include the closing ' in a string, so it occupies % multiple lines. scan_f_illegal_char=02002_F_Unzul„ssiges Zeichen "$1" ($2) @@ -170,13 +170,13 @@ scan_w_comment_level=02005_W_Kommentarschachtelungstiefe $1 gefunden % and Delphi, and can be a possible source of errors. scan_n_ignored_switch=02008_N_Compilerschalter $1 wurde ignoriert % With \var{-vn} on, the compiler warns if it ignores a switch. -scan_w_illegal_switch=02009_W_Compilerschalter $1 ist ungltig +scan_w_illegal_switch=02009_W_Compilerschalter $1 ist ungltig % You included a compiler switch (i.e. \var{\{\$... \}}) which the compiler % does not recognise. scan_w_switch_is_global=02010_W_Dieser Compilerschalter hat globale Auswirkung % The compiler switch is misplaced, and should be located at % the start of the unit or program. -scan_e_illegal_char_const=02011_E_Ungltige Char-Konstante +scan_e_illegal_char_const=02011_E_Ungltige Char-Konstante % This happens when you specify a character with its ASCII code, as in % \var{\#96}, but the number is either illegal, or out of range. scan_f_cannot_open_input=02012_F_Datei $1 kann nicht ge”ffnet werden @@ -185,15 +185,15 @@ scan_f_cannot_open_input=02012_F_Datei $1 kann nicht ge”ffnet werden scan_f_cannot_open_includefile=02013_F_Includedatei $1 kann nicht ge”ffnet werden % \fpc cannot find the source file you specified in a \var{\{\$include ..\}} % statement. -scan_e_illegal_pack_records=02015_E_Ungltige Record Ausrichtung "$1" +scan_e_illegal_pack_records=02015_E_Ungltige Record Ausrichtung "$1" % You are specifying \var{\{\$PACKRECORDS n\} } or \var{\{\$ALIGN n\} } % with an illegal value for \var{n}. For \$PACKRECORDS valid alignments are 1, 2, 4, 8, 16, 32, C, % NORMAL, DEFAULT, and for \$ALIGN valid alignments are 1, 2, 4, 8, 16, 32, ON, % OFF. Under mode MacPas \$ALIGN also supports MAC68K, POWER and RESET. -scan_e_illegal_pack_enum=02016_E_Ungltige minimale Gr”sse der Aufz„hlung "$1" +scan_e_illegal_pack_enum=02016_E_Ungltige minimale Gr”sse der Aufz„hlung "$1" % You are specifying the \var{\{\$PACKENUM n\}} with an illegal value for % \var{n}. Only 1,2,4, NORMAL or DEFAULT is valid here. -scan_e_endif_expected=02017_E_$ENDIF erwartet fr $1 $2 definiert in $3 Zeile $4 +scan_e_endif_expected=02017_E_$ENDIF erwartet fr $1 $2 definiert in $3 Zeile $4 % Your conditional compilation statements are unbalanced. scan_e_preproc_syntax_error=02018_E_Syntaxfehler im Argument einer $if Direktive % There is an error in the expression following the \var{\{\$if ..\}}, \var{\{\$ifc \}} @@ -217,15 +217,15 @@ scan_h_user_defined=02026_H_Benutzerdefiniert: $1 % A user defined hint was encountered. See also the \progref scan_i_user_defined=02027_I_Benutzerdefiniert: $1 % User defined information was encountered. See also the \progref -scan_e_keyword_cant_be_a_macro=02028_E_Ein Makro, welches den selben Namen wie ein Schlsselwort hat, wird ignoriert +scan_e_keyword_cant_be_a_macro=02028_E_Ein Makro, welches den selben Namen wie ein Schlsselwort hat, wird ignoriert % You cannot redefine keywords with macros. -scan_f_macro_buffer_overflow=02029_F_Makropufferberlauf w„hrend des Lesens oder Expandierens eines Makros +scan_f_macro_buffer_overflow=02029_F_Makropufferberlauf w„hrend des Lesens oder Expandierens eines Makros % Your macro or it's result was too long for the compiler. -scan_w_macro_too_deep=02030_W_Expansion des Makros berschreitet eine Makroschachtelungstiefe von 16 +scan_w_macro_too_deep=02030_W_Expansion des Makros berschreitet eine Makroschachtelungstiefe von 16 % When expanding a macro macros have been nested to a level of 16. % The compiler will expand no further, since this may be a sign that % recursion is used. -scan_w_wrong_styled_switch=02031_W_Compilerschalter innerhalb von Kommentaren der Form // werden nicht unterstzt +scan_w_wrong_styled_switch=02031_W_Compilerschalter innerhalb von Kommentaren der Form // werden nicht unterstzt % Compiler switches should be in normal Pascal style comments. scan_d_handling_switch=02032_DL_Bearbeite Schalter "$1" % When you set debugging info on (\var{-vd}) the compiler tells you when it @@ -252,32 +252,32 @@ scan_c_skipping_until=02039_CL_Quelltext wird ignoriert bis... % When you turn on conditional messages(\var{-vc}), the compiler tells you % where it encounters conditional statements, and whether it is skipping or % compiling parts. -scan_i_press_enter=02040_I_Drcken Sie <Return> um fortzusetzen +scan_i_press_enter=02040_I_Drcken Sie <Return> um fortzusetzen % When the \var{-vi} switch is used, the compiler stops compilation % and waits for the \var{Enter} key to be pressed when it encounters % a \var{\{\$STOP\}} directive. -scan_w_unsupported_switch=02041_W_Nicht untersttzter Schalter $1 +scan_w_unsupported_switch=02041_W_Nicht untersttzter Schalter $1 % When warings are turned on (\var{-vw}), the compiler warns you about % unsupported switches. This means that the switch is used in Delphi or % Turbo Pascal, but not in \fpc. -scan_w_illegal_directive=02042_W_Ungltige Compilerdirektive $1 +scan_w_illegal_directive=02042_W_Ungltige Compilerdirektive $1 % When warings are turned on (\var{-vw}), the compiler warns you about % unrecognised switches. For a list of recognised switches, see the \progref -scan_t_back_in=02043_TL_Wieder zurck in $1 +scan_t_back_in=02043_TL_Wieder zurck in $1 % When you use the \var{-vt} switch, the compiler tells you when it has finished % reading an include file. -scan_w_unsupported_app_type=02044_W_Nicht untersttzter Anwendungstyp: $1 +scan_w_unsupported_app_type=02044_W_Nicht untersttzter Anwendungstyp: $1 % You get this warning if you specify an unknown application type % with the directive \var{\{\$APPTYPE\}}. -scan_w_app_type_not_support=02045_W_APPTYPE wird vom Zielbetriebssystem nicht untersttzt +scan_w_app_type_not_support=02045_W_APPTYPE wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$APPTYPE\}} directive is supported by win32 applications only. -scan_w_description_not_support=02046_W_Der Compilerschalter DESCRIPTION wird vom Zielbetriebssystem nicht untersttzt +scan_w_description_not_support=02046_W_Der Compilerschalter DESCRIPTION wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$DESCRIPTION\}} directive is not supported on this target OS. -scan_n_version_not_support=02047_N_VERSION wird vom Zielbetriebssystem nicht untersttzt +scan_n_version_not_support=02047_N_VERSION wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$VERSION\}} directive is not supported on this target OS. scan_n_only_exe_version=02048_N_VERSION kann in Units nicht verwendet werden % The \var{\{\$VERSION\}} directive is only used for executable or DLL sources. -scan_w_wrong_version_ignored=02049_W_Falsches Format fr VERSION-Direktive $1 +scan_w_wrong_version_ignored=02049_W_Falsches Format fr VERSION-Direktive $1 % The \var{\{\$VERSION\}} directive format is major_version.minor_version % where major_version and minor_version are words. scan_e_illegal_asmmode_specifier=02050_E_Unbekannter Assemblermodusname: "$1" @@ -287,27 +287,27 @@ scan_w_no_asm_reader_switch_inside_asm=02051_W_ASM-Leser-Schalter ist innerhalb % It is not possible to switch from one assembler reader to another % inside an assembler block. The new reader will be used for next % assembler statement only. -scan_e_wrong_switch_toggle=02052_E_Parameter fr Schalter falsch, verwenden Sie ON/OFF oder +/- +scan_e_wrong_switch_toggle=02052_E_Parameter fr Schalter falsch, verwenden Sie ON/OFF oder +/- % You need to use ON or OFF or a + or - to toggle the switch. -scan_e_resourcefiles_not_supported=02053_E_Resourcedateien werden vom aktuellen Zielbetriebssystem nicht untersttzt +scan_e_resourcefiles_not_supported=02053_E_Resourcedateien werden vom aktuellen Zielbetriebssystem nicht untersttzt % The target you are compiling for doesn't support resource files. scan_w_include_env_not_found=02054_W_$1 ist keine Umgebungsvariable % The included environment variable can't be found in the environment; it will % be replaced by an empty string instead. -scan_e_invalid_maxfpureg_value=02055_E_Nicht erlaubter Wert fr MAXFPUREGISTER-Direktive +scan_e_invalid_maxfpureg_value=02055_E_Nicht erlaubter Wert fr MAXFPUREGISTER-Direktive % Valid values for this directive are 0..8 and NORMAL/DEFAULT. -scan_w_only_one_resourcefile_supported=02056_W_Nur ein Resourcedatei wird vom aktuellen Zielbetriebssystem untersttzt +scan_w_only_one_resourcefile_supported=02056_W_Nur ein Resourcedatei wird vom aktuellen Zielbetriebssystem untersttzt % Only one resource file can be supported for this target - this is the case of % OS/2 (EMX) currently. The first one found is used, the others are discarded. -scan_w_macro_support_turned_off=02057_W_Makrountersttzung ist ausgeschaltet +scan_w_macro_support_turned_off=02057_W_Makrountersttzung ist ausgeschaltet % A macro declaration has been found, but macro support is currently off, % so the declaration will be ignored. To turn macro support on compile with % -Sm on the command line or add \{\$MACRO ON\} in the source. -scan_e_invalid_interface_type=02058_E_Unbekannter Interfacetyp. Untersttzt wird COM, CORBA und DEFAULT +scan_e_invalid_interface_type=02058_E_Unbekannter Interfacetyp. Untersttzt wird COM, CORBA und DEFAULT % The interface type that was specified is not supported. -scan_w_appid_not_support=02059_W_APPID wird nur von PalmOS untersttzt +scan_w_appid_not_support=02059_W_APPID wird nur von PalmOS untersttzt % The \var{\{\$APPID\}} directive is only supported for the PalmOS target. -scan_w_appname_not_support=02060_W_APPNAME wird nur von PalmOS untersttzt +scan_w_appname_not_support=02060_W_APPNAME wird nur von PalmOS untersttzt % The \var{\{\$APPNAME\}} directive is only supported for the PalmOS target. scan_e_string_exceeds_255_chars=02061_E_Zeichenkettenkonstanten k”nnen maximal 255 Zeichen lang sein % A single string constant can contain at most 255 chars. Try splitting up the @@ -331,45 +331,45 @@ scan_e_error_macro_undefined=02068_E_Die Compile time Variable oder das Makro "$ % Thus the conditional compile time expression cannot be evaluated. Only in mode MacPas. scan_e_utf8_bigger_than_65535=02069_E_Der UTF-8 Kode ist gr”sser als 65535 % \fpc handles UTF-8 strings internally as widestrings, i.e. the char codes are limited to 65535. -scan_e_utf8_malformed=02070_E_Ungltige UTF-8 Zeichenkette +scan_e_utf8_malformed=02070_E_Ungltige UTF-8 Zeichenkette % The given string isn't a valid UTF-8 string. scan_c_switching_to_utf8=02071_C_UTF-8 Signatur gefunden, verwende UTF-8 Kode % The compiler found a UTF-8 encoding signature (\$ef, \$bb, \$bf) at the beginning of a file, % so it interprets it as a UTF-8 file. scan_e_compile_time_typeerror=02072_E_Compile time Ausdruck: Erwartete $1 aber erhielt $2 bei $3 % The type-check of a compile time expression failed. -scan_n_app_type_not_support=02073_N_APPTYPE wird vom Zielbetriebssystem nicht untersttzt +scan_n_app_type_not_support=02073_N_APPTYPE wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$APPTYPE\}} directive is supported by certain operating systems only. -scan_e_illegal_optimization_specifier=02074_E_"$1" ist eine ungltige Optimierung +scan_e_illegal_optimization_specifier=02074_E_"$1" ist eine ungltige Optimierung % You specified an optimization with the \var{\{\$OPTIMIZATION xxx\}} directive, % and the compiler didn't recognize the optimization you specified. -scan_w_setpeflags_not_support=02075_W_SETPEFLAGS wird vom Zielbetriebssystem nicht untersttzt +scan_w_setpeflags_not_support=02075_W_SETPEFLAGS wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$SETPEFLAGS\}} directive is not supported by the target OS. -scan_w_imagebase_not_support=02076_W_IMAGEBASE wird vom Zielbetriebssystem nicht untersttzt +scan_w_imagebase_not_support=02076_W_IMAGEBASE wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$IMAGEBASE\}} directive is not supported by the target OS. -scan_w_minstacksize_not_support=02077_W_MINSTACKSIZE wird vom Zielbetriebssystem nicht untersttzt +scan_w_minstacksize_not_support=02077_W_MINSTACKSIZE wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$IMAGEBASE\}} directive is not supported by the target OS. -scan_w_maxstacksize_not_support=02078_W_MAXSTACKSIZE wird vom Zielbetriebssystem nicht untersttzt +scan_w_maxstacksize_not_support=02078_W_MAXSTACKSIZE wird vom Zielbetriebssystem nicht untersttzt % The \var{\{\$MAXSTACKSIZE\}} directive is not supported by the target OS. -scanner_e_illegal_warn_state=02079_E_Ungltiger Wert "$1" fr die $WARN Direktive +scanner_e_illegal_warn_state=02079_E_Ungltiger Wert "$1" fr die $WARN Direktive % Only ON and OFF can be used as state with a \var{\{\$WARN\}} compiler directive. -scan_e_only_packset=02080_E_Ungltiger Wert fr das set packing +scan_e_only_packset=02080_E_Ungltiger Wert fr das set packing % Only 0, 1, 2, 4, 8, DEFAULT and NORMAL are allowed as packset parameters. scan_w_pic_ignored=02081_W_PIC Direktive oder Schalter wird ignoriert % Several targets, such as \windows, do not support nor need PIC, % so the PIC directive and switch are ignored. -scan_w_unsupported_switch_by_target=02082_W_Der Schalter "$1" wird vom derzeit ausgew„hlten Zielbetriebssystem nicht untersttzt +scan_w_unsupported_switch_by_target=02082_W_Der Schalter "$1" wird vom derzeit ausgew„hlten Zielbetriebssystem nicht untersttzt % Some compiler switches like \$E are not supported by all targets. -scan_w_frameworks_darwin_only=02084_W_Framework-bezogene Optionen werden nur fr Darwin/Mac OS X untersttzt +scan_w_frameworks_darwin_only=02084_W_Framework-bezogene Optionen werden nur fr Darwin/Mac OS X untersttzt % Frameworks are not a known concept, or at least not supported by FPC, % on operating systems other than Darwin/Mac OS X. -scan_e_illegal_minfpconstprec=02085_E_"$1" ist eine ungltige minimale Pr„zision von Fliesskommakonstanten +scan_e_illegal_minfpconstprec=02085_E_"$1" ist eine ungltige minimale Pr„zision von Fliesskommakonstanten % Valid minimal precisions for floating point constants are default, 32 and 64, % which mean respectively minimal (usually 32 bit), 32 bit and 64 bit precision. -scan_w_multiple_main_name_overrides=02086_W_Der Name der "main" Prozedur wird mehrfach berschrieben. Es war bisher auf "$1" gesetzt +scan_w_multiple_main_name_overrides=02086_W_Der Name der "main" Prozedur wird mehrfach berschrieben. Es war bisher auf "$1" gesetzt % The name for the main entry procedure is specified more than once. Only the last % name will be used. -scanner_w_illegal_warn_identifier=02087_W_Ungltige Bezeichner "$1" fr die $WARN Direktive +scanner_w_illegal_warn_identifier=02087_W_Ungltige Bezeichner "$1" fr die $WARN Direktive % Identifier is not known by a \var{\{\$WARN\}} compiler directive. % % \end{description} @@ -388,22 +388,22 @@ scanner_w_illegal_warn_identifier=02087_W_Ungltige Bezeichner "$1" fr die $WAR parser_e_syntax_error=03000_E_Parser - Syntaxfehler % An error against the Turbo Pascal language was encountered. This typically % happens when an illegal character is found in the source file. -parser_e_dont_nest_interrupt=03004_E_INTERRUPT-Prozeduren drfen nicht verschachtelt sein +parser_e_dont_nest_interrupt=03004_E_INTERRUPT-Prozeduren drfen nicht verschachtelt sein % An \VAR{INTERRUPT} procedure must be global. parser_w_proc_directive_ignored=03005_W_Prozedurtyp $1 wird ignoriert % The specified procedure directive is ignored by FPC programs. parser_e_no_overload_for_all_procs=03006_E_Nicht alle Deklarationen von "$1" sind mit OVERLOAD deklariert % When you want to use overloading using the \var{OVERLOAD} directive, then % all declarations need to have \var{OVERLOAD} specified. -parser_e_export_name_double=03008_E_Doppelter Name fr exportierte Funktion $1 +parser_e_export_name_double=03008_E_Doppelter Name fr exportierte Funktion $1 % Exported function names inside a specific DLL must all be different. -parser_e_export_ordinal_double=03009_E_Doppelter Index fr exportierte Funktion $1 +parser_e_export_ordinal_double=03009_E_Doppelter Index fr exportierte Funktion $1 % Exported function names inside a specific DLL must all be different. -parser_e_export_invalid_index=03010_E_Ungltiger Index for exportierte Funktion +parser_e_export_invalid_index=03010_E_Ungltiger Index for exportierte Funktion % DLL function index must be in the range \var{1..\$FFFF}. -parser_w_parser_reloc_no_debug=03011_W_Fr relozierbare DLL oder ausfhrbare Datei $1 funktionieren keine Debug-Information, deaktiviert. +parser_w_parser_reloc_no_debug=03011_W_Fr relozierbare DLL oder ausfhrbare Datei $1 funktionieren keine Debug-Information, deaktiviert. % It is currently not possible to include debug information in a relocatable DLL. -parser_w_parser_win32_debug_needs_WN=03012_W_Um Win32-Code debuggen zu k”nnen mssen die Relozierungen mit -WN option abgeschaltet werden. +parser_w_parser_win32_debug_needs_WN=03012_W_Um Win32-Code debuggen zu k”nnen mssen die Relozierungen mit -WN option abgeschaltet werden. % Stabs debug info is wrong for relocatable DLL or EXES. Use -WN % if you want to debug win32 executables. parser_e_constructorname_must_be_init=03013_E_Konstruktor-Name muss INIT sein @@ -412,7 +412,7 @@ parser_e_constructorname_must_be_init=03013_E_Konstruktor-Name muss INIT sein parser_e_destructorname_must_be_done=03014_E_Destruktor-Name muss DONE sein % You are declaring a constructor with a name which isn't \var{done}, and the % \var{-Ss} switch is in effect. See the switch \seeo{Ss}. -parser_e_proc_inline_not_supported=03016_E_Schlsselwort INLINE nicht untersttzt +parser_e_proc_inline_not_supported=03016_E_Schlsselwort INLINE nicht untersttzt % You tried to compile a program with C++ style inlining, and forgot to % specify the \var{-Si} option (\seeo{Si}). The compiler doesn't support C++ % styled inlining by default. @@ -438,7 +438,7 @@ parser_f_no_anonym_objects=03022_F_Anonyme Klassendefinitionen sind nicht zul„ss parser_n_object_has_no_vmt=03023_N_Das Objekt "$1" besitzt keine VMT % This is a note indicating that the declared object has no % virtual method table. -parser_e_illegal_parameter_list=03024_E_Ungltige Parameterliste +parser_e_illegal_parameter_list=03024_E_Ungltige Parameterliste % You are calling a function with parameters that are of a different type than % the declared parameters of the function. parser_e_wrong_parameter_size=03026_E_Falsche Anzahl an Parameter im Aufruf von "$1" angegeben @@ -457,7 +457,7 @@ parser_e_header_dont_match_forward=03029_E_Funktionskopf unterscheidet sich von parser_e_header_different_var_names=03030_E_Funktionskopf von "$1" passt nicht zur Forward-Deklaration, Variablename „ndert sich: $2 => $3 % You declared the function in the \var{interface} part, or with the % \var{forward} directive, but defined it with a different parameter list. -parser_n_duplicate_enum=03031_N_Werte in Aufz„hlungen mssen aufsteigend sein +parser_n_duplicate_enum=03031_N_Werte in Aufz„hlungen mssen aufsteigend sein % \fpc allows enumeration constructions as in C. Examine the following % two declarations: % \begin{verbatim} @@ -471,9 +471,9 @@ parser_e_no_with_for_variable_in_other_segments=03033_E_WITH kann nicht auf Vari % but this is not possible if the variable belongs to another segment. parser_e_too_much_lexlevel=03034_E_Funktionsverschachtelung gr”sser als 31 % You can nest function definitions only 31 levels deep. -parser_e_range_check_error=03035_E_Bereichsprfungsfehler bei Konstantenbestimmung +parser_e_range_check_error=03035_E_Bereichsprfungsfehler bei Konstantenbestimmung % The constants are out of their allowed range. -parser_w_range_check_error=03036_W_Bereichsprfungsfehler bei Konstantenbestimmung +parser_w_range_check_error=03036_W_Bereichsprfungsfehler bei Konstantenbestimmung % The constants are out of their allowed range. parser_e_double_caselabel=03037_E_doppelter CASE-Wert % You are specifying the same label 2 times in a \var{case} statement. @@ -488,7 +488,7 @@ parser_e_no_overloaded_procvars=03040_E_Funktionsvariablen von Overload-Funktion parser_e_invalid_string_size=03041_E_Stringl„nge muss ein Wert zwischen 1 und 255 sein % The length of a string in Pascal is limited to 255 characters. You are % trying to declare a string with length less than 1 or greater than 255. -parser_w_use_extended_syntax_for_objects=03042_W_Benutzen Sie die erweiterte Syntax von NEW und DISPOSE fr Objekt-Instanzen +parser_w_use_extended_syntax_for_objects=03042_W_Benutzen Sie die erweiterte Syntax von NEW und DISPOSE fr Objekt-Instanzen % If you have a pointer \var{a} to an object type, then the statement % \var{new(a)} will not initialize the object (i.e. the constructor isn't % called), although space will be allocated. You should issue the @@ -519,14 +519,14 @@ parser_e_header_dont_match_any_member=03048_E_Funktionskopf passt zu keiner Meth parser_d_procedure_start=03049_DL_Procedure/Function $1 % When using the \var{-vd} switch, the compiler tells you when it starts % processing a procedure or function implementation. -parser_e_error_in_real=03050_E_Ungltige Fliesskommakonstante +parser_e_error_in_real=03050_E_Ungltige Fliesskommakonstante % The compiler expects a floating point expression, and gets something else. parser_e_fail_only_in_constructor=03051_E_FAIL darf nur in Konstruktoren verwendet werden % You are using the \var{FAIL} instruction outside a constructor method. parser_e_no_paras_for_destructor=03052_E_Destruktoren k”nnen keine Parameter haben % You are declaring a destructor with a parameter list. Destructor methods % cannot have parameters. -parser_e_only_class_members_via_class_ref=03053_E_Nur Klassenmethoden, Klasseneigenschaften und Klassenvariablen k”nnen ber den Klassennamen angesprochen werden +parser_e_only_class_members_via_class_ref=03053_E_Nur Klassenmethoden, Klasseneigenschaften und Klassenvariablen k”nnen ber den Klassennamen angesprochen werden % This error occurs in a situation like the following: % \begin{verbatim} % Type : @@ -561,14 +561,14 @@ parser_w_should_use_override=03057_W_Eine Inherit-Methode wird durch $1 verdeckt % overridden in the descendant class with the \var{override} directive. If you % don't specify the \var{override} directive, you will hide the parent method; % you will not override it. -parser_e_nothing_to_be_overridden=03058_E_Es gibt keine Vorg„ngerklasse mit einer Methode, die damit berschrieben werden k”nnte: $1 +parser_e_nothing_to_be_overridden=03058_E_Es gibt keine Vorg„ngerklasse mit einer Methode, die damit berschrieben werden k”nnte: $1 % You try to \var{override} a virtual method of a parent class that doesn't % exist. parser_e_no_procedure_to_access_property=03059_E_Es gibt keine Member-Funktion um auf diese Property zuzugreifen % You specified no \var{read} directive for a property. parser_w_stored_not_implemented=03060_W_Die Stored Property - Direktive ist noch nicht implementiert % This message is no longer used, as the \var{stored} directive has been implemented. -parser_e_ill_property_access_sym=03061_E_Ungltiges Symbol fr den Zugriff auf die Property +parser_e_ill_property_access_sym=03061_E_Ungltiges Symbol fr den Zugriff auf die Property % There is an error in the \var{read} or \var{write} directives for an array % property. When you declare an array property, you can only access it with % procedures and functions. The following code would cause such an error. @@ -578,7 +578,7 @@ parser_e_ill_property_access_sym=03061_E_Ungltiges Symbol fr den Zugriff auf d % property x [i : integer]: integer read I write i; % \end{verbatim} % -parser_e_cant_access_protected_member=03062_E_Kann an dieser Stelle nicht auf das geschtzte Feld des Objekts zugreifen +parser_e_cant_access_protected_member=03062_E_Kann an dieser Stelle nicht auf das geschtzte Feld des Objekts zugreifen % Fields that are declared in a \var{protected} section of an object or class % declaration cannot be accessed outside the module where the object is % defined, or outside descendent object methods. @@ -586,16 +586,16 @@ parser_e_cant_access_private_member=03063_E_Kann an dieser Stelle nicht auf das % Fields that are declared in a \var{private} section of an object or class % declaration cannot be accessed outside the module where the class is % defined. -parser_e_overridden_methods_not_same_ret=03066_E_šberschriebene, virtuelle Methoden mssen den gleichen Ergebnistyp haben: "$2" wird berschrieben von "$1" +parser_e_overridden_methods_not_same_ret=03066_E_šberschriebene, virtuelle Methoden mssen den gleichen Ergebnistyp haben: "$2" wird berschrieben von "$1" % If you declare overridden methods in a class definition, they must % have the same return type. -parser_e_dont_nest_export=03067_E_Mit EXPORT deklarierte Funktionen drfen nicht verschachtelt sein +parser_e_dont_nest_export=03067_E_Mit EXPORT deklarierte Funktionen drfen nicht verschachtelt sein % You cannot declare a function or procedure within a function or procedure % that was declared as an export procedure. -parser_e_methods_dont_be_export=03068_E_Methoden drfen nicht EXPORTiert werden +parser_e_methods_dont_be_export=03068_E_Methoden drfen nicht EXPORTiert werden % You cannot declare a procedure that is a method for an object as % \var{export}ed. That is, your methods cannot be called from a C program. -parser_e_call_by_ref_without_typeconv=03069_E_Aufrufe mit VAR-Parametern fr Argument-Nr. $1 mssen exakt stimmen: "$2" gefunden, "$3" erwartet +parser_e_call_by_ref_without_typeconv=03069_E_Aufrufe mit VAR-Parametern fr Argument-Nr. $1 mssen exakt stimmen: "$2" gefunden, "$3" erwartet % When calling a function declared with \var{var} parameters, the variables in % the function call must be of exactly the same type. There is no automatic % type conversion. @@ -605,12 +605,12 @@ parser_e_no_super_class=03070_E_Klasse ist keine Elternklasse zur aktuellen Klas parser_e_self_not_in_method=03071_E_SELF ist nur in Methoden erlaubt % You are trying to use the \var{self} parameter outside an object's method. % Only methods get passed the \var{self} parameters. -parser_e_generic_methods_only_in_methods=03072_E_Methoden drfen nur in anderen Methoden direkt mit dem Klassen-Typbezeichner aufgerufen werden +parser_e_generic_methods_only_in_methods=03072_E_Methoden drfen nur in anderen Methoden direkt mit dem Klassen-Typbezeichner aufgerufen werden % A construction like \var{sometype.somemethod} is only allowed in a method. parser_e_illegal_colon_qualifier=03073_E_Unzul„ssige Verwendung von ':' % You are using the format \var{:} (colon) 2 times on an expression that % is not a real expression. -parser_e_illegal_set_expr=03074_E_Bereichsprfungsfehler im SET-Konstruktor oder doppeltes Set-Element +parser_e_illegal_set_expr=03074_E_Bereichsprfungsfehler im SET-Konstruktor oder doppeltes Set-Element % The declaration of a set contains an error. Either one of the elements is % outside the range of the set type, or two of the elements are in fact % the same. @@ -632,17 +632,17 @@ parser_e_false_with_expr=03079_E_Typ des Ausdrucks muss eine Klasse oder ein Rec % A \var{with} statement needs an argument that is of the type \var{record} % or \var{class}. You are using \var{with} on an expression that is not of % this type. -parser_e_void_function=03080_E_Prozeduren k”nnen keinen Wert zurckliefern +parser_e_void_function=03080_E_Prozeduren k”nnen keinen Wert zurckliefern % In \fpc, you can specify a return value for a function when using % the \var{exit} statement. This error occurs when you try to do this with a % procedure. Procedures cannot return a value. -parser_e_only_methods_allowed=03081_E_Konstruktoren, Destruktoren und Klassenoperatoren mssen Methoden sein +parser_e_only_methods_allowed=03081_E_Konstruktoren, Destruktoren und Klassenoperatoren mssen Methoden sein % You're declaring a procedure as destructor, constructor or class operator, when the % procedure isn't a class method. parser_e_operator_not_overloaded=03082_E_Operator besitzt kein Overload % You're trying to use an overloaded operator when it isn't overloaded for % this type. -parser_e_no_such_assignment=03083_E_Es ist nicht m”glich, die Zuweisung fr gleiche Typen zu berladen +parser_e_no_such_assignment=03083_E_Es ist nicht m”glich, die Zuweisung fr gleiche Typen zu berladen % You cannot overload assignment for types % that the compiler considers as equal. parser_e_overload_impossible=03084_E_Unm”gliche Operator-.berladung @@ -651,7 +651,7 @@ parser_e_overload_impossible=03084_E_Unm”gliche Operator-.berladung parser_e_no_reraise_possible=03085_E_Ausl”sen einer Exception an dieser Stelle nicht m”glich % You are trying to re-raise an exception where it is not allowed. You can only % re-raise exceptions in an \var{except} block. -parser_e_no_new_or_dispose_for_classes=03086_E_Die erweiterte Syntax von New oder Dispose ist fr Klassen unzul„ssig +parser_e_no_new_or_dispose_for_classes=03086_E_Die erweiterte Syntax von New oder Dispose ist fr Klassen unzul„ssig % You cannot generate an instance of a class with the extended syntax of % \var{new}. The constructor must be used for that. For the same reason, you % cannot call \var{Dispose} to de-allocate an instance of a class, the @@ -659,19 +659,19 @@ parser_e_no_new_or_dispose_for_classes=03086_E_Die erweiterte Syntax von New ode parser_e_procedure_overloading_is_off=03088_E_Das šberladen von Prozeduren ist ausgeschaltet % When using the \var{-So} switch, procedure overloading is switched off. % Turbo Pascal does not support function overloading. -parser_e_overload_operator_failed=03089_E_Es ist nicht m”glich, dieesen Operator zu berladen. Verwandte berladbare Operatoren sind "$1" +parser_e_overload_operator_failed=03089_E_Es ist nicht m”glich, dieesen Operator zu berladen. Verwandte berladbare Operatoren sind "$1" % You are trying to overload an operator which cannot be overloaded. % The following operators can be overloaded : % \begin{verbatim} % +, -, *, /, =, >, <, <=, >=, is, as, in, **, := % \end{verbatim} -parser_e_comparative_operator_return_boolean=03090_E_Vergleichsoperator muss einen booleschen Wert zurckgeben +parser_e_comparative_operator_return_boolean=03090_E_Vergleichsoperator muss einen booleschen Wert zurckgeben % When overloading the \var{=} operator, the function must return a boolean % value. parser_e_only_virtual_methods_abstract=03091_E_Nur virtuelle Methoden k”nnen abstrakt sein % You are declaring a method as abstract, when it isn't declared to be % virtual. -parser_f_unsupported_feature=03092_F_Benutzung einer nicht untersttzten Erweiterung! +parser_f_unsupported_feature=03092_F_Benutzung einer nicht untersttzten Erweiterung! % You're trying to force the compiler into doing something it cannot do yet. parser_e_mix_of_classes_and_objects=03093_E_Das Mischen von Klassen und Objekten ist unzul„ssig % You cannot derive \var{objects}, \var{classes}, \var{cppclasses} and \var{interfaces} intertwined. E.g. @@ -696,10 +696,10 @@ parser_e_absolute_only_to_var_or_const=03096_E_ABSOLUTE kann nur auf Variablen u % parser_e_initialized_only_one_var=03097_E_Es kann nur EINE Variable initialisiert werden % You cannot specify more than one variable with a initial value in Delphi mode. -parser_e_abstract_no_definition=03098_E_Abstrakte Methoden drfen keine Definition (mit Rumpf) haben +parser_e_abstract_no_definition=03098_E_Abstrakte Methoden drfen keine Definition (mit Rumpf) haben % Abstract methods can only be declared, you cannot implement them. They % should be overridden by a descendant class. -parser_e_overloaded_must_be_all_global=03099_E_Diese berladene Funktion darf nicht lokal sein (muss Exportiert werden) +parser_e_overloaded_must_be_all_global=03099_E_Diese berladene Funktion darf nicht lokal sein (muss Exportiert werden) % You are defining an overloaded function in the implementation part of a unit, % but there is no corresponding declaration in the interface part of the unit. parser_w_virtual_without_constructor=03100_W_Virtuelle Methoden wurden ohne Konstruktor verwendet in $1 @@ -725,7 +725,7 @@ parser_u_parsing_implementation=03106_UL_Parse Implementation von $1 parser_d_compiling_second_time=03107_DL_šbersetze $1 zum zweiten Mal % When you request debug messages (\var{-vd}) the compiler tells you what % units it recompiles for the second time. -parser_e_no_property_found_to_override=03109_E_Es gibt keine Property diesen Namens, die berschrieben werden k”nnte +parser_e_no_property_found_to_override=03109_E_Es gibt keine Property diesen Namens, die berschrieben werden k”nnte % You want to overrride a property of a parent class, when there is, in fact, % no such property in the parent class. parser_e_only_one_default_property=03110_E_Es ist nur eine einzelne Default-Property erlaubt, vererbte Default-Property in Klasse $1 gefunden @@ -733,10 +733,10 @@ parser_e_only_one_default_property=03110_E_Es ist nur eine einzelne Default-Prop % default property, and a class can have only one default property. parser_e_property_need_paras=03111_E_Die Default-Property muss eine Array-Property sein % Only array properties of classes can be made \var{default} properties. -parser_e_constructor_cannot_be_not_virtual=03112_E_Virtuelle Konstruktoren werden nur im Klassen-Objektmodell untersttzt +parser_e_constructor_cannot_be_not_virtual=03112_E_Virtuelle Konstruktoren werden nur im Klassen-Objektmodell untersttzt % You cannot have virtual constructors in objects. You can only have them % in classes. -parser_e_no_default_property_available=03113_E_Keine Default-Property verfgbar +parser_e_no_default_property_available=03113_E_Keine Default-Property verfgbar % You try to access a default property of a class, but this class (or one of % its ancestors) doesn't have a default property. parser_e_cant_have_published=03114_E_Die Klasse kann keinen PUBLISHED Bereich haben, benutzen Sie den {$M+} Schalter @@ -753,7 +753,7 @@ parser_e_forward_declaration_must_be_resolved=03115_E_Forward-Deklaration der Kl % end; % \end{verbatim} % where \var{ParentClass} is declared but not defined. -parser_e_no_local_operator=03116_E_Lokale Operatoren werden nicht untersttzt +parser_e_no_local_operator=03116_E_Lokale Operatoren werden nicht untersttzt % You cannot overload locally, i.e. inside procedures or function % definitions. parser_e_proc_dir_not_allowed_in_interface=03117_E_Prozedur-Direktive $1 unzul„ssig im Interface-Bereich @@ -771,7 +771,7 @@ parser_e_function_already_declared_public_forward=03120_E_Funktion ist bereits a % declaration in the \var{implementation} section. parser_e_not_external_and_export=03121_E_Kann nicht EXPORT und EXTERNAL gleichzeitig benutzen % These two procedure directives are mutually exclusive. -parser_w_not_supported_for_inline=03123_W_$1 noch nicht innerhalb von inline Prozeduren/Funktionen untersttzt +parser_w_not_supported_for_inline=03123_W_$1 noch nicht innerhalb von inline Prozeduren/Funktionen untersttzt % Inline procedures don't support this declaration. parser_w_inlining_disabled=03124_W_Inlining deaktiviert % Inlining of procedures is disabled. @@ -780,7 +780,7 @@ parser_i_writing_browser_log=03125_I_Schreibe Browser-Log $1 % writes the browser log (generated with the \var{\{\$Y+\}} switch). parser_h_maybe_deref_caret_missing=03126_H_M”glicherweise fehlt eine Zeiger-Dereferenzierung % The compiler thinks that a pointer may need a dereference. -parser_f_assembler_reader_not_supported=03127_F_Gew„hlter Assembler-Leser nicht untersttzt +parser_f_assembler_reader_not_supported=03127_F_Gew„hlter Assembler-Leser nicht untersttzt % The selected assembler reader (with \var{\{\$ASMMODE xxx\}} is not % supported. The compiler can be compiled with or without support for a % particular assembler reader. @@ -809,7 +809,7 @@ parser_e_empty_import_name=03136_E_Leerer Importname angegeben % Some targets need a name for the imported procedure or a \var{cdecl} specifier. parser_e_division_by_zero=03138_E_Division durch Null % A division by zero was encounted. -parser_e_invalid_float_operation=03139_E_Ungltige Fliesskomma-Operation +parser_e_invalid_float_operation=03139_E_Ungltige Fliesskomma-Operation % An operation on two real type values produced an overflow or a division % by zero. parser_e_array_lower_less_than_upper_bound=03140_E_Obere Grenze des Bereichs ist kleiner als die untere Grenze @@ -821,7 +821,7 @@ parser_w_string_too_long=03141_W_String "$1" ist l„nger als $2 parser_e_string_larger_array=03142_E_Stringl„nge ist gr”sser als die L„nge des "array of char" % The size of the constant string is larger than the size you specified in % the \var{Array[x..y] of char} definition. -parser_e_ill_msg_expr=03143_E_Ungltiger Ausdruck nach der 'Message'-Direktive +parser_e_ill_msg_expr=03143_E_Ungltiger Ausdruck nach der 'Message'-Direktive % \fpc supports only integer or string values as message constants. parser_e_ill_msg_param=03144_E_Message-Handler akzeptieren nur einen "Call by Reference" Parameter % A method declared with the \var{message} directive as message handler @@ -837,7 +837,7 @@ parser_e_threadvars_only_sg=03147_E_Threadvariablen k”nnen nur statisch oder glo % local to a procedure. Local variables are always local to a thread, % because every thread has its own stack and local variables % are stored on the stack. -parser_f_direct_assembler_not_allowed=03148_F_Direkter Assembler wird f+r bin„res Ausgabeformat nicht untersttzt +parser_f_direct_assembler_not_allowed=03148_F_Direkter Assembler wird f+r bin„res Ausgabeformat nicht untersttzt % You can't use direct assembler when using a binary writer. Choose an % other output format or use another assembler reader. parser_w_no_objpas_use_mode=03149_W_Laden Sie die OBJPAS Unit nicht manuell, benutzen Sie statdessen {$mode objfpc} oder {$mode delphi} @@ -851,7 +851,7 @@ parser_e_cant_use_inittable_here=03151_E_Datentypen, die ein Initialiserung oder % Some data types (e.g. \var{ansistring}) need initialization/finalization % code which is implicitly generated by the compiler. Such data types % can't be used in the variant part of a record. -parser_e_resourcestring_only_sg=03152_E_Resourcestrings drfen nur statisch oder global sein +parser_e_resourcestring_only_sg=03152_E_Resourcestrings drfen nur statisch oder global sein % Resourcestring cannot be declared local, only global or using the static % directive. parser_e_exit_with_argument_not__possible=03153_E_EXIT mit Argument darf hier nicht verwendet werden @@ -864,7 +864,7 @@ parser_e_ill_property_storage_sym=03155_E_Dieses Symbol ist als Speichersymbol u % You can't use this type of symbol as storage specifier in property % declaration. You can use only methods with the result type boolean, % boolean class fields or boolean constants. -parser_e_only_publishable_classes_can_be_published=03156_E_Nur Klassen, die im "$M+"-Modus bersetzt wurden, drfen published sein +parser_e_only_publishable_classes_can_be_published=03156_E_Nur Klassen, die im "$M+"-Modus bersetzt wurden, drfen published sein % A class-typed field in the published section of a class can only be a class which was % compiled in \var{\{\$M+\}} or which is derived from such a class. Normally % such a class should be derived from \var{TPersistent}. @@ -880,24 +880,24 @@ parser_e_proc_directive_expected=03157_E_Prozedurdirektive erwartet % p : procedure;stdcall=nil; % p : procedure stdcall=nil; % \end{verbatim} -parser_e_invalid_property_index_value=03158_E_Der Wert fr einen Property-Index muss ordinalen Typs sein +parser_e_invalid_property_index_value=03158_E_Der Wert fr einen Property-Index muss ordinalen Typs sein % The value you use to index a property must be of an ordinal type, for % example an integer or enumerated type. parser_e_procname_to_short_for_export=03159_E_Prozedurname zu kurz um exportiert zu werden % The length of the procedure/function name must be at least 2 characters % long. This is because of a bug in dlltool which doesn't parse the .def % file correctly with a name of length 1. -parser_e_dlltool_unit_var_problem=03160_E_Es kann kein DEFFILE-Eintrag fr unit-globale Variablen erzeugt werden +parser_e_dlltool_unit_var_problem=03160_E_Es kann kein DEFFILE-Eintrag fr unit-globale Variablen erzeugt werden parser_e_dlltool_unit_var_problem2=03161_E_šbersetze ohne "-WD"-Option % You need to compile this file without the -WD switch on the % command line. -parser_f_need_objfpc_or_delphi_mode=03162_F_Es muss der Modus ObjFPC (-S2) oder Delphi (-Sd) aktiv sein, um dieses Modul zu bersetzen +parser_f_need_objfpc_or_delphi_mode=03162_F_Es muss der Modus ObjFPC (-S2) oder Delphi (-Sd) aktiv sein, um dieses Modul zu bersetzen % You need to use \var{\{\$MODE OBJFPC\}} or \var{\{\$MODE DELPHI\}} to compile this file. % Or use the corresponding command line switch, either \var{-Mobjfpc} or \var{-MDelphi.} parser_e_no_export_with_index_for_target=03163_E_Der Index darf nicht kleiner als $1 sein % Exporting of functions or procedures with a specified index is not % supported on this target. -parser_e_no_export_of_variables_for_target=03164_E_Das Ziel $1 untersttzt das Exportieren von Variablen nicht +parser_e_no_export_of_variables_for_target=03164_E_Das Ziel $1 untersttzt das Exportieren von Variablen nicht % Exporting of variables is not supported on this target. parser_e_improper_guid_syntax=03165_E_Falscher GUID-Syntax % The GUID indication does not have the proper syntax. It should be of the form @@ -975,11 +975,11 @@ parser_e_default_value_only_one_para=03184_E_Der Default Value kann nur einem Pa % \begin{verbatim} % Procedure MyProcedure (A : Integer = 0; B : Integer = 0); % \end{verbatim} -parser_e_default_value_expected_for_para=03185_E_Standard Parameter fr "$1" ben”tigt +parser_e_default_value_expected_for_para=03185_E_Standard Parameter fr "$1" ben”tigt % The specified parameter requires a default value. -parser_w_unsupported_feature=03186_W_Verwendung eines nicht untersttzten Features! +parser_w_unsupported_feature=03186_W_Verwendung eines nicht untersttzten Features! % You're trying to force the compiler into doing something it cannot do yet. -parser_h_c_arrays_are_references=03187_H_C Arrays werden "by reference" bergeben +parser_h_c_arrays_are_references=03187_H_C Arrays werden "by reference" bergeben % Any array passed to a C function is passed % by a pointer (i.e. by reference). parser_e_C_array_of_const_must_be_last=03188_E_C array of const muss letztes Argument sein @@ -992,7 +992,7 @@ parser_h_type_redef=03189_H_Erneute Definition des Typs "$1" % be, a potential source of errors. parser_w_cdecl_has_no_high=03190_W_cdecl'ared Functionen haben keinen high Parameter % Functions declared with the \var{cdecl} modifier do not pass an extra implicit parameter. -parser_w_cdecl_no_openstring=03191_W_cdecl'ared Functionen untersttzen keine open strings +parser_w_cdecl_no_openstring=03191_W_cdecl'ared Functionen untersttzen keine open strings % Openstring is not supported for functions that have the \var{cdecl} modifier. parser_e_initialized_not_for_threadvar=03192_E_Als threadvar deklarierte Variable kann nicht initialisiert werden % Variables declared as threadvar cannot be initialized with a default value. @@ -1045,13 +1045,13 @@ parser_e_goto_outside_proc=03201_E_Goto Statements zwischen verschiedenen Prozed parser_f_too_complex_proc=03202_F_Prozedur zu komplex, sie erfordert zu viele Register % Your procedure body is too long for the compiler. You should split the % procedure into multiple smaller procedures. -parser_e_illegal_expression=03203_E_Ungltiger Ausdruck +parser_e_illegal_expression=03203_E_Ungltiger Ausdruck % This can occur under many circumstances. Usually when trying to evaluate % constant expressions. -parser_e_invalid_integer=03204_E_Ungltiger integer Ausdruck +parser_e_invalid_integer=03204_E_Ungltiger integer Ausdruck % You made an expression which isn't an integer, and the compiler expects the % result to be an integer. -parser_e_invalid_qualifier=03205_E_Ungltiger Qualifier +parser_e_invalid_qualifier=03205_E_Ungltiger Qualifier % One of the following is happening : % \begin{itemize} % \item You're trying to access a field of a variable that is not a record. @@ -1063,7 +1063,7 @@ parser_e_upper_lower_than_lower=03206_E_High Range Limit < low Range Limit % the range. parser_e_macpas_exit_wrong_param=03207_E_Exits Parameter muss der Name der Prozedur sein, in der es benutzt wird % Non local exit is not allowed. This error occurs only in mode MacPas. -parser_e_illegal_assignment_to_count_var=03208_E_Ungltige Zuweisung zur for-loop Variable "$1" +parser_e_illegal_assignment_to_count_var=03208_E_Ungltige Zuweisung zur for-loop Variable "$1" % The type of a \var{for} loop variable must be an ordinal type. % Loop variables cannot be reals or strings. You also cannot assign values to % loop variables inside the loop (Except in Delphi and TP modes). Use a while or @@ -1092,13 +1092,13 @@ parser_e_dispinterface_cant_have_parent=03216_E_Ein DISPINTERFACE kann keine Elt % A DISPINTERFACE is a special type of interface which can't have a parent class. Dispinterface always derive from IDispatch type. parser_e_dispinterface_needs_a_guid=03217_E_Ein DISPINTERFACE ben”tigt einen GUID % A DISPINTERFACE always needs an interface identification (a GUID). -parser_w_overridden_methods_not_same_ret=03218_W_šberschriebene Methoden mssen einen entsprechenden Rckgabetyp haben. Dieser Code kann abstrzen, weil er von einem Delphi Parser Bug abh„ngt (Methode "$2" wird durch "$1" berschrieben, die einen anderen Rckgabetyp hat). +parser_w_overridden_methods_not_same_ret=03218_W_šberschriebene Methoden mssen einen entsprechenden Rckgabetyp haben. Dieser Code kann abstrzen, weil er von einem Delphi Parser Bug abh„ngt (Methode "$2" wird durch "$1" berschrieben, die einen anderen Rckgabetyp hat). % If you declare overridden methods in a class definition, they must % have the same return type. Some versions of Delphi allow you to change the % return type of interface methods, and even to change procedures into % functions, but the resulting code may crash depending on the types used % and the way the methods are called. -parser_e_dispid_must_be_ord_const=03219_E_Dispatch IDs mssen ganzzahlige Konstanten sein +parser_e_dispid_must_be_ord_const=03219_E_Dispatch IDs mssen ganzzahlige Konstanten sein % The \var{dispid} keyword must be followed by an ordinal constant (the dispid index). parser_e_array_range_out_of_bounds=03220_E_Der Bereich des Array ist zu gross % Regardless of the size taken up by its elements, an array cannot have more @@ -1127,10 +1127,10 @@ parser_w_no_lineinfo_use_switch=03226_W_Die LINEINFO Unit nicht manuell laden. V % automatically adds the correct unit for reading the selected type of debugging % information. The unit that needs to be used depends on the type of % debug information used when compiling the binary. -parser_e_no_funcret_specified=03227_E_Kein Funktionsergebnistyp fr Funktion "$1" angegeben +parser_e_no_funcret_specified=03227_E_Kein Funktionsergebnistyp fr Funktion "$1" angegeben % The first time you declare a function you have to declare it completely, % including all parameters and the result type. -parser_e_special_onlygenerics=03228_E_Spezialisierung wird nur fr generische Typen untersttzt +parser_e_special_onlygenerics=03228_E_Spezialisierung wird nur fr generische Typen untersttzt % Types which are not generics can't be specialized. parser_e_no_generics_as_params=03229_E_Generische Typen k”nnen bei der Spezialisierung generischer Typen nicht als Parameter benutzt werden % When specializing a generic, only non-generic types can be used as parameters. @@ -1143,7 +1143,7 @@ parser_e_label_outside_proc=03231_E_Die Address von Labels, die ausserhalb des a % current procedure. parser_e_initialized_not_for_external=03233_E_Extern deklarierte Variablen k”nnen nicht intialisiert werden % Variables declared as external cannot be initialized with a default value. -parser_e_illegal_function_result=03234_E_Ungltiger Funktionsergebnistyp +parser_e_illegal_function_result=03234_E_Ungltiger Funktionsergebnistyp % Some types like file types cannot be used as function result. parser_e_no_common_type=03235_E_"$1" und "$2" haben keinen gemeinsamen Typ % To perform an operation on integers, the compiler converts both operands @@ -1151,7 +1151,7 @@ parser_e_no_common_type=03235_E_"$1" und "$2" haben keinen gemeinsamen Typ % common type of the operands, the compiler takes the minimum of the minimal values % of both types, and the maximum of the maximal values of both types. The common % type is then minimum..maximum. -parser_e_no_generics_as_types=03236_E_Generische Typen k”nnen nicht ohne Spezialisierung als Typ fr eine Variable verwendet werden +parser_e_no_generics_as_types=03236_E_Generische Typen k”nnen nicht ohne Spezialisierung als Typ fr eine Variable verwendet werden % Generics must be always specialized before being used as variable type. parser_w_register_list_ignored=03237_W_Registerliste wird in reinen Assemblerroutinen ignoriert % When using pure assembler routines, the list with modified registers is ignored. @@ -1167,18 +1167,18 @@ parser_e_implements_must_not_have_stored_specifier=03242_E_Die Implements-Eigens % A property which implements an interface may not have a stored specifier. parser_e_implements_uses_non_implemented_interface=03243_E_Die Implements-Eigenschaft benutzt das nicht implementierte Interface "$1" % The interface which is implemented by a property is not an interface implemented by the class. -parser_e_unsupported_real=03244_E_Fliesskommavariablen werden fr dieses Ziel nicht untersttzt +parser_e_unsupported_real=03244_E_Fliesskommavariablen werden fr dieses Ziel nicht untersttzt % The compiler parsed a floating point expression, but it is not supported. parser_e_class_doesnt_implement_interface=03245_E_Klasse "$1" implementiert das Interface "$2" nicht % The delegated interface is not implemented by the class given in the implements clause. parser_e_class_implements_must_be_interface=03246_E_Der von Implements benutzte Typ muss ein Interface sein % The \var{implements} keyword must be followed by an interface type. -parser_e_cant_export_var_different_name=03247_E_Variablen k”nnen fr dieses Target nicht mit einem anderen Namen exportiert werden; fge der Deklaration den Namen mit einer "export" Direktive hinzu (Variablenname: $1, deklarierter Name fr den Export: $2) +parser_e_cant_export_var_different_name=03247_E_Variablen k”nnen fr dieses Target nicht mit einem anderen Namen exportiert werden; fge der Deklaration den Namen mit einer "export" Direktive hinzu (Variablenname: $1, deklarierter Name fr den Export: $2) % On most targets it is not possible to change the name under which a variable % is exported inside the \var{exports} statement of a library. % In that case, you have to specify the export name at the point where the % variable is declared, using the \var{export} and \var{alias} directives. -parser_e_weak_external_not_supported=03248_E_Schwache externe Symbole werden fr dieses Target nicht untersttzt +parser_e_weak_external_not_supported=03248_E_Schwache externe Symbole werden fr dieses Target nicht untersttzt % A "weak external" symbol is a symbol which may or may not exist at (either static % or dynamic) link time. This concept may not be available (or implemented yet) % on the current cpu/OS target. @@ -1211,24 +1211,24 @@ parser_e_sealed_class_cannot_have_abstract_methods=03255_E_Eine SEALED Klasse ka parser_e_only_virtual_methods_final=03256_E_Nur virtuelle Methoden k”nnen final sein. % You are declaring a method as final, when it is not declared to be % virtual. -parser_e_final_can_no_be_overridden=03257_E_Die finale Methode kann nicht berschrieben werden: "$1" +parser_e_final_can_no_be_overridden=03257_E_Die finale Methode kann nicht berschrieben werden: "$1" % You are trying to \var{override} a virtual method of a parent class that does % not exist. parser_e_multiple_messages=03258_E_Pro Methode kann nur eine Nachricht verwendet werden % It is not possible to associate multiple messages with a single method. -parser_e_invalid_enumerator_identifier=03259_E_Ungltiger Aufz„hlungsbezeichner: "$1" +parser_e_invalid_enumerator_identifier=03259_E_Ungltiger Aufz„hlungsbezeichner: "$1" % Only "MoveNext" and "Current" enumerator identifiers are supported. parser_e_enumerator_identifier_required=03260_E_Aufz„hlungsbezeichner notwendig % "MoveNext" or "Current" identifier must follow the \var{enumerator} modifier. -parser_e_enumerator_movenext_is_not_valid=03261_E_Die Aufz„hlungs-pattern-Methode "MoveNext" ist ungltig. Die Methode muss eine Funktion mit Rckgabetyp Boolean und ohne notwendige Argumente sein +parser_e_enumerator_movenext_is_not_valid=03261_E_Die Aufz„hlungs-pattern-Methode "MoveNext" ist ungltig. Die Methode muss eine Funktion mit Rckgabetyp Boolean und ohne notwendige Argumente sein % "MoveNext" enumerator pattern method must be a function with Boolean return type and no required arguments -parser_e_enumerator_current_is_not_valid=03262_E_Die Aufz„hlungs-pattern-Eigenschaft "Current" ist ungltig. Die Eigenschaft ben”tigt einen "Getter" +parser_e_enumerator_current_is_not_valid=03262_E_Die Aufz„hlungs-pattern-Eigenschaft "Current" ist ungltig. Die Eigenschaft ben”tigt einen "Getter" % "Current" enumerator pattern property must have a getter parser_e_only_one_enumerator_movenext=03263_E_Pro Klasse/Objekt ist nur eine Aufz„hlungsmethode "MoveNext" erlaubt % Class or Object can have only one enumerator MoveNext declaration. parser_e_only_one_enumerator_current=03264_E_Pro Klasse/Objekt ist nur eine Aufz„hlungseigenschaft "Current" erlaubt % Class or Object can have only one enumerator Current declaration. -parser_e_for_in_loop_cannot_be_used_for_the_type=03265_E_For in Schleife kann nicht fr den Typ "$1" verwendet werden +parser_e_for_in_loop_cannot_be_used_for_the_type=03265_E_For in Schleife kann nicht fr den Typ "$1" verwendet werden % For in loop can be used not for all types. For example it cannot be used for the enumerations with jumps. parser_e_objc_requires_msgstr=03266_E_Objective-C Nachrichten erfordern, dass ihr Objective-C selector-Name mit der Direktive "message" angegeben wird % Objective-C messages require their Objective-C name (selector name) to be specified using the \var{message `someName:'} procedure directive. @@ -1255,11 +1255,11 @@ parser_h_no_objc_parent=03270_H_Definieren einer neuen Objective-C root-Klasse. parser_e_no_objc_published=03271_E_Objective-C Klassen k”nnen keinen Abschnitt published haben % In Object Pascal, ``published'' determines whether or not RTTI is generated. Since the Objective-C runtime always needs % RTTI for everything, this specified does not make sense for Objective-C classes. -parser_f_need_objc=03272_F_Dieses Modul erfordert, dass der Objective-C Mode-Schalter bersetzt wird +parser_f_need_objc=03272_F_Dieses Modul erfordert, dass der Objective-C Mode-Schalter bersetzt wird % This error indicates the use of Objective-C language features without an Objective-C mode switch % active. Enable one via the -M command line switch, or the {\$modeswitch x} directive. -parser_e_must_use_override_objc=03273_E_Vererbte Methoden k”nnen nur in Objective-C berschrieben werden, fge "override" hinzu (Vererbte Methode ist in $1 definiert) -parser_h_should_use_override_objc=03274_H_Vererbte Methoden k”nnen nur in Objective-C berschrieben werden, fge "override" hinzu (Vererbte Methode ist in $1 definiert) +parser_e_must_use_override_objc=03273_E_Vererbte Methoden k”nnen nur in Objective-C berschrieben werden, fge "override" hinzu (Vererbte Methode ist in $1 definiert) +parser_h_should_use_override_objc=03274_H_Vererbte Methoden k”nnen nur in Objective-C berschrieben werden, fge "override" hinzu (Vererbte Methode ist in $1 definiert) % It is not possible to \var{reintroduce} methods in Objective-C like in Object Pascal. Methods with the same % name always map to the same virtual method entry. In order to make this clear in the source code, % the compiler always requires the \var{override} directive to be specified when implementing overriding @@ -1278,9 +1278,9 @@ parser_e_no_objc_unique=03276_E_Noch k”nnen eindeutige Kopien von Objective-C Ty parser_e_no_category_as_types=03277_E_Objective-C Kategorien k”nnen nicht als Typen benutzt werden % It is not possible to declare a variable as an instance of an Objective-C category. A % category adds methods to the scope of an existing class, but does not define a type by itself. -parser_e_no_category_override=03278_E_Kategorien berschreiben Methoden nicht, sondern ersetzen sie. "reintroduce" benutzen -parser_e_must_use_reintroduce_objc=03279_E_Ersetzte Methoden k”nnen in Objective-C nur wieder eingefhrt werden, fge "reintroduce" hinzu (Ersetzte Methode ist in $1 definiert) -parser_h_should_use_reintroduce_objc=03280_H_Ersetzte Methoden k”nnen in Objective-C nur wieder eingefhrt werden, fge "reintroduce" hinzu (Ersetzte Methode ist in $1 definiert) +parser_e_no_category_override=03278_E_Kategorien berschreiben Methoden nicht, sondern ersetzen sie. "reintroduce" benutzen +parser_e_must_use_reintroduce_objc=03279_E_Ersetzte Methoden k”nnen in Objective-C nur wieder eingefhrt werden, fge "reintroduce" hinzu (Ersetzte Methode ist in $1 definiert) +parser_h_should_use_reintroduce_objc=03280_H_Ersetzte Methoden k”nnen in Objective-C nur wieder eingefhrt werden, fge "reintroduce" hinzu (Ersetzte Methode ist in $1 definiert) % A category replaces an existing method in an Objective-C class, rather than that it overrides it. % Calling an inherited method from an category method will call that method in % the extended class' parent, not in the extended class itself. The @@ -1290,7 +1290,7 @@ parser_h_should_use_reintroduce_objc=03280_H_Ersetzte Methoden k”nnen in Objecti % in Object Pascal, hidden methods are still reachable via inherited). % The type in which the inherited method is defined is explicitly mentioned, because this may either % be an objcclass or an objccategory. -parser_e_implements_getter_not_default_cc=03281_E_Getter fr das Interface implements mssen die voreingestellte calling convention des Ziels benutzen +parser_e_implements_getter_not_default_cc=03281_E_Getter fr das Interface implements mssen die voreingestellte calling convention des Ziels benutzen % Interface getters are called via a helper in the run time library, and hence % have to use the default calling convention for the target (\var{register} on % i386 and x86\_64, \var{stdcall} on other architectures). @@ -1303,7 +1303,7 @@ parser_e_operator_not_overloaded_2=03283_E_šberladenener Operator nicht vorhande parser_e_operator_not_overloaded_3=03284_E_šberladenener Operator nicht vorhanden: "$1" $2 "$3" % You are trying to use an overloaded operator when it is not overloaded for % this type. -parser_e_more_array_elements_expected=03285_E_Erwarte ein weiteres Element fr Array $1 +parser_e_more_array_elements_expected=03285_E_Erwarte ein weiteres Element fr Array $1 % When declaring a typed constant array, you provided to few elements to initialize the array parser_e_string_const_too_long=03286_E_Stringkonstante zu lang, so lange ansistrings ausgeschaltet sind % Only when a piece of code is compiled with ansistrings enabled (\var{\{\$H+\}}), string constants @@ -1351,7 +1351,7 @@ parser_f_no_generic_inside_generic=03297_F_Die Deklaration einer generischen Kla % (guarded by internal error 200511173 in tscannerfile.startrecordtokens). % Since generics are implemented by recording tokens, it is not possible to % have declaration of generic class inside another generic class. -parser_e_forward_protocol_declaration_must_be_resolved=03298_E_Vorw„rts-Deklarationen des ObjC-Protokolls "$1" mssen aufgel”st sein, bevor eine ObjC-Klasse ihr folgen kann +parser_e_forward_protocol_declaration_must_be_resolved=03298_E_Vorw„rts-Deklarationen des ObjC-Protokolls "$1" mssen aufgel”st sein, bevor eine ObjC-Klasse ihr folgen kann % An objcprotocol must be fully defined before classes can conform to it. % This error occurs in the following situation: % \begin{verbatim} @@ -1365,12 +1365,12 @@ parser_e_no_record_published=03299_E_Record -Typen k”nnen keine ”ffentlichen Abs % Published sections can be used only inside classes. parser_e_no_destructor_in_records=03300_E_Destruktoren sind in Records nicht erlaubt % Destructor declarations aren't allowed in records. -parser_e_class_methods_only_static_in_records=03301_E_Klassenmethoden mssen in Records statisch sein +parser_e_class_methods_only_static_in_records=03301_E_Klassenmethoden mssen in Records statisch sein % Class methods declarations aren't allowed in records without static modifier. % Records have no inheritance and therefore non static class methods have no sence for them. parser_e_no_constructor_in_records=03302_E_Konstruktoren sind in Records nicht erlaubt % Constructor declarations aren't allowed in records. -parser_e_at_least_one_argument_must_be_of_type=03303_E_Entweder das Ergebnis oder mindestens ein Parameter mssen vom Typ "$1" sein +parser_e_at_least_one_argument_must_be_of_type=03303_E_Entweder das Ergebnis oder mindestens ein Parameter mssen vom Typ "$1" sein % It is required that either the result of the routine or at least one of its parameters be of the specified type. % For example class operators either take an instance of the structured type in which they are defined, or they return one. parser_e_cant_use_type_parameters_here=03304_E_Typ-Parameter k”nnen initialization/finalization erfordern - Sie k”nnen deshalb nicht in varianten Rekords verwendet werden @@ -1447,7 +1447,7 @@ type_e_set_element_are_not_comp=04012_E_Set-Elemente sind nicht kompatibel % You are trying to perform an operation on two sets, when the set element types % are not the same. The base type of a set must be the same when taking the % union. -type_e_set_operation_unknown=04013_E_Operation fr Sets nicht implementiert +type_e_set_operation_unknown=04013_E_Operation fr Sets nicht implementiert % several binary operations are not defined for sets. % These include: \var{div}, \var{mod}, \var{**}, \var{>=} and \var{<=}. % The last two may be defined for sets in the future. @@ -1458,7 +1458,7 @@ type_w_convert_real_2_comp=04014_W_Automatische Typumwandlung von Fliesskommatyp type_h_use_div_for_int=04015_H_Verwenden sie DIV um ein Integer-Ergebnis zu erhalten % When hints are on, then an integer division with the '/' operator will % produce this message, because the result will then be of type real. -type_e_strict_var_string_violation=04016_E_Stringtypen mssen im "$V+"-Modus exakt bereinstimmen +type_e_strict_var_string_violation=04016_E_Stringtypen mssen im "$V+"-Modus exakt bereinstimmen % When compiling in \var{\{\$V+\}} mode, the string you pass as a parameter % should be of the exact same type as the declared parameter of the procedure. type_e_succ_and_pred_enums_with_assign_not_possible=04017_E_Succ oder Pred kann nicht auf Aufz„hlungen mit Zuweisungen angewendet werden @@ -1480,7 +1480,7 @@ type_e_no_read_write_for_untyped_file=04020_E_Kann Read und Write nicht bei unty type_e_typeconflict_in_set=04021_E_Typkonflikt zwischen den Elementen des Sets % There is at least one set element which is of the wrong type, i.e. not of % the set type. -type_w_maybe_wrong_hi_lo=04022_W_lo/hi(dword/qword) gibt oberes/unteres Word/DWord zurck +type_w_maybe_wrong_hi_lo=04022_W_lo/hi(dword/qword) gibt oberes/unteres Word/DWord zurck % \fpc supports an overloaded version of \var{lo/hi} for \var{longint/dword/int64/qword} % which returns the lower/upper word/dword of the argument. \tp always uses % a 16 bit \var{lo/hi} which always returns bits 0..7 for \var{lo} and the @@ -1491,12 +1491,12 @@ type_e_integer_or_real_expr_expected=04023_E_Integer- oder Real-Ausdruck erwarte type_e_wrong_type_in_array_constructor=04024_E_Falscher Typ "$1" im Array-Konstruktor % You are trying to use a type in an array constructor which is not % allowed. -type_e_wrong_parameter_type=04025_E_Inkompatible Typen fr Argument Nr. #$1: habe $2 erhalten, aber $3 erwartet +type_e_wrong_parameter_type=04025_E_Inkompatible Typen fr Argument Nr. #$1: habe $2 erhalten, aber $3 erwartet % You are trying to pass an invalid type for the specified parameter. type_e_no_method_and_procedure_not_compatible=04026_E_Methode (Variable) und Prozedur (Variable) sind nicht kompatibel % You can't assign a method to a procedure variable or a procedure to a % method pointer. -type_e_wrong_math_argument=04027_E_Unzul„ssige Konstante an interne Algebrafunktion bergeben +type_e_wrong_math_argument=04027_E_Unzul„ssige Konstante an interne Algebrafunktion bergeben % The constant argument passed to a \var{ln} or \var{sqrt} function is out of % the definition range of these functions. type_e_no_addr_of_constant=04028_E_Von Konstanten kann keine Adresse bestimmt werden @@ -1532,14 +1532,14 @@ type_e_interface_type_expected=04034_E_Interface Typ erwartet, aber "$1" erhalte % Type % TMyStream = Class(TStream,Integer) % \end{verbatim} -type_h_mixed_signed_unsigned=04035_H_Mischen von signed Ausdrcken und Longwords ergibt ein 64bit Ergebnis +type_h_mixed_signed_unsigned=04035_H_Mischen von signed Ausdrcken und Longwords ergibt ein 64bit Ergebnis % If you divide (or calculate the modulus of) a signed expression by a longword (or vice versa), % or if you have overflow and/or range checking turned on and use an arithmetic % expression (+, -, *, div, mod) in which both signed numbers and longwords appear, % then everything has to be evaluated in 64-bit arithmetic which is slower than normal % 32-bit arithmetic. You can avoid this by typecasting one operand so it % matches the result type of the other one. -type_w_mixed_signed_unsigned2=04036_W_Mischen von signed Ausdrcken und kardinalen Typen hier kann einen Bereichsprfungsfehler verursachen +type_w_mixed_signed_unsigned2=04036_W_Mischen von signed Ausdrcken und kardinalen Typen hier kann einen Bereichsprfungsfehler verursachen % If you use a binary operator (and, or, xor) and one of % the operands is a longword while the other one is a signed expression, then, % if range checking is turned on, you may get a range check error because in @@ -1588,10 +1588,10 @@ type_h_in_range_check=04047_H_Der linke Operand des IN Operators sollte byte Gr” % currently only supports a left operand which fits within a byte. In the case of % enumerations, the size of an element of an enumeration can be controlled with % the \var{\{\$PACKENUM\}} or \var{\{\$Zn\}} switches. -type_w_smaller_possible_range_check=04048_W_Unpassende Typgr”ssen, Gefahr des Datenverlusts oder Bereichsprfungsfehlers +type_w_smaller_possible_range_check=04048_W_Unpassende Typgr”ssen, Gefahr des Datenverlusts oder Bereichsprfungsfehlers % There is an assignment to a smaller type than the source type. This means that % this may cause a range-check error, or may lead to possible loss of data. -type_h_smaller_possible_range_check=04049_H_Unpassende Typgr”ssen, Gefahr des Datenverlusts oder Bereichsprfungsfehlers +type_h_smaller_possible_range_check=04049_H_Unpassende Typgr”ssen, Gefahr des Datenverlusts oder Bereichsprfungsfehlers % There is an assignment to a smaller type than the source type. This means that % this may cause a range-check error, or may lead to possible loss of data. type_e_cant_take_address_of_abstract_method=04050_E_Die Adresse einer abstrakten Methode kann nicht verwendet werden @@ -1601,7 +1601,7 @@ type_e_assignment_not_allowed=04051_E_Zuweisungen auf formale Parameter und offe % parameter, or to an open array. type_e_constant_expr_expected=04052_E_Konstanter Ausdruck erwartet % The compiler expects an constant expression, but gets a variable expression. -type_e_operator_not_supported_for_types=04053_E_Operation "$1" wird fr die Typen "$2" und "$3" nicht untersttzt +type_e_operator_not_supported_for_types=04053_E_Operation "$1" wird fr die Typen "$2" und "$3" nicht untersttzt % The operation is not allowed for the supplied types. type_e_illegal_type_conversion=04054_E_Illegale Typ-Konversion: "$1" nach "$2" % When doing a type-cast, you must take care that the sizes of the variable and @@ -1613,7 +1613,7 @@ type_w_pointer_to_longint_conv_not_portable=04056_W_Konversion zwischen ordinale % If you typecast a pointer to an ordinal type of a different size (or vice-versa), this can % cause problems. This is a warning to help in finding the 32-bit specific code where cardinal/longint is used % to typecast pointers to ordinals. A solution is to use the ptrint/ptruint types instead. -type_e_cant_choose_overload_function=04057_E_Kann nicht bestimmen, welche der berladenen Funktionen aufgerufen werden soll +type_e_cant_choose_overload_function=04057_E_Kann nicht bestimmen, welche der berladenen Funktionen aufgerufen werden soll % You're calling overloaded functions with a parameter that doesn't correspond % to any of the declared function parameter lists. e.g. when you have declared % a function with parameters \var{word} and \var{longint}, and then you call @@ -1621,23 +1621,23 @@ type_e_cant_choose_overload_function=04057_E_Kann nicht bestimmen, welche der b type_e_illegal_count_var=04058_E_Loop-Variable muss einen ordinalen Typ haben % The type of a \var{for} loop variable must be an ordinal type. % Loop variables cannot be reals or strings. -type_w_double_c_varargs=04059_W_Der konstante Wert vom Typ real wird fr ein C Variablen-Argument zu double konvertiert. Erg„nze eine explizite Typ-Konversion (typecast), um das zu verhindern +type_w_double_c_varargs=04059_W_Der konstante Wert vom Typ real wird fr ein C Variablen-Argument zu double konvertiert. Erg„nze eine explizite Typ-Konversion (typecast), um das zu verhindern % In C, constant real values are double by default. For this reason, if you % pass a constant real value to a variable argument part of a C function, FPC % by default converts this constant to double as well. If you want to prevent % this from happening, add an explicit typecast around the constant. type_e_class_or_cominterface_type_expected=04060_E_Class oder COM interface Typ erwartet, statt dessen "$1" erhalten % Some operators, such as the AS operator, are only applicable to classes or COM interfaces. -type_e_no_const_packed_array=04061_E_Konstante packed Arrays werden noch nicht untersttzt +type_e_no_const_packed_array=04061_E_Konstante packed Arrays werden noch nicht untersttzt % You cannot declare a (bit)packed array as a typed constant. -type_e_got_expected_packed_array=04062_E_Inkompatibler Typ fr Argument $1: Erhielt "$2" erwartete "(Bit)Packed Array" +type_e_got_expected_packed_array=04062_E_Inkompatibler Typ fr Argument $1: Erhielt "$2" erwartete "(Bit)Packed Array" % The compiler expects a (bit)packed array as the specified parameter. -type_e_got_expected_unpacked_array=04063_E_Inkompatibler Typ fr Argument $1: Erhielt "$2" erwartete "(not packed) Array" +type_e_got_expected_unpacked_array=04063_E_Inkompatibler Typ fr Argument $1: Erhielt "$2" erwartete "(not packed) Array" % The compiler expects a regular (i.e., not packed) array as the specified parameter. type_e_no_packed_inittable=04064_E_Elemente von packed Arrays k”nnen nicht von einem Typ sein, der initialisiert werden muss % Support for packed arrays of types that need initialization % (such as ansistrings, or records which contain ansistrings) is not yet implemented. -type_e_no_const_packed_record=04065_E_Konstante packed Records und Objekte werden noch nicht untersttzt +type_e_no_const_packed_record=04065_E_Konstante packed Records und Objekte werden noch nicht untersttzt % You cannot declare a (bit)packed array as a typed constant at this time. type_w_untyped_arithmetic_unportable=04066_W_Arithmetik "$1" mit typenlosem Pointer ist nicht portierbar nach {$T+}, schlage typecast vor % Addition/subtraction from an untyped pointer may work differently in \var{\{\$T+\}}. @@ -1658,16 +1658,16 @@ type_h_convert_sub_operands_to_prevent_overflow=04080_H_Konvertierung des Operan type_h_convert_mul_operands_to_prevent_overflow=04081_H_Konvertierung des Operanden "$1" vor der Multiplikation k”nnte šberlauf Fehler verhindern % Multiplying two types can cause overflow errors. Since you are converting the result to a larger type, you % could prevent such errors by converting the operands to this type before doing the multiplication. -type_w_pointer_to_signed=04082_W_Die Konvertierung von Pointern in einen Integertyp mit Vorzeichen kann zu falschen Ergebnissen bei Vergleichen und zu Bereichsberschreitungen fhren; verwenden sie statt dessen besser einen Typ ohne Vorzeichen +type_w_pointer_to_signed=04082_W_Die Konvertierung von Pointern in einen Integertyp mit Vorzeichen kann zu falschen Ergebnissen bei Vergleichen und zu Bereichsberschreitungen fhren; verwenden sie statt dessen besser einen Typ ohne Vorzeichen % The virtual address space on 32-bit machines runs from \$00000000 to \$ffffffff. % Many operating systems allow you to allocate memory above \$80000000. % For example both \windows and \linux allow pointers in the range \$0000000 to \$bfffffff. % If you convert pointers to signed types, this can cause overflow and range check errors, % but also \$80000000 < \$7fffffff. This can cause random errors in code like "if p>q". -type_interface_has_no_guid=04083_E_Interface Typ $1 hat keine gltige GUID +type_interface_has_no_guid=04083_E_Interface Typ $1 hat keine gltige GUID % When applying the as-operator to an interface or class, the desired interface (i.e. the right operand of the % as-operator) must have a valid GUID. -type_e_invalid_objc_selector_name=04084_E_Ungltiger Objective-C-Selector-Name "$1" +type_e_invalid_objc_selector_name=04084_E_Ungltiger Objective-C-Selector-Name "$1" % An Objective-C selector cannot be empty, must be a valid identifier or a single colon, % and if it contains at least one colon it must also end in one. type_e_expected_objc_method_but_got=04085_E_Erwartete eine Objective-C-Methode, erhielt aber $1 @@ -1677,7 +1677,7 @@ type_e_expected_objc_method=04086_E_Erwartete eine Objective-C-Methode, oder den % A selector can only be created for Objective-C methods, either by specifying % the name using a string constant, or by using an Objective-C method identifier % that is visible in the current scope. -type_e_no_type_info=04087_E_Fr diesen Typ steht keine Typ-Information zu Verfgung +type_e_no_type_info=04087_E_Fr diesen Typ steht keine Typ-Information zu Verfgung % Type information is not generated for some types, such as enumerations with gaps % in their value range (this includes enumerations whose lower bound is different % from zero). @@ -1689,7 +1689,7 @@ type_w_zero_to_nil=04090_W_Konvertiere 0 zu NIL % Use NIL rather than 0 when initialising a pointer. type_e_protocol_type_expected=04091_E_Objective-C Protokolltyp erwartet, erhielt aber "$1" % The compiler expected a protocol type name, but found something else. -type_e_objc_type_unsupported=04092_E_Der Typ "$1" wird nicht fr die Verwendung mit der Objective-C Laufzeitumgebung untersttzt. +type_e_objc_type_unsupported=04092_E_Der Typ "$1" wird nicht fr die Verwendung mit der Objective-C Laufzeitumgebung untersttzt. % Objective-C makes extensive use of run time type information (RTTI). This format % is defined by the maintainers of the run time and can therefore not be adapted % to all possible Object Pascal types. In particular, types that depend on @@ -1727,7 +1727,7 @@ type_w_procvar_univ_conflicting_para=04095_W_Erzwungener univ Parameter Typ in e % when \var{test} returns. type_e_generics_cannot_reference_itself=04096_E_Typ-Parameter bei der Spezialisation von Generics k”nnen den aktuel spezialisierten Typ nicht referenzieren % Recursive specializations of generics like \var{Type MyType = specialize MyGeneric<MyType>;} are not possible. -type_e_type_parameters_are_not_allowed_here=04097_E_Typ-Parameter sind fr nicht-generische Klassen/Record/Objekte Prozeduren und Funktionen nicht erlaubt +type_e_type_parameters_are_not_allowed_here=04097_E_Typ-Parameter sind fr nicht-generische Klassen/Record/Objekte Prozeduren und Funktionen nicht erlaubt % Type parameters are only allowed for methods of generic classes, records or objects type_e_generic_declaration_does_not_match=04098_E_Die generische Deklaration von "$1" unterscheidet sich vom der vorherigen Deklaration % Generic declaration does not match the previous declaration @@ -1784,10 +1784,10 @@ sym_w_label_not_defined=05014_W_Label "$1" nicht definiert % A label was declared, but not defined. sym_e_label_used_and_not_defined=05015_E_Label "$1" benutzt aber nicht definiert % A label was declared and used, but not defined. -sym_e_ill_label_decl=05016_E_Ungltige Label-Deklaration +sym_e_ill_label_decl=05016_E_Ungltige Label-Deklaration % This error should never happen; it occurs if a label is defined outside a % procedure or function. -sym_e_goto_and_label_not_supported=05017_E_GOTO und LABEL werden nicht untersttzt (verwenden Sie den Schalter -Sg) +sym_e_goto_and_label_not_supported=05017_E_GOTO und LABEL werden nicht untersttzt (verwenden Sie den Schalter -Sg) % You must use the -Sg switch to compile a program which has \var{label}s % and \var{goto} statements. By default, \var{label} and \var{goto} aren't % supported. @@ -1797,7 +1797,7 @@ sym_e_id_is_no_label_id=05019_E_Bezeichner ist kein Label % The identifier specified after the \var{goto} isn't of type label. sym_e_label_already_defined=05020_E_Label ist bereits definiert % You are defining a label twice. You can define a label only once. -sym_e_ill_type_decl_set=05021_E_Ungltige Typdeklaration von Set-Elementen +sym_e_ill_type_decl_set=05021_E_Ungltige Typdeklaration von Set-Elementen % The declaration of a set contains an invalid type definition. sym_e_class_forward_not_resolved=05022_E_Forward-Klassendefinition nicht gefunden: $1 % You declared a class, but you didn't implement it. @@ -1918,7 +1918,7 @@ sym_w_deprecated_symbol_with_msg=05066_W_Symbol "$1" ist veraltet: "$2" % declared as \var{deprecated} is used. Deprecated symbols may no longer % be available in newer versions of the unit / library. Use of this symbol % should be avoided as much as possible. -sym_e_no_enumerator=05067_E_Kann keinen Z„hler fr den Typ "$1" finden +sym_e_no_enumerator=05067_E_Kann keinen Z„hler fr den Typ "$1" finden % This means that compiler cannot find an apropriate enumerator to use in the for-in loop. % To create an enumerator you need to defind an operator enumerator or add a public or published % GetEnumerator method to the class or object definition. @@ -1928,7 +1928,7 @@ sym_e_no_enumerator_move=05068_E_Kann keine Methode "MoveNext" in der Aufz„hlung sym_e_no_enumerator_current=05069_E_Kann keine Eigenschaft "Current" in der Aufz„hlung "$1" finden % This means that compiler cannot find a public Current property in the enumerator class or object % definition. -sym_e_objc_para_mismatch=05070_E_Die Anzahl der deklarierten Parameter und die Anzahl der Doppelpunkte in der Nachrichtenzeichenkette stimmen nicht berein +sym_e_objc_para_mismatch=05070_E_Die Anzahl der deklarierten Parameter und die Anzahl der Doppelpunkte in der Nachrichtenzeichenkette stimmen nicht berein % In Objective-C, a message name automatically contains as many colons as parameters. % In order to prevent mistakes when specifying the message name in FPC, the compiler % checks whether this is also the case here. Note that in case of messages taking a @@ -1977,7 +1977,7 @@ sym_e_objc_formal_class_not_resolved=05080_E_Die vollst„ndige Definition der for % of the class to be in scope. sym_e_interprocgoto_into_init_final_code_not_allowed=05081_E_Gotos in die 'initialization'- oder 'finalization'-Bl”cke einer Unit sind nicht erlaubt % Gotos into initialization or finalization blockse of units are not allowed. -sym_e_external_class_name_mismatch1=05082=E_Ungltiger externer Name "$1" fr die formale Klasse "$2" +sym_e_external_class_name_mismatch1=05082=E_Ungltiger externer Name "$1" fr die formale Klasse "$2" sym_e_external_class_name_mismatch2=05083=E_Hierhin muss die vollst„ndige Klassendefinition mit externem Namen "$1" % When a class is declared using a formal external definition, the actual external % definition (if any) must specify the same external name as the formal definition @@ -1995,10 +1995,10 @@ sym_e_external_class_name_mismatch2=05083=E_Hierhin muss die vollst„ndige Klasse % This section lists all messages that can be displayed if the code % generator encounters an error condition. % \begin{description} -cg_e_parasize_too_big=06009_E_Gr”sse der Parameterliste bersteigt 65535 Bytes +cg_e_parasize_too_big=06009_E_Gr”sse der Parameterliste bersteigt 65535 Bytes % The I386 processor limits the parameter list to 65535 bytes. (The \var{RET} % instruction causes this). -cg_e_file_must_call_by_reference=06012_E_Dateitypen mssen VAR Parameter sein +cg_e_file_must_call_by_reference=06012_E_Dateitypen mssen VAR Parameter sein % You cannot specify files as value parameters, i.e., they must always be % declared \var{var} parameters. cg_e_cant_use_far_pointer_there=06013_E_Die Verwendung eines FAR-Zeigers ist in dieser Art nicht erlaubt @@ -2019,7 +2019,7 @@ cg_w_member_cd_call_from_method=06016_W_M”glicherweise unzul„ssiger Aufruf eines % require parameters on entry. cg_n_inefficient_code=06017_N_Uneffiziente Programmierung % You construction seems dubious to the compiler. -cg_w_unreachable_code=06018_W_Code wird niemals ausgefhrt +cg_w_unreachable_code=06018_W_Code wird niemals ausgefhrt % You specified a loop which will never be executed. Example: % \begin{verbatim} % while false do @@ -2040,7 +2040,7 @@ cg_e_unable_inline_object_methods=06031_E_Objektmethoden k”nnen nicht Inline sei % You cannot have inlined object methods. cg_e_unable_inline_procvar=06032_E_Procvar-Aufrufe k”nnen nicht Inline sein % A procedure with a procedural variable call cannot be inlined. -cg_e_no_code_for_inline_stored=06033_E_Kein Code fr Inline-Prozedur gespeichert +cg_e_no_code_for_inline_stored=06033_E_Kein Code fr Inline-Prozedur gespeichert % The compiler couldn't store code for the inline procedure. cg_e_can_access_element_zero=06035_E_Auf Element Null von Ansi/Wide- oder Longstring kann nicht zugegriffen werden, benutzen Sie stattdessen (Set)Length % You should use \var{setlength} to set the length of an ansi/wide/longstring @@ -2087,25 +2087,25 @@ cg_e_control_flow_outside_finally=06040_E_Kontrollfluss-Anweisungen sind in eine % If the procedure \var{p} raises an exception the finally block is % executed. If the execution reaches the exit, it's unclear what to do: % exit the procedure or search for another exception handler. -cg_w_parasize_too_big=06041_W_Gr”sse der Parameter berschreitet die Grenze fr bestimmte CPUs +cg_w_parasize_too_big=06041_W_Gr”sse der Parameter berschreitet die Grenze fr bestimmte CPUs % This indicates that you are declaring more than 64K of parameters, which % might not be supported on other processor targets. -cg_w_localsize_too_big=06042_W_Gr”sse der lokalen Variablen berschreitet die Grenze fr bestimmte CPUs +cg_w_localsize_too_big=06042_W_Gr”sse der lokalen Variablen berschreitet die Grenze fr bestimmte CPUs % This indicates that you are declaring more than 32K of local variables, which % might not be supported on other processor targets. -cg_e_localsize_too_big=06043_E_Gr”sse der lokalen Variablen berschreitet die untersttzte Grenze +cg_e_localsize_too_big=06043_E_Gr”sse der lokalen Variablen berschreitet die untersttzte Grenze % This indicates that you are declaring more than 32K of local variables, which % is not supported by this processor. cg_e_break_not_allowed=06044_E_BREAK nicht zul„ssig % You're trying to use \var{break} outside a loop construction. cg_e_continue_not_allowed=06045_E_CONTINUE nicht zul„ssig % You're trying to use \var{continue} outside a loop construction. -cg_f_unknown_compilerproc=06046_F_Unbekannte Compiler-Prozedur "$1". šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird +cg_f_unknown_compilerproc=06046_F_Unbekannte Compiler-Prozedur "$1". šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird % The compiler expects that the runtime library contains certain subroutines. If you see this error % and you didn't change the runtime library code, it's very likely that the runtime library % you're using doesn't match the compiler in use. If you changed the runtime library this error means % that you removed a subroutine which the compiler needs for internal use. -cg_f_unknown_system_type=06047_F_Systemtyp "$1" konnte nicht gefunden werden. šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird +cg_f_unknown_system_type=06047_F_Systemtyp "$1" konnte nicht gefunden werden. šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird % The compiler expects that the runtime library contains certain type definitions. If you see this error % and you didn't change the runtime library code, it's very likely that the runtime library % you're using doesn't match the compiler in use. If you changed the runtime library this error means @@ -2116,7 +2116,7 @@ cg_h_inherited_ignored=06048_H_Geerbter Aufruf einer abstrakten Methode ignorier cg_e_goto_label_not_found=06049_E_Goto Label "$1": Das Label ist nicht definiert oder wurde bei der Optimierung entfernt % The label used in the goto definition is not defined or optimized away by the % unreachable code elemination. -cg_f_unknown_type_in_unit=06050_F_Kann den Typ "$1" nicht in der Unit "$2" finden. šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird +cg_f_unknown_type_in_unit=06050_F_Kann den Typ "$1" nicht in der Unit "$2" finden. šberprfe, ob die korrekte Laufzeit-Bibliothek verwendet wird % The compiler expects that the runtime library contains certain type definitions. If you see this error % and you didn't change the runtime library code, it's very likely that the runtime library % you're using doesn't match the compiler in use. If you changed the runtime library this error means @@ -2124,7 +2124,7 @@ cg_f_unknown_type_in_unit=06050_F_Kann den Typ "$1" nicht in der Unit "$2" finde cg_e_interprocedural_goto_only_to_outer_scope_allowed=06051_E_Interprozedurale gotos sind nur in „uáere Subroutines erlaubt % Gotos between subroutines are only allowed if the goto jumps from an inner to an outer subroutine or % from a subroutine to the main program -cg_e_labels_cannot_defined_outside_declaration_scope=06052_E_ Label mssen im selben Bereich definiert werden, in dem sie deklariert werden +cg_e_labels_cannot_defined_outside_declaration_scope=06052_E_ Label mssen im selben Bereich definiert werden, in dem sie deklariert werden % In ISO mode, labels must be defined in the same scope as they are declared. cg_e_goto_across_procedures_with_exceptions_not_allowed=06053_E_Eine Prozedur, die explizite oder implizite Excpetion Frames enth„lt, darf nicht mit einem goto verlassen werden % Non-local gotos might not be used to leave procedures using exceptions either implicitly or explicitly. Procedures @@ -2168,11 +2168,11 @@ asmr_e_cant_have_multiple_relocatable_symbols=07010_E_Verwendung von mehreren ve asmr_e_only_add_relocatable_symbol=07011_E_Verschiebbares Symbol kann nur addiert werden % Relocatable symbols (variable/typed constant) can't be used with other % operators. Only addition is allowed. -asmr_e_invalid_constant_expression=07012_E_Ungltiger Konstantenausdruck +asmr_e_invalid_constant_expression=07012_E_Ungltiger Konstantenausdruck % There is an error in the constant expression. asmr_e_relocatable_symbol_not_allowed=07013_E_Verschiebbares Symbol ist nicht zul„ssig % You can't use a relocatable symbol (variable/typed constant) here. -asmr_e_invalid_reference_syntax=07014_E_Ungltige Verweis-Syntax +asmr_e_invalid_reference_syntax=07014_E_Ungltige Verweis-Syntax % There is an error in the reference. asmr_e_local_para_unreachable=07015_E_Sie k”nnen "$1" von diesem Code aus nicht erreichen % You cannot read directly the value of a local variable or parameter @@ -2180,7 +2180,7 @@ asmr_e_local_para_unreachable=07015_E_Sie k”nnen "$1" von diesem Code aus nicht % local assembler code without parameter nor locals). asmr_e_local_label_not_allowed_as_ref=07016_E_Lokale Symbole/Labels sind nicht als Referenz zul„ssig % You can't use local symbols/labels as references -asmr_e_wrong_base_index=07017_E_Ungltige Verwendung von Basis- und Index-Registern +asmr_e_wrong_base_index=07017_E_Ungltige Verwendung von Basis- und Index-Registern % There is an error with the base and index register, they are % probably incorrect asmr_w_possible_object_field_bug=07018_W_M”glicher Fehler bei Objektfeld-Behandlung @@ -2190,30 +2190,30 @@ asmr_e_wrong_scale_factor=07019_E_Falscher Skalierungsfaktor angegeben % The scale factor given is wrong, only 1,2,4 and 8 are allowed asmr_e_multiple_index=07020_E_Mehrfache Verwendung fon Index-Registern % You are trying to use more than one index register -asmr_e_invalid_operand_type=07021_E_Ungltiger Operandentyp +asmr_e_invalid_operand_type=07021_E_Ungltiger Operandentyp % The operand type doesn't match with the opcode used -asmr_e_invalid_string_as_opcode_operand=07022_E_Unglitge Zeichenkette als Opcode-Operand: $1 +asmr_e_invalid_string_as_opcode_operand=07022_E_Unglitge Zeichenkette als Opcode-Operand: $1 % The string specified as operand is not correct with this opcode -asmr_w_CODE_and_DATA_not_supported=07023_W_@CODE und @DATA werden nicht untersttzt +asmr_w_CODE_and_DATA_not_supported=07023_W_@CODE und @DATA werden nicht untersttzt % @CODE and @DATA are unsupported and are ignored. asmr_e_null_label_ref_not_allowed=07024_E_Null-Label-Bezug nicht m”glich asmr_e_expr_zero_divide=07025_E_Division durch Null in Assembler-Ausdruck % There is a division by zero in a constant expression -asmr_e_expr_illegal=07026_E_Ungltiger Ausdruck +asmr_e_expr_illegal=07026_E_Ungltiger Ausdruck % There is an illegal expression in a constant expression asmr_e_escape_seq_ignored=07027_E_Escape-Sequenz ignoriert: $1 % There is a C-styled string, but the escape sequence in the string % is unknown, and is therefore ignored -asmr_e_invalid_symbol_ref=07028_E_Ungltige Symbolverwendung +asmr_e_invalid_symbol_ref=07028_E_Ungltige Symbolverwendung asmr_w_fwait_emu_prob=07029_W_FWAIT kann Emulationsprobleme mit emu387 verursachen -asmr_w_fadd_to_faddp=07030_W_$1 ohne Operand wurde in $1P bersetzt -asmr_w_enter_not_supported_by_linux=07031_W_Der ENTER-Befehl wird vom Linux-Kernel nicht untersttzt +asmr_w_fadd_to_faddp=07030_W_$1 ohne Operand wurde in $1P bersetzt +asmr_w_enter_not_supported_by_linux=07031_W_Der ENTER-Befehl wird vom Linux-Kernel nicht untersttzt % ENTER instruction can generate a stack page fault that is not % caught correctly by the i386 Linux page handler. -asmr_w_calling_overload_func=07032_W_Aufruf einer berladenen Funktion in Assembler +asmr_w_calling_overload_func=07032_W_Aufruf einer berladenen Funktion in Assembler % There is a call to an overloaded method in the assembler block, % this might be the sign there is a problem -asmr_e_unsupported_symbol_type=07033_E_Nicht untersttzter Symboltyp fr Operand +asmr_e_unsupported_symbol_type=07033_E_Nicht untersttzter Symboltyp fr Operand asmr_e_constant_out_of_bounds=07034_E_Wert der Konstante ausserhalb des zul„ssigen Bereichs asmr_e_error_converting_decimal=07035_E_Fehler beim Umwandeln in Dezimal $1 % A constant decimal value does not have the correct syntax @@ -2223,18 +2223,18 @@ asmr_e_error_converting_binary=07037_E_Fehler beim Umwandeln in Bin„r $1 % A constant binary value does not have the correct syntax asmr_e_error_converting_hexadecimal=07038_E_Fehler beim Umwandeln in Hexadezimal $1 % A constant hexadecimal value does not have the correct syntax -asmr_h_direct_global_to_mangled=07039_H_$1 bersetzt nach $2 -asmr_w_direct_global_is_overloaded_func=07040_W_$1 ist einer berladenen Funktion zugeordnet +asmr_h_direct_global_to_mangled=07039_H_$1 bersetzt nach $2 +asmr_w_direct_global_is_overloaded_func=07040_W_$1 ist einer berladenen Funktion zugeordnet asmr_e_cannot_use_SELF_outside_a_method=07041_E_Kann SELF nicht ausserhalb einer Methode verwenden % There is a reference to the \var{self} symbol while it is not % allowed. \var{self} can only be referenced inside methods asmr_e_cannot_use_OLDEBP_outside_nested_procedure=07042_E_Kann OLDEBP ausserhalb einer verschachtelten Prozedur nicht verwenden % There is a reference to the \var{oldebp} symbol while it is not % allowed. \var{oldebp} can only be referenced inside nested routines -asmr_e_void_function=07043_W_Prozeduren k”nnen keinen Wert im Assembler-Code zurckliefern +asmr_e_void_function=07043_W_Prozeduren k”nnen keinen Wert im Assembler-Code zurckliefern % Trying to return a value while in a procedure. A procedure % does not have any return value -asmr_e_SEG_not_supported=07044_E_SEG nicht untersttzt +asmr_e_SEG_not_supported=07044_E_SEG nicht untersttzt asmr_e_size_suffix_and_dest_dont_match=07045_E_Gr”ssensuffix und Ziel- oder Quellgr”sse passen nicht zusammen % The register size and the opcode size suffix don't match. This is % probably an error in the assembler statement @@ -2243,19 +2243,19 @@ asmr_w_size_suffix_and_dest_dont_match=07046_W_Gr”ssensuffix und Ziel- oder Quel % probably an error in the assembler statement asmr_e_syntax_error=07047_E_Assembler Syntaxfehler % There is an assembler syntax error -asmr_e_invalid_opcode_and_operand=07048_E_Ungltige Kombination von Opcode und Operanden +asmr_e_invalid_opcode_and_operand=07048_E_Ungltige Kombination von Opcode und Operanden % The opcode cannot be used with this type of operand asmr_e_syn_operand=07049_E_Assembler Syntaxfehler im Operanden asmr_e_syn_constant=07050_E_Assembler Syntaxfehler in Konstanten -asmr_e_invalid_string_expression=07051_E_Ungltiger Stringausdruck -asmr_w_const32bit_for_address=07052_W_Konstante mit Symbol $1 fr Adresse erzeugt, die kein Pointer ist +asmr_e_invalid_string_expression=07051_E_Ungltiger Stringausdruck +asmr_w_const32bit_for_address=07052_W_Konstante mit Symbol $1 fr Adresse erzeugt, die kein Pointer ist % A constant expression represents an address which does not fit % into a pointer. The address is probably incorrect asmr_e_unknown_opcode=07053_E_Unbekannter Opcode $1 % This opcode is not known -asmr_e_invalid_or_missing_opcode=07054_E_Ungltiger oder fehlender Opcode -asmr_e_invalid_prefix_and_opcode=07055_E_Ungltige Kombination von Prefix und Opcode: $1 -asmr_e_invalid_override_and_opcode=07056_E_Ungltige Kombination von Override und Opcode: $1 +asmr_e_invalid_or_missing_opcode=07054_E_Ungltiger oder fehlender Opcode +asmr_e_invalid_prefix_and_opcode=07055_E_Ungltige Kombination von Prefix und Opcode: $1 +asmr_e_invalid_override_and_opcode=07056_E_Ungltige Kombination von Override und Opcode: $1 asmr_e_too_many_operands=07057_E_Zu viele Operanden in der Zeile % There are too many operands for this opcode. Check your % assembler syntax @@ -2264,22 +2264,22 @@ asmr_w_far_ignored=07059_W_FAR ignoriert asmr_e_dup_local_sym=07060_E_Doppelters lokales Symbol $1 asmr_e_unknown_local_sym=07061_E_Undefiniertes lokales Symbol $1 asmr_e_unknown_label_identifier=07062_E_Unbekannter Label-Bezeichner $1 -asmr_e_invalid_register=07063_E_Ungltiger Registername +asmr_e_invalid_register=07063_E_Ungltiger Registername % There is an unknown register name used as operand. -asmr_e_invalid_fpu_register=07064_E_Ungltiger Name fr Fliesskommaregister +asmr_e_invalid_fpu_register=07064_E_Ungltiger Name fr Fliesskommaregister % There is an unknown register name used as operand. -asmr_w_modulo_not_supported=07066_W_Modulo nicht untersttzt -asmr_e_invalid_float_const=07067_E_Ungltige Fliesskommakonstante $1 +asmr_w_modulo_not_supported=07066_W_Modulo nicht untersttzt +asmr_e_invalid_float_const=07067_E_Ungltige Fliesskommakonstante $1 % The floating point constant declared in an assembler block is % invalid. -asmr_e_invalid_float_expr=07068_E_Ungltiger Fliesskommaausdruck +asmr_e_invalid_float_expr=07068_E_Ungltiger Fliesskommaausdruck % The floating point expression declared in an assembler block is % invalid. asmr_e_wrong_sym_type=07069_E_Falscher Symboltyp asmr_e_cannot_index_relative_var=07070_E_Kann lokale Variable oder Parameter nicht mit Register indizieren % Trying to index using a base register a symbol which is already relative % to a register. This is not possible, and will probably lead to crashes. -asmr_e_invalid_seg_override=07071_E_Ungltiger Segmentoverride-Ausdruck +asmr_e_invalid_seg_override=07071_E_Ungltiger Segmentoverride-Ausdruck asmr_w_id_supposed_external=07072_W_Bezeichner $1 ist vermutlich External % There is a reference to an undefined symbol. This will not result % in an error, since the symbol might be external, but may cause @@ -2289,7 +2289,7 @@ asmr_e_string_not_allowed_as_const=07073_E_Strings sind als Konstanten unzul„ssi asmr_e_no_var_type_specified=07074_Typ der Variablen nicht angegeben % The syntax expects a type idenfitifer after the dot, but % none was found. -asmr_w_assembler_code_not_returned_to_text=07075_E_Assemblercode kehrt nicht zum Text zurck +asmr_w_assembler_code_not_returned_to_text=07075_E_Assemblercode kehrt nicht zum Text zurck % There was a directive in the assembler block to change sections, % but there is a missing return to the text section at the end % of the assembler block. This might cause errors during link time. @@ -2299,13 +2299,13 @@ asmr_w_using_defined_as_local=07077_E_Verwendung eines definierten Namens als lo asmr_e_dollar_without_identifier=07078_E_Dollarzeichen wird ohne Bezeichner verwendet % A constant expression has an identifier which does not start with % the $ symbol. -asmr_w_32bit_const_for_address=07079_W_32-Bit-Konstante fr Adresse erzeugt +asmr_w_32bit_const_for_address=07079_W_32-Bit-Konstante fr Adresse erzeugt % A constant was used as an address. This is probably an error, % since using absolute addresses will probably not work. asmr_n_align_is_target_specific=07080_N_.align ist abh„ngig von Zielplattform, verwende .balign oder .p2align % Using the .align directive is platform specific, and its meaning will vary % from one platform to another. -asmr_e_cannot_access_field_directly_for_parameters=07081_E_Kann fr Parameter nicht direkt auf Felder zugreifen +asmr_e_cannot_access_field_directly_for_parameters=07081_E_Kann fr Parameter nicht direkt auf Felder zugreifen % You should load the parameter first into a register and then access the % fields using that register. asmr_e_cannot_access_object_field_directly=07082_E_Kann auf Felder von Objekten/Klassen nicht direkt zugreifen @@ -2319,23 +2319,23 @@ asmr_e_unable_to_determine_reference_size=07083_E_Gr”sse nicht spezifiziert und asmr_e_cannot_use_RESULT_here=07084_E_RESULT kann in dieser Funktion nicht verwendet werden % Some functions which return complex types cannot use the \var{result} % keyword. -asmr_w_adding_explicit_args_fXX=07086_W_"$1" ohne Operand bersetzt in "$1 %st,%st(1)" -asmr_w_adding_explicit_first_arg_fXX=07087_W_"$1 %st(n)" bersetzt in "$1 %st,%st(n)" -asmr_w_adding_explicit_second_arg_fXX=07088_W_"$1 %st(n)" bersetzt in "$1 %st(n),%st" +asmr_w_adding_explicit_args_fXX=07086_W_"$1" ohne Operand bersetzt in "$1 %st,%st(1)" +asmr_w_adding_explicit_first_arg_fXX=07087_W_"$1 %st(n)" bersetzt in "$1 %st,%st(n)" +asmr_w_adding_explicit_second_arg_fXX=07088_W_"$1 %st(n)" bersetzt in "$1 %st(n),%st" asmr_e_invalid_char_smaller=07089_E_Das Zeichen < ist hier nicht erlaubt % The shift operator requires the << characters. Only one % of those characters was found. asmr_e_invalid_char_greater=07090_E_Das Zeichen > ist hier nicht erlaubt % The shift operator requires the >> characters. Only one % of those characters was found. -asmr_w_align_not_supported=07093_W_ALIGN wird nicht untersttzt +asmr_w_align_not_supported=07093_W_ALIGN wird nicht untersttzt asmr_e_no_inc_and_dec_together=07094_E_Inc und Dec k”nnen nicht gemeinsam vorkommen % Trying to use an increment and a decrement within the same % opcode on the 680x0. This is impossible. -asmr_e_invalid_reg_list_in_movem=07095_E_Ungltige Registerliste fr movem +asmr_e_invalid_reg_list_in_movem=07095_E_Ungltige Registerliste fr movem % Trying to use the \var{movem} opcode with invalid registers % to save or restore. -asmr_e_invalid_reg_list_for_opcode=07096_E_Ungltige Registerliste fr diesen opcode +asmr_e_invalid_reg_list_for_opcode=07096_E_Ungltige Registerliste fr diesen opcode asmr_e_higher_cpu_mode_required=07097_E_H”herer cpu Modus notwendig ($1) % Trying to use an instruction which is not supported in the current % cpu mode. Use a higher cpu generation to be able to use this @@ -2365,13 +2365,13 @@ asmr_w_unable_to_determine_reference_size_using_byte=07101_W_Gr”sse nicht angege % the compiler is unable to determine what size (byte,word,dword,etc.) it % should use for the reference. This warning is only used in Delphi mode where % it falls back to use BYTE as default. -asmr_w_no_direct_ebp_for_parameter=07102_W_Die Verwendung von +offset(%ebp) fr Parameter ist hier ungltig +asmr_w_no_direct_ebp_for_parameter=07102_W_Die Verwendung von +offset(%ebp) fr Parameter ist hier ungltig % Using direct 8(%ebp) reference for function/procedure parameters is invalid % if parameters are in registers. asmr_w_direct_ebp_for_parameter_regcall=07103_W_Die Verwendung von +offset(%ebp) ist nicht mit der regcall Konvention kompatibel % Using direct 8(%ebp) reference for function/procedure parameters is invalid % if parameters are in registers. -asmr_w_direct_ebp_neg_offset=07104_W_Die Verwendung von -offset(%ebp) wird fr den Zugriff auf lokale Variablen nicht empfohlen +asmr_w_direct_ebp_neg_offset=07104_W_Die Verwendung von -offset(%ebp) wird fr den Zugriff auf lokale Variablen nicht empfohlen % Using -8(%ebp) to access a local variable is not recommended asmr_w_direct_esp_neg_offset=07105_W_Verwendung von -offset(%esp); Zugriff kann einen Crash oder Datenverlust ausl”sen % Using -8(%esp) to access a local stack is not recommended, as @@ -2382,7 +2382,7 @@ asmr_e_need_pic_ref=07107_E_Erzeuge eigentlich PIC, aber die Referenz ist nicht % The compiler has been configured to generate position-independent code % (PIC), but there are position-dependent references in the current % handwritten assembler instruction. -asmr_e_mixing_regtypes=07108_E_Alle Register in einem Registerset mssen in T und Breite bereinstimmen +asmr_e_mixing_regtypes=07108_E_Alle Register in einem Registerset mssen in T und Breite bereinstimmen % Instructions on the ARM architecture that take a register set as argument require that all registers % in this set are of the same kind (e.g., integer, vfp) and width (e.g., single precision, double precision). asmr_e_empty_regset=07109_E_Ein Registerset kann nicht leer sein @@ -2400,28 +2400,28 @@ asmr_w_useless_got_for_local=07110_W_@GOTPCREL ist nutzlos und bei lokalen Symbo asmw_f_too_many_asm_files=08000_F_Zu viele Assembler-Dateien % With smartlinking enabled, there are too many assembler % files generated. Disable smartlinking. -asmw_f_assembler_output_not_supported=08001_F_Gew„hlte Assemblerausgabe wird nicht untersttzt -asmw_f_comp_not_supported=08002_F_Comp nicht untersttzt -asmw_f_direct_not_supported=08003_F_Direct nicht untersttzt fr bin„res Schreiben +asmw_f_assembler_output_not_supported=08001_F_Gew„hlte Assemblerausgabe wird nicht untersttzt +asmw_f_comp_not_supported=08002_F_Comp nicht untersttzt +asmw_f_direct_not_supported=08003_F_Direct nicht untersttzt fr bin„res Schreiben % Direct assembler mode is not supported for binary writers. asmw_e_alloc_data_only_in_bss=08004_E_Allozieren von Daten ist nur in "bss"-Abschnitten zul„ssig asmw_f_no_binary_writer_selected=08005_F_Kein Bin„rschreiber ausgew„hlt asmw_e_opcode_not_in_table=08006_E_Asm: Opcode $1 nicht in Tabelle enthalten -asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 ungltige Kombination von Opcode und Operanden -asmw_e_16bit_not_supported=08008_E_Asm: 16-Bit-Verweise werden nicht untersttzt -asmw_e_invalid_effective_address=08009_E_Asm: Ungltige effektive Adresse +asmw_e_invalid_opcode_and_operands=08007_E_Asm: $1 ungltige Kombination von Opcode und Operanden +asmw_e_16bit_not_supported=08008_E_Asm: 16-Bit-Verweise werden nicht untersttzt +asmw_e_invalid_effective_address=08009_E_Asm: Ungltige effektive Adresse asmw_e_immediate_or_reference_expected=08010_E_Asm: Konstanter Ausdruck oder Referenz erwartet -asmw_e_value_exceeds_bounds=08011_E_Asm: $1 Wert berschreitet Grenzen $2 +asmw_e_value_exceeds_bounds=08011_E_Asm: $1 Wert berschreitet Grenzen $2 asmw_e_short_jmp_out_of_range=08012_E_Asm: "Short jump" ist ausserhalb des Bereichs $1 asmw_e_undefined_label=08013_E_Asm: Undefiniertes Label: $1 -asmw_e_comp_not_supported=08014_E_Asm: Comp wird fr dieses Ziel nicht untersttzt -asmw_e_extended_not_supported=08015_E_Asm: Extended Typ wird fr dieses Ziel nicht untersttzt +asmw_e_comp_not_supported=08014_E_Asm: Comp wird fr dieses Ziel nicht untersttzt +asmw_e_extended_not_supported=08015_E_Asm: Extended Typ wird fr dieses Ziel nicht untersttzt asmw_e_duplicate_label=08016_E_Asm: Doppeltes Label $1 asmw_e_redefined_label=08017_E_Asm: Neu definiertes Label $1 asmw_e_first_defined_label=08018_E_Asm: First beginnt hier -asmw_e_invalid_register=08019_E_Asm: Ungltiges Register $1 -asmw_e_16bit_32bit_not_supported=08020_E_Asm: 16 oder 32 Bit Referenzen werden nicht untersttzt -asmw_e_64bit_not_supported=08021_E_Asm: 64 Bit Operanden werden nicht untersttzt +asmw_e_invalid_register=08019_E_Asm: Ungltiges Register $1 +asmw_e_16bit_32bit_not_supported=08020_E_Asm: 16 oder 32 Bit Referenzen werden nicht untersttzt +asmw_e_64bit_not_supported=08021_E_Asm: 64 Bit Operanden werden nicht untersttzt # # Executing linker/assembler @@ -2481,10 +2481,10 @@ exec_e_util_not_found=09016_E_Hilfsprogramm $1 nicht gefunden, schalte um zu ext % can be used to assemble and link or postprocess the program. exec_t_using_util=09017_T_Benutze Hilfsprogramm $1 % An informational message, showing which external program (usually a postprocessor) is being used. -exec_e_exe_not_supported=09018_E_Erzeugen von ausfhrbaren Dateien nicht untersttzt +exec_e_exe_not_supported=09018_E_Erzeugen von ausfhrbaren Dateien nicht untersttzt % Creating executable programs is not supported for this platform, because it was % not yet implemented in the compiler. -exec_e_dll_not_supported=09019_E_Dynamische Bibliotheken nicht untersttzt +exec_e_dll_not_supported=09019_E_Dynamische Bibliotheken nicht untersttzt % Creating dynamically loadable libraries is not supported for this platform, because it was % not yet implemented in the compiler. exec_i_closing_script=09020_I_Schliesse Skript $1 @@ -2530,9 +2530,9 @@ exec_e_cant_write_resource_file=09032_E_Kann die Resourcedatei "$1" nicht schrei % This section lists all messages that the compiler emits when an executable program is produced, % and only when the internal linker is used. % \begin{description} -execinfo_f_cant_process_executable=09128_F_Kann ausfhrbare Datei nicht nachbearbeiten: $1 +execinfo_f_cant_process_executable=09128_F_Kann ausfhrbare Datei nicht nachbearbeiten: $1 % Fatal error when the compiler is unable to post-process an executable. -execinfo_f_cant_open_executable=09129_F_Kann ausfhrbare Datei nicht ”ffnen: $1 +execinfo_f_cant_open_executable=09129_F_Kann ausfhrbare Datei nicht ”ffnen: $1 % Fatal error when the compiler cannot open the file for the executable. execinfo_x_codesize=09130_X_Gr”sse des Codes: $1 Bytes % Informational message showing the size of the produced code section. @@ -2557,7 +2557,7 @@ execinfo_x_stackcommit=09134_X_Stack Bereich "committed": $1 Bytes % \section{Linker messages} % This section lists messages produced by internal linker. % \begin{description} -link_f_executable_too_big=09200_F_Das Programm - Image ist fr das Target $1 zu groá +link_f_executable_too_big=09200_F_Das Programm - Image ist fr das Target $1 zu groá % Fatal error when resulting executable is too big. link_w_32bit_absolute_reloc=09201_W_Object Daei "$1" enth„lt eine 32-bit absolute Relocation auf Symbol "$2". % Warning when 64-bit object file contains 32-bit absolute relocations. @@ -2594,15 +2594,15 @@ unit_u_ppu_time=10005_U_PPU-Zeit: $1 % When you use the \var{-vu} flag, the unit time is shown. unit_u_ppu_file_too_short=10006_U_PPU-Datei zu kurz % When you use the \var{-vu} flag, the unit time is shown. -unit_u_ppu_invalid_header=10007_U_PPU Ungltiger Header (kein PPU am Anfang) +unit_u_ppu_invalid_header=10007_U_PPU Ungltiger Header (kein PPU am Anfang) % A unit file contains as the first three bytes the ASCII codes of the characters \var{PPU}. -unit_u_ppu_invalid_version=10008_U_PPU Ungltige Version $1 +unit_u_ppu_invalid_version=10008_U_PPU Ungltige Version $1 % This unit file was compiled with a different version of the compiler, and % cannot be read. -unit_u_ppu_invalid_processor=10009_U_PPU ist fr einen anderen Prozessor bersetzt +unit_u_ppu_invalid_processor=10009_U_PPU ist fr einen anderen Prozessor bersetzt % This unit file was compiled for a different processor type, and % cannot be read. -unit_u_ppu_invalid_target=10010_U_PPU ist fr ein anderes Zielsystem bersetzt +unit_u_ppu_invalid_target=10010_U_PPU ist fr ein anderes Zielsystem bersetzt % This unit file was compiled for a different processor type, and % cannot be read. unit_u_ppu_source=10011_U_PPU Quelle: $1 @@ -2618,12 +2618,12 @@ unit_f_ppu_read_error=10014_F_Kann PPU-Datei nicht lesen unit_f_ppu_read_unexpected_end=10015_F_Unerwartetes Ende der PPU-Datei % Unexpected end of file. This may mean that the PPU file is % corrupted. -unit_f_ppu_invalid_entry=10016_F_Ungltiger Eintrag in PPU-Datei: $1 +unit_f_ppu_invalid_entry=10016_F_Ungltiger Eintrag in PPU-Datei: $1 % The unit the compiler is trying to read is corrupted, or generated with a % newer version of the compiler. unit_f_ppu_dbx_count_problem=10017_F_PPU Dbx Z„hler-Problem % There is an inconsistency in the debugging information of the unit. -unit_e_illegal_unit_name=10018_E_Ungltiger Unitname: $1 +unit_e_illegal_unit_name=10018_E_Ungltiger Unitname: $1 % The name of the unit doesn't match the file name. unit_f_too_much_units=10019_F_Zu viele Units % \fpc has a limit of 1024 units in a program. You can change this behavior @@ -2633,7 +2633,7 @@ unit_f_circular_unit_reference=10020_F_Gegenseitige Abh„ngigkeit von Units zwisc % Two units are using each other in the interface part. This is only allowed % in the \var{implementation} part. At least one unit must contain the other one % in the \var{implementation} section. -unit_f_cant_compile_unit=10021_F_Kann Unit "$1" nicht bersetzen, keine Quellen vorhanden +unit_f_cant_compile_unit=10021_F_Kann Unit "$1" nicht bersetzen, keine Quellen vorhanden % A unit was found that needs to be recompiled, but no sources are % available. unit_f_cant_find_ppu=10022_F_Kann Unit "$1", die von "$2" benutzt wird, nicht finden @@ -2653,7 +2653,7 @@ unit_f_errors_in_unit=10026_F_Es traten $1 Fehler beim šbersetzen des Moduls auf unit_u_load_unit=10027_U_Lade aus $1 ($2) die Unit $3 % When you use the \var{-vu} flag, which unit is loaded from which unit is % shown. -unit_u_recompile_crc_change=10028_U_šbersetze $1 erneut, Prfsumme fr $2 hat sich ge„ndert +unit_u_recompile_crc_change=10028_U_šbersetze $1 erneut, Prfsumme fr $2 hat sich ge„ndert % The unit is recompiled because the checksum of a unit it depends on has % changed. unit_u_recompile_source_found_alone=10029_U_šbersetze "$1", nur Quellcode gefunden @@ -2677,11 +2677,11 @@ unit_u_parsing_interface=10034_U_Analysiere Interface von $1 unit_u_parsing_implementation=10035_U_Analysiere Implementation von $1 % When you use the \var{-vu} flag, the compiler warns that it starts % parsing the implementation part of the unit. -unit_u_second_load_unit=10036_U_Zweites Laden fr Unit "$1" +unit_u_second_load_unit=10036_U_Zweites Laden fr Unit "$1" % When you use the \var{-vu} flag, the compiler warns that it starts % recompiling a unit for the second time. This can happen with % interdependent units. -unit_u_check_time=10037_U_PPU prfe Datei $1 Zeit $2 +unit_u_check_time=10037_U_PPU prfe Datei $1 Zeit $2 % When you use the \var{-vu} flag, the compiler shows the filename and % date and time of the file on which a recompile depends. ### The following two error msgs is currently disabled. @@ -2695,12 +2695,12 @@ unit_u_check_time=10037_U_PPU prfe Datei $1 Zeit $2 #% the same conditionals are set for the recompiliation. The compiler has #% found a conditional that was used the last time the unit was compiled, but #% the conditional is currently not defined. -unit_w_cant_compile_unit_with_changed_incfile=10040_W_Kann Unit $1 nicht erneut bersetzen, aber ge„nderte Include-Datei gefunden +unit_w_cant_compile_unit_with_changed_incfile=10040_W_Kann Unit $1 nicht erneut bersetzen, aber ge„nderte Include-Datei gefunden % A unit was found to have modified include files, but % some source files were not found, so recompilation is impossible. unit_u_source_modified=10041_U_Datei $1 ist neuer als die, aus der die PPU Datei $2 erzeugt wird % A modified source file for a compiler unit was found. -unit_u_ppu_invalid_fpumode=10042_U_Versuch eine Unit zu verwenden, die in einem anderen FPU Mode bersetzt wurde +unit_u_ppu_invalid_fpumode=10042_U_Versuch eine Unit zu verwenden, die in einem anderen FPU Mode bersetzt wurde % Trying to compile code while using units which were not compiled with % the same floating point format mode. Either all code should be compiled % with FPU emulation on, or with FPU emulation off. @@ -2710,18 +2710,18 @@ unit_u_loading_interface_units=10043_U_Interface Units werden von $1 geladen unit_u_loading_implementation_units=10044_U_Implementation Units werden von $1 geladen % When you use the \var{-vu} flag, the compiler warns that it is starting % to load the units defined in the implementation part of the unit. -unit_u_interface_crc_changed=10045_U_Ge„nderte Interface CRC fr Unit $1 +unit_u_interface_crc_changed=10045_U_Ge„nderte Interface CRC fr Unit $1 % When you use the \var{-vu} flag, the compiler warns that the % CRC calculated for the interface has been changed after the implementation % has been parsed. -unit_u_implementation_crc_changed=10046_U_Ge„nderte Implementation CRC fr Unit $1 +unit_u_implementation_crc_changed=10046_U_Ge„nderte Implementation CRC fr Unit $1 % When you use the \var{-vu} flag, the compiler warns that the % CRC calculated has been changed after the implementation % has been parsed. unit_u_finished_compiling=10047_U_šbersetzen der Unit $1 beendet % When you use the \var{-vu} flag, the compiler warns that it % has finished compiling the unit. -unit_u_add_depend_to=10048_U_Abh„ngigkeit hinzufgen: $1 h„ngt von $2 ab +unit_u_add_depend_to=10048_U_Abh„ngigkeit hinzufgen: $1 h„ngt von $2 ab % When you use the \var{-vu} flag, the compiler warns that it % has added a dependency between the two units. unit_u_no_reload_is_caller=10049_U_Kein erneutes Laden, Unit $1 ist die Aufrufende @@ -2731,7 +2731,7 @@ unit_u_no_reload_is_caller=10049_U_Kein erneutes Laden, Unit $1 ist die Aufrufen unit_u_no_reload_in_second_compile=10050_U_Kein erneutes Laden der Unit, bereits beim zweiten šbersetzen: $1 % When you use the \var{-vu} flag, the compiler warns that it % will not reload the unit because it is already in a second recompile. -unit_u_flag_for_reload=10051_U_Flag fr erneutes Laden: $1 +unit_u_flag_for_reload=10051_U_Flag fr erneutes Laden: $1 % When you use the \var{-vu} flag, the compiler warns that it % has to reload the unit. unit_u_forced_reload=10052_U_Erzwungenes erneutes Laden @@ -2740,7 +2740,7 @@ unit_u_forced_reload=10052_U_Erzwungenes erneutes Laden unit_u_previous_state=10053_U_Vorhergehender Status von $1: $2 % When you use the \var{-vu} flag, the compiler shows the % previous state of the unit. -unit_u_second_compile_unit=10054_U_$1 wird bereits bersetzt, zweites šbersetzen gesetzt +unit_u_second_compile_unit=10054_U_$1 wird bereits bersetzt, zweites šbersetzen gesetzt % When you use the \var{-vu} flag, the compiler warns that it is starting % to recompile a unit for the second time. This can happen with interdependent % units. @@ -2756,18 +2756,18 @@ unit_u_registering_new_unit=10057_U_Registrierung der neuen Unit $1 unit_u_reresolving_unit=10058_U_Erneutes resolving der Unit $1 % When you use the \var{-vu} flag, the compiler warns that it % has to recalculate the internal data of the unit. -unit_u_skipping_reresolving_unit=10059_U_Erneutes Resolving der Unit $1 wird bersprungen, benutzte Units werden noch geladen +unit_u_skipping_reresolving_unit=10059_U_Erneutes Resolving der Unit $1 wird bersprungen, benutzte Units werden noch geladen % When you use the \var{-vu} flag, the compiler warns that it is % skipping the recalculation of the internal data of the unit % because there is no data to recalculate. unit_u_unload_resunit=10060_U_Entlade die Resource-Unit $1 (wird nicht ben”tigt) % When you use the \var{-vu} flag, the compiler warns that it is unloading the % resource handling unit, since no resources are used. -unit_e_different_wpo_file=10061_E_Unit $1 wurde mit einer anderen Feedback-Eingabe ($2, $3) fr die Gesamtprogramm-Optimierung (wpo) bersetzt. Bitte erneut ohne wpo oder mit der gleichen wpo-Feedback-Eingabe-Datei bersetzen +unit_e_different_wpo_file=10061_E_Unit $1 wurde mit einer anderen Feedback-Eingabe ($2, $3) fr die Gesamtprogramm-Optimierung (wpo) bersetzt. Bitte erneut ohne wpo oder mit der gleichen wpo-Feedback-Eingabe-Datei bersetzen % When a unit has been compiled using a particular whole program optimization (wpo) feedback file (\var{-FW<x>} \var{-OW<x>}), % this compiled version of the unit is specialised for that particular compilation scenario and cannot be used in % any other context. It has to be recompiled before you can use it in another program or with another wpo feedback input file. -unit_u_indirect_crc_changed=10062_U_Die CRC des indirekten Interface (Objekte/Klassen) fr die unit $1 hat sich ge„ndert +unit_u_indirect_crc_changed=10062_U_Die CRC des indirekten Interface (Objekte/Klassen) fr die unit $1 hat sich ge„ndert % When you use the \var{-vu} flag, the compiler warns that the % indirect CRC calculated for the unit (this is the CRC of all classes/objects/interfaces/$\ldots$ % in the interfaces of units directly or indirectly used by this unit in the interface) has been changed after the @@ -2788,19 +2788,19 @@ option_usage=11000_O_$1 [Optionen] <Eingabedatei> [Optionen] % This section lists errors that occur when the compiler is processing the % command line or handling the configuration files. % \begin{description} -option_only_one_source_support=11001_W_Es wird nur eine Quelldatei untersttzt. Wechsel fr das Kompilieren von Quelldatei "$1" zu Quelldatei "$2" +option_only_one_source_support=11001_W_Es wird nur eine Quelldatei untersttzt. Wechsel fr das Kompilieren von Quelldatei "$1" zu Quelldatei "$2" % You can specify only one source file on the command line. The last % one will be compiled, others will be ignored. This may indicate that % you forgot a \var{'-'} sign. -option_def_only_for_os2=11002_W_DEF-Datei kann nur fr OS/2 erzeugt werden +option_def_only_for_os2=11002_W_DEF-Datei kann nur fr OS/2 erzeugt werden % This option can only be specified when you're compiling for OS/2. -option_no_nested_response_file=11003_E_Verschachtelte Response-Dateien werden nicht untersttzt +option_no_nested_response_file=11003_E_Verschachtelte Response-Dateien werden nicht untersttzt % You cannot nest response files with the \var{@file} command line option. -option_no_source_found=11004_F_Kein Name fr Quelldatei auf der Kommandzeile +option_no_source_found=11004_F_Kein Name fr Quelldatei auf der Kommandzeile % The compiler expects a source file name on the command line. option_no_option_found=11005_N_Keine Angaben in Konfigurationsdatei "$1" gefunden % The compiler didn't find any option in that config file. -option_illegal_para=11006_E_Ungltiger Parameter: $1 +option_illegal_para=11006_E_Ungltiger Parameter: $1 % You specified an unknown option. option_help_pages_para=11007_H_-? zeigt Hilfetext an % When an unknown option is given, this message is diplayed. @@ -2813,7 +2813,7 @@ option_reading_further_from=11010_D_Lese weitere Optionen aus $1 % to another options file. option_target_is_already_set=11011_W_Zielsystem ist bereits gesetzt: $1 % Displayed if more than one \var{-T} option is specified. -option_no_shared_lib_under_dos=11012_W_Gemeinsame Bibliotheken sind auf der DOS Platform nicht verfgbar, verwende stattdessen statische Bibliotheken +option_no_shared_lib_under_dos=11012_W_Gemeinsame Bibliotheken sind auf der DOS Platform nicht verfgbar, verwende stattdessen statische Bibliotheken % If you specify \var{-CD} for the \dos platform, this message is displayed. % The compiler supports only static libraries under \dos. option_too_many_ifdef=11013_F_Zu viele \var{\#IF(N)DEFs} in Zeile $2 der Optionen-Datei $1 @@ -2825,19 +2825,19 @@ option_too_many_endif=11014_F_Unerwartetes \var{\#ENDIFs} in Zeile $2 der Option option_too_less_endif=11015_F_Offene Bedingung am Ende der Optionen-Datei % The \var{\#IF(N)DEF} statements in the options file are not balanced with % the \var{\#ENDIF} statements. -option_no_debug_support=11016_W_Erzeugung von Debug-Informationen wird von dieser ausfhrbaren Datei nicht untersttzt +option_no_debug_support=11016_W_Erzeugung von Debug-Informationen wird von dieser ausfhrbaren Datei nicht untersttzt % It is possible to have a compiler executable that doesn't support % the generation of debugging info. If you use such an executable with the % \var{-g} switch, this warning will be displayed. -option_no_debug_support_recompile_fpc=11017_H_Versuchen Sie mit -dGDB erneut zu bersetzen +option_no_debug_support_recompile_fpc=11017_H_Versuchen Sie mit -dGDB erneut zu bersetzen % It is possible to have a compiler executable that doesn't support % the generation of debugging info. If you use such an executable with the % \var{-g} switch, this warning will be displayed. -option_obsolete_switch=11018_W_Sie verwenden den nun berholten Schalter $1 +option_obsolete_switch=11018_W_Sie verwenden den nun berholten Schalter $1 % This warns you when you use a switch that is not needed/supported anymore. % It is recommended that you remove the switch to overcome problems in the % future, when the meaning of the switch may change. -option_obsolete_switch_use_new=11019_W_Sie benutzen den nun berholten Schalter $1, bitte benutzen Sie $2 +option_obsolete_switch_use_new=11019_W_Sie benutzen den nun berholten Schalter $1, bitte benutzen Sie $2 % This warns you when you use a switch that is not supported anymore. You % must now use the second switch instead. % It is recommended that you change the switch to overcome problems in the @@ -2856,7 +2856,7 @@ option_using_env=11027_T_Optionen werden aus dem environment $1 gelesen % Options are also read from this environment string. option_handling_option=11028_D_Handling der Option "$1" % Debug info that an option is found and will be handled. -option_help_press_enter=11029_O_*** Drcken Sie die ENTER-Taste *** +option_help_press_enter=11029_O_*** Drcken Sie die ENTER-Taste *** % Message shown when help is shown page per page. When pressing the ENTER % Key, the next page of help is shown. If you press q and then ENTER, the % compiler exits. @@ -2890,19 +2890,19 @@ option_ppc386_deprecated=11042_W_Die Verwendung von ppc386.cfg wird beendet. Bit % system the naming makes no sense anymore. Please continue to use fpc.cfg instead. option_else_without_if=11043_F_Zur \var{\#ELSE} Direktive in Zeile $2 der Optionen-Datei $1 gibt es kein entsprechendes \var{\#IF(N)DEF} % An \var{\#ELSE} statement was found in the options file without a matching \var{\#IF(N)DEF} statement. -option_unsupported_target=11044_F_Die Option "$1" wird auf der Zielplattform nicht oder noch nicht untersttzt +option_unsupported_target=11044_F_Die Option "$1" wird auf der Zielplattform nicht oder noch nicht untersttzt % Not all options are supported or implemented for all target platforms. This message informs you that a chosen % option is incompatible with the currently selected target platform. -option_unsupported_target_for_feature=11045_F_Das Feature "$1" wird fr die ausgew„hlte Zielplattform nicht oder noch nicht untersttzt +option_unsupported_target_for_feature=11045_F_Das Feature "$1" wird fr die ausgew„hlte Zielplattform nicht oder noch nicht untersttzt % Not all features are supported or implemented for all target platforms. This message informs you that a chosen % feature is incompatible with the currently selected target platform. option_dwarf_smart_linking=11046_N_DWARF Debug-Information kann auf dieser Zielplattform nicht zusammen mit Smartlinking benutzt werden, es wird auf statisches Linken umgeschaltet % Smart linking is currently incompatble with DWARF debug information on most % platforms, so smart linking is disabled in such cases. -option_ignored_target=11047_W_Option "$1" wird fr die ausgew„hlte Zielplattform ignoriert +option_ignored_target=11047_W_Option "$1" wird fr die ausgew„hlte Zielplattform ignoriert % Not all options are supported or implemented for all target platforms. This message informs you that a chosen % option is ignored for the currently selected target platform. -option_debug_external_unsupported=11048_W_Schalte externe Debuginformation aus, weil es fr die gew„hlte Kombination Ziel/Debugformat nicht untersttzt wird +option_debug_external_unsupported=11048_W_Schalte externe Debuginformation aus, weil es fr die gew„hlte Kombination Ziel/Debugformat nicht untersttzt wird % Not all debug formats can be stored in an external file on all platforms. In particular, on % Mac OS X only DWARF debug information can be stored externally. % @@ -2920,7 +2920,7 @@ option_debug_external_unsupported=11048_W_Schalte externe Debuginformation aus, % This section lists errors that occur when the compiler is performing % whole program optimization. % \begin{description} -wpo_cant_find_file=12000_F_Feedback-Datei "$1" fr die Gesamtprogramm-Optimierung kann nicht ge”ffnet werden +wpo_cant_find_file=12000_F_Feedback-Datei "$1" fr die Gesamtprogramm-Optimierung kann nicht ge”ffnet werden % The compiler cannot open the specified feedback file with whole program optimization information. wpo_begin_processing=12001_D_Bearbeite die Informationen zur Gesamtprogramm-Optimierung aus der wpo-Feedback-Datei "$1" % The compiler starts processing whole program optimization information found in the named file. @@ -2929,28 +2929,28 @@ wpo_end_processing=12002_D_Bearbeitung der Informationen zur Gesamtprogramm-Opti wpo_expected_section=12003_E_Erwarte einen Sektions-Header, statt dessen "$2" in Zeile $1 der wpo-Feedback-Datei erhalten % The compiler expected a section header in the whole program optimization file (starting with \%), % but did not find it. -wpo_no_section_handler=12004_W_Kein Handler fr die Sektion "$2" der Gesamtprogramm-Optimierung registriert (Zeile $1 der wpo-Feedback-Datei). Wird ignoriert +wpo_no_section_handler=12004_W_Kein Handler fr die Sektion "$2" der Gesamtprogramm-Optimierung registriert (Zeile $1 der wpo-Feedback-Datei). Wird ignoriert % The compiler has no handler to deal with the mentioned whole program optimization information % section, and will therefore ignore it and skip to the next section. -wpo_found_section=12005_D_Sektion "$1" der Gesamtprogramm-Optimierung mit Informationen ber "$2" gefunden +wpo_found_section=12005_D_Sektion "$1" der Gesamtprogramm-Optimierung mit Informationen ber "$2" gefunden % The compiler encountered a section with whole program optimization information, and according % to its handler this section contains information usable for the mentioned purpose. wpo_no_input_specified=12006_F_Die ausgew„hlte Gesamtprogramm-Optimierung erfordert eine bereits erzeugte Feedback-Datei (bitte mit -Fw angeben) % The compiler needs information gathered during a previous compilation run to perform the selected % whole program optimizations. You can specify the location of the feedback file containing this % information using the -Fw switch. -wpo_not_enough_info=12007_E_Keine Informationen fr "$1" Gesamtprogramm-Optimierung gefunden +wpo_not_enough_info=12007_E_Keine Informationen fr "$1" Gesamtprogramm-Optimierung gefunden % While you pointed the compiler to a file containing whole program optimization feedback, it % did not contain the information necessary to perform the selected optimizations. You most likely % have to recompile the program using the appropate -OWxxx switch. -wpo_no_output_specified=12008_F_Gebe eine Feedback-Datei an, um die erzeugte Information fr die Gesamtprogramm-Optimierung zu speichern (mit der Option -FW) +wpo_no_output_specified=12008_F_Gebe eine Feedback-Datei an, um die erzeugte Information fr die Gesamtprogramm-Optimierung zu speichern (mit der Option -FW) % You have to specify the feedback file in which the compiler has to store the whole program optimization % feedback that is generated during the compilation run. This can be done using the -FW switch. -wpo_output_without_info_gen=12009_E_Erzeuge keine Information fr die Gesamtprogramm-Optimierung, obwohl eine Feedback-Datei dafr angegeben wurde (mit der Option -FW) +wpo_output_without_info_gen=12009_E_Erzeuge keine Information fr die Gesamtprogramm-Optimierung, obwohl eine Feedback-Datei dafr angegeben wurde (mit der Option -FW) % The compiler was instructed to store whole program optimization feedback into a file specified using -FW, % but not to actually generated any whole program optimization feedback. The classes of to be % generated information can be speciied using -OWxxx. -wpo_input_without_info_use=12010_E_Gesamtprogramm-Optimierung wird nicht durchgefhrt, obwohl eine Feedback-Datei angegeben wurde (mit der Option -FW) +wpo_input_without_info_use=12010_E_Gesamtprogramm-Optimierung wird nicht durchgefhrt, obwohl eine Feedback-Datei angegeben wurde (mit der Option -FW) % The compiler was not instructed to perform any whole program optimizations (no -Owxxx parameters), % but nevertheless an input file with such feedback was specified (using -Fwyyy). Since this can % indicate that you forgot to specify an -Owxxx parameter, the compiler generates an error in this case. @@ -2973,14 +2973,14 @@ wpo_cannot_find_symbol_progs=12015_F_"$1" oder "$2" wurden nicht gefunden, um di wpo_error_reading_symbol_file=12016_E_Fehler beim Lesen der "symbol liveness" Information durch "$1" erzeugt % An error occurred during the reading of the symbol liveness file that was generated using the 'nm' or 'objdump' program. The reason % can be that it was shorter than expected, or that its format was not understood. -wpo_error_executing_symbol_prog=12017_F_Fehler bei der Ausfhrung von "$1" (exitcode: $2) um Symbolinformationen aus dem "gelinkten" Programm zu erhalten +wpo_error_executing_symbol_prog=12017_F_Fehler bei der Ausfhrung von "$1" (exitcode: $2) um Symbolinformationen aus dem "gelinkten" Programm zu erhalten % Certain symbol liveness collectors need a helper program to extract the symbol information from the linked program. % The helper program produced the reported error code when it was run on the linked program. wpo_symbol_live_info_needs_smart_linking=12018_E_Die Sammlung der "symbol liveness" Information hilft nur bei smart linking, benutze -CX -XX % Whether or not a symbol is live is determined by looking whether it exists in the final linked program. % Without smart linking/dead code stripping, all symbols are always included, regardless of whether they are % actually used or not. So in that case all symbols will be seen as live, which makes this optimization ineffective. -wpo_cant_create_feedback_file=12019_E_Die angegebene Feedback-Eingabe-Datei "$1" fr die Gesamtprogramm-Optimierung kann nicht erzeugt werden +wpo_cant_create_feedback_file=12019_E_Die angegebene Feedback-Eingabe-Datei "$1" fr die Gesamtprogramm-Optimierung kann nicht erzeugt werden % The compiler is unable to create the file specified using the -FW parameter to store the whole program optimisation information. % % \end{description} @@ -2990,8 +2990,8 @@ wpo_cant_create_feedback_file=12019_E_Die angegebene Feedback-Eingabe-Datei "$1" # Logo (option -l) # option_logo=11023_[ -Free Pascal Compiler Version $FPCFULLVERSION [$FPCDATE] fr $FPCTARGET -Copyright (c) 1993-2010 Florian Kl„mpfl +Free Pascal Compiler Version $FPCFULLVERSION [$FPCDATE] fr $FPCTARGET +Copyright (c) 1993-2011 Florian Kl„mpfl und andere ] # @@ -3003,26 +3003,26 @@ Free Pascal Compiler Version $FPCVERSION Compiler Datum: $FPCDATE Compiler Zielsystem: $FPCCPU -Untersttzte Zielbetriebssysteme: +Untersttzte Zielbetriebssysteme: $OSTARGETS -Untersttzte CPU Instruktionen: +Untersttzte CPU Instruktionen: $INSTRUCTIONSETS -Untersttzte FPU Instruktionen: +Untersttzte FPU Instruktionen: $FPUINSTRUCTIONSETS -Untersttzte ABI Ziele: +Untersttzte ABI Ziele: $ABITARGETS -Untersttzte Optimierungen: +Untersttzte Optimierungen: $OPTIMIZATIONS -Untersttzte Gesamtprogramm-Optimierungen: +Untersttzte Gesamtprogramm-Optimierungen: All $WPOPTIMIZATIONS -Untersttzte Microcontroller: +Untersttzte Microcontroller: $CONTROLLERTYPES Dieses Programm unterliegt der GNU General Public Licence @@ -3090,35 +3090,35 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **1b_Erzeuge Browser-Info **2bl_Erzeuge Info zu lokalen Symbolen **1B_Erzeuge alle Module (Build) -**1C<x>_Optionen fr Code-Erzeugung: -**2C3<x>_Schalte ieee-Prfung von Konstanten ein +**1C<x>_Optionen fr Code-Erzeugung: +**2C3<x>_Schalte ieee-Prfung von Konstanten ein **2Ca<x>_W„hle ABI aus; fpc -i gibt die m”glichen Werte aus **2Cb_Erzeuge "big-endian" Code **2Cc<x>_Setze "default calling convention" zu <x> -**2CD_Erzeuge auch eine dynamische Bibliothek (nicht untersttzt) +**2CD_Erzeuge auch eine dynamische Bibliothek (nicht untersttzt) **2Ce_šbersetze mit emulierten Fliesskomma opcodes **2Cf<x>_W„hle den Fliesskomma instruction set aus; fpc -i gibt die m”glichen Werte aus **2CF<x>_Minimale Pr„zission von Fliesskommakonstanten (default, 32, 64) **2Cg_Erzeuge PIC code **2Ch<n>_<n> Bytes Heap (zwischen 1023 und 67107840) -**2Ci_I/O-Prfung +**2Ci_I/O-Prfung **2Cn_Lasse die Linkstufe aus -**2Co_Prfe auf šberlauf von Integer-Operationen -**2CO_Prfe auf m”glichen šberlauf von Integer-Operationen +**2Co_Prfe auf šberlauf von Integer-Operationen +**2CO_Prfe auf m”glichen šberlauf von Integer-Operationen **2Cp<x>_W„hle instruction set aus; fpc -i gibt die m”glichen Werte aus -**2CP<x>=<y>_ Einstellungen fr packing +**2CP<x>=<y>_ Einstellungen fr packing **3CPPACKSET=<y>_ <y> Belegung von Sets: 0, 1 oder DEFAULT oder NORMAL, 2, 4 und 8 -**2Cr_Fhre Bereichsprfung durch -**2CR_Verifiziere die Gltigkiet des Aufrufs der Objektmethoden -**2Cs<n>_Setze die Prfgr”sse des Stacks auf <n> -**2Ct_Fhre Stackprfung durch (nur zum Testen, siehe Handbuch) +**2Cr_Fhre Bereichsprfung durch +**2CR_Verifiziere die Gltigkiet des Aufrufs der Objektmethoden +**2Cs<n>_Setze die Prfgr”sse des Stacks auf <n> +**2Ct_Fhre Stackprfung durch (nur zum Testen, siehe Handbuch) **2Cx_Benutze Smartlinking **1d<x>_Definiere das Symbol <x> **1D_Erzeuge eine DEF-Datei **2Dd<x>_Setze Beschreibung zu <x> **2Dv<x>_Setze DLL Version zu <x> *O2Dw_Erzeuge PM-Anwendung -**1e<x>_Setze Pfad zur ausfhrbaren Datei +**1e<x>_Setze Pfad zur ausfhrbaren Datei **1E_Genau wie -Cn **1fPIC_Genau wie -Cg **1F<x>_Dateinamen und Pfade: @@ -3126,10 +3126,10 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **2Fc<x>_Setze die Eingabe-Codepage zu <x> **2Fd_Schalte den internen Verzeichnis-Cache des Compilers aus **2FC<x>_Setze den Namen des RC Compiler-Bin„rprograms auf <x> -**2FD<x>_Setze das Verzeichnis fr die Compiler-Hilfsprogramme +**2FD<x>_Setze das Verzeichnis fr die Compiler-Hilfsprogramme **2Fe<x>_Leite die Fehlerausgabe um nach <x> **2Ff<x>_Erg„nze <x> zum Framework-Pfad (nur Darwin) -**2FE<x>_Setze den Pfad fr Exe/Unit-Dateien auf <x> +**2FE<x>_Setze den Pfad fr Exe/Unit-Dateien auf <x> **2Fi<x>_Erg„nze <x> zum Include-Pfad **2Fl<x>_Erg„nze <x> zum Bibliotheks-Pfad **2FL<x>_Benutze <x> als dynamischen Linker @@ -3139,14 +3139,14 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **2FR<x>_Setze den Resource (.res) Linker auf <x> **2Fu<x>_Erg„nze <x> zum Unit-Pfad **2FU<x>_Units werden nach <x> ausgegeben, hat Vorrang vor -FE -**2FW<x>_Speichere das erzeugte Feedback fr die Gesamtprogramm-Optimierung in <x> -**2Fw<x>_Lade das bereits gespeicherte Feedback fr die Gesamtprogramm-Optimierung aus <x> +**2FW<x>_Speichere das erzeugte Feedback fr die Gesamtprogramm-Optimierung in <x> +**2Fw<x>_Lade das bereits gespeicherte Feedback fr die Gesamtprogramm-Optimierung aus <x> *g1g<x>_Erzeuge Informationen zur Fehlersuche: -*g2gc_Zeigerberprfung +*g2gc_Zeigerberprfung *g2gh_Heaptrace-Unit einbinden *g2gl_Line info Unit einbinden, um mehr backtrace Informationen anzuzeigen -*g2go<x>_Setze Optionen fr die Debug Informationen -*g3godwarfsets_Schalte DWARF Debug Informationen fr Mengen (sets) ein (verhindert debugging mit gdb < 6.5) +*g2go<x>_Setze Optionen fr die Debug Informationen +*g3godwarfsets_Schalte DWARF Debug Informationen fr Mengen (sets) ein (verhindert debugging mit gdb < 6.5) *g3gostabsabsincludes_ Absolute/volle Include-Datei-Pfade in Stabs speichern *g3godwarfmethodclassprefix_ Stelle Methodennamen in DWARF den Namen der Klasse voran *g2gp_Erhalte Gross/Kleinschreibung in Stabs-Symbolnamen @@ -3157,7 +3157,7 @@ S*2Aas_Assembliere mit Hilfe von GNU AS *g2gw2_Erzeuge DWARFv2-Debug-Informationen *g2gw3_Erzeuge DWARFv3-Debug-Informationen *g2gw4_Generate DWARFv4-Debug-Informationen (experimentell) -**1i_Zeige alle Informationen ber den Compiler +**1i_Zeige alle Informationen ber den Compiler **2iD_Zeige Compilerdatum **2iV_Zeige Compilerversion **2iW_Zeige vollst„ndige Compilerversion @@ -3177,7 +3177,7 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **1n_Standard-Konfigurationsdatei ignorieren **1N<x>_Node tree Optimierung **2Nu_Unroll loops -**1o<x>_Die erzeugte, ausfhrbare Datei bekommt den Namen <x> +**1o<x>_Die erzeugte, ausfhrbare Datei bekommt den Namen <x> **1O<x>_Optimierungen: **2O-_Optimierungen ausschalten **2O1_Level 1 Optimierung (schnell und Debugger freundlich) @@ -3185,11 +3185,11 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **2O3_Level 3 Optimierung (-O2 + langsame Optimierungen) **2Oa<x>=<y>_Ausrichtung (alignment) von Mengen **2Oo[NO]<x>_Optimierungen ein- oder ausschalten; fpc -i gibt die m”glichen Werte aus -**2Op<x>_Setze Zielprozessor fr die Optimierung; fpc -i gibt die m”glichen Werte aus -**2OW<x>_Erzeuge Feedback fr die Gesamtprogramm-Optimierung fr Optimierung <x>, siehe fpc -i fr m”gliche Werte -**2Ow<x>_Fhre die Gesamtprogramm-Optimierung durch <x>, siehe fpc -i fr m”gliche Werte -**2Os_Erzeuge krzeren Code -**1pg_Erzeuge Profiler-Code fr gprof +**2Op<x>_Setze Zielprozessor fr die Optimierung; fpc -i gibt die m”glichen Werte aus +**2OW<x>_Erzeuge Feedback fr die Gesamtprogramm-Optimierung fr Optimierung <x>, siehe fpc -i fr m”gliche Werte +**2Ow<x>_Fhre die Gesamtprogramm-Optimierung durch <x>, siehe fpc -i fr m”gliche Werte +**2Os_Erzeuge krzeren Code +**1pg_Erzeuge Profiler-Code fr gprof **1R<x>_Assembler Code Format: **2Rdefault_Benutze den default Assembler 3*2Ratt_Lese Assembler Code im AT&T Format @@ -3197,7 +3197,7 @@ S*2Aas_Assembliere mit Hilfe von GNU AS 6*2RMOT_Lese Assembler im Motorola Format **1S<x>_Syntax-Optionen: **2S2_Schalte einige der Delphi 2 Erweiterungen ein (wie -Mobjfpc) -**2Sc_Untersttze spezielle C Operatoren (*=,+=,/= and -=) +**2Sc_Untersttze spezielle C Operatoren (*=,+=,/= and -=) **2Sa_Erlaube assertion code. **2Sd_Sei Delphi-kompatibel (wie -Mdelphi) **2Se<x>_Fehler Optionen. <x> ist eine der folgenden Kombinationen: @@ -3212,10 +3212,10 @@ S*2Aas_Assembliere mit Hilfe von GNU AS **2SI<x>_Setze den Stil des Interface zu <x> **3SIcom_COM kompatibles Interface (Voreinstellung) **3SIcorba_CORBA kompatibles Interface -**2Sm_Untersttze Makros wie in C (global) +**2Sm_Untersttze Makros wie in C (global) **2So_Sei TP/BP 7.0 kompatibel (wie -Mtp) -**2Ss_Konstruktor- und Destruktorname mssen "Init" und "Done" sein -**2Sx_Exception Schlsselw”rter einschalten (Voreinstellung in Delphi/ObjFPC Moden) +**2Ss_Konstruktor- und Destruktorname mssen "Init" und "Done" sein +**2Sx_Exception Schlsselw”rter einschalten (Voreinstellung in Delphi/ObjFPC Moden) **1s_Rufe weder Assembler noch Linker auf (nur mit -a) **2sh_Erzeuge Script um auf dem Host zu linken **2st_Erzeuge Script um auf dem Zielsystem zu linken @@ -3255,9 +3255,9 @@ P*2Tmacos_Mac OS (classic) P*2Tmorphos_MorphOS S*2Tsolaris_Solaris S*2Tlinux_Linux -**1u<x>_Entferne die Definition fr das Symbol <x> +**1u<x>_Entferne die Definition fr das Symbol <x> **1U<x>_Unit-Optionen: -**2Un_Prfe den Unitnamen nicht +**2Un_Prfe den Unitnamen nicht **2Ur_Erzeuge "release unit"-Dateien **2Us_Erzeuge eine Systemunit **1v<x>_Meldungen, <x> ist eine Kombination der folgenden Zeichen: @@ -3299,8 +3299,8 @@ P*2WG_Spezifiziere "graphic type application" (Classic Mac OS) 3*2Wi_Benutze interne Resourcen (Darwin) P*2Wi_Benutze interne Resourcen (Darwin) p*2Wi_Benutze interne Resourcen (Darwin) -3*2WN_Erzeuge keinen "relocation code" (notwendig fr debugging) (Windows) -A*2WN_Erzeuge keinen "relocation code" (notwendig fr debugging) (Windows) +3*2WN_Erzeuge keinen "relocation code" (notwendig fr debugging) (Windows) +A*2WN_Erzeuge keinen "relocation code" (notwendig fr debugging) (Windows) 3*2WR_Erzeuge "relocation code" (Windows) A*2WR_Erzeuge "relocation code" (Windows) P*2WF_Spezifiziere "MPW tool type application" (Classic Mac OS) @@ -3310,19 +3310,19 @@ p*2WX_Erm”gliche den executable stack (Linux) P*2WX_Erm”gliche den executable stack (Linux) **1X_Programm-Optionen: **2Xc_šbergebe --shared an den Linker (nur Unix) -**2Xd_Den Standard Bibliotheks-Suchpfad NICHT nutzen (ben”tigt fr cross compile) +**2Xd_Den Standard Bibliotheks-Suchpfad NICHT nutzen (ben”tigt fr cross compile) **2Xe_Verwende den externen Linker -**2Xg_Erstelle die Debug-Informationen in einer separaten Datei und einen "Debug-Link"-Abschnitt im ausfhrbaren Programm +**2Xg_Erstelle die Debug-Informationen in einer separaten Datei und einen "Debug-Link"-Abschnitt im ausfhrbaren Programm **2XD_Versuche Units dynamisch zu linken (definiert FPC_LINK_DYNAMIC) **2Xi_Verwende den internen Linker **2Xm_Erzeuge die "link map" **2XM<x>_Setze den Namen der 'main' program Routine (default ist 'main') **2XP<x>_Stelle den Namen der Compiler-Hilfsprogrammen den Prefix <x> voran -**2Xr<x>_Setze den rlink-Pfad des Linker zu <x> (ben”tigt fr cross compile, siehe ld-Manual fr mehr Informationen) (BeOS, Linux) +**2Xr<x>_Setze den rlink-Pfad des Linker zu <x> (ben”tigt fr cross compile, siehe ld-Manual fr mehr Informationen) (BeOS, Linux) **2XR<x>_Stelle allen Linker-Suchpfaden den Namen <x> voran (BeOS, Darwin, FreeBSD, Linux, Mac OS, Solaris) -**2Xs_Entferne alle Symbole aus der ausfhrbaren Datei +**2Xs_Entferne alle Symbole aus der ausfhrbaren Datei **2XS_Versuche Units statisch zu linken (default) (definiert FPC_LINK_STATIC) -**2Xt_Linke mit statischen Bibliotheken (-static wird an den Linker bergeben) +**2Xt_Linke mit statischen Bibliotheken (-static wird an den Linker bergeben) **2XX_Versuche Units smart zu linken (definiert FPC_LINK_SMART) **1*_ **1?_Zeigt diese Hilfe an diff --git a/compiler/msg/errorda.msg b/compiler/msg/errorda.msg index eab24501f8..16f07e1ec2 100644 --- a/compiler/msg/errorda.msg +++ b/compiler/msg/errorda.msg @@ -2207,7 +2207,7 @@ option_config_is_dir=11040_F_Konfigurationsfilen $1 er et directory # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] til $FPCTARGET -Copyright (c) 1993-2010 Florian Klaempfl +Copyright (c) 1993-2011 Florian Klaempfl ] # diff --git a/compiler/msg/errordu.msg b/compiler/msg/errordu.msg index 41972aaf91..b8bc408100 100644 --- a/compiler/msg/errordu.msg +++ b/compiler/msg/errordu.msg @@ -2991,7 +2991,7 @@ wpo_cant_create_feedback_file=12019_E_Die angegebene Feedback-Eingabe-Datei "$1" # option_logo=11023_[ Free Pascal Compiler Version $FPCFULLVERSION [$FPCDATE] für $FPCTARGET -Copyright (c) 1993-2010 Florian Klämpfl +Copyright (c) 1993-2011 Florian Klämpfl und andere ] # diff --git a/compiler/msg/errore.msg b/compiler/msg/errore.msg index 1770c28836..6da608ee7a 100644 --- a/compiler/msg/errore.msg +++ b/compiler/msg/errore.msg @@ -1366,6 +1366,10 @@ parser_e_cant_use_type_parameters_here=03304_E_Type parameters may require initi % Type parameters may be specialized with types which (e.g. \var{ansistring}) need initialization/finalization % code which is implicitly generated by the compiler. % \end{description} +parser_e_externals_no_section=03305_E_Variables being declared as external cannot be in a custom section +% A section directive is not valid for variables being declared as external. +parser_e_section_no_locals=03306_E_Non-static and non-global variables cannot have a section directive +% A variable placed in a custom section is always statically allocated so it must be either a static or global variable. # Type Checking # # 04095 is the last used one @@ -2966,7 +2970,7 @@ wpo_cant_create_feedback_file=12019_E_Cannot create specified whole program opti # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl and others ] # diff --git a/compiler/msg/errores.msg b/compiler/msg/errores.msg index 6f54101b37..de54fd789d 100644 --- a/compiler/msg/errores.msg +++ b/compiler/msg/errores.msg @@ -2111,7 +2111,7 @@ option_code_page_not_available=11039_E_Código de página desconocido # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorf.msg b/compiler/msg/errorf.msg index 378427a54c..fe00908011 100644 --- a/compiler/msg/errorf.msg +++ b/compiler/msg/errorf.msg @@ -1712,7 +1712,7 @@ option_asm_forced=11022_W_"$1" assembler use forced # option_logo=11023_[ Compilateur Free Pascal version $FPCFULLVERSION [$FPCDATE] pour $FPCTARGET -Copyright (c) 1998-2009 by Florian Klaempfl +Copyright (c) 1998-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorfi.msg b/compiler/msg/errorfi.msg index 9e3689eae5..16d742c014 100644 --- a/compiler/msg/errorfi.msg +++ b/compiler/msg/errorfi.msg @@ -2258,7 +2258,7 @@ option_config_is_dir=11040_F_Le fichier de configuration $1 est un répertoire # Logo (option -l) # option_logo=11023_[ Compilateur Free Pascal version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010, Florian Klaempfl ] +Copyright (c) 1993-2011, Florian Klaempfl ] # # Info (option -i) # diff --git a/compiler/msg/errorhe.msg b/compiler/msg/errorhe.msg index a30190531f..e2fbbac9c3 100644 --- a/compiler/msg/errorhe.msg +++ b/compiler/msg/errorhe.msg @@ -2404,7 +2404,7 @@ option_confict_asm_debug=11041_W_ñåâ äôìè ùì äîàñó ùðáçø "$1" àéðå éëåì ìéöåø îé # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorheu.msg b/compiler/msg/errorheu.msg index 894f953047..16afb09bb0 100644 --- a/compiler/msg/errorheu.msg +++ b/compiler/msg/errorheu.msg @@ -2404,7 +2404,7 @@ option_confict_asm_debug=11041_W_סוג הפלט של המ×סף ×©× ×‘×—×¨ "$1" # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorid.msg b/compiler/msg/errorid.msg index d4a6ec791c..4c03e14317 100644 --- a/compiler/msg/errorid.msg +++ b/compiler/msg/errorid.msg @@ -2421,7 +2421,7 @@ option_confict_asm_debug=11041_W_Output assembler yang dipilih "$1" tidak bisa m # option_logo=11023_[ Free Pascal Compiler versi $FPCFULLVERSION [$FPCDATE] untuk $FPCCPU -Hak Cipta (c) 1993-2010 oleh Florian Klaempfl +Hak Cipta (c) 1993-2011 oleh Florian Klaempfl ] # diff --git a/compiler/msg/errorn.msg b/compiler/msg/errorn.msg index 3e1ee0ab2f..ac7bef7f8a 100644 --- a/compiler/msg/errorn.msg +++ b/compiler/msg/errorn.msg @@ -2183,7 +2183,7 @@ option_config_is_dir=11040_F_Config bestand $1 is een directorie %\end{description} option_logo=11023_[ Free Pascal Compiler versie $FPCFULLVERSION [$FPCDATE] voor $FPCTARGET -Copyright (c) 1998-2009 door Florian Klaempfl en anderen +Copyright (c) 1998-2011 door Florian Klaempfl en anderen ] # # Info (option -i) diff --git a/compiler/msg/errorpl.msg b/compiler/msg/errorpl.msg index 5f0d07ee59..0cec618f6a 100644 --- a/compiler/msg/errorpl.msg +++ b/compiler/msg/errorpl.msg @@ -2116,7 +2116,7 @@ option_code_page_not_available=11039_E_Nieznana strona kodowa # option_logo=11023_[ Free Pascal Compiler wersja $FPCFULLVERSION [$FPCDATE] dla $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorpli.msg b/compiler/msg/errorpli.msg index d975728009..2660eaf4b8 100644 --- a/compiler/msg/errorpli.msg +++ b/compiler/msg/errorpli.msg @@ -2116,7 +2116,7 @@ option_code_page_not_available=11039_E_Nieznana strona kodowa # option_logo=11023_[ Free Pascal Compiler wersja $FPCFULLVERSION [$FPCDATE] dla $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorpt.msg b/compiler/msg/errorpt.msg index fe55d6e393..8723597744 100644 --- a/compiler/msg/errorpt.msg +++ b/compiler/msg/errorpt.msg @@ -2905,7 +2905,7 @@ wpo_cant_create_feedback_file=12019_E_Imposs¡vel criar arquivo retorno otimiza‡ä # option_logo=11023_[ Compilador Free Pascal versÆo $FPCFULLVERSION [$FPCDATE] para $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorptu.msg b/compiler/msg/errorptu.msg index 15f05f0709..ae31c24135 100644 --- a/compiler/msg/errorptu.msg +++ b/compiler/msg/errorptu.msg @@ -2905,7 +2905,7 @@ wpo_cant_create_feedback_file=12019_E_ImpossÃvel criar arquivo retorno otimizaà # option_logo=11023_[ Compilador Free Pascal versão $FPCFULLVERSION [$FPCDATE] para $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorr.msg b/compiler/msg/errorr.msg index 297e5ca1ce..9982500555 100644 --- a/compiler/msg/errorr.msg +++ b/compiler/msg/errorr.msg @@ -2503,7 +2503,7 @@ wpo_cant_create_feedback_file=12019_E_¥¢®§¬®¦® á®§¤ âì ä ©« ®¡à ⮩ á¢ï§¨ "$1 # option_logo=11023_[ Š®¬¯¨«ïâ®à Free Pascal ¢¥àᨨ $FPCFULLVERSION [$FPCDATE] ¤«ï $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorru.msg b/compiler/msg/errorru.msg index c490dbe621..4efaf6146b 100644 --- a/compiler/msg/errorru.msg +++ b/compiler/msg/errorru.msg @@ -2503,7 +2503,7 @@ wpo_cant_create_feedback_file=12019_E_Ðевозможно Ñоздать фай # option_logo=11023_[ КомпилÑтор Free Pascal верÑии $FPCFULLVERSION [$FPCDATE] Ð´Ð»Ñ $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msg/errorues.msg b/compiler/msg/errorues.msg index 28d71d7bd3..64ebb12297 100644 --- a/compiler/msg/errorues.msg +++ b/compiler/msg/errorues.msg @@ -2105,7 +2105,7 @@ option_code_page_not_available=11039_E_Código de página desconocido # option_logo=11023_[ Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPCCPU -Copyright (c) 1993-2010 by Florian Klaempfl +Copyright (c) 1993-2011 by Florian Klaempfl ] # diff --git a/compiler/msgidx.inc b/compiler/msgidx.inc index 2f18b14738..88b106aa58 100644 --- a/compiler/msgidx.inc +++ b/compiler/msgidx.inc @@ -393,6 +393,8 @@ const parser_e_no_constructor_in_records=03302; parser_e_at_least_one_argument_must_be_of_type=03303; parser_e_cant_use_type_parameters_here=03304; + parser_e_externals_no_section=03305; + parser_e_section_no_locals=03306; type_e_mismatch=04000; type_e_incompatible_types=04001; type_e_not_equal_types=04002; @@ -882,9 +884,9 @@ const option_info=11024; option_help_pages=11025; - MsgTxtSize = 58686; + MsgTxtSize = 58848; MsgIdxMax : array[1..20] of longint=( - 24,88,305,99,84,54,111,22,202,63, + 24,88,307,99,84,54,111,22,202,63, 49,20,1,1,1,1,1,1,1,1 ); diff --git a/compiler/msgtxt.inc b/compiler/msgtxt.inc index 3ac774ff07..c2003c83bb 100644 --- a/compiler/msgtxt.inc +++ b/compiler/msgtxt.inc @@ -1,7 +1,7 @@ {$ifdef Delphi} -const msgtxt : array[0..000244] of string[240]=( +const msgtxt : array[0..000245] of string[240]=( {$else Delphi} -const msgtxt : array[0..000244,1..240] of char=( +const msgtxt : array[0..000245,1..240] of char=( {$endif Delphi} '01000_T_Compiler: $1'#000+ '01001_D_Compiler OS: $1'#000+ @@ -477,582 +477,587 @@ const msgtxt : array[0..000244,1..240] of char=( '1"'#000+ '03304_E_Type parameters may require initialization/finalization - can'#039+ 't be used in variant r','ecords'#000+ + '03305_E_Variables being declared as external cannot be in a custom sec'+ + 'tion'#000+ + '03306_E_Non-static and non-global variables cannot have a section dire'+ + 'ctive'#000+ '04000_E_Type mismatch'#000+ '04001_E_Incompatible types: got "$1" expected "$2"'#000+ - '04002_E_Type mismatch between "$1" and "$2"'#000+ + '04002_E_T','ype mismatch between "$1" and "$2"'#000+ '04003_E_Type identifier expected'#000+ '04004_E_Variable identifier expected'#000+ - '04005_E_Integer expression expected, but got "','$1"'#000+ + '04005_E_Integer expression expected, but got "$1"'#000+ '04006_E_Boolean expression expected, but got "$1"'#000+ - '04007_E_Ordinal expression expected'#000+ + '04007_E_Ordinal expression expected',#000+ '04008_E_pointer type expected, but got "$1"'#000+ '04009_E_class type expected, but got "$1"'#000+ '04011_E_Can'#039't evaluate constant expression'#000+ - '04012_E_Set elements ','are not compatible'#000+ + '04012_E_Set elements are not compatible'#000+ '04013_E_Operation not implemented for sets'#000+ - '04014_W_Automatic type conversion from floating type to COMP which is '+ - 'an integer type'#000+ + '04014_W_Automatic type conv','ersion from floating type to COMP which i'+ + 's an integer type'#000+ '04015_H_use DIV instead to get an integer result'#000+ - '04016_E_String types have to match exactly ','in $V+ mode'#000+ + '04016_E_String types have to match exactly in $V+ mode'#000+ '04017_E_succ or pred on enums with assignments not possible'#000+ - '04018_E_Can'#039't read or write variables of this type'#000+ + '04018_E_Can'#039't rea','d or write variables of this type'#000+ '04019_E_Can'#039't use readln or writeln on typed file'#000+ '04020_E_Can'#039't use read or write on untyped file.'#000+ - '04021_E_Type confl','ict between set elements'#000+ + '04021_E_Type conflict between set elements'#000+ '04022_W_lo/hi(dword/qword) returns the upper/lower word/dword'#000+ - '04023_E_Integer or real expression expected'#000+ + '04','023_E_Integer or real expression expected'#000+ '04024_E_Wrong type "$1" in array constructor'#000+ - '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3','"'#000+ + '04025_E_Incompatible type for arg no. $1: Got "$2", expected "$3"'#000+ '04026_E_Method (variable) and Procedure (variable) are not compatible'#000+ - '04027_E_Illegal constant passed to internal math function'#000+ + '04027_E_Illegal c','onstant passed to internal math function'#000+ '04028_E_Can'#039't take the address of constant expressions'#000+ '04029_E_Argument can'#039't be assigned to'#000+ - '04030_E_Can'#039't ass','ign local procedure/function to procedure varia'+ - 'ble'#000+ - '04031_E_Can'#039't assign values to an address'#000+ + '04030_E_Can'#039't assign local procedure/function to procedure variabl'+ + 'e'#000+ + '04031_E_Can'#039't assign values to an addr','ess'#000+ '04032_E_Can'#039't assign values to const variable'#000+ '04033_E_Array type required'#000+ '04034_E_interface type expected, but got "$1"'#000+ - '04035_H_Mixing signed expre','ssions and longwords gives a 64bit result'+ - #000+ - '04036_W_Mixing signed expressions and cardinals here may cause a range'+ - ' check error'#000+ + '04035_H_Mixing signed expressions and longwords gives a 64bit result'#000+ + '04036_W_Mixing signed expressions and cardinals',' here may cause a ran'+ + 'ge check error'#000+ '04037_E_Typecast has different size ($1 -> $2) in assignment'#000+ - '04038_E_enums with assignments can'#039't be used as array ','index'#000+ + '04038_E_enums with assignments can'#039't be used as array index'#000+ '04039_E_Class or Object types "$1" and "$2" are not related'#000+ - '04040_W_Class types "$1" and "$2" are not related'#000+ + '04040_W_Class types "$1','" and "$2" are not related'#000+ '04041_E_Class or interface type expected, but got "$1"'#000+ '04042_E_Type "$1" is not completely defined'#000+ - '04043_W_String literal ha','s more characters than short string length'#000+ - '04044_W_Comparison is always false due to range of values'#000+ + '04043_W_String literal has more characters than short string length'#000+ + '04044_W_Comparison is always false due to rang','e of values'#000+ '04045_W_Comparison is always true due to range of values'#000+ '04046_W_Constructing a class "$1" with abstract method "$2"'#000+ - '04047_H_The left opera','nd of the IN operator should be byte sized'#000+ - '04048_W_Type size mismatch, possible loss of data / range check error'#000+ + '04047_H_The left operand of the IN operator should be byte sized'#000+ + '04048_W_Type size mismatch, possible loss of d','ata / range check erro'+ + 'r'#000+ '04049_H_Type size mismatch, possible loss of data / range check error'#000+ - '04050_E_The address of an abstract method can'#039't be taken'#000, + '04050_E_The address of an abstract method can'#039't be taken'#000+ '04051_E_Assignments to formal parameters and open arrays are not possi'+ 'ble'#000+ - '04052_E_Constant Expression expected'#000+ + '04052_E_Constan','t Expression expected'#000+ '04053_E_Operation "$1" not supported for types "$2" and "$3"'#000+ '04054_E_Illegal type conversion: "$1" to "$2"'#000+ - '04055_H_Conversion bet','ween ordinals and pointers is not portable'#000+ - '04056_W_Conversion between ordinals and pointers is not portable'#000+ + '04055_H_Conversion between ordinals and pointers is not portable'#000+ + '04056_W_Conversion between ordinals and pointe','rs is not portable'#000+ '04057_E_Can'#039't determine which overloaded function to call'#000+ '04058_E_Illegal counter variable'#000+ - '04059_W_Converting constant real value to',' double for C variable argu'+ - 'ment, add explicit typecast to prevent this.'#000+ - '04060_E_Class or COM interface type expected, but got "$1"'#000+ + '04059_W_Converting constant real value to double for C variable argume'+ + 'nt, add explicit typecast to prevent this.'#000+ + '04060_E_Class or ','COM interface type expected, but got "$1"'#000+ '04061_E_Constant packed arrays are not yet supported'#000+ - '04062_E_Incompatible type for arg no. $1: Got "$2" expec','ted "(Bit)Pa'+ - 'cked Array"'#000+ - '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not pack'+ - 'ed) Array"'#000+ + '04062_E_Incompatible type for arg no. $1: Got "$2" expected "(Bit)Pack'+ + 'ed Array"'#000+ + '04063_E_Incompatible type for arg no. $1: Got "$2" expected "(not',' pa'+ + 'cked) Array"'#000+ '04064_E_Elements of packed arrays cannot be of a type which need to be'+ ' initialised'#000+ - '04065_E_Constant packed records and objects are not ','yet supported'#000+ + '04065_E_Constant packed records and objects are not yet supported'#000+ '04066_W_Arithmetic "$1" on untyped pointer is unportable to {$T+}, sug'+ - 'gest typecast'#000+ + 'gest ','typecast'#000+ '04076_E_Can'#039't take address of a subroutine marked as local'#000+ '04077_E_Can'#039't export subroutine marked as local from a unit'#000+ - '04078_E_Type is not aut','omatable: "$1"'#000+ + '04078_E_Type is not automatable: "$1"'#000+ '04079_H_Converting the operands to "$1" before doing the add could pre'+ - 'vent overflow errors.'#000+ + 'vent',' overflow errors.'#000+ '04080_H_Converting the operands to "$1" before doing the subtract coul'+ 'd prevent overflow errors.'#000+ - '04081_H_Converting the operands to "','$1" before doing the multiply co'+ - 'uld prevent overflow errors.'#000+ - '04082_W_Converting pointers to signed integers may result in wrong com'+ - 'parison results and range errors, use an unsigned type instead.'#000+ + '04081_H_Converting the operands to "$1" before doing the multiply coul'+ + 'd prevent overflow errors.'#000+ + '04082_W_Converting pointers ','to signed integers may result in wrong c'+ + 'omparison results and range errors, use an unsigned type instead.'#000+ '04083_E_Interface type $1 has no valid GUID'#000+ - '0','4084_E_Invalid selector name "$1"'#000+ + '04084_E_Invalid selector name "$1"'#000+ '04085_E_Expected Objective-C method, but got $1'#000+ - '04086_E_Expected Objective-C method or constant method name'#000+ + '04086_E','_Expected Objective-C method or constant method name'#000+ '04087_E_No type info available for this type'#000+ '04088_E_Ordinal or string expression expected'#000+ - '04089_E','_String expression expected'#000+ + '04089_E_String expression expected'#000+ '04090_W_Converting 0 to NIL'#000+ - '04091_E_Objective-C protocol type expected, but got "$1"'#000+ + '04091_E_Objective-C protocol type',' expected, but got "$1"'#000+ '04092_E_The type "$1" is not supported for interaction with the Object'+ 'ive-C runtime.'#000+ - '04093_E_Class or objcclass type expected, ','but got "$1"'#000+ + '04093_E_Class or objcclass type expected, but got "$1"'#000+ '04094_E_Objcclass type expected'#000+ - '04095_W_Coerced univ parameter type in procedural variable may cause c'+ - 'rash or memory corruption: $1 to $2'#000+ + '04095_W_Coerced univ parameter type in proce','dural variable may cause'+ + ' crash or memory corruption: $1 to $2'#000+ '04096_E_Type parameters of specializations of generics cannot referenc'+ - 'e the currently spe','cialized type'#000+ + 'e the currently specialized type'#000+ '04097_E_Type parameters are not allowed on non-generic class/record/ob'+ - 'ject procedure or function'#000+ + 'ject ','procedure or function'#000+ '04098_E_Generic declaration of "$1" differs from previous declaration'#000+ '05000_E_Identifier not found "$1"'#000+ - '05001_F_Internal Error in',' SymTableStack()'#000+ + '05001_F_Internal Error in SymTableStack()'#000+ '05002_E_Duplicate identifier "$1"'#000+ - '05003_H_Identifier already defined in $1 at line $2'#000+ + '05003_H_Identifier already defined in ','$1 at line $2'#000+ '05004_E_Unknown identifier "$1"'#000+ '05005_E_Forward declaration not solved "$1"'#000+ '05007_E_Error in type definition'#000+ - '05009_E_Forward type not res','olved "$1"'#000+ + '05009_E_Forward type not resolved "$1"'#000+ '05010_E_Only static variables can be used in static methods or outside'+ - ' methods'#000+ + ' methods',#000+ '05012_F_record or class type expected'#000+ '05013_E_Instances of classes or objects with an abstract method are no'+ 't allowed'#000+ '05014_W_Label not defined "$1"'#000+ - '0','5015_E_Label used but not defined "$1"'#000+ + '05015_E_Label used but not defined "$1"'#000+ '05016_E_Illegal label declaration'#000+ - '05017_E_GOTO and LABEL are not supported (use switch -Sg)'#000+ + '05017_E_GOTO and',' LABEL are not supported (use switch -Sg)'#000+ '05018_E_Label not found'#000+ '05019_E_identifier isn'#039't a label'#000+ '05020_E_label already defined'#000+ - '05021_E_illegal type d','eclaration of set elements'#000+ + '05021_E_illegal type declaration of set elements'#000+ '05022_E_Forward class definition not resolved "$1"'#000+ - '05023_H_Unit "$1" not used in $2'#000+ + '05023_H_Uni','t "$1" not used in $2'#000+ '05024_H_Parameter "$1" not used'#000+ '05025_N_Local variable "$1" not used'#000+ '05026_H_Value parameter "$1" is assigned but never used'#000+ - '0502','7_N_Local variable "$1" is assigned but never used'#000+ + '05027_N_Local variable "$1" is assigned but never used'#000+ '05028_H_Local $1 "$2" is not used'#000+ - '05029_N_Private field "$1.$2" is never used'#000+ + '0502','9_N_Private field "$1.$2" is never used'#000+ '05030_N_Private field "$1.$2" is assigned but never used'#000+ '05031_N_Private method "$1.$2" never used'#000+ - '05032_E_Set ','type expected'#000+ + '05032_E_Set type expected'#000+ '05033_W_Function result does not seem to be set'#000+ - '05034_W_Type "$1" is not aligned correctly in current record for C'#000+ + '05034_W_Type "$1" is not al','igned correctly in current record for C'#000+ '05035_E_Unknown record field identifier "$1"'#000+ '05036_W_Local variable "$1" does not seem to be initialized'#000+ - '05037_','W_Variable "$1" does not seem to be initialized'#000+ - '05038_E_identifier idents no member "$1"'#000+ + '05037_W_Variable "$1" does not seem to be initialized'#000+ + '05038_E_identifier idents no member "$1"'#000, '05039_H_Found declaration: $1'#000+ '05040_E_Data element too large'#000+ '05042_E_No matching implementation for interface method "$1" found'#000+ - '05043_W_Symbol "$1" is ','deprecated'#000+ + '05043_W_Symbol "$1" is deprecated'#000+ '05044_W_Symbol "$1" is not portable'#000+ '05055_W_Symbol "$1" is not implemented'#000+ - '05056_E_Can'#039't create unique type from this type'#000+ + '050','56_E_Can'#039't create unique type from this type'#000+ '05057_H_Local variable "$1" does not seem to be initialized'#000+ - '05058_H_Variable "$1" does not seem to be init','ialized'#000+ + '05058_H_Variable "$1" does not seem to be initialized'#000+ '05059_W_Function result variable does not seem to initialized'#000+ - '05060_H_Function result variable does not seem to be initialized'#000+ + '05060_H_Function re','sult variable does not seem to be initialized'#000+ '05061_W_Variable "$1" read but nowhere assigned'#000+ '05062_H_Found abstract method: $1'#000+ - '05063_W_Symbol "$1" is ','experimental'#000+ + '05063_W_Symbol "$1" is experimental'#000+ '05064_W_Forward declaration "$1" not resolved, assumed external'#000+ - '05065_W_Symbol "$1" is belongs to a library'#000+ + '05065_W_Symb','ol "$1" is belongs to a library'#000+ '05066_W_Symbol "$1" is deprecated: "$2"'#000+ '05067_E_Cannot find an enumerator for the type "$1"'#000+ - '05068_E_Cannot find a "Move','Next" method in enumerator "$1"'#000+ - '05069_E_Cannot find a "Current" property in enumerator "$1"'#000+ + '05068_E_Cannot find a "MoveNext" method in enumerator "$1"'#000+ + '05069_E_Cannot find a "Current" property in enumerator "$','1"'#000+ '05070_E_Mismatch between number of declared parameters and number of c'+ 'olons in message string.'#000+ '05071_N_Private type "$1.$2" never used'#000+ - '05072_N_Priva','te const "$1.$2" never used'#000+ + '05072_N_Private const "$1.$2" never used'#000+ '05073_N_Private property "$1.$2" never used'#000+ - '05074_W_Unit "$1" is deprecated'#000+ + '05074_W_Unit "$1"',' is deprecated'#000+ '05075_W_Unit "$1" is deprecated: "$2"'#000+ '05076_W_Unit "$1" is not portable'#000+ '05077_W_Unit "$1" is belongs to a library'#000+ - '05078_W_Unit "$1" is n','ot implemented'#000+ + '05078_W_Unit "$1" is not implemented'#000+ '05079_W_Unit "$1" is experimental'#000+ - '05080_E_No complete definition of the formally declared objcclass "$1"'+ - ' is in scope'#000+ + '05080_E_No complete definition of the fo','rmally declared objcclass "$'+ + '1" is in scope'#000+ '05081_E_Gotos into initialization or finalization blocks of units are '+ 'not allowed'#000+ - '05082=E_Invalid external n','ame "$1" for formal class "$2"'#000+ - '05083=E_Complete class definition with external name "$1" here'#000+ + '05082=E_Invalid external name "$1" for formal class "$2"'#000+ + '05083=E_Complete class definition with external name "$1" ','here'#000+ '06009_E_Parameter list size exceeds 65535 bytes'#000+ '06012_E_File types must be var parameters'#000+ '06013_E_The use of a far pointer isn'#039't allowed there'#000+ - '060','15_E_EXPORT declared functions can'#039't be called'#000+ - '06016_W_Possible illegal call of constructor or destructor'#000+ + '06015_E_EXPORT declared functions can'#039't be called'#000+ + '06016_W_Possible illegal call of construct','or or destructor'#000+ '06017_N_Inefficient code'#000+ '06018_W_unreachable code'#000+ '06020_E_Abstract methods can'#039't be called directly'#000+ - '06027_DL_Register $1 weight $2 $3'#000, + '06027_DL_Register $1 weight $2 $3'#000+ '06029_DL_Stack frame is omitted'#000+ '06031_E_Object or class methods can'#039't be inline.'#000+ - '06032_E_Procvar calls cannot be inline.'#000+ + '06032_E_','Procvar calls cannot be inline.'#000+ '06033_E_No code for inline procedure stored'#000+ '06035_E_Element zero of an ansi/wide- or longstring can'#039't be acces'+ - 'sed, use ','(set)length instead'#000+ + 'sed, use (set)length instead'#000+ '06037_E_Constructors or destructors cannot be called inside a '#039'wit'+ - 'h'#039' clause'#000+ + 'h'#039' ','clause'#000+ '06038_E_Cannot call message handler methods directly'#000+ '06039_E_Jump in or outside of an exception block'#000+ - '06040_E_Control flow statements aren'#039't all','owed in a finally bloc'+ - 'k'#000+ + '06040_E_Control flow statements aren'#039't allowed in a finally block'#000+ '06041_W_Parameters size exceeds limit for certain cpu'#039's'#000+ - '06042_W_Local variable size exceed limit for certain cpu'#039's'#000+ + '06042_W_L','ocal variable size exceed limit for certain cpu'#039's'#000+ '06043_E_Local variables size exceeds supported limit'#000+ '06044_E_BREAK not allowed'#000+ - '06045_E_CONTINUE not a','llowed'#000+ + '06045_E_CONTINUE not allowed'#000+ '06046_F_Unknown compilerproc "$1". Check if you use the correct run ti'+ - 'me library.'#000+ + 'me library.'#000, '06047_F_Cannot find system type "$1". Check if you use the correct run'+ ' time library.'#000+ '06048_H_Inherited call to abstract method ignored'#000+ - '06049_E_Goto lab','el "$1" not defined or optimized away'#000+ - '06050_F_Cannot find type "$1" in unit "$2". Check if you use the corre'+ - 'ct run time library.'#000+ + '06049_E_Goto label "$1" not defined or optimized away'#000+ + '06050_F_Cannot find type "$1" in unit "$2". Check i','f you use the cor'+ + 'rect run time library.'#000+ '06051_E_Interprocedural gotos are allowed only to outer subroutines'#000+ - '06052_E_Label must be defined in the same s','cope as it is declared'#000+ - '06053_E_Leaving procedures containing explicit or implicit exceptions '+ - 'frames using goto is not allowed'#000+ + '06052_E_Label must be defined in the same scope as it is declared'#000+ + '06053_E_Leaving procedures containing explicit or implicit excepti','on'+ + 's frames using goto is not allowed'#000+ '07000_DL_Starting $1 styled assembler parsing'#000+ '07001_DL_Finished $1 styled assembler parsing'#000+ - '07002_E_Non-label patt','ern contains @'#000+ + '07002_E_Non-label pattern contains @'#000+ '07004_E_Error building record offset'#000+ - '07005_E_OFFSET used without identifier'#000+ + '07005_E_OFFSET used without identifie','r'#000+ '07006_E_TYPE used without identifier'#000+ '07007_E_Cannot use local variable or parameters here'#000+ '07008_E_need to use OFFSET here'#000+ - '07009_E_need to use $ here'#000, + '07009_E_need to use $ here'#000+ '07010_E_Cannot use multiple relocatable symbols'#000+ - '07011_E_Relocatable symbol can only be added'#000+ + '07011_E_Relocatable symbol can only be ad','ded'#000+ '07012_E_Invalid constant expression'#000+ '07013_E_Relocatable symbol is not allowed'#000+ '07014_E_Invalid reference syntax'#000+ - '07015_E_You cannot reach $1 from tha','t code'#000+ + '07015_E_You cannot reach $1 from that code'#000+ '07016_E_Local symbols/labels aren'#039't allowed as references'#000+ - '07017_E_Invalid base and index register usage'#000+ + '07017_E_Invalid base and',' index register usage'#000+ '07018_W_Possible error in object field handling'#000+ '07019_E_Wrong scale factor specified'#000+ '07020_E_Multiple index register usage'#000+ - '07021_','E_Invalid operand type'#000+ + '07021_E_Invalid operand type'#000+ '07022_E_Invalid string as opcode operand: $1'#000+ - '07023_W_@CODE and @DATA not supported'#000+ + '07023_W_@CODE and @DA','TA not supported'#000+ '07024_E_Null label references are not allowed'#000+ '07025_E_Divide by zero in asm evaluator'#000+ '07026_E_Illegal expression'#000+ - '07027_E_escape sequen','ce ignored: $1'#000+ + '07027_E_escape sequence ignored: $1'#000+ '07028_E_Invalid symbol reference'#000+ - '07029_W_Fwait can cause emulation problems with emu387'#000+ + '07029_W_Fwait can cause emulation problem','s with emu387'#000+ '07030_W_$1 without operand translated into $1P'#000+ '07031_W_ENTER instruction is not supported by Linux kernel'#000+ - '07032_W_Calling an overload fun','ction in assembler'#000+ + '07032_W_Calling an overload function in assembler'#000+ '07033_E_Unsupported symbol type for operand'#000+ - '07034_E_Constant value out of bounds'#000+ + '07034_E_Constant value out',' of bounds'#000+ '07035_E_Error converting decimal $1'#000+ '07036_E_Error converting octal $1'#000+ '07037_E_Error converting binary $1'#000+ - '07038_E_Error converting hexadecima','l $1'#000+ + '07038_E_Error converting hexadecimal $1'#000+ '07039_H_$1 translated to $2'#000+ '07040_W_$1 is associated to an overloaded function'#000+ - '07041_E_Cannot use SELF outside a method'#000+ + '07041','_E_Cannot use SELF outside a method'#000+ '07042_E_Cannot use OLDEBP outside a nested procedure'#000+ '07043_W_Procedures can'#039't return any value in asm code'#000+ - '07044_E_','SEG not supported'#000+ + '07044_E_SEG not supported'#000+ '07045_E_Size suffix and destination or source size do not match'#000+ - '07046_W_Size suffix and destination or source size do not match'#000+ + '07046_W','_Size suffix and destination or source size do not match'#000+ '07047_E_Assembler syntax error'#000+ '07048_E_Invalid combination of opcode and operands'#000+ - '07049_E_Asse','mbler syntax error in operand'#000+ + '07049_E_Assembler syntax error in operand'#000+ '07050_E_Assembler syntax error in constant'#000+ - '07051_E_Invalid String expression'#000+ + '07051_E_Invalid ','String expression'#000+ '07052_W_constant with symbol $1 for address which is not on a pointer'#000+ '07053_E_Unrecognized opcode $1'#000+ - '07054_E_Invalid or missing opcod','e'#000+ + '07054_E_Invalid or missing opcode'#000+ '07055_E_Invalid combination of prefix and opcode: $1'#000+ - '07056_E_Invalid combination of override and opcode: $1'#000+ + '07056_E_Invalid combination of ove','rride and opcode: $1'#000+ '07057_E_Too many operands on line'#000+ '07058_W_NEAR ignored'#000+ '07059_W_FAR ignored'#000+ '07060_E_Duplicate local symbol $1'#000+ - '07061_E_Undefined loc','al symbol $1'#000+ + '07061_E_Undefined local symbol $1'#000+ '07062_E_Unknown label identifier $1'#000+ '07063_E_Invalid register name'#000+ - '07064_E_Invalid floating point register name'#000+ + '07064_E_In','valid floating point register name'#000+ '07066_W_Modulo not supported'#000+ '07067_E_Invalid floating point constant $1'#000+ '07068_E_Invalid floating point expression'#000+ - '07','069_E_Wrong symbol type'#000+ + '07069_E_Wrong symbol type'#000+ '07070_E_Cannot index a local var or parameter with a register'#000+ - '07071_E_Invalid segment override expression'#000+ + '070','71_E_Invalid segment override expression'#000+ '07072_W_Identifier $1 supposed external'#000+ '07073_E_Strings not allowed as constants'#000+ - '07074_No type of variable spe','cified'#000+ + '07074_No type of variable specified'#000+ '07075_E_assembler code not returned to text section'#000+ - '07076_E_Not a directive or local symbol $1'#000+ + '07076_E_Not a directive or loc','al symbol $1'#000+ '07077_E_Using a defined name as a local label'#000+ '07078_E_Dollar token is used without an identifier'#000+ - '07079_W_32bit constant created for addres','s'#000+ + '07079_W_32bit constant created for address'#000+ '07080_N_.align is target specific, use .balign or .p2align'#000+ - '07081_E_Can'#039't access fields directly for parameters'#000+ + '07081_E_Can'#039't access fields ','directly for parameters'#000+ '07082_E_Can'#039't access fields of objects/classes directly'#000+ '07083_E_No size specified and unable to determine the size of the oper'+ - 'a','nds'#000+ + 'ands'#000+ '07084_E_Cannot use RESULT in this function'#000+ - '07086_W_"$1" without operand translated into "$1 %st,%st(1)"'#000+ + '07086_W_"$1" without operand translated in','to "$1 %st,%st(1)"'#000+ '07087_W_"$1 %st(n)" translated into "$1 %st,%st(n)"'#000+ '07088_W_"$1 %st(n)" translated into "$1 %st(n),%st"'#000+ - '07089_E_Char < not allowed h','ere'#000+ + '07089_E_Char < not allowed here'#000+ '07090_E_Char > not allowed here'#000+ '07093_W_ALIGN not supported'#000+ - '07094_E_Inc and Dec cannot be together'#000+ + '07094_E_Inc and Dec canno','t be together'#000+ '07095_E_Invalid reglist for movem'#000+ '07096_E_Reglist invalid for opcode'#000+ '07097_E_Higher cpu mode required ($1)'#000+ - '07098_W_No size specified and ','unable to determine the size of the op'+ - 'erands, using DWORD as default'#000+ - '07099_E_Syntax error while trying to parse a shifter operand'#000+ + '07098_W_No size specified and unable to determine the size of the oper'+ + 'ands, using DWORD as default'#000+ + '07099_E_Syntax error',' while trying to parse a shifter operand'#000+ '07100_E_Address of packed component is not at a byte boundary'#000+ - '07101_W_No size specified and unable to determin','e the size of the op'+ - 'erands, using BYTE as default'#000+ - '07102_W_Use of +offset(%ebp) for parameters invalid here'#000+ + '07101_W_No size specified and unable to determine the size of the oper'+ + 'ands, using BYTE as default'#000+ + '07102_W_Use of +offset(%ebp) for parame','ters invalid here'#000+ '07103_W_Use of +offset(%ebp) is not compatible with regcall convention'+ #000+ - '07104_W_Use of -offset(%ebp) is not recommended for local vari','able a'+ - 'ccess'#000+ + '07104_W_Use of -offset(%ebp) is not recommended for local variable acc'+ + 'ess'#000+ '07105_W_Use of -offset(%esp), access may cause a crash or value may be'+ ' lost'#000+ - '07106_E_VMTOffset must be used in combination with a virtual method, a'+ - 'nd "$1" is not virtual'#000+ + '0','7106_E_VMTOffset must be used in combination with a virtual method,'+ + ' and "$1" is not virtual'#000+ '07107_E_Generating PIC, but reference is not PIC-safe'#000+ - '07108','_E_All registers in a register set must be of the same kind and'+ - ' width'#000+ - '07109_E_A register set cannot be empty'#000+ + '07108_E_All registers in a register set must be of the same kind and w'+ + 'idth'#000+ + '07109_E_A register ','set cannot be empty'#000+ '07110_W_@GOTPCREL is useless and potentially dangereous for local symb'+ 'ols'#000+ '08000_F_Too many assembler files'#000+ - '08001_F_Selected assembl','er output not supported'#000+ + '08001_F_Selected assembler output not supported'#000+ '08002_F_Comp not supported'#000+ - '08003_F_Direct not support for binary writers'#000+ + '08003_F_Direct not support for binary ','writers'#000+ '08004_E_Allocating of data is only allowed in bss section'#000+ '08005_F_No binary writer selected'#000+ '08006_E_Asm: Opcode $1 not in table'#000+ - '08007_E_Asm: $1',' invalid combination of opcode and operands'#000+ - '08008_E_Asm: 16 Bit references not supported'#000+ + '08007_E_Asm: $1 invalid combination of opcode and operands'#000+ + '08008_E_Asm: 16 Bit references not supported'#000, '08009_E_Asm: Invalid effective address'#000+ '08010_E_Asm: Immediate or reference expected'#000+ '08011_E_Asm: $1 value exceeds bounds $2'#000+ - '08012_E_Asm: Short jump is ','out of range $1'#000+ + '08012_E_Asm: Short jump is out of range $1'#000+ '08013_E_Asm: Undefined label $1'#000+ - '08014_E_Asm: Comp type not supported for this target'#000+ + '08014_E_Asm: Comp type not supported for ','this target'#000+ '08015_E_Asm: Extended type not supported for this target'#000+ '08016_E_Asm: Duplicate label $1'#000+ '08017_E_Asm: Redefined label $1'#000+ - '08018_E_Asm: First',' defined here'#000+ + '08018_E_Asm: First defined here'#000+ '08019_E_Asm: Invalid register $1'#000+ - '08020_E_Asm: 16 or 32 Bit references not supported'#000+ + '08020_E_Asm: 16 or 32 Bit references not s','upported'#000+ '08021_E_Asm: 64 Bit operands not supported'#000+ '09000_W_Source operating system redefined'#000+ '09001_I_Assembling (pipe) $1'#000+ - '09002_E_Can'#039't create assembl','er file: $1'#000+ + '09002_E_Can'#039't create assembler file: $1'#000+ '09003_E_Can'#039't create object file: $1'#000+ '09004_E_Can'#039't create archive file: $1'#000+ - '09005_E_Assembler $1 not found, switching to external assembling'#000+ + '09','005_E_Assembler $1 not found, switching to external assembling'#000+ '09006_T_Using assembler: $1'#000+ '09007_E_Error while assembling exitcode $1'#000+ - '09008_E_Can'#039't cal','l the assembler, error $1 switching to external'+ - ' assembling'#000+ + '09008_E_Can'#039't call the assembler, error $1 switching to external a'+ + 'ssembling'#000+ '09009_I_Assembling $1'#000+ - '09010_I_Assembling with smartlinking $1'#000+ + '09010_I_','Assembling with smartlinking $1'#000+ '09011_W_Object $1 not found, Linking may fail !'#000+ '09012_W_Library $1 not found, Linking may fail !'#000+ - '09013_E_Error while li','nking'#000+ + '09013_E_Error while linking'#000+ '09014_E_Can'#039't call the linker, switching to external linking'#000+ '09015_I_Linking $1'#000+ - '09016_E_Util $1 not found, switching to external linking'#000+ + '090','16_E_Util $1 not found, switching to external linking'#000+ '09017_T_Using util $1'#000+ '09018_E_Creation of Executables not supported'#000+ - '09019_E_Creation of Dynamic/S','hared Libraries not supported'#000+ + '09019_E_Creation of Dynamic/Shared Libraries not supported'#000+ '09020_I_Closing script $1'#000+ - '09021_E_resource compiler "$1" not found, switching to external mode'#000+ + '09021_E_resource compiler "$1" no','t found, switching to external mode'+ + #000+ '09022_I_Compiling resource $1'#000+ '09023_T_unit $1 can'#039't be statically linked, switching to smart lin'+ 'king'#000+ - '09024_T_unit $','1 can'#039't be smart linked, switching to static linki'+ - 'ng'#000+ - '09025_T_unit $1 can'#039't be shared linked, switching to static linkin'+ - 'g'#000+ + '09024_T_unit $1 can'#039't be smart linked, switching to static linking'+ + #000+ + '09025_T_unit $1 can'#039't be shared link','ed, switching to static link'+ + 'ing'#000+ '09026_E_unit $1 can'#039't be smart or static linked'#000+ '09027_E_unit $1 can'#039't be shared or static linked'#000+ - '09028_D_Calling resour','ce compiler "$1" with "$2" as command line'#000+ + '09028_D_Calling resource compiler "$1" with "$2" as command line'#000+ '09029_E_Error while compiling resources'#000+ - '09030_E_Can'#039't call the resource compiler "$1", switching to extern'+ - 'al mode'#000+ + '09030_','E_Can'#039't call the resource compiler "$1", switching to exte'+ + 'rnal mode'#000+ '09031_E_Can'#039't open resource file "$1"'#000+ '09032_E_Can'#039't write resource file "$1"'#000+ - '09128_','F_Can'#039't post process executable $1'#000+ + '09128_F_Can'#039't post process executable $1'#000+ '09129_F_Can'#039't open executable $1'#000+ - '09130_X_Size of Code: $1 bytes'#000+ + '09130_X_Size of Code:',' $1 bytes'#000+ '09131_X_Size of initialized data: $1 bytes'#000+ '09132_X_Size of uninitialized data: $1 bytes'#000+ '09133_X_Stack space reserved: $1 bytes'#000+ - '09134_X_Stack ','space committed: $1 bytes'#000+ + '09134_X_Stack space committed: $1 bytes'#000+ '09200_F_Executable image size is too big for $1 target.'#000+ - '09201_W_Object file "$1" contains 32-bit absolute relocation to symbol'+ - ' "$2".'#000+ + '09201_W','_Object file "$1" contains 32-bit absolute relocation to symb'+ + 'ol "$2".'#000+ '10000_T_Unitsearch: $1'#000+ '10001_T_PPU Loading $1'#000+ '10002_U_PPU Name: $1'#000+ - '10003_U_PPU Fl','ags: $1'#000+ + '10003_U_PPU Flags: $1'#000+ '10004_U_PPU Crc: $1'#000+ '10005_U_PPU Time: $1'#000+ '10006_U_PPU File too short'#000+ - '10007_U_PPU Invalid Header (no PPU at the begin)'#000+ + '10007_U_PPU I','nvalid Header (no PPU at the begin)'#000+ '10008_U_PPU Invalid Version $1'#000+ '10009_U_PPU is compiled for another processor'#000+ - '10010_U_PPU is compiled for another ta','rget'#000+ + '10010_U_PPU is compiled for another target'#000+ '10011_U_PPU Source: $1'#000+ '10012_U_Writing $1'#000+ '10013_F_Can'#039't Write PPU-File'#000+ - '10014_F_Error reading PPU-File'#000+ + '10014_F_Error',' reading PPU-File'#000+ '10015_F_unexpected end of PPU-File'#000+ '10016_F_Invalid PPU-File entry: $1'#000+ '10017_F_PPU Dbx count problem'#000+ '10018_E_Illegal unit name: $1'#000+ - '100','19_F_Too much units'#000+ + '10019_F_Too much units'#000+ '10020_F_Circular unit reference between $1 and $2'#000+ - '10021_F_Can'#039't compile unit $1, no sources available'#000+ + '10021_F_Can'#039't compi','le unit $1, no sources available'#000+ '10022_F_Can'#039't find unit $1 used by $2'#000+ '10023_W_Unit $1 was not found but $2 exists'#000+ - '10024_F_Unit $1 searched but $2 foun','d'#000+ + '10024_F_Unit $1 searched but $2 found'#000+ '10025_W_Compiling the system unit requires the -Us switch'#000+ - '10026_F_There were $1 errors compiling module, stopping'#000+ + '10026_F_There were $1 errors ','compiling module, stopping'#000+ '10027_U_Load from $1 ($2) unit $3'#000+ '10028_U_Recompiling $1, checksum changed for $2'#000+ - '10029_U_Recompiling $1, source found only'#000, + '10029_U_Recompiling $1, source found only'#000+ '10030_U_Recompiling unit, static lib is older than ppufile'#000+ - '10031_U_Recompiling unit, shared lib is older than ppufile'#000+ + '10031_U_Recompiling unit, shar','ed lib is older than ppufile'#000+ '10032_U_Recompiling unit, obj and asm are older than ppufile'#000+ '10033_U_Recompiling unit, obj is older than asm'#000+ - '10034_U_Parsi','ng interface of $1'#000+ + '10034_U_Parsing interface of $1'#000+ '10035_U_Parsing implementation of $1'#000+ '10036_U_Second load for unit $1'#000+ - '10037_U_PPU Check file $1 time $2'#000+ + '1','0037_U_PPU Check file $1 time $2'#000+ '10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+ - '10041_U_File $1 is newer than the one used for creati','ng PPU file $2'#000+ + '10041_U_File $1 is newer than the one used for creating PPU file $2'#000+ '10042_U_Trying to use a unit which was compiled with a different FPU m'+ - 'ode'#000+ + 'ode'#000, '10043_U_Loading interface units from $1'#000+ '10044_U_Loading implementation units from $1'#000+ '10045_U_Interface CRC changed for unit $1'#000+ - '10046_U_Implementation C','RC changed for unit $1'#000+ + '10046_U_Implementation CRC changed for unit $1'#000+ '10047_U_Finished compiling unit $1'#000+ - '10048_U_Adding dependency: $1 depends on $2'#000+ + '10048_U_Adding dependency: $1 d','epends on $2'#000+ '10049_U_No reload, is caller: $1'#000+ '10050_U_No reload, already in second compile: $1'#000+ '10051_U_Flag for reload: $1'#000+ '10052_U_Forced reloading'#000+ - '100','53_U_Previous state of $1: $2'#000+ + '10053_U_Previous state of $1: $2'#000+ '10054_U_Already compiling $1, setting second compile'#000+ - '10055_U_Loading unit $1'#000+ + '10055_','U_Loading unit $1'#000+ '10056_U_Finished loading unit $1'#000+ '10057_U_Registering new unit $1'#000+ '10058_U_Re-resolving unit $1'#000+ - '10059_U_Skipping re-resolving unit $1, ','still loading used units'#000+ + '10059_U_Skipping re-resolving unit $1, still loading used units'#000+ '10060_U_Unloading resource unit $1 (not needed)'#000+ - '10061_E_Unit $1 was compiled using a different whole program optimizat'+ - 'ion feedback input ($2, $3); recompile it without wpo or use the same '+ - 'wpo feedback input file for',' this compilation invocation'#000+ - '10062_U_Indirect interface (objects/classes) CRC changed for unit $1'#000+ + '10061_E_Unit $1 ','was compiled using a different whole program optimiz'+ + 'ation feedback input ($2, $3); recompile it without wpo or use the sam'+ + 'e wpo feedback input file for this compilation invocation'#000+ + '10062_U_Indirect interface (objects/classes) CRC changed for',' unit $1'+ + #000+ '11000_O_$1 [options] <inputfile> [options]'#000+ '11001_W_Only one source file supported, changing source file to compil'+ 'e from "$1" into "$2"'#000+ - '11002_W','_DEF file can be created only for OS/2'#000+ + '11002_W_DEF file can be created only for OS/2'#000+ '11003_E_nested response files are not supported'#000+ - '11004_F_No source file name in command line'#000+ + '11','004_F_No source file name in command line'#000+ '11005_N_No option inside $1 config file'#000+ '11006_E_Illegal parameter: $1'#000+ '11007_H_-? writes help pages'#000+ - '11008_F_To','o many config files nested'#000+ + '11008_F_Too many config files nested'#000+ '11009_F_Unable to open file $1'#000+ - '11010_D_Reading further options from $1'#000+ + '11010_D_Reading further options',' from $1'#000+ '11011_W_Target is already set to: $1'#000+ '11012_W_Shared libs not supported on DOS platform, reverting to static'+ #000+ - '11013_F_In options file $1 at line',' $2 too many \var{\#IF(N)DEFs} enc'+ - 'ountered'#000+ - '11014_F_In options file $1 at line $2 unexpected \var{\#ENDIFs} encoun'+ - 'tered'#000+ + '11013_F_In options file $1 at line $2 too many \var{\#IF(N)DEFs} encou'+ + 'ntered'#000+ + '11014_F_In options file $1 at line $2 unexpect','ed \var{\#ENDIFs} enco'+ + 'untered'#000+ '11015_F_Open conditional at the end of the options file'#000+ - '11016_W_Debug information generation is not supported by this exe','cut'+ - 'able'#000+ + '11016_W_Debug information generation is not supported by this executab'+ + 'le'#000+ '11017_H_Try recompiling with -dGDB'#000+ '11018_W_You are using the obsolete switch $1'#000+ - '11019_W_You are using the obsolete switch $1, please use $2'#000+ + '1','1019_W_You are using the obsolete switch $1, please use $2'#000+ '11020_N_Switching assembler to default source writing assembler'#000+ - '11021_W_Assembler output sel','ected "$1" is not compatible with "$2"'#000+ + '11021_W_Assembler output selected "$1" is not compatible with "$2"'#000+ '11022_W_"$1" assembler use forced'#000+ - '11026_T_Reading options from file $1'#000+ + '11026_T_Reading ','options from file $1'#000+ '11027_T_Reading options from environment $1'#000+ '11028_D_Handling option "$1"'#000+ '11029_O_*** press enter ***'#000+ - '11030_H_Start of reading conf','ig file $1'#000+ + '11030_H_Start of reading config file $1'#000+ '11031_H_End of reading config file $1'#000+ '11032_D_interpreting option "$1"'#000+ - '11036_D_interpreting firstpass option "$1"'#000+ + '11036_D','_interpreting firstpass option "$1"'#000+ '11033_D_interpreting file option "$1"'#000+ '11034_D_Reading config file "$1"'#000+ '11035_D_found source file name "$1"'#000+ - '11039_E_','Unknown code page'#000+ + '11039_E_Unknown code page'#000+ '11040_F_Config file $1 is a directory'#000+ - '11041_W_Assembler output selected "$1" cannot generate debug info, deb'+ - 'ugging disabled'#000+ + '11041_W_Assembler output selected',' "$1" cannot generate debug info, d'+ + 'ebugging disabled'#000+ '11042_W_Use of ppc386.cfg is deprecated, please use fpc.cfg instead'#000+ - '11043_F_In options file $1 at ','line $2 \var{\#ELSE} directive without'+ - ' \var{\#IF(N)DEF} found'#000+ - '11044_F_Option "$1" is not, or not yet, supported on the current targe'+ - 't platform'#000+ + '11043_F_In options file $1 at line $2 \var{\#ELSE} directive without \'+ + 'var{\#IF(N)DEF} found'#000+ + '11044_F_Option "$1" is not,',' or not yet, supported on the current tar'+ + 'get platform'#000+ '11045_F_The feature "$1" is not, or not yet, supported on the selected'+ ' target platform'#000+ - '11046_N_DW','ARF debug information cannot be used with smart linking on'+ - ' this target, switching to static linking'#000+ + '11046_N_DWARF debug information cannot be used with smart linking on t'+ + 'his target, switching to stat','ic linking'#000+ '11047_W_Option "$1" is ignored for the current target platform.'#000+ '11048_W_Disabling external debug information because it is unsupported'+ - ' for t','he selected target/debug format combination.'#000+ - '12000_F_Cannot open whole program optimization feedback file "$1"'#000+ + ' for the selected target/debug format combination.'#000+ + '12000_F_Cannot open whole program optimizati','on feedback file "$1"'#000+ '12001_D_Processing whole program optimization information in wpo feedb'+ 'ack file "$1"'#000+ - '12002_D_Finished processing the whole program',' optimization informati'+ - 'on in wpo feedback file "$1"'#000+ - '12003_E_Expected section header, but got "$2" at line $1 of wpo feedba'+ - 'ck file'#000+ + '12002_D_Finished processing the whole program optimization information'+ + ' in wpo feedback file "$1"'#000+ + '12003_E_Expected section header, but ','got "$2" at line $1 of wpo feed'+ + 'back file'#000+ '12004_W_No handler registered for whole program optimization section "'+ - '$2" at line $1 of wpo feedback file, ign','oring'#000+ + '$2" at line $1 of wpo feedback file, ignoring'#000+ '12005_D_Found whole program optimization section "$1" with information'+ ' about "$2"'#000+ - '12006_F_The selected whole program optimizations require a previously '+ - 'generated feedback file (use -Fw to specify)'#000+ - '12007_E_No collected information nece','ssary to perform "$1" whole pro'+ - 'gram optimization found'#000+ - '12008_F_Specify a whole program optimization feedback file to store th'+ - 'e generated info in (using -FW)'#000+ + '1','2006_F_The selected whole program optimizations require a previousl'+ + 'y generated feedback file (use -Fw to specify)'#000+ + '12007_E_No collected information necessary to perform "$1" whole progr'+ + 'am optimization found'#000+ + '12008_F_Specify a whole program op','timization feedback file to store '+ + 'the generated info in (using -FW)'#000+ '12009_E_Not generating any whole program optimization information, yet'+ - ' a feedback f','ile was specified (using -FW)'#000+ - '12010_E_Not performing any whole program optimizations, yet an input f'+ - 'eedback file was specified (using -Fw)'#000+ + ' a feedback file was specified (using -FW)'#000+ + '12010_E_Not performing any whole program optimizations, yet',' an input'+ + ' feedback file was specified (using -Fw)'#000+ '12011_D_Skipping whole program optimization section "$1", because not '+ - 'needed by the requested optimiz','ations'#000+ + 'needed by the requested optimizations'#000+ '12012_W_Overriding previously read information for "$1" from feedback '+ - 'input file using information in section "$2"'#000+ + 'input file u','sing information in section "$2"'#000+ '12013_E_Cannot extract symbol liveness information from program when s'+ 'tripping symbols, use -Xs-'#000+ - '12014_E_Cannot extrac','t symbol liveness information from program when'+ - ' when not linking'#000+ - '12015_F_Cannot find "$1" or "$2" to extract symbol liveness informatio'+ - 'n from linked program'#000+ + '12014_E_Cannot extract symbol liveness information from program when w'+ + 'hen not linking'#000+ + '12015_F_Cannot find "$1"',' or "$2" to extract symbol liveness informat'+ + 'ion from linked program'#000+ '12016_E_Error during reading symbol liveness information produced by "'+ '$1"'#000+ - '12017_F_E','rror executing "$1" (exitcode: $2) to extract symbol inform'+ - 'ation from linked program'#000+ - '12018_E_Collection of symbol liveness information can only help when u'+ - 'sing smart linking, use -CX -XX'#000+ - '12019_E_Cannot create specified whole program optimis','ation feedback '+ - 'file "$1"'#000+ - '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] for $FPC'+ - 'CPU'#010+ - 'Copyright (c) 1993-2010 by Florian Klaempfl'#000+ + '12017_F_Error executing "$1" (exitcode: $2) to extract symbol informat'+ + 'ion from linked program'#000+ + '1201','8_E_Collection of symbol liveness information can only help when'+ + ' using smart linking, use -CX -XX'#000+ + '12019_E_Cannot create specified whole program optimisation feedback fi'+ + 'le "$1"'#000+ + '11023_Free Pascal Compiler version $FPCFULLVERSION [$FPCDATE] fo','r $F'+ + 'PCCPU'#010+ + 'Copyright (c) 1993-2011 by Florian Klaempfl and others'#000+ '11024_Free Pascal Compiler version $FPCVERSION'#010+ #010+ 'Compiler Date : $FPCDATE'#010+ - 'Compiler CPU Target',': $FPCCPU'#010+ + 'Compiler CPU Target: $FPCCPU'#010+ #010+ 'Supported targets:'#010+ ' $OSTARGETS'#010+ #010+ 'Supported CPU instruction sets:'#010+ - ' $INSTRUCTIONSETS'#010+ + ' ','$INSTRUCTIONSETS'#010+ #010+ 'Supported FPU instruction sets:'#010+ ' $FPUINSTRUCTIONSETS'#010+ @@ -1063,311 +1068,311 @@ const msgtxt : array[0..000244,1..240] of char=( 'Supported Optimizations:'#010+ ' $OPTIMIZATIONS'#010+ #010+ - 'Supporte','d Whole Program Optimizations:'#010+ + 'Supported Whole Program Optimizations:'#010+ ' All'#010+ ' $WPOPTIMIZATIONS'#010+ #010+ - 'Supported Microcontroller types:'#010+ + 'Supported Microcontro','ller types:'#010+ ' $CONTROLLERTYPES'#010+ #010+ 'This program comes under the GNU General Public Licence'#010+ 'For more information read COPYING.FPC'#010+ #010+ - 'Report bugs, suggestions, etc. to:'#010, + 'Report bugs, suggestions, etc. to:'#010+ ' http://bugs.freepascal.org'#010+ 'or'#010+ - ' bugs@freepascal.org'#000+ + ' bugs@freepasca','l.org'#000+ '11025_**0*_Put + after a boolean switch option to enable it, - to disa'+ 'ble it'#010+ '**1a_The compiler doesn'#039't delete the generated assembler file'#010+ - '**2al_List source','code lines in assembler file'#010+ + '**2al_List sourcecode lines in assembler file'#010+ '**2an_List node info in assembler file'#010+ - '*L2ap_Use pipes instead of creating temporary assembler files'#010+ + '*L2ap_Use ','pipes instead of creating temporary assembler files'#010+ '**2ar_List register allocation/release info in assembler file'#010+ - '**2at_List temp allocation/release info in assem','bler file'#010+ + '**2at_List temp allocation/release info in assembler file'#010+ '**1A<x>_Output format:'#010+ '**2Adefault_Use default assembler'#010+ - '3*2Aas_Assemble using GNU AS'#010+ + '3*2Aas_Asse','mble using GNU AS'#010+ '3*2Amacho_Mach-O (Darwin, Intel 32 bit) using internal writer'#010+ '3*2Anasmcoff_COFF (Go32v2) file using Nasm'#010+ - '3*2Anasmelf_ELF32 (Linux) file using Na','sm'#010+ + '3*2Anasmelf_ELF32 (Linux) file using Nasm'#010+ '3*2Anasmwin32_Win32 object file using Nasm'#010+ - '3*2Anasmwdosx_Win32/WDOSX object file using Nasm'#010+ + '3*2Anasmwdosx_Win32/WDOSX object',' file using Nasm'#010+ '3*2Awasm_Obj file using Wasm (Watcom)'#010+ '3*2Anasmobj_Obj file using Nasm'#010+ '3*2Amasm_Obj file using Masm (Microsoft)'#010+ - '3*2Atasm_Obj file using Tasm (Borl','and)'#010+ + '3*2Atasm_Obj file using Tasm (Borland)'#010+ '3*2Aelf_ELF (Linux) using internal writer'#010+ - '3*2Acoff_COFF (Go32v2) using internal writer'#010+ + '3*2Acoff_COFF (Go32v2) using in','ternal writer'#010+ '3*2Apecoff_PE-COFF (Win32) using internal writer'#010+ '4*2Aas_Assemble using GNU AS'#010+ '6*2Aas_Unix o-file using GNU AS'#010+ '6*2Agas_GNU Motorola assembler'#010+ - '6*2Amit','_MIT Syntax (old GAS)'#010+ + '6*2Amit_MIT Syntax (old GAS)'#010+ '6*2Amot_Standard Motorola assembler'#010+ - 'A*2Aas_Assemble using GNU AS'#010+ + 'A*2Aas_Assemble usin','g GNU AS'#010+ 'P*2Aas_Assemble using GNU AS'#010+ 'S*2Aas_Assemble using GNU AS'#010+ '**1b_Generate browser info'#010+ '**2bl_Generate local symbol info'#010+ '**1B_Build all modules'#010+ - '**1C<x>_Code',' generation options:'#010+ + '**1C<x>_Code generation options:'#010+ '**2C3<x>_Turn on ieee error checking for constants'#010+ - '**2Ca<x>_Select ABI, see fpc -i for possible values'#010+ + '**2Ca<','x>_Select ABI, see fpc -i for possible values'#010+ '**2Cb_Generate big-endian code'#010+ '**2Cc<x>_Set default calling convention to <x>'#010+ - '**2CD_Create also dynamic library (not',' supported)'#010+ + '**2CD_Create also dynamic library (not supported)'#010+ '**2Ce_Compilation with emulated floating point opcodes'#010+ - '**2Cf<x>_Select fpu instruction set to use, see fpc -i for possible va'+ - 'lues'#010+ + '**2Cf<x>_Se','lect fpu instruction set to use, see fpc -i for possible '+ + 'values'#010+ '**2CF<x>_Minimal floating point constant precision (default, 32, 64)'#010+ '**2Cg_Generate PIC code'#010+ - '**2Ch','<n>_<n> bytes heap (between 1023 and 67107840)'#010+ + '**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+ '**2Ci_IO-checking'#010+ - '**2Cn_Omit linking stage'#010+ + '**2Cn_Omit li','nking stage'#010+ '**2Co_Check overflow of integer operations'#010+ '**2CO_Check for possible overflow of integer operations'#010+ - '**2Cp<x>_Select instruction set, see fpc -i for pos','sible values'#010+ + '**2Cp<x>_Select instruction set, see fpc -i for possible values'#010+ '**2CP<x>=<y>_ packing settings'#010+ - '**3CPPACKSET=<y>_ <y> set allocation: 0, 1 or DEFAULT or NORMAL, 2, 4 '+ - 'and 8'#010+ + '**3CPPACKSET=<y>_ <y> set allocati','on: 0, 1 or DEFAULT or NORMAL, 2, '+ + '4 and 8'#010+ '**2Cr_Range checking'#010+ '**2CR_Verify object method call validity'#010+ '**2Cs<n>_Set stack checking size to <n>'#010+ - '**2Ct_Stack checki','ng (for testing only, see manual)'#010+ + '**2Ct_Stack checking (for testing only, see manual)'#010+ '**2CX_Create also smartlinked library'#010+ - '**1d<x>_Defines the symbol <x>'#010+ + '**1d<x','>_Defines the symbol <x>'#010+ '**1D_Generate a DEF file'#010+ '**2Dd<x>_Set description to <x>'#010+ '**2Dv<x>_Set DLL version to <x>'#010+ '*O2Dw_PM application'#010+ - '**1e<x>_Set path to executa','ble'#010+ + '**1e<x>_Set path to executable'#010+ '**1E_Same as -Cn'#010+ '**1fPIC_Same as -Cg'#010+ '**1F<x>_Set file names and paths:'#010+ - '**2Fa<x>[,y]_(for a program) load units <x> and [y] before uses is par'+ - 'sed'#010+ + '**2','Fa<x>[,y]_(for a program) load units <x> and [y] before uses is p'+ + 'arsed'#010+ '**2Fc<x>_Set input codepage to <x>'#010+ '**2FC<x>_Set RC compiler binary name to <x>'#010+ - '**2Fd_Disabl','e the compiler'#039's internal directory cache'#010+ - '**2FD<x>_Set the directory where to search for compiler utilities'#010+ + '**2Fd_Disable the compiler'#039's internal directory cache'#010+ + '**2FD<x>_Set the directory where to ','search for compiler utilities'#010+ '**2Fe<x>_Redirect error output to <x>'#010+ '**2Ff<x>_Add <x> to framework path (Darwin only)'#010+ '**2FE<x>_Set exe/unit output path to <x>'#010+ - '**2F','i<x>_Add <x> to include path'#010+ + '**2Fi<x>_Add <x> to include path'#010+ '**2Fl<x>_Add <x> to library path'#010+ - '**2FL<x>_Use <x> as dynamic linker'#010+ + '**2FL<x>_Use <x>',' as dynamic linker'#010+ '**2Fm<x>_Load unicode conversion table from <x>.txt in the compiler di'+ 'r'#010+ '**2Fo<x>_Add <x> to object path'#010+ '**2Fr<x>_Load error message file <x>'#010+ - '**','2FR<x>_Set resource (.res) linker to <x>'#010+ + '**2FR<x>_Set resource (.res) linker to <x>'#010+ '**2Fu<x>_Add <x> to unit path'#010+ - '**2FU<x>_Set unit output path to <x>, overrides -FE'#010+ + '**2FU<x','>_Set unit output path to <x>, overrides -FE'#010+ '**2FW<x>_Store generated whole-program optimization feedback in <x>'#010+ - '**2Fw<x>_Load previously stored whole-program opt','imization feedback '+ - 'from <x>'#010+ - '*g1g_Generate debug information (default format for target)'#010+ + '**2Fw<x>_Load previously stored whole-program optimization feedback fr'+ + 'om <x>'#010+ + '*g1g_Generate debug information (default format fo','r target)'#010+ '*g2gc_Generate checks for pointers'#010+ '*g2gh_Use heaptrace unit (for memory leak/corruption debugging)'#010+ - '*g2gl_Use line info unit (show more info with backtra','ces)'#010+ + '*g2gl_Use line info unit (show more info with backtraces)'#010+ '*g2go<x>_Set debug information options'#010+ - '*g3godwarfsets_ Enable DWARF '#039'set'#039' type debug information (bre'+ - 'aks gdb < 6.5)'#010+ + '*g3godwarfsets_ Enable DWARF '#039'set'#039,' type debug information (br'+ + 'eaks gdb < 6.5)'#010+ '*g3gostabsabsincludes_ Store absolute/full include file paths in Stabs'+ #010+ - '*g3godwarfmethodclassprefix_ Prefix method names',' in DWARF with class'+ - ' name'#010+ + '*g3godwarfmethodclassprefix_ Prefix method names in DWARF with class n'+ + 'ame'#010+ '*g2gp_Preserve case in stabs symbol names'#010+ - '*g2gs_Generate Stabs debug information'#010+ + '*g2gs_Gene','rate Stabs debug information'#010+ '*g2gt_Trash local variables (to detect uninitialized uses)'#010+ '*g2gv_Generates programs traceable with Valgrind'#010+ - '*g2gw_Generate DWARFv2 de','bug information (same as -gw2)'#010+ + '*g2gw_Generate DWARFv2 debug information (same as -gw2)'#010+ '*g2gw2_Generate DWARFv2 debug information'#010+ - '*g2gw3_Generate DWARFv3 debug information'#010+ + '*g2gw','3_Generate DWARFv3 debug information'#010+ '*g2gw4_Generate DWARFv4 debug information (experimental)'#010+ '**1i_Information'#010+ '**2iD_Return compiler date'#010+ - '**2iV_Return short compi','ler version'#010+ + '**2iV_Return short compiler version'#010+ '**2iW_Return full compiler version'#010+ '**2iSO_Return compiler OS'#010+ - '**2iSP_Return compiler host processor'#010+ + '**2iS','P_Return compiler host processor'#010+ '**2iTO_Return target OS'#010+ '**2iTP_Return target processor'#010+ '**1I<x>_Add <x> to include path'#010+ '**1k<x>_Pass <x> to the linker'#010+ - '**1l_Write ','logo'#010+ + '**1l_Write logo'#010+ '**1M<x>_Set language mode to <x>'#010+ '**2Mfpc_Free Pascal dialect (default)'#010+ - '**2Mobjfpc_FPC mode with Object Pascal support'#010+ + '**','2Mobjfpc_FPC mode with Object Pascal support'#010+ '**2Mdelphi_Delphi 7 compatibility mode'#010+ '**2Mtp_TP/BP 7.0 compatibility mode'#010+ - '**2Mmacpas_Macintosh Pascal dialects compa','tibility mode'#010+ + '**2Mmacpas_Macintosh Pascal dialects compatibility mode'#010+ '**1n_Do not read the default config files'#010+ - '**1N<x>_Node tree optimizations'#010+ + '**1N<x>_Node tree opti','mizations'#010+ '**2Nu_Unroll loops'#010+ '**1o<x>_Change the name of the executable produced to <x>'#010+ '**1O<x>_Optimizations:'#010+ '**2O-_Disable optimizations'#010+ - '**2O1_Level 1 optimizati','ons (quick and debugger friendly)'#010+ - '**2O2_Level 2 optimizations (-O1 + quick optimizations)'#010+ + '**2O1_Level 1 optimizations (quick and debugger friendly)'#010+ + '**2O2_Level 2 optimizations (-O1 + quick opt','imizations)'#010+ '**2O3_Level 3 optimizations (-O2 + slow optimizations)'#010+ '**2Oa<x>=<y>_Set alignment'#010+ - '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possibl','e'+ - ' values'#010+ - '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible values'+ - #010+ + '**2Oo[NO]<x>_Enable or disable optimizations, see fpc -i for possible '+ + 'values'#010+ + '**2Op<x>_Set target cpu for optimizing, see fpc -i for possible value', + 's'#010+ '**2OW<x>_Generate whole-program optimization feedback for optimization'+ ' <x>, see fpc -i for possible values'#010+ - '**2Ow<x>_Perform whole-program optimization <x>, see ','fpc -i for poss'+ - 'ible values'#010+ + '**2Ow<x>_Perform whole-program optimization <x>, see fpc -i for possib'+ + 'le values'#010+ '**2Os_Optimize for size rather than speed'#010+ - '**1pg_Generate profile code for gprof (defines FPC_PROFILE)'#010+ + '**1pg_Gen','erate profile code for gprof (defines FPC_PROFILE)'#010+ '**1R<x>_Assembler reading style:'#010+ '**2Rdefault_Use default assembler for target'#010+ - '3*2Ratt_Read AT&T style assembler',#010+ + '3*2Ratt_Read AT&T style assembler'#010+ '3*2Rintel_Read Intel style assembler'#010+ '6*2RMOT_Read motorola style assembler'#010+ - '**1S<x>_Syntax options:'#010+ + '**','1S<x>_Syntax options:'#010+ '**2S2_Same as -Mobjfpc'#010+ '**2Sc_Support operators like C (*=,+=,/= and -=)'#010+ '**2Sa_Turn on assertions'#010+ '**2Sd_Same as -Mdelphi'#010+ - '**2Se<x>_Error optio','ns. <x> is a combination of the following:'#010+ - '**3*_<n> : Compiler halts after the <n> errors (default is 1)'#010+ + '**2Se<x>_Error options. <x> is a combination of the following:'#010+ + '**3*_<n> : Compiler halts after the',' <n> errors (default is 1)'#010+ '**3*_w : Compiler also halts after warnings'#010+ '**3*_n : Compiler also halts after notes'#010+ '**3*_h : Compiler also halts after hints'#010+ - '**2Sg_Ena','ble LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+ - '**2Sh_Use ansistrings by default instead of shortstrings'#010+ + '**2Sg_Enable LABEL and GOTO (default in -Mtp and -Mdelphi)'#010+ + '**2Sh_Use ansistrings by def','ault instead of shortstrings'#010+ '**2Si_Turn on inlining of procedures/functions declared as "inline"'#010+ '**2Sk_Load fpcylix unit'#010+ '**2SI<x>_Set interface style to <x>'#010+ - '**3SI','com_COM compatible interface (default)'#010+ + '**3SIcom_COM compatible interface (default)'#010+ '**3SIcorba_CORBA compatible interface'#010+ - '**2Sm_Support macros like C (global)'#010+ + '*','*2Sm_Support macros like C (global)'#010+ '**2So_Same as -Mtp'#010+ '**2Ss_Constructor name must be init (destructor must be done)'#010+ - '**2Sx_Enable exception keywords (default in D','elphi/ObjFPC modes)'#010+ + '**2Sx_Enable exception keywords (default in Delphi/ObjFPC modes)'#010+ '**1s_Do not call assembler and linker'#010+ - '**2sh_Generate script to link on host'#010+ + '**2sh_Generate scrip','t to link on host'#010+ '**2st_Generate script to link on target'#010+ '**2sr_Skip register allocation phase (use with -alr)'#010+ '**1T<x>_Target operating system:'#010+ - '3*2Tdarwin_Darwin/','Mac OS X'#010+ + '3*2Tdarwin_Darwin/Mac OS X'#010+ '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+ - '3*2Tfreebsd_FreeBSD'#010+ + '3*2Tfreebsd_FreeBSD',#010+ '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+ '3*2Tiphonesim_ iPhoneSimulator from iOS SDK 3.2+ (older versions: -Tda'+ 'rwin)'#010+ '3*2Tlinux_Linux'#010+ '3*2Tnetbsd_NetBSD'#010+ - '3*2','Tnetware_Novell Netware Module (clib)'#010+ - '3*2Tnetwlibc_Novell Netware Module (libc)'#010+ + '3*2Tnetware_Novell Netware Module (clib)'#010+ + '3*2Tnetwlibc_Novell Netware Module (libc',')'#010+ '3*2Topenbsd_OpenBSD'#010+ '3*2Tos2_OS/2 / eComStation'#010+ '3*2Tsunos_SunOS/Solaris'#010+ '3*2Tsymbian_Symbian OS'#010+ '3*2Tsolaris_Solaris'#010+ '3*2Twatcom_Watcom compatible DOS extender'#010+ - '3*2T','wdosx_WDOSX DOS extender'#010+ + '3*2Twdosx_WDOSX DOS extender'#010+ '3*2Twin32_Windows 32 Bit'#010+ '3*2Twince_Windows CE'#010+ - '4*2Tdarwin_Darwin/Mac OS X'#010+ + '4*2Tdar','win_Darwin/Mac OS X'#010+ '4*2Tlinux_Linux'#010+ '4*2Twin64_Win64 (64 bit Windows systems)'#010+ '6*2Tamiga_Commodore Amiga'#010+ '6*2Tatari_Atari ST/STe/TT'#010+ '6*2Tlinux_Linux'#010+ - '6*2Tpalmos_PalmOS',#010+ + '6*2Tpalmos_PalmOS'#010+ 'A*2Tdarwin_Darwin/iPhoneOS/iOS'#010+ 'A*2Tlinux_Linux'#010+ 'A*2Twince_Windows CE'#010+ - 'P*2Tamiga_AmigaOS'#010+ + 'P*2Tamiga','_AmigaOS'#010+ 'P*2Tdarwin_Darwin/Mac OS X'#010+ 'P*2Tlinux_Linux'#010+ 'P*2Tmacos_Mac OS (classic)'#010+ 'P*2Tmorphos_MorphOS'#010+ 'S*2Tsolaris_Solaris'#010+ 'S*2Tlinux_Linux'#010+ - '**1u<x>_Undefines the symbo','l <x>'#010+ + '**1u<x>_Undefines the symbol <x>'#010+ '**1U_Unit options:'#010+ - '**2Un_Do not check where the unit name matches the file name'#010+ + '**2Un_Do not check where the unit name matches the fi','le name'#010+ '**2Ur_Generate release unit files (never automatically recompiled)'#010+ '**2Us_Compile a system unit'#010+ - '**1v<x>_Be verbose. <x> is a combination of the following l','etters:'#010+ - '**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+ + '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+ + '**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010, '**2*_w : Show warnings u : Show unit info'#010+ '**2*_n : Show notes t : Show tried/used files'#010+ - '**2*_h : Show hints c : Sh','ow conditionals'#010+ + '**2*_h : Show hints c : Show conditionals'#010+ '**2*_i : Show general info d : Show debug info'#010+ - '**2*_l : Show linenumbers r : Rhide/GCC compatibility mode'#010+ - '**2*_s : Show time stamps q : Show message numbers'#010+ - '**2*_a : Show everything ',' x : Executable info (Win32 only'+ - ')'#010+ - '**2*_b : Write file names messages p : Write tree.log with parse tre'+ + '**2*_','l : Show linenumbers r : Rhide/GCC compatibility mod'+ 'e'#010+ + '**2*_s : Show time stamps q : Show message numbers'#010+ + '**2*_a : Show everything x : Executable info (Win32 only)'#010+ + '**2*_b : Write file names messages p : Wr','ite tree.log with parse t'+ + 'ree'#010+ '**2*_ with full path v : Write fpcdebug.txt with'#010+ '**2*_ lots of debugging info'#010+ - '**2*','_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+ - '3*1W<x>_Target-specific options (targets)'#010+ + '**2*_m<x>,<y> : Don'#039't show messages numbered <x> and <y>'#010+ + '3*1W<x>_Target-specific o','ptions (targets)'#010+ 'A*1W<x>_Target-specific options (targets)'#010+ 'P*1W<x>_Target-specific options (targets)'#010+ 'p*1W<x>_Target-specific options (targets)'#010+ - '3*2Wb_Create a bund','le instead of a library (Darwin)'#010+ - 'P*2Wb_Create a bundle instead of a library (Darwin)'#010+ + '3*2Wb_Create a bundle instead of a library (Darwin)'#010+ + 'P*2Wb_Create a bundle instead of a library (D','arwin)'#010+ 'p*2Wb_Create a bundle instead of a library (Darwin)'#010+ '3*2WB_Create a relocatable image (Windows)'#010+ 'A*2WB_Create a relocatable image (Windows, Symbian)'#010+ - '3*2WC_Sp','ecify console type application (EMX, OS/2, Windows)'#010+ - 'A*2WC_Specify console type application (Windows)'#010+ + '3*2WC_Specify console type application (EMX, OS/2, Windows)'#010+ + 'A*2WC_Specify console type',' application (Windows)'#010+ 'P*2WC_Specify console type application (Classic Mac OS)'#010+ '3*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ - 'A*2WD_Use DEFFILE to ','export functions of DLL or EXE (Windows)'#010+ - '3*2We_Use external resources (Darwin)'#010+ + 'A*2WD_Use DEFFILE to export functions of DLL or EXE (Windows)'#010+ + '3*2We_Use external resources (Darwin)',#010+ '4*2We_Use external resources (Darwin)'#010+ 'A*2We_Use external resources (Darwin)'#010+ 'P*2We_Use external resources (Darwin)'#010+ 'p*2We_Use external resources (Darwin)'#010+ - '3*2WF_Spe','cify full-screen type application (EMX, OS/2)'#010+ - '3*2WG_Specify graphic type application (EMX, OS/2, Windows)'#010+ + '3*2WF_Specify full-screen type application (EMX, OS/2)'#010+ + '3*2WG_Specify graphic type appli','cation (EMX, OS/2, Windows)'#010+ 'A*2WG_Specify graphic type application (Windows)'#010+ 'P*2WG_Specify graphic type application (Classic Mac OS)'#010+ - '3*2Wi_Use internal resources ','(Darwin)'#010+ + '3*2Wi_Use internal resources (Darwin)'#010+ 'P*2Wi_Use internal resources (Darwin)'#010+ - 'p*2Wi_Use internal resources (Darwin)'#010+ + 'p*2Wi_Use internal resources (D','arwin)'#010+ '3*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ 'A*2WN_Do not generate relocation code, needed for debugging (Windows)'#010+ - '3*2WR_Generate ','relocation code (Windows)'#010+ + '3*2WR_Generate relocation code (Windows)'#010+ 'A*2WR_Generate relocation code (Windows)'#010+ - 'P*2WT_Specify MPW tool type application (Classic Mac OS)'#010+ + 'P*2WT_Speci','fy MPW tool type application (Classic Mac OS)'#010+ '3*2WX_Enable executable stack (Linux)'#010+ 'A*2WX_Enable executable stack (Linux)'#010+ 'p*2WX_Enable executable stack (Linux)'#010+ - 'P*','2WX_Enable executable stack (Linux)'#010+ + 'P*2WX_Enable executable stack (Linux)'#010+ '**1X_Executable options:'#010+ - '**2Xc_Pass --shared/-dynamic to the linker (BeOS, Darwin, FreeBSD, Lin'+ - 'ux)'#010+ + '**2Xc_Pass --shar','ed/-dynamic to the linker (BeOS, Darwin, FreeBSD, L'+ + 'inux)'#010+ '**2Xd_Do not use standard library search path (needed for cross compil'+ 'e)'#010+ '**2Xe_Use external linker'#010+ - '**2Xg_','Create debuginfo in a separate file and add a debuglink sectio'+ - 'n to executable'#010+ + '**2Xg_Create debuginfo in a separate file and add a debuglink section '+ + 'to executable'#010, '**2XD_Try to link units dynamically (defines FPC_LINK_DYNAMIC)'#010+ '**2Xi_Use internal linker'#010+ '**2Xm_Generate link map'#010+ - '**2XM<x>_Set the name of the '#039'main'#039' program ','routine (default'+ - ' is '#039'main'#039')'#010+ - '**2XP<x>_Prepend the binutils names with the prefix <x>'#010+ + '**2XM<x>_Set the name of the '#039'main'#039' program routine (default i'+ + 's '#039'main'#039')'#010+ + '**2XP<x>_Prepend the binutils names with the prefi','x <x>'#010+ '**2Xr<x>_Set the linker'#039's rlink-path to <x> (needed for cross comp'+ 'ile, see the ld manual for more information) (BeOS, Linux)'#010+ - '**2XR<x>_Prepend <x> to all lin','ker search paths (BeOS, Darwin, FreeB'+ - 'SD, Linux, Mac OS, Solaris)'#010+ - '**2Xs_Strip all symbols from executable'#010+ + '**2XR<x>_Prepend <x> to all linker search paths (BeOS, Darwin, FreeBSD'+ + ', Linux, Mac OS, Solaris)'#010+ + '**2Xs_Strip a','ll symbols from executable'#010+ '**2XS_Try to link units statically (default, defines FPC_LINK_STATIC)'#010+ '**2Xt_Link with static libraries (-static is passed to linker)'#010+ - '**','2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+ + '**2XX_Try to smartlink units (defines FPC_LINK_SMART)'#010+ '**1*_'#010+ - '**1?_Show this help'#010+ + '**1?_Sho','w this help'#010+ '**1h_Shows this help without waiting' ); diff --git a/compiler/ncal.pas b/compiler/ncal.pas index 097aa18b40..9d1bc440cb 100644 --- a/compiler/ncal.pas +++ b/compiler/ncal.pas @@ -201,6 +201,9 @@ interface function can_be_inlined: boolean; property nextpara : tnode read right write right; + { third is reused to store the parameter name (only while parsing + vardispatch calls, never in real node tree) and copy of 'high' + parameter tree when the parameter is an open array of managed type } property parametername : tnode read third write third; { returns whether the evaluation of this parameter involves a @@ -620,6 +623,8 @@ implementation old_array_constructor:=allow_array_constructor; allow_array_constructor:=true; typecheckpass(left); + if assigned(third) then + typecheckpass(third); allow_array_constructor:=old_array_constructor; if codegenerror then resultdef:=generrordef @@ -635,6 +640,8 @@ implementation if not assigned(left.resultdef) then get_paratype; firstpass(left); + if assigned(third) then + firstpass(third); expectloc:=left.expectloc; end; @@ -2492,6 +2499,7 @@ implementation varargspara, currpara : tparavarsym; hiddentree : tnode; + paradef : tdef; begin pt:=tcallparanode(left); oldppt:=pcallparanode(@left); @@ -2527,7 +2535,19 @@ implementation if not assigned(pt) or (i=0) then internalerror(200304081); { we need the information of the previous parameter } - hiddentree:=gen_high_tree(pt.left,tparavarsym(procdefinition.paras[i-1]).vardef); + paradef:=tparavarsym(procdefinition.paras[i-1]).vardef; + hiddentree:=gen_high_tree(pt.left,paradef); + { for open array of managed type, a copy of high parameter is + necessary to properly initialize before the call } + if is_open_array(paradef) and + (tparavarsym(procdefinition.paras[i-1]).varspez=vs_out) and + is_managed_type(tarraydef(paradef).elementdef) then + begin + typecheckpass(hiddentree); + {this eliminates double call to fpc_dynarray_high, if any} + maybe_load_in_temp(hiddentree); + oldppt^.third:=hiddentree.getcopy; + end; end else if vo_is_typinfo_para in currpara.varoptions then diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index 5251c6690a..6bb0db3868 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -167,7 +167,16 @@ implementation is_managed_type(left.resultdef) then begin location_get_data_ref(current_asmdata.CurrAsmList,left.location,href,false,sizeof(pint)); - cg.g_decrrefcount(current_asmdata.CurrAsmList,left.resultdef,href); + if is_open_array(resultdef) then + begin + if third=nil then + InternalError(201103063); + secondpass(third); + cg.g_array_rtti_helper(current_asmdata.CurrAsmList,tarraydef(resultdef).elementdef, + href,third.location,'FPC_DECREF_ARRAY'); + end + else + cg.g_decrrefcount(current_asmdata.CurrAsmList,left.resultdef,href); end; paramanager.createtempparaloc(current_asmdata.CurrAsmList,aktcallnode.procdefinition.proccalloption,parasym,not followed_by_stack_tainting_call_cached,tempcgpara); diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas index 1150c737bc..cad56ab507 100644 --- a/compiler/ncgmem.pas +++ b/compiler/ncgmem.pas @@ -59,6 +59,7 @@ interface function get_mul_size : aint; private procedure rangecheck_array; + procedure rangecheck_string; protected {# This routine is used to calculate the address of the reference. On entry reg contains the index in the array, @@ -635,6 +636,10 @@ implementation hreg : tregister; paraloc1,paraloc2 : tcgpara; begin + { omit range checking when this is an array access to a pointer which has been + typecasted from an array } + if (ado_isconvertedpointer in tarraydef(left.resultdef).arrayoptions) then + exit; paraloc1.init; paraloc2.init; if is_open_array(left.resultdef) or @@ -690,6 +695,45 @@ implementation paraloc2.done; end; + procedure tcgvecnode.rangecheck_string; + var + paraloc1, + paraloc2: tcgpara; + begin + paraloc1.init; + paraloc2.init; + case tstringdef(left.resultdef).stringtype of + { it's the same for ansi- and wide strings } + st_unicodestring, + st_widestring, + st_ansistring: + begin + paramanager.getintparaloc(pocall_default,1,paraloc1); + paramanager.getintparaloc(pocall_default,2,paraloc2); + cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1); + cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,right.location,paraloc2); + + paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); + paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc2); + cg.allocallcpuregisters(current_asmdata.CurrAsmList); + cg.a_call_name(current_asmdata.CurrAsmList,'FPC_'+upper(tstringdef(left.resultdef).stringtypname)+'_RANGECHECK',false); + cg.deallocallcpuregisters(current_asmdata.CurrAsmList); + end; + + st_shortstring: + begin + {!!!!!!!!!!!!!!!!!} + { if this one is implemented making use of the high parameter for openshortstrings, update ncgutils.do_get_used_regvars() too (JM) } + end; + + st_longstring: + begin + {!!!!!!!!!!!!!!!!!} + end; + end; + paraloc1.done; + paraloc2.done; + end; procedure tcgvecnode.pass_generate_code; @@ -697,7 +741,6 @@ implementation offsetdec, extraoffset : aint; t : tnode; - href : treference; otl,ofl : tasmlabel; newsize : tcgsize; mulsize, @@ -726,8 +769,7 @@ implementation { an ansistring needs to be dereferenced } if is_ansistring(left.resultdef) or - is_widestring(left.resultdef) or - is_unicodestring(left.resultdef) then + is_wide_or_unicode_string(left.resultdef) then begin if nf_callunique in flags then internalerror(200304236); @@ -754,18 +796,6 @@ implementation internalerror(2002032218); end; - { check for a zero length string, - we can use the ansistring routine here } - if (cs_check_range in current_settings.localswitches) then - begin - paramanager.getintparaloc(pocall_default,1,paraloc1); - cg.a_load_reg_cgpara(current_asmdata.CurrAsmList,OS_ADDR,location.reference.base,paraloc1); - paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); - cg.allocallcpuregisters(current_asmdata.CurrAsmList); - cg.a_call_name(current_asmdata.CurrAsmList,'FPC_'+upper(tstringdef(left.resultdef).stringtypname)+'_CHECKZERO',false); - cg.deallocallcpuregisters(current_asmdata.CurrAsmList); - end; - { in ansistrings/widestrings S[1] is p<w>char(S)[0] !! } if is_ansistring(left.resultdef) then offsetdec:=1 @@ -828,84 +858,16 @@ implementation if right.nodetype=ordconstn then begin { offset can only differ from 0 if arraydef } - case left.resultdef.typ of - arraydef : - begin - { do not do any range checking when this is an array access to a pointer which has been - typecasted from an array } - if (not (ado_isconvertedpointer in tarraydef(left.resultdef).arrayoptions)) then - begin - if not(is_open_array(left.resultdef)) and - not(is_array_of_const(left.resultdef)) and - not(is_dynamic_array(left.resultdef)) then - begin - if (tordconstnode(right).value.svalue>tarraydef(left.resultdef).highrange) or - (tordconstnode(right).value.svalue<tarraydef(left.resultdef).lowrange) then - begin - { this should be caught in the typecheckpass! (JM) } - if (cs_check_range in current_settings.localswitches) then - CGMessage(parser_e_range_check_error) - else - CGMessage(parser_w_range_check_error); - end; - end - else - begin - { range checking for open and dynamic arrays needs - runtime code } - secondpass(right); - if (cs_check_range in current_settings.localswitches) then - rangecheck_array; - end; - end; + if cs_check_range in current_settings.localswitches then + begin + secondpass(right); + case left.resultdef.typ of + arraydef : + rangecheck_array; + stringdef : + rangecheck_string; end; - stringdef : - begin - if (cs_check_range in current_settings.localswitches) then - begin - case tstringdef(left.resultdef).stringtype of - { it's the same for ansi- and wide strings } - st_unicodestring, - st_widestring, - st_ansistring: - begin - paramanager.getintparaloc(pocall_default,1,paraloc1); - paramanager.getintparaloc(pocall_default,2,paraloc2); - cg.a_load_const_cgpara(current_asmdata.CurrAsmList,OS_INT,tordconstnode(right).value.svalue,paraloc2); - href:=location.reference; - if not(tf_winlikewidestring in target_info.flags) or - (tstringdef(left.resultdef).stringtype<>st_widestring) then - begin - dec(href.offset,sizeof(pint)-offsetdec); - cg.a_load_ref_cgpara(current_asmdata.CurrAsmList,OS_ADDR,href,paraloc1); - end - else - begin - { winlike widestrings have a 4 byte length } - dec(href.offset,4-offsetdec); - cg.a_load_ref_cgpara(current_asmdata.CurrAsmList,OS_32,href,paraloc1); - end; - paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); - paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc2); - cg.allocallcpuregisters(current_asmdata.CurrAsmList); - cg.a_call_name(current_asmdata.CurrAsmList,'FPC_'+upper(tstringdef(left.resultdef).stringtypname)+'_RANGECHECK',false); - cg.deallocallcpuregisters(current_asmdata.CurrAsmList); - end; - - st_shortstring: - begin - {!!!!!!!!!!!!!!!!!} - { if this one is implemented making use of the high parameter for openshortstrings, update ncgutils.do_get_used_regvars() too (JM) } - end; - - st_longstring: - begin - {!!!!!!!!!!!!!!!!!} - end; - end; - end; - end; - end; + end; if not(is_packed_array(left.resultdef)) or ((mulsize mod 8 = 0) and (ispowerof2(mulsize div 8,temp) or @@ -1015,56 +977,9 @@ implementation if cs_check_range in current_settings.localswitches then begin if left.resultdef.typ=arraydef then - begin - { do not do any range checking when this is an array access to a pointer which has been - typecasted from an array } - if (not (ado_isconvertedpointer in tarraydef(left.resultdef).arrayoptions)) then - rangecheck_array - end + rangecheck_array else if (left.resultdef.typ=stringdef) then - begin - case tstringdef(left.resultdef).stringtype of - { it's the same for ansi- and wide strings } - st_unicodestring, - st_widestring, - st_ansistring: - begin - paramanager.getintparaloc(pocall_default,1,paraloc1); - paramanager.getintparaloc(pocall_default,2,paraloc2); - cg.a_load_reg_cgpara(current_asmdata.CurrAsmList,OS_INT,right.location.register,paraloc2); - href:=location.reference; - dec(href.offset,sizeof(pint)-offsetdec); - - href:=location.reference; - if not(tf_winlikewidestring in target_info.flags) or - (tstringdef(left.resultdef).stringtype<>st_widestring) then - begin - dec(href.offset,sizeof(pint)-offsetdec); - cg.a_load_ref_cgpara(current_asmdata.CurrAsmList,OS_ADDR,href,paraloc1); - end - else - begin - { winlike widestrings have a 4 byte length } - dec(href.offset,4-offsetdec); - cg.a_load_ref_cgpara(current_asmdata.CurrAsmList,OS_32,href,paraloc1); - end; - - paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); - paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc2); - cg.allocallcpuregisters(current_asmdata.CurrAsmList); - cg.a_call_name(current_asmdata.CurrAsmList,'FPC_'+upper(tstringdef(left.resultdef).stringtypname)+'_RANGECHECK',false); - cg.deallocallcpuregisters(current_asmdata.CurrAsmList); - end; - st_shortstring: - begin - {!!!!!!!!!!!!!!!!!} - end; - st_longstring: - begin - {!!!!!!!!!!!!!!!!!} - end; - end; - end; + rangecheck_string; end; { insert the register and the multiplication factor in the diff --git a/compiler/ncgrtti.pas b/compiler/ncgrtti.pas index 1324c2b769..580f11d2e7 100644 --- a/compiler/ncgrtti.pas +++ b/compiler/ncgrtti.pas @@ -636,7 +636,8 @@ implementation { pocall_safecall } 4, { pocall_stdcall } 3, { pocall_softfloat } 10, - { pocall_mwpascal } 11 + { pocall_mwpascal } 11, + { pocall_interrupt } 12 ); procedure write_para(parasym:tparavarsym); diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 7d0ab56073..4751ee691b 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -161,6 +161,10 @@ interface procedure gen_pic_helpers(list : TAsmList); + procedure gen_fpc_dummy(list : TAsmList); + + procedure InsertInterruptTable; + implementation uses @@ -1568,6 +1572,8 @@ implementation procedure init_paras(p:TObject;arg:pointer); var href : treference; + hsym : tparavarsym; + eldef : tdef; tmpreg : tregister; list : TAsmList; needs_inittable, @@ -1591,7 +1597,18 @@ implementation paramanager.push_addr_param(tparavarsym(p).varspez,tparavarsym(p).vardef,current_procinfo.procdef.proccalloption)) then begin location_get_data_ref(list,tparavarsym(p).initialloc,href,is_open_array(tparavarsym(p).vardef),sizeof(pint)); - cg.g_incrrefcount(list,tparavarsym(p).vardef,href); + if is_open_array(tparavarsym(p).vardef) then + begin + { open arrays do not contain correct element count in their rtti, + the actual count must be passed separately. } + hsym:=tparavarsym(tsym(p).owner.Find('high'+tsym(p).name)); + eldef:=tarraydef(tparavarsym(p).vardef).elementdef; + if not assigned(hsym) then + internalerror(201003031); + cg.g_array_rtti_helper(list,eldef,href,hsym.initialloc,'FPC_ADDREF_ARRAY'); + end + else + cg.g_incrrefcount(list,tparavarsym(p).vardef,href); end; end; vs_out : @@ -1616,7 +1633,18 @@ implementation else trash_reference(list,href,2); if needs_inittable then - cg.g_initialize(list,tparavarsym(p).vardef,href); + begin + if is_open_array(tparavarsym(p).vardef) then + begin + hsym:=tparavarsym(tsym(p).owner.Find('high'+tsym(p).name)); + eldef:=tarraydef(tparavarsym(p).vardef).elementdef; + if not assigned(hsym) then + internalerror(201103033); + cg.g_array_rtti_helper(list,eldef,href,hsym.initialloc,'FPC_INITIALIZE_ARRAY'); + end + else + cg.g_initialize(list,tparavarsym(p).vardef,href); + end; end; end; else if do_trashing and @@ -1649,6 +1677,8 @@ implementation var list : TAsmList; href : treference; + hsym : tparavarsym; + eldef : tdef; begin if not(tsym(p).typ=paravarsym) then exit; @@ -1659,7 +1689,16 @@ implementation begin include(current_procinfo.flags,pi_needs_implicit_finally); location_get_data_ref(list,tparavarsym(p).localloc,href,is_open_array(tparavarsym(p).vardef),sizeof(pint)); - cg.g_decrrefcount(list,tparavarsym(p).vardef,href); + if is_open_array(tparavarsym(p).vardef) then + begin + hsym:=tparavarsym(tsym(p).owner.Find('high'+tsym(p).name)); + eldef:=tarraydef(tparavarsym(p).vardef).elementdef; + if not assigned(hsym) then + internalerror(201003032); + cg.g_array_rtti_helper(list,eldef,href,hsym.initialloc,'FPC_DECREF_ARRAY'); + end + else + cg.g_decrrefcount(list,tparavarsym(p).vardef,href); end; end; { open arrays can contain elements requiring init/final code, so the else has been removed here } @@ -2496,7 +2535,10 @@ implementation sectype:=sec_bss; end; maybe_new_object_file(list); - new_section(list,sectype,lower(sym.mangledname),varalign); + if sym.section<>'' then + new_section(list,sec_user,sym.section,varalign) + else + new_section(list,sectype,lower(sym.mangledname),varalign); if (sym.owner.symtabletype=globalsymtable) or create_smartlink or DLLSource or @@ -3092,4 +3134,98 @@ implementation {$endif i386} end; + + procedure gen_fpc_dummy(list : TAsmList); + begin +{$ifdef i386} + { fix me! } + list.concat(Taicpu.Op_const_reg(A_MOV,S_L,1,NR_EAX)); + list.concat(Taicpu.Op_const(A_RET,S_W,12)); +{$endif i386} + end; + + + procedure InsertInterruptTable; + + procedure WriteVector(const name: string); + var + ai: taicpu; + begin +{$IFDEF arm} + if current_settings.cputype in [cpu_armv7m, cpu_cortexm3] then + current_asmdata.asmlists[al_globals].concat(tai_const.Createname(name,0)) + else + begin + ai:=taicpu.op_sym(A_B,current_asmdata.RefAsmSymbol(name)); + ai.is_jmp:=true; + current_asmdata.asmlists[al_globals].concat(ai); + end; +{$ENDIF arm} + end; + + function GetInterruptTableLength: longint; + begin +{$if defined(ARM)} + result:=interruptvectors[current_settings.controllertype]; +{$else} + result:=0; +{$endif} + end; + + var + hp: tused_unit; + sym: tsym; + i, i2: longint; + interruptTable: array of tprocdef; + pd: tprocdef; + begin + SetLength(interruptTable, GetInterruptTableLength); + FillChar(interruptTable[0], length(interruptTable)*sizeof(pointer), 0); + + hp:=tused_unit(usedunits.first); + while assigned(hp) do + begin + for i := 0 to hp.u.symlist.Count-1 do + begin + sym:=tsym(hp.u.symlist[i]); + if not assigned(sym) then + continue; + if sym.typ = procsym then + begin + for i2 := 0 to tprocsym(sym).ProcdefList.Count-1 do + begin + pd:=tprocdef(tprocsym(sym).ProcdefList[i2]); + if pd.interruptvector >= 0 then + begin + if pd.interruptvector > high(interruptTable) then + Internalerror(2011030602); + if interruptTable[pd.interruptvector] <> nil then + internalerror(2011030601); + + interruptTable[pd.interruptvector]:=pd; + break; + end; + end; + end; + end; + hp:=tused_unit(hp.next); + end; + + new_section(current_asmdata.asmlists[al_globals],sec_init,'VECTORS',sizeof(pint)); + current_asmdata.asmlists[al_globals].concat(Tai_symbol.Createname_global('VECTORS',AT_DATA,0)); +{$IFDEF arm} + if current_settings.cputype in [cpu_armv7m, cpu_cortexm3] then + current_asmdata.asmlists[al_globals].concat(tai_const.Createname('_stack_top',0)); { ARMv7-M processors have the initial stack value at address 0 } +{$ENDIF arm} + + for i:=0 to high(interruptTable) do + begin + if interruptTable[i]<>nil then + writeVector(interruptTable[i].mangledname) + else + writeVector('DefaultHandler'); { Default handler name } + end; + end; + + end. diff --git a/compiler/nset.pas b/compiler/nset.pas index 9e72455551..015d4bf6f6 100644 --- a/compiler/nset.pas +++ b/compiler/nset.pas @@ -229,17 +229,6 @@ implementation exit; end; - if (right.nodetype=typen) then - begin - { we need to create a setconstn } - pst:=createsetconst(tsetdef(ttypenode(right).resultdef)); - t:=csetconstnode.create(pst,ttypenode(right).resultdef); - dispose(pst); - right.free; - right:=t; - typecheckpass(right); - end; - typecheckpass(left); set_varstate(left,vs_read,[vsf_must_be_valid]); if codegenerror then diff --git a/compiler/ogbase.pas b/compiler/ogbase.pas index ec3ed99dbf..c6cc207826 100644 --- a/compiler/ogbase.pas +++ b/compiler/ogbase.pas @@ -482,6 +482,7 @@ interface procedure GenerateLibraryImports(ImportLibraryList:TFPHashObjectList);virtual; procedure GenerateDebugLink(const dbgname:string;dbgcrc:cardinal); function WriteExeFile(const fn:string):boolean; + procedure ParseScript (linkscript:TCmdStrList); virtual; property Writer:TObjectWriter read FWriter; property ExeSectionList:TFPHashObjectList read FExeSectionList; property ObjDataList:TFPObjectList read FObjDataList; @@ -544,7 +545,7 @@ implementation procedure TObjSymbol.SetAddress(apass:byte;aobjsec:TObjSection;abind:TAsmsymbind;atyp:Tasmsymtype); begin - if not(abind in [AB_GLOBAL,AB_LOCAL,AB_COMMON]) then + if not(abind in [AB_GLOBAL,AB_LOCAL,AB_COMMON,AB_IMPORT]) then internalerror(200603016); if not assigned(aobjsec) then internalerror(200603017); @@ -823,7 +824,7 @@ implementation function TObjData.sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string; const - secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', 'code', 'Data', 'Data', @@ -902,6 +903,7 @@ implementation function TObjData.sectiontype2options(atype:TAsmSectiontype):TObjSectionOptions; const secoptions : array[TAsmSectiontype] of TObjSectionOptions = ([], + {user} [oso_Data,oso_load,oso_write,oso_executable,oso_keep], {code} [oso_Data,oso_load,oso_readonly,oso_executable,oso_keep], {Data} [oso_Data,oso_load,oso_write,oso_keep], { TODO: Fix sec_rodata be read-only-with-relocs} @@ -1549,6 +1551,11 @@ implementation end; + procedure TExeOutput.ParseScript (linkscript:TCmdStrList); + begin + end; + + function TExeOutput.FindExeSection(const aname:string):TExeSection; begin result:=TExeSection(ExeSectionList.Find(aname)); diff --git a/compiler/ogcoff.pas b/compiler/ogcoff.pas index 5ce3f5d369..73b90a2aab 100644 --- a/compiler/ogcoff.pas +++ b/compiler/ogcoff.pas @@ -488,7 +488,7 @@ implementation SymbolMaxGrow = 200*sizeof(coffsymbol); StrsMaxGrow = 8192; - coffsecnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + coffsecnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', '.text','.data','.data','.data','.bss','.tls', '.pdata',{pdata} '.text', {stub} @@ -1031,22 +1031,28 @@ const pemagic : array[0..3] of byte = ( sep : string[3]; secname : string; begin - secname:=coffsecnames[atype]; - if create_smartlink_sections and - (aname<>'') then - begin - case aorder of - secorder_begin : - sep:='.b_'; - secorder_end : - sep:='.z_'; - else - sep:='.n_'; - end; - result:=secname+sep+aname - end + { section type user gives the user full controll on the section name } + if atype=sec_user then + result:=aname else - result:=secname; + begin + secname:=coffsecnames[atype]; + if create_smartlink_sections and + (aname<>'') then + begin + case aorder of + secorder_begin : + sep:='.b_'; + secorder_end : + sep:='.z_'; + else + sep:='.n_'; + end; + result:=secname+sep+aname + end + else + result:=secname; + end; end; diff --git a/compiler/ogelf.pas b/compiler/ogelf.pas index 416cd4a95a..a3c164fb14 100644 --- a/compiler/ogelf.pas +++ b/compiler/ogelf.pas @@ -584,7 +584,7 @@ implementation function TElfObjData.sectionname(atype:TAsmSectiontype;const aname:string;aorder:TAsmSectionOrder):string; const - secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', {$ifdef userodata} '.text','.data','.data','.rodata','.bss','.threadvar', {$else userodata} @@ -639,7 +639,7 @@ implementation '.obcj_nlcatlist', '.objc_protolist' ); - secnames_pic : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('', + secnames_pic : array[TAsmSectiontype] of string[length('__DATA, __datacoal_nt,coalesced')] = ('','', '.text', '.data.rel', '.data.rel', @@ -700,30 +700,36 @@ implementation sep : string[3]; secname : string; begin - if (cs_create_pic in current_settings.moduleswitches) and - not(target_info.system in systems_darwin) then - secname:=secnames_pic[atype] + { section type user gives the user full controll on the section name } + if atype=sec_user then + result:=aname else - secname:=secnames[atype]; - if (atype=sec_fpc) and (Copy(aname,1,3)='res') then begin - result:=secname+'.'+aname; - exit; + if (cs_create_pic in current_settings.moduleswitches) and + not(target_info.system in systems_darwin) then + secname:=secnames_pic[atype] + else + secname:=secnames[atype]; + if (atype=sec_fpc) and (Copy(aname,1,3)='res') then + begin + result:=secname+'.'+aname; + exit; + end; + if create_smartlink_sections and (aname<>'') then + begin + case aorder of + secorder_begin : + sep:='.b_'; + secorder_end : + sep:='.z_'; + else + sep:='.n_'; + end; + result:=secname+sep+aname + end + else + result:=secname; end; - if create_smartlink_sections and (aname<>'') then - begin - case aorder of - secorder_begin : - sep:='.b_'; - secorder_end : - sep:='.z_'; - else - sep:='.n_'; - end; - result:=secname+sep+aname - end - else - result:=secname; end; diff --git a/compiler/ogmacho.pas b/compiler/ogmacho.pas index 6b6bde45bb..963a70c37c 100644 --- a/compiler/ogmacho.pas +++ b/compiler/ogmacho.pas @@ -180,6 +180,7 @@ implementation = ('sec_debug_frame','__debug_info','__debug_line','__debug_abbrev'); begin case atype of + sec_user: Result:=aname; sec_bss: Result:=MakeSectionName(seg_DATA, '__common'); sec_stab: Result:='.stabs'; sec_stabstr: Result:='.stabsstr'; diff --git a/compiler/ognlm.pas b/compiler/ognlm.pas new file mode 100644 index 0000000000..81d47454be --- /dev/null +++ b/compiler/ognlm.pas @@ -0,0 +1,1516 @@ +{ + Copyright (c) 1998-2006 by Peter Vreman + Copyright (c) 2011 by Armin Diehl + + Contains the binary netware nlm executable writer + + 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 ognlm; + +{$i fpcdefs.inc} + +interface + + uses + { common } + cclasses,globtype, + { target } + systems, + aasmbase,assemble,link, + { output } + ogbase, + owbase, + ogcoff; + +{***************************************************************************** + NLM File structures and constants +*****************************************************************************} + +{ + +LString0 -> 1 byte Length, Text, #0 +LString -> 1 byte length, Text + +Basic NLM File Structure: + +FixedHeader + nlm32_i386_external_fixed_header 130 bytes + +VarHdr1 + NLM Description: LString0 2+n bytes + Stacksize 4 bytes + reserved = 0 4 bytes + ' LONG' 5 bytes + NLM screen name: LString0 2+n bytes + NLM thread name: LString0 2+n bytes + +Optional Headers beginning with stamp (without '') +'VeRsIoN#': nlm32_i386_external_version_header 32 bytes +'CoPyRiGhT=': LString0 2+n bytes +'MeSsAgEs': nlm32_i386_external_extended_header 124 bytes +'CuStHeAd': nlm32_i386_external_custom_header +'CyGnUsEx': nlm32_i386_external_cygnus_ext_header 16 bytes + +.text +.data +.relocs= + addr(32),addr(32),... + addr and $80000000 > 0 -> FixupToSeg=.text else .data + addr and $40000000 > 0 -> FixupInSeg=.text else .data +.importedSymbols + name LString 1+n bytes + number of references r 4 bytes + addresses r*4 bytes +.exportedSymbols + name LString 1+n bytes + addr 4 bytes + addr and $80000000 > 0 -> .text else .data + ... +.modules + +.nlmdebugrecs + type (0=.data,1=.code,2,..=????) 1 byte + addr 4 bytes + name LString 1+n bytes + ... + +} + + +const NLM_MAX_DESCRIPTION_LENGTH = 127; + NLM_MAX_SCREEN_NAME_LENGTH = 71; + NLM_MAX_THREAD_NAME_LENGTH = 71; // some netware docs limit this to 12 ? + NLM_OLD_THREAD_NAME_LENGTH = 5; + NLM_HEADER_VERSION = 4; + NLM_DEFAULT_STACKSIZE = (32 * 1024); + NLM_VERSION_STAMP = 'VeRsIoN#'; + NLM_COPYRIGHT_STAMP = 'CoPyRiGhT='; + NLM_CYGNUS_STAMP = 'CyGnUsEx'; + NLM_MESSAGES_STAMP = 'MeSsAgEs'; + NLM_CUSTOM_STAMP = 'CuStHeAd'; + NLM_SIGNATURE = 'NetWare Loadable Module'#$1A; + NLM_FLAGS_REENTRANT = 1; + NLM_FLAGS_MULTILOAD = 2; + NLM_FLAGS_SYNCHRONIZE = 4; + NLM_FLAGS_PSEUDOPREEMPTION = 8; + NLM_FLAGS_OSDOMAIN = $10; + NLM_FLAGS_AUTOUNLOAD = $40; + + + type + uint32 = longword; + + nlm32_i386_external_fixed_header = packed record + signature : array[0..23] of char; + version : uint32; + (* The name of the module, which must be a DOS name (1-8 characters followed + by a period and a 1-3 character extension). The first byte is the byte + length of the name and the last byte is a null terminator byte. This + field is fixed length, and any unused bytes should be null bytes. The + value is set by the OUTPUT keyword to NLMLINK. *) + moduleName : string[13]; //array[0..13] of byte; + codeImageOffset : uint32; // The byte offset of the code image from the start of the file. + codeImageSize : uint32; // The size of the code image, in bytes. + dataImageOffset : uint32; // The byte offset of the data image from the start of the file. + dataImageSize : uint32; // The size of the data image, in bytes. + uninitializedDataSize : uint32; // The size of the uninitialized data region that the loader has to be + // allocated at load time. Uninitialized data follows the initialized + // data in the NLM address space. + customDataOffset : uint32; // The byte offset of the custom data from the start of the file. The + // custom data is set by the CUSTOM keyword to NLMLINK. It is possible + // for this to be EOF if there is no custom data. + customDataSize : uint32; // The size of the custom data, in bytes. + moduleDependencyOffset : uint32; // The byte offset of the module dependencies from the start of the file. + // The module dependencies are determined by the MODULE keyword in NLMLINK. + numberOfModuleDependencies : uint32; // he number of module dependencies at the moduleDependencyOffset. + relocationFixupOffset : uint32; // The byte offset of the relocation fixup data from the start of the file + numberOfRelocationFixups : uint32; + externalReferencesOffset : uint32; + numberOfExternalReferences : uint32; + publicsOffset : uint32; + numberOfPublics : uint32; + debugInfoOffset : uint32; // The byte offset of the internal debug info from the start of the file. + // It is possible for this to be EOF if there is no debug info. + numberOfDebugRecords : uint32; + codeStartOffset : uint32; + exitProcedureOffset : uint32; + checkUnloadProcedureOffset : uint32; + moduleType : uint32; + flags : uint32; + end; + + + { The version header is one of the optional auxiliary headers and + follows the fixed length and variable length NLM headers. } + { The header is recognized by "VeRsIoN#" in the stamp field. } + + nlm32_i386_external_version_header = packed record + stamp : array[0..7] of char; // VeRsIoN# + majorVersion, + minorVersion, + revision, + year, + month, + day : uint32; + end; + { The header is recognized by "MeSsAgEs" in the stamp field. } + + nlm32_i386_external_extended_header = packed record + stamp : array[0..7] of char; // MeSsAgEs + languageID : uint32; + messageFileOffset : uint32; + messageFileLength : uint32; + messageCount : uint32; + helpFileOffset : uint32; + helpFileLength : uint32; + RPCDataOffset : uint32; + RPCDataLength : uint32; + sharedCodeOffset : uint32; + sharedCodeLength : uint32; + sharedDataOffset : uint32; + sharedDataLength : uint32; + sharedRelocationFixupOffset : uint32; + sharedRelocationFixupCount : uint32; + sharedExternalReferenceOffset: uint32; + sharedExternalReferenceCount : uint32; + sharedPublicsOffset : uint32; + sharedPublicsCount : uint32; + sharedDebugRecordOffset : uint32; + sharedDebugRecordCount : uint32; + SharedInitializationOffset : uint32; + SharedExitProcedureOffset : uint32; + productID : longint; + reserved0 : longint; + reserved1 : longint; + reserved2 : longint; + reserved3 : longint; + reserved4 : longint; + reserved5 : longint; + end; + + nlm32_i386_external_custom_header = packed record + stamp : array[0..7] of char; // CuStHeAd + hdrLength : uint32; + dataOffset : uint32; + dataLength : uint32; + //dataStamp : array[0..7] of char; + //hdr : uint32; + end; + { The internal Cygnus header is written out externally as a custom + header. We don't try to replicate that structure here. } + { The header is recognized by "CyGnUsEx" in the stamp field. } + { File location of debugging information. } + { Length of debugging information. } + + nlm32_i386_external_cygnus_ext_header = packed record + stamp : array[0..7] of char; // CyGnUsEx + offset : uint32; + length : uint32; + end; + + +//------------------ + + + TNLMExeSection = class(TExeSection) + public + constructor createnw(AList:TFPHashObjectList;const n:string); + end; + + TsecType = (Section_text,Section_data,Section_other); + + TNLMexeoutput = class(texeoutput) + private + FRelocsGenerated,FImportsGenerated : boolean; + FNumRelocs : longword; + FNumExternals : longword; + FNumModules : longword; + FNumDebugSymbols : longword; + fSizeWoDebugSyms : longword; + FnumExports : longword; + NlmSymbols : TDynamicArray; + ExeSecsListSize : longint; + nlmImpNames, // name of import. module name as import + nlmImports : TFPHashObjectList; // name of import, list of relocs as object + headerAlignBytes : longint; + FexportFunctionOffsets:TFPList; // offsets in .exports for function addresses, an offset of $80000000 is needed + + nlmHeader : nlm32_i386_external_fixed_header; + nlmVersionHeader : nlm32_i386_external_version_header; + nlmExtHeader : nlm32_i386_external_extended_header; + nlmCustHeader : nlm32_i386_external_custom_header; + nlmHelpFileName : TCmdStr; + nlmMessagesFileName: TCmdStr; + nlmXdcFileName : TCmdStr; + nlmCopyright : string; + nlmThreadname : string; + nlmScreenname : string; + nlmDescription : string; + + function totalheadersize:longword; + procedure createNlm_symbol(const name:shortstring;value:longword;secType:TSecType); + procedure globalsyms_create_symbol(p:TObject;arg:pointer); + procedure ExeSectionList_write_header(p:TObject;arg:pointer); + procedure ExeSectionList_calc_size(p:TObject;arg:pointer); + procedure ExeSectionList_write_data(p:TObject;arg:pointer); + procedure GenerateImports; + procedure GenerateExports; + procedure GenerateRelocs; + procedure ExeSectionList_pass2_header(p:TObject;arg:pointer); + protected + function writedata:boolean;override; + public + constructor create; override; + destructor destroy; override; + procedure MemPos_Header;override; + procedure DataPos_Header;override; + procedure fillNlmVersionHeader; + procedure GenerateLibraryImports(ImportLibraryList:TFPHashObjectList);override; + procedure Order_End;override; + procedure MemPos_ExeSection(const aname:string);override; + procedure DataPos_ExeSection(const aname:string);override; + procedure NLMwriteString (const s : string; terminateWithZero : boolean); + procedure objNLMwriteString (const s : string; terminateWithZero : boolean); + procedure ParseScript (linkscript:TCmdStrList); override; + end; + + var + {for symbols defined in linker script. To generate a fixup we + need to know the segment (.text,.bss or .code) of the symbol + Pointer in list is used as TsecType + Filled by TInternalLinkerNetware.DefaultLinkScript } + nlmSpecialSymbols_Segments : TFPHashList; + + type + + TNLMCoffObjInput = class(TCoffObjInput) + constructor create;override; + end; + + TNLMCoffassembler = class(tinternalassembler) + constructor create(smart:boolean);override; + end; + + TNLMCoffObjData = class(TCoffObjData) + constructor create(const n:string);override; + end; + + TNLMCoffObjOutput = class(TCoffObjOutput) + constructor create(AWriter:TObjectWriter);override; + end; + + TNLMCoffObjSection = class(TCoffObjSection) + constructor create(AList:TFPHashObjectList;const Aname:string;Aalign:shortint;Aoptions:TObjSectionOptions);override; + end; + +implementation + + uses +{$ifdef win32} + Windows, +{$endif win32} + SysUtils, + cutils,verbose,globals, + fmodule,aasmdata, + ogmap,export + ; + + +{**************************************************************************** + Helpers +****************************************************************************} +type + TStringObj = class (TObject) + fValue : string; + constructor create (value:string); + property value : string read fValue write fValue; + end; + + constructor TStringObj.create(value:string); + begin + inherited create; + fValue := value; + end; + + + +function SectionType (aName : string) : TSecType; +var s : string; + seg: ptruint; +begin + s := copy(aName,1,5); + if s = '.text' then result := Section_text else + if (s = '.data') or (copy(s,1,4)='.bss') then result := Section_data else + if s[1] <> '.' then + begin + seg := ptruint(nlmSpecialSymbols_Segments.Find(aName)); + if seg <> 0 then + result := TSecType(seg) + else + result := Section_other; + end else + result := Section_other; +end; + +{**************************************************************************** + TNLMexesection +****************************************************************************} + + + constructor TNLMExeSection.createnw(AList:TFPHashObjectList;const n:string); + begin + inherited create(AList,n); + end; + + +{**************************************************************************** + TNLMexeoutput +****************************************************************************} + + constructor TNLMexeoutput.create; + begin + inherited create; + CExeSection:=TNLMExeSection; + CObjData:=TNLMCoffObjData; + MaxMemPos:=$7FFFFFFF; + SectionMemAlign:=$0; + SectionDataAlign:=0; + RelocSection := true; // always needed for NLM's + nlmImports := TFPHashObjectList.create(true); + nlmImpNames := TFPHashObjectList.create(false); + NlmSymbols := TDynamicArray.create(4096); + FexportFunctionOffsets := TFPList.Create; + end; + + destructor TNLMexeoutput.destroy; + begin + if assigned(nlmImports) then + nlmImports.Free; + if assigned(nlmImpNames) then + nlmImpNames.Free; + if assigned(nlmSymbols) then + nlmSymbols.Free; + if assigned(FexportFunctionOffsets) then + FexportFunctionOffsets.Free; + inherited destroy; + end; + + procedure TNLMexeoutput.createNlm_symbol(const name:shortstring;value:longword;secType:TSecType); + var + b:byte; + begin + //Comment (V_Debug,'TNLMexeoutput.write_symbol '+name); + { type (0=.data,1=.code,2,..=????) 1 byte + addr 4 bytes + name LString 1+n bytes } + case secType of + Section_Text : b := 1; + Section_Data : b := 0 + else + exit; + end; + nlmSymbols.write(b,sizeof(b)); + assert (sizeof(value)<>4); + nlmSymbols.write(value,sizeof(value)); + nlmSymbols.write(name[0],length(name)+1); + inc(FNumDebugSymbols); + end; + + + procedure TNLMexeoutput.globalsyms_create_symbol(p:TObject;arg:pointer); + var + value : longword; + exesec : TExeSection; + i : integer; + secType : TsecType; + begin + if not assigned(texesymbol(p).objsymbol) then + internalerror(200603053); + with texesymbol(p).objsymbol do + begin + exesec:=TExeSection(objsection.exesection); + { There is no exesection defined for special internal symbols + like __image_base__ } + if assigned(exesec) then + begin + //secval:=exesec.secsymidx; + value:=address-exesec.mempos; + end + else + begin + value:=address; + end; + { reloctype address to the section in the executable } + secType := SectionType(objsection.Name); + if (secType = Section_Text) or (secType = Section_Data) then + begin + i := nlmImports.FindIndexOf(texesymbol(p).name); + if i < 0 then + createNlm_symbol(name,value,secType); + end; + end; + end; + + + +(* +function SecOpts(SecOptions:TObjSectionOptions):string; + begin + result := '['; + if oso_Data in SecOptions then result := result + 'oso_Data '; + { Is loaded into memory } + if oso_load in SecOptions then result := result + 'oso_load '; + { Not loaded into memory } + if oso_noload in SecOptions then result := result + 'oso_noload '; + { Read only } + if oso_readonly in SecOptions then result := result + 'oso_readonly '; + { Read/Write } + if oso_write in SecOptions then result := result + 'oso_write '; + { Contains executable instructions } + if oso_executable in SecOptions then result := result + 'oso_executable '; + { Never discard section } + if oso_keep in SecOptions then result := result + 'oso_keep '; + { Special common symbols } + if oso_common in SecOptions then result := result + 'oso_common '; + { Contains debug info and can be stripped } + if oso_debug in SecOptions then result := result + 'oso_debug '; + { Contains only strings } + if oso_strings in SecOptions then result := result + 'oso_strings '; + result := result + ']'; + end; +*) + + procedure TNLMexeoutput.ExeSectionList_calc_size(p:TObject;arg:pointer); + var + objsec : TObjSection; + i : longint; + begin + with texesection(p) do + begin + { don't write normal section if writing only debug info } + if (ExeWriteMode=ewm_dbgonly) and + not(oso_debug in SecOptions) then + exit; + + if oso_data in secoptions then + begin + inc (fSizeWoDebugSyms,(Align(fSizeWoDebugSyms,SectionDataAlign)-fSizeWoDebugSyms)); + for i:=0 to ObjSectionList.Count-1 do + begin + objsec:=TObjSection(ObjSectionList[i]); + if oso_data in objsec.secoptions then + begin + inc(fSizeWoDebugSyms,objsec.size); + inc(fSizeWoDebugSyms,objsec.dataalignbytes); + end; + end; + end; + end; + end; + + + + procedure TNLMexeoutput.ExeSectionList_write_Data(p:TObject;arg:pointer); + var + objsec : TObjSection; + i,j : longint; + b : byte; + begin + + with texesection(p) do + begin + { don't write normal section if writing only debug info } + if (ExeWriteMode=ewm_dbgonly) and + not(oso_debug in SecOptions) then + exit; + + if oso_data in secoptions then + begin + //if Align(FWriter.Size,SectionDataAlign)-FWriter.Size>0 then + // writeln (name,' align ',Align(FWriter.Size,SectionDataAlign)-FWriter.Size,' SectionDataAlign:',SectionDataAlign); + FWriter.Writezeros(Align(FWriter.Size,SectionDataAlign)-FWriter.Size); + for i:=0 to ObjSectionList.Count-1 do + begin + objsec:=TObjSection(ObjSectionList[i]); + if oso_data in objsec.secoptions then + begin + if assigned(exemap) then + if objsec.data.size > 0 then + exemap.Add(' 0x'+hexstr(objsec.DataPos,8)+': '+objsec.name); + //writeln (' ',objsec.name,' size:',objsec.size,' relocs:',objsec.ObjRelocations.count,' DataPos:',objsec.DataPos,' MemPos:',objsec.MemPos); + {for j := 0 to objsec.ObjRelocations.count-1 do + begin + objreloc := TObjRelocation(objsec.ObjRelocations[j]); + with objreloc do + begin + write(' reloc DataOffset: ',DataOffset,' OrgSize:',OrgSize,' typ:',typ); + if assigned(symbol) then + write(' Name: '#39,symbol.Name,#39' bind:',symbol.bind,' address:',symbol.address,' Size:',symbol.size); + writeln; + end; + end;} + if not assigned(objsec.data) then + internalerror(200603042); + if copy (objsec.Name,1,5) = '.text' then + begin // write NOP's instead of zero's for .text, makes disassemble possible + b := $90; // NOP + if objsec.DataAlignBytes > 0 then + for j := 1 to objsec.DataAlignBytes do + FWriter.write(b,1); + end else + FWriter.writezeros(objsec.dataalignbytes); + //if objsec.dataalignbytes>0 then + // writeln (' ',name,' alignbytes: ',objsec.dataalignbytes); + if objsec.DataPos<>FWriter.Size then + internalerror(200602251); + FWriter.writearray(objsec.data); + end else + begin + if assigned(exemap) then //TExeMap + exemap.Add(' skipping: '+objsec.name); + end; + end; + end; + end; + end; + + + function TNLMexeoutput.totalheadersize:longword; + var + varHdrSize, + optHdrSize, + hdrSize: longword; + begin + optHdrSize := 0; + inc(optHdrSize,2+length(nlmDescription)); + inc(optHdrSize,8); // Stacksize+reserved + inc(optHdrSize,NLM_OLD_THREAD_NAME_LENGTH); + inc(optHdrSize,2+length(nlmScreenname)); + inc(optHdrSize,2+length(nlmThreadname)); + + varHdrSize := 0; + if nwcopyright <> '' then + inc(varHdrSize,sizeof(NLM_COPYRIGHT_STAMP)+2+length(nlmCopyright)); + hdrSize := sizeof(nlm32_i386_external_fixed_header)+ + sizeof(nlm32_i386_external_extended_header)+ + sizeof(nlm32_i386_external_custom_header)+ + sizeof(nlm32_i386_external_version_header)+ // always + sizeof(nlm32_i386_external_cygnus_ext_header)+ // CyGnUsEx + varHdrSize+optHdrSize+ + 8; // empty stamp + result := hdrSize; + end; + + + procedure TNLMexeoutput.MemPos_Header; + begin + { calculate start positions after the headers } + currmempos:=0; + end; + + + procedure TNLMexeoutput.ExeSectionList_write_header(p:TObject;arg:pointer); + var + nam : string; + u32,al : longword; + alignAmount:longint; + begin + with tExeSection(p) do + begin + //comment (v_debug,'ExeSectionList_write_header: '+name); + nam := name; + alignAmount := 4 - ((length (nam) + 1) MOD 4); + FWriter.write(nam[1],length(nam)); + FWriter.WriteZeros(1+alignAmount); + al := 0; + // for .stab we have to ignore leading zeros due to alignment in file + if nam='.stab' then + if assigned(ObjSectionList[0]) then + al := TObjSection(ObjSectionList[0]).dataalignbytes; + u32 := dataPos+al; FWriter.write(u32,sizeof(u32)); + u32 := size-al; FWriter.write(u32,sizeof(u32)); + end; + end; + + + + procedure TNLMexeoutput.ExeSectionList_pass2_header(p:TObject;arg:pointer); + var len,alignAmount:longint; + begin + {list of sections, extension of binutils,CuStHeAd points to this list + The format of the section information is: + null terminated section name + zeroes to adjust to 4 byte boundary + 4 byte section data file pointer + 4 byte section size } + + with TExeSection(p) do + begin + alignAmount := 4 - ((length (Name) + 1) MOD 4); + len := length(name) + 1 + alignAmount + 8; + if ObjSectionList.Count>0 then + inc(len,TObjSection(ObjSectionList[0]).dataalignbytes); + inc(plongint(arg)^,len); + end; + end; + + procedure TNLMexeoutput.DataPos_Header; + begin + ExeSecsListSize:=0; + ExeSectionList.ForEachCall(@ExeSectionList_pass2_header,@ExeSecsListSize); + + headerAlignBytes := align(totalheadersize+ExeSecsListSize,16)-(totalheadersize+ExeSecsListSize); // align as in TObjData.sectiontype2align + currdatapos:=totalheadersize+ExeSecsListSize+headerAlignBytes; + end; + + + procedure TNLMexeoutput.fillNlmVersionHeader; + var + hour,min,sec,hsec,Year,Month,Day : word; + begin + DecodeTime(Time,hour,min,sec,hsec); + DecodeDate(Date,year,month,day); + nlmVersionHeader.stamp := NLM_VERSION_STAMP; + if nlmVersionHeader.year = 0 then + begin + nlmVersionHeader.year := Year; + nlmVersionHeader.month := Month; + nlmVersionHeader.day := Day; + end; + end; + + + + function TNLMexeoutput.writedata:boolean; + var + dummyLong : array[0..4] of char; + textExeSec, + dataExeSec, + bssExeSec, + relocsExeSec, + exportsExeSec, + importsExeSec, + xdcExeSec, + messagesExeSec, + helpExeSec, + customExeSec : TExeSection; + hassymbols : boolean; + nlmCygnusHeader : nlm32_i386_external_cygnus_ext_header; + ModuleName : string; + exesym : TExeSymbol; + expOffset : PtrUInt; + expAddr : longword; + i : integer; + + begin + result:=false; + textExeSec:=FindExeSection('.text'); + dataExeSec:=FindExeSection('.data'); + bssExeSec:=FindExeSection('.bss'); + relocsExeSec:=FindExeSection('.reloc'); + importsExeSec:=FindExeSection('.imports'); + exportsExeSec:=FindExeSection('.exports'); + xdcExeSec:=FindExeSection('.xdc'); + messagesExeSec:=FindExeSection('.messages'); + helpExeSec:=FindExeSection('.help'); + customExeSec:=FindExeSection('.custom'); + + // exported function need the upper bit in the address + // to be set (=CODE), do this here to avoid another + // reloc type. The ExportFunctionOffsets list was + // filled in GenerateExports + if FexportFunctionOffsets.Count>0 then + begin + if not assigned(exportsExeSec) then + internalerror(201103201); // we have to have a .export section + if not assigned(exportsExeSec.ObjSectionList[0]) then + internalerror(201103202); // nothing in the .exports section but we have data in FexportFunctionOffsets + for i := 0 to FexportFunctionOffsets.Count-1 do + begin + expOffset := PtrUint(FexportFunctionOffsets[i]); + if TObjSection(exportsExeSec.ObjSectionList[0]).Data.size < expOffset+3 then + internalerror(201103203); // offset in FexportFunctionOffsets out of range + with TObjSection(exportsExeSec.ObjSectionList[0]) do + begin // set the upper bit of address to indicate .text + Data.seek(expOffset); + Data.read(expAddr,4); + Data.seek(expOffset); + expAddr := expAddr or $80000000; + Data.write(expAddr,4); + end; + end; + end; + + if not assigned(TextExeSec) or + not assigned(RelocsExeSec) or + not assigned(DataExeSec) then + internalerror(200602231); // we have to have .data, .text and .reloc + { do we need to write symbols? } + hassymbols:=(ExeWriteMode=ewm_dbgonly) or + ( + (ExeWriteMode=ewm_exefull) and + not(cs_link_strip in current_settings.globalswitches) + ); + + { Initial header, will be updated later } + nlmHeader.signature := NLM_SIGNATURE; + nlmHeader.version := NLM_HEADER_VERSION; + moduleName := upperCase(current_module.exefilename^); + nlmHeader.moduleName := moduleName; + nlmHeader.codeImageOffset := TextExeSec.DataPos+TObjSection(TextExeSec.ObjSectionList[0]).dataalignbytes; // ??? may be that align has to be moved to fixups/imports + nlmHeader.codeImageSize := TextExeSec.Size; + nlmHeader.dataImageOffset := DataExeSec.DataPos; + nlmHeader.dataImageSize := DataExeSec.Size; + if assigned(BSSExeSec) then + nlmHeader.uninitializedDataSize:=BSSExeSec.Size; + if assigned(customExeSec) then + begin + nlmHeader.customDataOffset := customExeSec.DataPos; + nlmHeader.customDataSize := customExeSec.Size; + end; + if FNumModules > 0 then + begin + nlmHeader.moduleDependencyOffset := FindExeSection('.modules').DataPos+4; // 4 bytes dummy + nlmHeader.numberOfModuleDependencies := FNumModules; + end; + nlmHeader.relocationFixupOffset := relocsExeSec.DataPos; + nlmHeader.numberOfRelocationFixups := FNumRelocs; + nlmHeader.externalReferencesOffset := importsExeSec.DataPos+4; // 4 bytes dummy + nlmHeader.numberOfExternalReferences := FNumExternals; + if assigned(exportsExeSec) then + if exportsExeSec.Size>0 then + begin + nlmHeader.publicsOffset := exportsExeSec.dataPos; + nlmHeader.numberOfPublics := FnumExports; + end; + nlmHeader.codeStartOffset := EntrySym.Address; + + {exit function} + exesym:=texesymbol(ExeSymbolList.Find('_Stop')); + if assigned(exesym) then + nlmHeader.exitProcedureOffset := exesym.ObjSymbol.address; + + {check exit function} + exesym:=texesymbol(ExeSymbolList.Find('FPC_NW_CHECKFUNCTION')); + if assigned(exesym) then + nlmHeader.checkUnloadProcedureOffset := exesym.ObjSymbol.address; + + // calc file pos after all exesections + fSizeWoDebugSyms := totalheadersize + ExeSecsListSize + headerAlignBytes; + ExeSectionList.ForEachCall(@ExeSectionList_calc_size,nil); + + nlmExtHeader.stamp := NLM_MESSAGES_STAMP; + //extHeader.languageID // TODO: where to get this from ? + if assigned(messagesExeSec) then + begin + nlmExtHeader.messageFileOffset := messagesExeSec.DataPos; + nlmExtHeader.messageFileLength := messagesExeSec.Size; + end; + //nlmExtHeader.messageCount // TODO: how is messageCount set ? + if assigned(helpExeSec) then + begin + nlmExtHeader.helpFileOffset := helpExeSec.DataPos; + nlmExtHeader.helpFileLength := helpExeSec.Size; + end; + //nlmExtHeader.productID // TODO: were does this came from ? + if assigned(xdcExeSec) then + begin + nlmExtHeader.RPCDataOffset := xdcExeSec.DataPos; + nlmExtHeader.RPCDataLength := xdcExeSec.Size; + end; + + if hassymbols then + begin + nlmHeader.debugInfoOffset := fSizeWoDebugSyms; + ExeSymbolList.ForEachCall(@globalsyms_create_symbol,nil); + nlmHeader.numberOfDebugRecords := FNumDebugSymbols; + end; + + fillNlmVersionHeader; + FWriter.write(nlmHeader,sizeof(nlmHeader)); + + { variable header } + NLMWriteString(nlmDescription,true); + if stacksize < NLM_DEFAULT_STACKSIZE then stacksize := NLM_DEFAULT_STACKSIZE; + FWriter.Write(stacksize,4); + FWriter.writezeros(4); + dummyLong := ' LONG'; + FWriter.Write(dummyLong,sizeof(dummyLong)); // old thread name + NLMWriteString(nlmScreenname,true); + NLMWriteString(nlmThreadname,true); + + {version} + FWriter.Write(nlmVersionHeader,sizeof(nlmVersionHeader)); + {copyright} + if nlmCopyright <> '' then + begin + FWriter.write(NLM_COPYRIGHT_STAMP,sizeof(NLM_COPYRIGHT_STAMP)); + NLMWriteString(nlmCopyright,true); + end; + {messages} + FWriter.write(nlmExtHeader,sizeof(nlmExtHeader)); + + {custhead} + nlmCustHeader.stamp := NLM_CUSTOM_STAMP; + nlmCustHeader.dataLength := ExeSecsListSize; + nlmCustHeader.dataOffset := totalheadersize; + nlmCustHeader.hdrLength := $10; // why 16 ?, this is what binutils write + FWriter.write(nlmCustHeader,sizeof(nlmCustHeader)); + + {CyGnUsEx} + // bfd has a strange way to read the sections: + // the section directory is written under CuStHeAd + // when bfd finds the neader "CyGnUsEx", it uses the + // offset and size from CuStHeAd to read the section table + + nlmCygnusHeader.stamp := NLM_CYGNUS_STAMP; // CyGnUsEx + // ld writes some unknown values here, bfd irgnores the values at all + // lets write the offset and length of the segment table + nlmCygnusHeader.offset := nlmCustHeader.dataLength; + nlmCygnusHeader.length := nlmCustHeader.dataOffset; + FWriter.write(nlmCygnusHeader,sizeof(nlmCygnusHeader)); + FWriter.WriteZeros(8); // empty stamp + align next to 16 bytes + + if FWriter.Size<>totalheadersize then + internalerror(201103061); // headersize <> header written + + { Section headers, CuStHeAd points to this section, not needed by + netware. Can be used to find the section in the nlm file, binutils + will use this section } + ExeSectionList.ForEachCall(@ExeSectionList_write_header,nil); + FWriter.WriteZeros(headerAlignBytes); + if FWriter.Size<>totalheadersize+ExeSecsListSize+headerAlignBytes then + internalerror(201103062); + { Section data } + if assigned(exemap) then + begin + exemap.Add(''); + exemap.Add('NLM file offsets:'); + end; + ExeSectionList.ForEachCall(@ExeSectionList_write_data,nil); + + if hassymbols then + FWriter.writearray(NlmSymbols); // specific symbols for the internal netware debugger + + result:=true; + end; + + + + procedure TNLMexeoutput.GenerateLibraryImports(ImportLibraryList:TFPHashObjectList); + var + idata5objsection : TObjSection; + basedllname : string; + + function AddImport(const afuncname,amangledname:string; isvar:boolean):TObjSymbol; + var + secname:string; + begin + //Comment (V_Debug,'TNLMexeoutput.GenerateLibraryImports.AddImport '+afuncName); + result:=nil; + if assigned(exemap) then + exemap.Add(' Importing Function '+afuncname); + + if not isvar then + with internalobjdata do + begin + secname:=basedllname+'_i_'+amangledname; + idata5objsection:=createsection(sec_idata5, secname); + internalobjdata.SetSection(idata5objsection); + result:=internalobjdata.SymbolDefine('_'+amangledname,AB_IMPORT,AT_FUNCTION); + end; + end; + + var + i,j : longint; + ImportLibrary : TImportLibrary; + ImportSymbol : TImportSymbol; + exesym : TExeSymbol; + importAddressList : TFPObjectList; + begin + if ImportLibraryList.Count > 0 then + begin + {objsec:=}internalObjData.createsection('.imports',0,[oso_data,oso_keep]); + i := 0; + internalobjdata.writebytes(i,4); // dummy to avoid deletion + {objsec:=}internalObjData.createsection('.modules',0,[oso_data,oso_keep]); + internalobjdata.writebytes(i,4); // dummy to avoid deletion + end; + for i:=0 to ImportLibraryList.Count-1 do + begin + ImportLibrary:=TImportLibrary(ImportLibraryList[i]); + idata5objsection:=nil; + for j:=0 to ImportLibrary.ImportSymbolList.Count-1 do + begin + ImportSymbol:=TImportSymbol(ImportLibrary.ImportSymbolList[j]); + exesym:=TExeSymbol(ExeSymbolList.Find(ImportSymbol.MangledName)); + if assigned(exesym) and + (exesym.State<>symstate_defined) then + begin + basedllname:=ExtractFileName(ImportLibrary.Name); + exesym.objsymbol:=AddImport(ImportSymbol.Name,ImportSymbol.MangledName,ImportSymbol.IsVar); + exesym.State:=symstate_defined; + importAddressList := TFPObjectList.create(false); + nlmImports.Add(ImportSymbol.Name,importAddressList); + if pos('.',basedllname) = 0 then + basedllname := basedllname + '.nlm'; + nlmImpNames.Add(ImportSymbol.Name,TStringObj.create(lower(basedllname))); + end; + end; + end; + + PackUnresolvedExeSymbols('after DLL imports'); + GenerateExports; + end; + + + + procedure TNLMexeoutput.GenerateImports; + var + exesec, + impexesec : TExeSection; + objsec : TObjSection; + objreloc : TObjRelocation; + i,j,k : integer; + importAddressList : TFPObjectList; + name,mName : string; + b : byte; + modules : string; + modName : TStringObj; + begin + if FImportsGenerated then exit; + FImportsGenerated := true; + impexesec:=FindExeSection('.imports'); + if impexesec=nil then exit; + + for i:=0 to ExeSectionList.Count-1 do + begin + exesec:=TExeSection(ExeSectionList[i]); + for j:=0 to exesec.ObjSectionList.count-1 do + begin + objsec:=TObjSection(exesec.ObjSectionList[j]); + if j=0 then + begin + exesec.DataPos:=objSec.DataPos; + exesec.MemPos:=objSec.MemPos; + end; + if (copy(objsec.name,1,5) <> '.text') and (copy(objsec.name,1,4) <> '.bss') and (copy(objsec.name,1,5) <> '.data') then + continue; + for k:=0 to objsec.ObjRelocations.Count-1 do + begin + objreloc := TObjRelocation(objsec.ObjRelocations[k]); + if assigned(objreloc.symbol) then + begin + //writeln (objreloc.symbol.name,' ',objreloc.symbol.bind); + if objreloc.symbol.bind = AB_IMPORT then + begin + importAddressList := TFPObjectList(nlmImports.Find(objreloc.symbol.name)); + if assigned(importAddressList) then + begin + objreloc.objsection := objsec; // points to idata5 + importAddressList.Add(objreloc); + end else + begin + comment(v_error,objreloc.symbol.name+' is external but not defined in nlm imports'); + end; + end; + end + end; + end; + end; + + modules := ''; + for i := 0 to nlmImports.count-1 do + begin + importAddressList := TFPObjectList(nlmImports.Items[i]); + if importAddressList.Count > 0 then + begin + name := nlmImports.NameOfIndex(i); + + // find the module to be imported and add it to the list + // of modules to be auto loaded + modName := TStringObj(nlmImpNames.Find(name)); + if assigned(modName) then + begin + mName := modName.Value; + if mName <> '' then + if copy(mName,1,1) <> '!' then // special, with ! only the imp will be included but no module is autoloaded, needed i.e. for netware.imp + begin + if pos(mName+';',modules) < 1 then + begin + modules := modules + mName + ';'; + inc(FNumModules); + end; + end; + end; + internalobjdata.SetSection(TObjSection(impexesec.ObjSectionList[0])); + objNLMwriteString (name,false); // name of symbol + k := importAddressList.Count; + internalobjdata.writebytes(k,sizeof(k)); // number of references + inc(FNumExternals); + for j := 0 to importAddressList.Count-1 do + begin + objreloc := TObjRelocation(importAddressList[j]); + objsec := objreloc.objsection; + if oso_executable in objreloc.objsection.SecOptions then + begin + if objreloc.typ <> RELOC_RELATIVE then comment(v_error,'reference to external symbols must be RELOC_RELATIVE'); + // TODO: how to check if size is 4 ???? + + k := objsec.MemPos + objreloc.DataOffset; + k := k or $40000000; + // TODO: data|code if we support importing data symbols + // i do not know if this is possible with netware + internalobjdata.writebytes(k,sizeof(k)); // address + + // the netware loader requires an offset at the import address + // for call = E8 this is -4 + // TODO: how can we check the needed offset ?? + if objreloc.DataOffset > 0 then + begin + objsec.Data.seek(objreloc.DataOffset-1); + objsec.data.read(b,1); + if b <> $E8 then + comment(v_error,'no rcall (E8) before imported symbol target address'); + k := -4; + objsec.Data.write(k,sizeof(k)); + end else + begin + objsec.Data.seek(objreloc.DataOffset); + k := 0; + objsec.Data.write(k,sizeof(k)); + end; + objreloc.typ := RELOC_NONE; // to avoid that TCoffObjSection.fixuprelocs changes the address again + end else + comment(v_error,'Importing of symbols only supported for .text'); + end; + end; + end; + + exesec := FindExeSection('.modules'); + if not assigned(exesec) then internalerror(201103272); // exe section .modules does not exist ??? + internalobjdata.SetSection(TObjSection(exesec.ObjSectionList[0])); + for i := 1 to FNumModules do + begin + name := GetToken(modules,';'); + objNLMwriteString (name,false); + end; + end; + + + procedure TNLMexeoutput.GenerateExports; + var + hp : texported_item; { for exports } + len : byte; + addr: longword; + exesym : texesymbol; + begin + internalObjData.createsection('.exports',0,[oso_data,oso_keep]); + {name LString 1+n bytes + addr 4 bytes + addr and $80000000 > 0 -> .text else .data} + hp:=texported_item(current_module._exports.first); + if assigned(hp) then + if assigned(exemap) then + exemap.Add(''); + while assigned(hp) do + begin + { Export the Symbol } + if assigned(exemap) then + exemap.Add(' Exporting Function '+hp.sym.prettyname+' as '+hp.name^); + len := length(hp.name^); + internalobjdata.writebytes(len,1); + internalobjdata.writebytes(hp.name^[1],len); + exesym:=texesymbol(ExeSymbolList.Find(hp.sym.prettyname)); + if not assigned(exesym) then + begin + comment(v_error,'exported symbol '+hp.sym.prettyname+' not found'); + exit; + end; + // for exported functions we have to set the upper bit + // this will be done in .writedata + if not hp.is_var then + FexportFunctionOffsets.Add(pointer(PtrUInt(internalobjdata.CurrObjSec.Size))); + internalobjdata.writereloc(0,4,exesym.ObjSymbol,RELOC_ABSOLUTE32); + + addr := 0; + internalobjdata.writebytes(addr,4); + inc(FnumExports); + hp:=texported_item(hp.next); + end; + end; + + procedure TNLMexeoutput.GenerateRelocs; + + var + exesec : TExeSection; + objsec : TObjSection; + objreloc : TObjRelocation; + i,j,k : longint; + offset : longword; + inSec,toSec : TsecType; + targetSectionName : string; + + begin + if not RelocSection or FRelocsGenerated then + exit; + exesec:=FindExeSection('.reloc'); + if exesec=nil then + exit; + objsec:=internalObjData.createsection('.reloc',0,exesec.SecOptions+[oso_data]); + exesec.AddObjSection(objsec); + for i:=0 to ExeSectionList.Count-1 do + begin + exesec:=TExeSection(ExeSectionList[i]); + for j:=0 to exesec.ObjSectionList.count-1 do + begin + objsec:=TObjSection(exesec.ObjSectionList[j]); + //writeln ('Relocs for ',exesec.name,' - ',objsec.name); + { create relocs only for sections which are loaded in memory } + if not (oso_load in objsec.SecOptions) then + continue; + { create relocs only for .text and .data } + inSec := SectionType (objsec.name); + if (inSec <> Section_Text) and (inSec <> Section_Data) then + continue; + + for k:=0 to objsec.ObjRelocations.Count-1 do + begin + objreloc:=TObjRelocation(objsec.ObjRelocations[k]); + if objreloc.typ <> RELOC_ABSOLUTE then + continue; + offset:=objsec.MemPos+objreloc.dataoffset; + targetSectionName := ''; + if objreloc.symbol <> nil then + begin + // writeln (' MemPos',objsec.MemPos,' dataOfs:',objreloc.dataoffset,' ',objsec.name,' objreloc.symbol: ',objreloc.symbol.name,' objreloc.symbol.objsection.name: ',objreloc.symbol.objsection.name,' ',objreloc.symbol.Typ,' ',objreloc.symbol.bind,' ',objreloc.Typ); + if objreloc.symbol.objsection.name[1] <> '.' then + targetSectionName := objreloc.symbol.name // specials like __bss_start__ + else // dont use objsection.name because it begins with * + targetSectionName := copy(objreloc.symbol.objsection.name,1,5); // all others begin with .segment, we only have to check for .text, .data or .bss + end else + internalerror(2011030603); + + toSec := SectionType(targetSectionName); + + if (toSec = Section_Text) or (toSec = Section_Data) then + begin + if (inSec = Section_text) then offset := offset or $40000000; + if (toSec = Section_text) then offset := offset or $80000000; + internalObjData.writebytes(offset,4); + inc(FNumRelocs); + end; + end; + end; + end; + FRelocsGenerated:=true; + end; + + + procedure TNLMexeoutput.Order_End; + var + exesec : TExeSection; + begin + inherited; + exesec:=FindExeSection('.reloc'); + if exesec=nil then + exit; + exesec.SecOptions:=exesec.SecOptions + [oso_Data,oso_keep,oso_load]; + end; + + + procedure TNLMexeoutput.MemPos_ExeSection(const aname:string); + begin + if aname='.reloc' then + GenerateRelocs; + if aname='.imports' then + GenerateImports; + if aname='.data' then + currMemPos := 0; // both, data and code in the nlm have a start offset of 0 + inherited; + end; + + + procedure TNLMexeoutput.DataPos_ExeSection(const aname:string); + begin + inherited; + end; + + + procedure TNLMexeoutput.NLMwriteString (const s : string; terminateWithZero : boolean); + var len : byte; + begin + if length(s) > 254 then len := 254 else len := length(s); + FWriter.Write(len,1); + if len > 0 then + FWriter.write(s[1],len); + if terminateWithZero then + FWriter.writeZeros(1); + end; + + + procedure TNLMexeoutput.objNLMwriteString (const s : string; terminateWithZero : boolean); + var len : byte; + begin + if length(s) > 254 then len := 254 else len := length(s); + Internalobjdata.writebytes(len,1); + if len > 0 then + Internalobjdata.writebytes(s[1],len); + if terminateWithZero then + begin + len := 0; + Internalobjdata.writebytes(s[1],len); + end; + end; + + { parse netware specific linker options } + procedure TNLMexeoutput.ParseScript (linkscript:TCmdStrList); + var + hp : TCmdStrListItem; + opt,keyword,s : string; + i : integer; + + function toInteger(s:string; min,max:integer; var res:integer):boolean; + var + code:word; + begin + result := false; + val (s,res,code); + if code<>0 then exit; + if (res < min) or (res > max) then exit; + result := true; + end; + + + procedure loadFile (const secName, fileName, Desc : string); + var + fileBuf : array [0..4095] of char; + bytesRead : longint; + fileH : THandle; + fn : TCmdStr; + + begin + fn := fileName; + if not fileExists(fn) then + if not unitsearchpath.FindFile(fileName,true,fn) then + begin + comment(v_error,'can not find '+desc+' file '+fileName); + exit; + end; + fileH := fileOpen (fn,fmOpenRead); + if fileH = -1 then + begin + comment(v_error,'can not open '+desc+' file '+fn); + exit; + end; + { load file into section } + internalObjData.createsection(secName,0,[oso_data,oso_keep]); + repeat + bytesRead := fileRead(fileH,fileBuf,sizeof(fileBuf)); + if bytesRead > 0 then + internalobjdata.writebytes(fileBuf,bytesRead); + until bytesRead < sizeof(fileBuf); + fileClose(fileH); + end; + + begin + hp:=TCmdStrListItem(linkscript.first); + while assigned(hp) do + begin + opt:=hp.str; + if (opt='') or (opt[1]='#') then + continue; + keyword:=Upper(GetToken(opt,' ')); + if keyword = 'AUTOUNLOAD' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_AUTOUNLOAD; + end else + if keyword = 'COPYRIGHT' then + begin + nlmCopyright := GetToken(opt,' '); + end else + if keyword = 'CUSTOM' then + begin + loadFile ('.custom',GetToken(opt,' '),'custom data'); + end; + if keyword = 'DATE' then // month day 4-digit-year + begin + if not toInteger(GetToken(opt,' '),1,12,i) then comment(v_error,'DATE: invalid month') + else nlmVersionHeader.month := i; + if not toInteger(GetToken(opt,' '),1,31,i) then comment(v_error,'DATE: invalid day') + else nlmVersionHeader.day := i; + if not toInteger(GetToken(opt,' '),1900,3000,i) then comment(v_error,'DATE: invalid year') + else nlmVersionHeader.year := i; + end else + if keyword = 'DEBUG' then + begin + // ignore + end else + if keyword = 'DESCRIPTION' then + begin + nlmDescription := GetToken(opt,' '); + if length (nlmDescription) > NLM_MAX_DESCRIPTION_LENGTH then + nlmDescription := copy (nlmDescription,1,NLM_MAX_DESCRIPTION_LENGTH); + end else + if keyword = 'FLAG' then + begin + s := upper(GetToken(opt,' ')); + if (not toInteger(GetToken(opt,' '),1,$FFFFFFF,i)) or ((s <> 'ON') and (S <> 'OFF')) then comment(v_error,'FLAG: invalid') else + if (s='ON') then + nlmHeader.flags:=nlmHeader.flags or i else + nlmHeader.flags:=nlmHeader.flags and ($FFFFFFF-i); + end else + if keyword = 'HELP' then + begin + loadFile ('.help',GetToken(opt,' '),'help'); + end else + if keyword = 'MESSAGES' then + begin + loadFile ('.messages',GetToken(opt,' '),'message'); + end else + if keyword = 'MULTIPLE' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_MULTILOAD; + end else + if keyword = 'OS_DOMAIN' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_OSDOMAIN; + end else + if keyword = 'PSEUDOPREEMPTION' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_PSEUDOPREEMPTION; + end else + if keyword = 'REENTRANT' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_REENTRANT; + end else + if keyword = 'SCREENNAME' then + begin + nlmScreenname := GetToken(opt,' '); + if length(nlmScreenname) > NLM_MAX_SCREEN_NAME_LENGTH then + nlmScreenName := copy (nlmScreenName,1,NLM_MAX_SCREEN_NAME_LENGTH); + end else + if (keyword = 'STACK') or (keyword = 'STACKSIZE') then + begin + if (not toInteger(GetToken(opt,' '),1,$FFFFFFF,i)) then comment(v_error,'invalid stacksize') else + stacksize := i; + end else + if keyword = 'SYNCHRONIZE' then + begin + nlmHeader.flags:=nlmHeader.flags or NLM_FLAGS_SYNCHRONIZE; + end else + if keyword = 'THREADNAME' then + begin + nlmThreadname := GetToken(opt,' '); + if length(nlmThreadname) > NLM_MAX_THREAD_NAME_LENGTH then + nlmThreadname := copy (nlmThreadname,1,NLM_MAX_THREAD_NAME_LENGTH); + end else + if keyword = 'TYPE' then + begin + if (not toInteger(GetToken(opt,' '),1,16,i)) then comment(v_error,'invalid TYPE') else + nlmHeader.moduleType := i; // TODO: set executable extension (.DSK, .LAN, ...) + end else + if keyword = 'VERSION' then + begin + if (not toInteger(GetToken(opt,' '),0,$FFFFFFF,i)) then comment(v_error,'invalid major version') else + nlmVersionHeader.majorVersion := i; + if (not toInteger(GetToken(opt,' '),0,99,i)) then comment(v_error,'invalid minor version') else + nlmVersionHeader.minorVersion := i; + if (not toInteger(GetToken(opt,' '),0,$FFFFFFF,i)) then comment(v_error,'invalid minor version') else + if i > 26 then + nlmVersionHeader.revision := 0 else + nlmVersionHeader.revision := i; + end else + if keyword = 'XDCDATA' then + begin + loadFile ('.xdc',GetToken(opt,' '),'xdc'); + end; + { TODO: check for unknown options. This means all handled option + (also in link.pas) have to be flagged if processed } + hp:=TCmdStrListItem(hp.next); + end; + end; + +{**************************************************************************** + TNLMCoffObjData +****************************************************************************} + + constructor TNLMCoffObjData.create(const n:string); + begin + inherited createcoff(n,true,TNLMCoffObjSection); + end; + + +{**************************************************************************** + TNLMoffObjSection +****************************************************************************} + + constructor TNLMCoffObjSection.create(AList:TFPHashObjectList;const aname:string;aalign:shortint;aoptions:TObjSectionOptions); + begin + inherited create(alist,aname,aalign,aoptions); + end; + + + constructor TNLMCoffObjOutput.create(AWriter:TObjectWriter); + begin + // ?????? + // if win32=false, .stabs and .stabstr will be written without oso_debug + // Without oso_debug the sections will be removed by the linker + inherited createcoff(AWriter,{win32}true); + cobjdata:=TNLMCoffObjData; + end; + +{**************************************************************************** + TDJCoffAssembler +****************************************************************************} + + constructor TNLMCoffAssembler.Create(smart:boolean); + begin + inherited Create(smart); + CObjOutput:=TNLMCoffObjOutput; + end; + + constructor TNLMCoffObjInput.create; + begin + inherited createcoff(true); + cobjdata:=TNLMCoffObjData; + end; + +{***************************************************************************** + Initialize +*****************************************************************************} +const + as_i386_nlmcoff_info : tasminfo = + ( + id : as_i386_nlmcoff; + idtxt : 'NLMCOFF'; + asmbin : ''; + asmcmd : ''; + supported_targets : [system_i386_Netware,system_i386_netwlibc]; + flags : [af_outputbinary,af_smartlink_sections]; + labelprefix : '.L'; + comment : ''; + ); + + + +initialization +{$ifdef i386} + RegisterAssembler(as_i386_nlmcoff_info,TNLMCoffAssembler); +{$endif i386} +end. diff --git a/compiler/owar.pas b/compiler/owar.pas index 8a5a39ca8d..b714700385 100644 --- a/compiler/owar.pas +++ b/compiler/owar.pas @@ -262,11 +262,11 @@ implementation procedure tarobjectwriter.writear; var - arf : TCFileStream; + arf : TCCustomFileStream; fixup,l, relocs,i : longint; begin - arf:=TCFileStream.Create(arfn,fmCreate); + arf:=CFileStreamClass.Create(arfn,fmCreate); if CStreamError<>0 then begin Message1(exec_e_cant_create_archivefile,arfn); diff --git a/compiler/owbase.pas b/compiler/owbase.pas index 592d463aac..56558b2fa4 100644 --- a/compiler/owbase.pas +++ b/compiler/owbase.pas @@ -31,7 +31,7 @@ uses type tobjectwriter=class private - f : TCFileStream; + f : TCCustomFileStream; opened : boolean; buf : pchar; bufidx : longword; @@ -54,7 +54,7 @@ type tobjectreader=class private - f : TCFileStream; + f : TCCustomFileStream; opened : boolean; buf : pchar; ffilename : string; @@ -108,7 +108,7 @@ end; function tobjectwriter.createfile(const fn:string):boolean; begin createfile:=false; - f:=TCFileStream.Create(fn,fmCreate); + f:=CFileStreamClass.Create(fn,fmCreate); if CStreamError<>0 then begin Message1(exec_e_cant_create_objectfile,fn); @@ -233,7 +233,7 @@ end; function tobjectreader.openfile(const fn:string):boolean; begin openfile:=false; - f:=TCFileStream.Create(fn,fmOpenRead); + f:=CFileStreamClass.Create(fn,fmOpenRead); if CStreamError<>0 then begin Comment(V_Error,'Can''t open object file: '+fn); diff --git a/compiler/paramgr.pas b/compiler/paramgr.pas index 0e844da786..8fde613a00 100644 --- a/compiler/paramgr.pas +++ b/compiler/paramgr.pas @@ -366,7 +366,8 @@ implementation i386 isn't affected anyways because it uses the stack to push parameters on arm it reduces executable size of the compiler by 2.1 per cent (FK) } { Does it fit a register? } - if (not can_use_final_stack_loc or + if ((not can_use_final_stack_loc and + use_fixed_stack) or not is_stack_paraloc(paraloc)) and (len<=sizeof(pint)) and (paraloc^.size in [OS_8,OS_16,OS_32,OS_64,OS_128,OS_S8,OS_S16,OS_S32,OS_S64,OS_S128]) then @@ -382,7 +383,8 @@ implementation newparaloc^.register:=cg.getmmregister(list,paraloc^.size); LOC_REFERENCE : begin - if can_use_final_stack_loc and + if (can_use_final_stack_loc or + not use_fixed_stack) and is_stack_paraloc(paraloc) then duplicatecgparaloc(paraloc,newparaloc) else diff --git a/compiler/pdecl.pas b/compiler/pdecl.pas index 277d0630f9..63c1bb219a 100644 --- a/compiler/pdecl.pas +++ b/compiler/pdecl.pas @@ -397,7 +397,6 @@ implementation typename,orgtypename : TIDString; newtype : ttypesym; sym : tsym; - srsymtable : TSymtable; hdef : tdef; defpos,storetokenpos : tfileposinfo; old_block_type : tblock_type; @@ -462,8 +461,10 @@ implementation current_scanner.startrecordtokens(generictokenbuf); end; - { is the type already defined? } - searchsym(typename,sym,srsymtable); + { is the type already defined? -- must be in the current symtable, + not in a nested symtable or one higher up the stack -> don't + use searchsym & frinds! } + sym:=tsym(symtablestack.top.find(typename)); newtype:=nil; { found a symbol with this name? } if assigned(sym) then diff --git a/compiler/pdecobj.pas b/compiler/pdecobj.pas index 54e7f7c688..8fafe9f7c5 100644 --- a/compiler/pdecobj.pas +++ b/compiler/pdecobj.pas @@ -280,12 +280,13 @@ implementation procedure handleImplementedProtocol(intfdef : tobjectdef); begin + intfdef:=find_real_objcclass_definition(intfdef,false); if not is_objcprotocol(intfdef) then begin Message1(type_e_protocol_type_expected,intfdef.typename); exit; end; - if (oo_is_forward in intfdef.objectoptions) then + if ([oo_is_forward,oo_is_formal] * intfdef.objectoptions <> []) then begin Message1(parser_e_forward_protocol_declaration_must_be_resolved,intfdef.objrealname^); exit; diff --git a/compiler/pdecsub.pas b/compiler/pdecsub.pas index 9efb4e0265..e982dd3ed0 100644 --- a/compiler/pdecsub.pas +++ b/compiler/pdecsub.pas @@ -1611,9 +1611,22 @@ begin end; procedure pd_interrupt(pd:tabstractprocdef); + +var v: Tconstexprint; + begin if pd.parast.symtablelevel>normal_function_level then Message(parser_e_dont_nest_interrupt); + + if target_info.system in systems_interrupt_table then + begin + if token<>_SEMICOLON then + begin + pd.proccalloption:=pocall_interrupt; + v:=get_intconst; + Tprocdef(pd).interruptvector:=v.uvalue; + end; + end; end; procedure pd_abstract(pd:tabstractprocdef); @@ -3084,7 +3097,7 @@ const can be in a different location because of the calling convention, eg. L-R vs. R-L order (PFV) } ( (compare_paras(currpd.paras,fwpd.paras,cp_none,[cpo_comparedefaultvalue,cpo_ignorehidden,cpo_openequalisexact,cpo_ignoreuniv])=te_exact) and - (fwpd.returndef=currpd.returndef) + (compare_defs(fwpd.returndef,currpd.returndef,nothingn)=te_exact) ) then begin { Check if we've found the forwarddef, if found then @@ -3155,7 +3168,7 @@ const if ((m_repeat_forward in current_settings.modeswitches) or not is_bareprocdef(currpd)) and ((compare_paras(currpd.paras,fwpd.paras,cp_all,paracompopt)<>te_exact) or - (fwpd.returndef<>currpd.returndef)) then + (compare_defs(fwpd.returndef,currpd.returndef,nothingn)<>te_exact)) then begin MessagePos1(currpd.fileinfo,parser_e_header_dont_match_forward, fwpd.fullprocname(false)); diff --git a/compiler/pdecvar.pas b/compiler/pdecvar.pas index b085d60fa4..259ca0c45d 100644 --- a/compiler/pdecvar.pas +++ b/compiler/pdecvar.pas @@ -1041,6 +1041,17 @@ implementation end; + procedure try_consume_sectiondirective(var asection: ansistring); + begin + if idtoken=_SECTION then + begin + consume(_ID); + asection:=get_stringconst; + consume(_SEMICOLON); + end; + end; + + procedure read_var_decls(options:Tvar_dec_options); procedure read_default_value(sc : TFPObjectList); @@ -1253,6 +1264,7 @@ implementation hintsymoptions : tsymoptions; deprecatedmsg : pshortstring; old_block_type : tblock_type; + section : ansistring; begin old_block_type:=block_type; block_type:=bt_var; @@ -1394,6 +1406,24 @@ implementation ) then read_public_and_external_sc(sc); + { try to parse a section directive } + if (target_info.system in systems_embedded) and (idtoken=_SECTION) then + begin + try_consume_sectiondirective(section); + if section<>'' then + begin + for i:=0 to sc.count-1 do + begin + vs:=tabstractvarsym(sc[i]); + if (vs.varoptions *[vo_is_external,vo_is_weak_external])<>[] then + Message(parser_e_externals_no_section); + if vs.typ<>staticvarsym then + Message(parser_e_section_no_locals); + tstaticvarsym(vs).section:=section; + end; + end; + end; + { allocate normal variable (non-external and non-typed-const) staticvarsyms } for i:=0 to sc.count-1 do begin diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index b4438306e2..c3c8e36339 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -1451,7 +1451,7 @@ implementation { e.g., "with classinstance do field := 5"), then } { let do_member_read handle it } if (srsym.owner.symtabletype in [ObjectSymtable,recordsymtable]) then - do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]) + do_member_read(tabstractrecorddef(hdef),getaddr,srsym,p1,again,[]) else { otherwise it's a regular record subscript } p1:=csubscriptnode.create(srsym,p1); @@ -1507,7 +1507,7 @@ implementation if assigned(srsym) then check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg); consume(_ID); - do_member_read(tobjectdef(hdef),false,srsym,p1,again,[]); + do_member_read(tabstractrecorddef(hdef),false,srsym,p1,again,[]); end else begin @@ -1522,7 +1522,7 @@ implementation begin check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg); consume(_ID); - do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]); + do_member_read(tabstractrecorddef(hdef),getaddr,srsym,p1,again,[]); end else Message1(sym_e_id_no_member,orgpattern); @@ -1547,7 +1547,7 @@ implementation begin check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg); consume(_ID); - do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]); + do_member_read(tabstractrecorddef(hdef),getaddr,srsym,p1,again,[]); end else begin @@ -1597,7 +1597,7 @@ implementation { not srsymtable.symtabletype since that can be } { withsymtable as well } if (srsym.owner.symtabletype in [ObjectSymtable,recordsymtable]) then - do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]) + do_member_read(tabstractrecorddef(hdef),getaddr,srsym,p1,again,[]) else { no procsyms in records (yet) } internalerror(2007012006); @@ -1630,7 +1630,7 @@ implementation { not srsymtable.symtabletype since that can be } { withsymtable as well } if (srsym.owner.symtabletype in [ObjectSymtable,recordsymtable]) then - do_member_read(tobjectdef(hdef),getaddr,srsym,p1,again,[]) + do_member_read(tabstractrecorddef(hdef),getaddr,srsym,p1,again,[]) else { no propertysyms in records (yet) } internalerror(2009111510); diff --git a/compiler/pinline.pas b/compiler/pinline.pas index 2c3904abae..58fe2b9184 100644 --- a/compiler/pinline.pas +++ b/compiler/pinline.pas @@ -620,14 +620,12 @@ implementation begin destppn:=tcallparanode(ppn.right); { create call to fpc_initialize/finalize_array } - npara:=ccallparanode.create(cordconstnode.create - (destppn.left.resultdef.size,s32inttype,true), - ccallparanode.create(ctypeconvnode.create + npara:=ccallparanode.create(ctypeconvnode.create (ppn.left,s32inttype), ccallparanode.create(caddrnode.create_internal (crttinode.create(tstoreddef(destppn.left.resultdef),initrtti,rdt_normal)), ccallparanode.create(caddrnode.create_internal - (destppn.left),nil)))); + (destppn.left),nil))); if isinit then newblock:=ccallnode.createintern('fpc_initialize_array',npara) else diff --git a/compiler/pmodules.pas b/compiler/pmodules.pas index 10f799ce81..3f9cb27730 100644 --- a/compiler/pmodules.pas +++ b/compiler/pmodules.pas @@ -29,7 +29,6 @@ interface procedure proc_package; procedure proc_program(islibrary : boolean); - implementation uses @@ -47,13 +46,8 @@ implementation pexports, objcgutl, wpobase, - scanner,pbase,pexpr,psystem,psub,pdecsub,ptype - ,cpuinfo -{$ifdef i386} - { fix me! } - ,cpubase -{$endif i386} - ; + scanner,pbase,pexpr,psystem,psub,pdecsub,ptype, + cpuinfo; procedure create_objectfile; @@ -715,7 +709,7 @@ implementation end; { CPU targets with microcontroller support can add a controller specific unit } -{$if defined(ARM)} +{$if defined(ARM) or defined(AVR)} if (target_info.system in systems_embedded) and (current_settings.controllertype<>ct_none) then AddUnit(controllerunitstr[current_settings.controllertype]); {$endif ARM} @@ -1908,11 +1902,7 @@ implementation new_section(current_asmdata.asmlists[al_procedures],sec_code,'',0); current_asmdata.asmlists[al_procedures].concat(tai_symbol.createname_global('_DLLMainCRTStartup',AT_FUNCTION,0)); -{$ifdef i386} - { fix me! } - current_asmdata.asmlists[al_procedures].concat(Taicpu.Op_const_reg(A_MOV,S_L,1,NR_EAX)); - current_asmdata.asmlists[al_procedures].concat(Taicpu.Op_const(A_RET,S_W,12)); -{$endif i386} + gen_fpc_dummy(current_asmdata.asmlists[al_procedures]); current_asmdata.asmlists[al_procedures].concat(tai_const.createname('_FPCDummy',0)); { leave when we got an error } @@ -2174,7 +2164,7 @@ implementation { Insert _GLOBAL_OFFSET_TABLE_ symbol if system uses it } maybe_load_got; - + { create whole program optimisation information } current_module.wpoinfo:=tunitwpoinfo.create; @@ -2363,6 +2353,9 @@ implementation InsertWideInitsTablesTable; InsertMemorySizes; + if target_info.system in systems_interrupt_table then + InsertInterruptTable; + { Insert symbol to resource info } InsertResourceInfo(resources_used); diff --git a/compiler/powerpc/agppcmpw.pas b/compiler/powerpc/agppcmpw.pas index bd6a8ae10b..9b28633338 100644 --- a/compiler/powerpc/agppcmpw.pas +++ b/compiler/powerpc/agppcmpw.pas @@ -70,6 +70,7 @@ interface secnames : array[TAsmSectiontype] of string[10] = ( '', {none} + '', {user} 'csect', {code} 'csect', {data} 'csect', {read only data} diff --git a/compiler/ppu.pas b/compiler/ppu.pas index 1e7f04252f..3e873f1c6f 100644 --- a/compiler/ppu.pas +++ b/compiler/ppu.pas @@ -26,7 +26,7 @@ unit ppu; interface uses - globtype,constexp; + globtype,constexp,cstreams; { Also write the ppu if only crc if done, this can be used with ppudump to see the differences between the intf and implementation } @@ -186,9 +186,11 @@ type nr : byte; end; + { tppufile } + tppufile=class private - f : file; + f : TCCustomFileStream; mode : byte; {0 - Closed, 1 - Reading, 2 - Writing} fname : string; fsize : integer; @@ -260,6 +262,7 @@ type function getaword:aword; function getreal:ppureal; function getstring:string; + function getansistring:ansistring; procedure getnormalset(var b); procedure getsmallset(var b); function skipuntilentry(untilb:byte):boolean; @@ -280,10 +283,11 @@ type procedure putaword(i:aword); procedure putreal(d:ppureal); procedure putstring(const s:string); + procedure putansistring(const s:ansistring); procedure putnormalset(const b); procedure putsmallset(const b); - procedure tempclose; - function tempopen:boolean; + procedure tempclose; // MG: not used, obsolete? + function tempopen:boolean; // MG: not used, obsolete? end; implementation @@ -356,10 +360,7 @@ begin if Mode<>0 then begin Flush; - {$I-} - system.close(f); - {$I+} - if ioresult<>0 then; + f.Free; Mode:=0; closed:=true; end; @@ -415,21 +416,17 @@ var i : integer; begin openfile:=false; - assign(f,fname); - ofmode:=filemode; - filemode:=$0; - {$I-} - reset(f,1); - {$I+} - filemode:=ofmode; - if ioresult<>0 then - exit; + try + f:=CFileStreamClass.Create(fname,fmOpenRead) + except + exit; + end; closed:=false; {read ppuheader} - fsize:=filesize(f); + fsize:=f.Size; if fsize<sizeof(tppuheader) then exit; - blockread(f,header,sizeof(tppuheader),i); + i:=f.Read(header,sizeof(tppuheader)); { The header is always stored in little endian order } { therefore swap if on a big endian machine } {$IFDEF ENDIAN_BIG} @@ -478,7 +475,7 @@ end; procedure tppufile.reloadbuf; begin inc(bufstart,bufsize); - blockread(f,buf^,ppubufsize,bufsize); + bufsize:=f.Read(buf^,ppubufsize); bufidx:=0; end; @@ -789,6 +786,22 @@ begin end; +function tppufile.getansistring: ansistring; +var + l : longint; +begin + l:=getlongint; + if entryidx+l>entry.size then + begin + error:=true; + exit; + end; + SetLength(Result,l); + ReadData(result[1],l); + inc(entryidx,l); +end; + + procedure tppufile.getsmallset(var b); var i : longint; @@ -827,6 +840,8 @@ end; *****************************************************************************} function tppufile.createfile:boolean; +var + ok: boolean; begin createfile:=false; {$ifdef INTFPPU} @@ -838,24 +853,26 @@ begin {$endif} if not crc_only then begin - assign(f,fname); {$ifdef MACOS} {FPas is FreePascal's creator code on MacOS. See systems/mac_crea.txt} SetDefaultMacOSCreator('FPas'); SetDefaultMacOSFiletype('FPPU'); {$endif} - {$I-} - rewrite(f,1); - {$I+} + ok:=false; + try + f:=CFileStreamClass.Create(fname,fmCreate); + ok:=true; + except + end; {$ifdef MACOS} SetDefaultMacOSCreator('MPS '); SetDefaultMacOSFiletype('TEXT'); {$endif} - if ioresult<>0 then + if not ok then exit; Mode:=2; {write header for sure} - blockwrite(f,header,sizeof(tppuheader)); + f.Write(header,sizeof(tppuheader)); end; bufsize:=ppubufsize; bufstart:=sizeof(tppuheader); @@ -904,10 +921,10 @@ begin header.symlistsize:=swapendian(header.symlistsize); {$endif not FPC_BIG_ENDIAN} { write header and restore filepos after it } - opos:=filepos(f); - seek(f,0); - blockwrite(f,header,sizeof(tppuheader)); - seek(f,opos); + opos:=f.Position; + f.Position:=0; + f.Write(header,sizeof(tppuheader)); + f.Position:=opos; end; @@ -915,7 +932,7 @@ procedure tppufile.writebuf; begin if not crc_only and (bufidx <> 0) then - blockwrite(f,buf^,bufidx); + f.Write(buf^,bufidx); inc(bufstart,bufidx); bufidx:=0; end; @@ -985,10 +1002,10 @@ begin {flush to be sure} WriteBuf; {write entry} - opos:=filepos(f); - seek(f,entrystart); - blockwrite(f,entry,sizeof(tppuentry)); - seek(f,opos); + opos:=f.Position; + f.Position:=entrystart; + f.write(entry,sizeof(tppuentry)); + f.Position:=opos; end; entrybufstart:=bufstart; end @@ -1131,6 +1148,16 @@ procedure tppufile.putstring(const s:string); end; +procedure tppufile.putansistring(const s: ansistring); + var + l : longint; + begin + l:=length(s); + putdata(l,4); + putdata(s[1],l); + end; + + procedure tppufile.putsmallset(const b); var l : longint; @@ -1152,11 +1179,8 @@ procedure tppufile.tempclose; begin if not closed then begin - closepos:=filepos(f); - {$I-} - system.close(f); - {$I+} - if ioresult<>0 then; + closepos:=f.Position; + f.Free; closed:=true; tempclosed:=true; end; @@ -1170,6 +1194,10 @@ function tppufile.tempopen:boolean; tempopen:=false; if not closed or not tempclosed then exit; + // MG: not sure, if this is correct + + f.Position:=0; + (* ofm:=filemode; filemode:=0; {$I-} @@ -1178,11 +1206,12 @@ function tppufile.tempopen:boolean; filemode:=ofm; if ioresult<>0 then exit; + *) closed:=false; tempclosed:=false; { restore state } - seek(f,closepos); + f.Position:=closepos; tempopen:=true; end; diff --git a/compiler/procinfo.pas b/compiler/procinfo.pas index d2cbeb8c2c..b23b34341b 100644 --- a/compiler/procinfo.pas +++ b/compiler/procinfo.pas @@ -47,10 +47,17 @@ unit procinfo; type + tsavedlabels = array[Boolean] of TAsmLabel; + {# This object gives information on the current routine being compiled. } tprocinfo = class(tlinkedlistitem) + private + { list to store the procinfo's of the nested procedures } + nestedprocs : tlinkedlist; + procedure addnestedproc(child: tprocinfo); + public { pointer to parent in nested procedures } parent : tprocinfo; {# the definition of the routine itself } @@ -123,6 +130,18 @@ unit procinfo; { Allocate got register } procedure allocate_got_register(list: TAsmList);virtual; + + { Destroy the entire procinfo tree, starting from the outermost parent } + procedure destroy_tree; + + { Store CurrTrueLabel and CurrFalseLabel to saved and generate new ones } + procedure save_jump_labels(out saved: tsavedlabels); + + { Restore CurrTrueLabel and CurrFalseLabel from saved } + procedure restore_jump_labels(const saved: tsavedlabels); + + function get_first_nestedproc: tprocinfo; + function has_nestedprocs: boolean; end; tcprocinfo = class of tprocinfo; @@ -165,15 +184,61 @@ implementation CurrTrueLabel:=nil; CurrFalseLabel:=nil; maxpushedparasize:=0; + if Assigned(parent) and (parent.procdef.parast.symtablelevel>=normal_function_level) then + parent.addnestedproc(Self); end; destructor tprocinfo.destroy; begin + nestedprocs.free; aktproccode.free; aktlocaldata.free; end; + procedure tprocinfo.destroy_tree; + var + hp: tprocinfo; + begin + hp:=Self; + while Assigned(hp.parent) do + hp:=hp.parent; + hp.Free; + end; + + procedure tprocinfo.addnestedproc(child: tprocinfo); + begin + if nestedprocs=nil then + nestedprocs:=TLinkedList.Create; + nestedprocs.insert(child); + end; + + function tprocinfo.get_first_nestedproc: tprocinfo; + begin + if assigned(nestedprocs) then + result:=tprocinfo(nestedprocs.first) + else + result:=nil; + end; + + function tprocinfo.has_nestedprocs: boolean; + begin + result:=assigned(nestedprocs) and (nestedprocs.count>0); + end; + + procedure tprocinfo.save_jump_labels(out saved: tsavedlabels); + begin + saved[false]:=CurrFalseLabel; + saved[true]:=CurrTrueLabel; + current_asmdata.getjumplabel(CurrTrueLabel); + current_asmdata.getjumplabel(CurrFalseLabel); + end; + + procedure tprocinfo.restore_jump_labels(const saved: tsavedlabels); + begin + CurrFalseLabel:=saved[false]; + CurrTrueLabel:=saved[true]; + end; procedure tprocinfo.allocate_push_parasize(size:longint); begin diff --git a/compiler/psub.pas b/compiler/psub.pas index 195bb6d7c7..2e0dd6be94 100644 --- a/compiler/psub.pas +++ b/compiler/psub.pas @@ -45,10 +45,7 @@ interface stackcheck_asmnode, init_asmnode, final_asmnode : tasmnode; - { list to store the procinfo's of the nested procedures } - nestedprocs : tlinkedlist; dfabuilder : TDFABuilder; - constructor create(aparent:tprocinfo);override; destructor destroy;override; procedure printproc(pass:string); procedure generate_code; @@ -555,16 +552,8 @@ implementation TCGProcInfo ****************************************************************************} - constructor tcgprocinfo.create(aparent:tprocinfo); - begin - inherited Create(aparent); - nestedprocs:=tlinkedlist.create; - end; - - destructor tcgprocinfo.destroy; begin - nestedprocs.free; if assigned(code) then code.free; inherited destroy; @@ -794,10 +783,10 @@ implementation function tcgprocinfo.has_assembler_child : boolean; var - hp : tcgprocinfo; + hp : tprocinfo; begin result:=false; - hp:=tcgprocinfo(nestedprocs.first); + hp:=get_first_nestedproc; while assigned(hp) do begin if (hp.flags*[pi_has_assembler_block,pi_is_assembler])<>[] then @@ -805,7 +794,7 @@ implementation result:=true; exit; end; - hp:=tcgprocinfo(hp.next); + hp:=tprocinfo(hp.next); end; end; @@ -1549,7 +1538,7 @@ implementation { generate code for this procedure } pi.generate_code; { process nested procs } - hpi:=tcgprocinfo(pi.nestedprocs.first); + hpi:=tcgprocinfo(pi.get_first_nestedproc); while assigned(hpi) do begin do_generate_code(hpi); @@ -1602,7 +1591,7 @@ implementation { We can't support inlining for procedures that have nested procedures because the nested procedures use a fixed offset for accessing locals in the parent procedure (PFV) } - if (tcgprocinfo(current_procinfo).nestedprocs.count>0) then + if current_procinfo.has_nestedprocs then begin if (df_generic in current_procinfo.procdef.defoptions) then Comment(V_Error,'Generic methods cannot have nested procedures') @@ -1618,9 +1607,7 @@ implementation { When it's a nested procedure then defer the code generation, when back at normal function level then generate the code for all defered nested procedures and the current procedure } - if isnestedproc then - tcgprocinfo(current_procinfo.parent).nestedprocs.insert(current_procinfo) - else + if not isnestedproc then begin if not(df_generic in current_procinfo.procdef.defoptions) then do_generate_code(tcgprocinfo(current_procinfo)); diff --git a/compiler/ptype.pas b/compiler/ptype.pas index a95b7132c5..e15137527e 100644 --- a/compiler/ptype.pas +++ b/compiler/ptype.pas @@ -40,9 +40,6 @@ interface procedure resolve_forward_types; - { reads a type identifier } - procedure id_type(var def : tdef;isforwarddef:boolean); - { reads a string, file type or a type identifier } procedure single_type(var def:tdef;options:TSingleTypeOptions); @@ -389,7 +386,96 @@ implementation end; - procedure id_type(var def : tdef;isforwarddef:boolean); + procedure id_type(var def : tdef;isforwarddef,checkcurrentrecdef:boolean); forward; + + { def is the outermost type in which other types have to be searched + + isforward indicates whether the current definition can be a forward definition + + if assigned, currentstructstack is a list of tabstractrecorddefs that, from + last to first, are child types of def that are not yet visible via the + normal symtable searching routines because they are types that are currently + being parsed (so using id_type on them after pushing def on the + symtablestack would result in errors because they'd come back as errordef) + } + procedure parse_nested_types(var def: tdef; isforwarddef: boolean; currentstructstack: tfpobjectlist); + var + t2: tdef; + structstackindex: longint; + begin + if assigned(currentstructstack) then + structstackindex:=currentstructstack.count-1 + else + structstackindex:=-1; + { handle types inside classes, e.g. TNode.TLongint } + while (token=_POINT) do + begin + if parse_generic then + begin + consume(_POINT); + consume(_ID); + end + else if is_class_or_object(def) or is_record(def) then + begin + consume(_POINT); + if (structstackindex>=0) and + (tabstractrecorddef(currentstructstack[structstackindex]).objname^=pattern) then + begin + def:=tdef(currentstructstack[structstackindex]); + dec(structstackindex); + consume(_ID); + end + else + begin + structstackindex:=-1; + symtablestack.push(tabstractrecorddef(def).symtable); + t2:=generrordef; + id_type(t2,isforwarddef,false); + symtablestack.pop(tabstractrecorddef(def).symtable); + def:=t2; + end; + end + else + break; + end; + end; + + + function try_parse_structdef_nested_type(out def: tdef; basedef: tabstractrecorddef; isfowarddef: boolean): boolean; + var + structdef : tdef; + structdefstack : tfpobjectlist; + begin + { use of current parsed object: + classes, objects, records can be used also in themself } + structdef:=basedef; + structdefstack:=nil; + while assigned(structdef) and (structdef.typ in [objectdef,recorddef]) do + begin + if (tabstractrecorddef(structdef).objname^=pattern) then + begin + consume(_ID); + def:=structdef; + { we found the top-most match, now check how far down we can + follow } + structdefstack:=tfpobjectlist.create(false); + structdef:=basedef; + while (structdef<>def) do + begin + structdefstack.add(structdef); + structdef:=tabstractrecorddef(structdef.owner.defowner); + end; + parse_nested_types(def,isfowarddef,structdefstack); + structdefstack.free; + result:=true; + exit; + end; + structdef:=tdef(tabstractrecorddef(structdef).owner.defowner); + end; + result:=false; + end; + + procedure id_type(var def : tdef;isforwarddef,checkcurrentrecdef:boolean); { reads a type definition } { to a appropriating tdef, s gets the name of } { the type to allow name mangling } @@ -407,17 +493,9 @@ implementation pos:=current_tokenpos; { use of current parsed object: classes, objects, records can be used also in themself } - structdef:=current_structdef; - while assigned(structdef) and (structdef.typ in [objectdef,recorddef]) do - begin - if (structdef.objname^=pattern) then - begin - consume(_ID); - def:=structdef; - exit; - end; - structdef:=tabstractrecorddef(structdef.owner.defowner); - end; + if checkcurrentrecdef and + try_parse_structdef_nested_type(def,current_structdef,isforwarddef) then + exit; { Use the special searchsym_type that search only types } searchsym_type(s,srsym,srsymtable); { handle unit specification like System.Writeln } @@ -518,26 +596,8 @@ implementation end else begin - id_type(def,stoIsForwardDef in options); - { handle types inside classes, e.g. TNode.TLongint } - while (token=_POINT) do - begin - if parse_generic then - begin - consume(_POINT); - consume(_ID); - end - else if is_class_or_object(def) or is_record(def) then - begin - symtablestack.push(tabstractrecorddef(def).symtable); - consume(_POINT); - id_type(t2,stoIsForwardDef in options); - symtablestack.pop(tabstractrecorddef(def).symtable); - def:=t2; - end - else - break; - end; + id_type(def,stoIsForwardDef in options,true); + parse_nested_types(def,stoIsForwardDef in options,nil); end; end; @@ -945,19 +1005,8 @@ implementation { use of current parsed object: classes, objects, records can be used also in themself } if (token=_ID) then - begin - structdef:=current_structdef; - while assigned(structdef) and (structdef.typ in [objectdef,recorddef]) do - begin - if (tabstractrecorddef(structdef).objname^=pattern) then - begin - consume(_ID); - def:=structdef; - exit; - end; - structdef:=tdef(structdef.owner.defowner); - end; - end; + if try_parse_structdef_nested_type(def,current_structdef,false) then + exit; { Generate a specialization in FPC mode? } dospecialize:=not(m_delphi in current_settings.modeswitches) and try_to_consume(_SPECIALIZE); { we can't accept a equal in type } diff --git a/compiler/regvars.pas b/compiler/regvars.pas index 4f75c0bd7d..1576d25536 100644 --- a/compiler/regvars.pas +++ b/compiler/regvars.pas @@ -148,7 +148,7 @@ implementation if (cs_opt_regvar in current_settings.optimizerswitches) and { we have to store regvars back to memory in this case (the nested } { procedures can access the variables of the parent) } - (tcgprocinfo(current_procinfo).nestedprocs.count = 0) and + (not current_procinfo.has_nestedprocs) and not(pi_has_assembler_block in current_procinfo.flags) and not(pi_uses_exceptions in current_procinfo.flags) then begin diff --git a/compiler/symconst.pas b/compiler/symconst.pas index 011fbe37a7..98ecf5e372 100644 --- a/compiler/symconst.pas +++ b/compiler/symconst.pas @@ -423,7 +423,8 @@ type vo_is_msgsel, { first field of variant part of a record } vo_is_first_field, - vo_volatile + vo_volatile, + vo_has_section ); tvaroptions=set of tvaroption; diff --git a/compiler/symdef.pas b/compiler/symdef.pas index 8be9fc6e5c..f1de801fd8 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -76,6 +76,7 @@ interface function is_publishable : boolean;override; function needs_inittable : boolean;override; function rtti_mangledname(rt:trttitype):string;override; + function OwnerHierarchyName: string; override; function in_currentunit: boolean; { regvars } function is_intregable : boolean; @@ -550,6 +551,8 @@ interface interfacedef : boolean; { true if the procedure has a forward declaration } hasforward : boolean; + { interrupt vector } + interruptvector : longint; constructor create(level:byte); constructor ppuload(ppufile:tcompilerppufile); destructor destroy;override; @@ -1029,6 +1032,22 @@ implementation end; + function tstoreddef.OwnerHierarchyName: string; + var + tmp: tdef; + begin + tmp:=self; + result:=''; + repeat + if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then + tmp:=tdef(tmp.owner.defowner) + else + break; + result:=tabstractrecorddef(tmp).objrealname^+'.'+result; + until tmp=nil; + end; + + function tstoreddef.in_currentunit: boolean; var st: tsymtable; @@ -2684,15 +2703,7 @@ implementation var tmp: tabstractrecorddef; begin - Result:=objrealname^; - tmp:=self; - repeat - if tmp.owner.symtabletype in [ObjectSymtable,recordsymtable] then - tmp:=tabstractrecorddef(tmp.owner.defowner) - else - break; - Result:=tmp.objrealname^+'.'+Result; - until tmp=nil; + Result:=OwnerHierarchyName+objrealname^; end; function tabstractrecorddef.search_enumerator_get: tprocdef; @@ -3322,6 +3333,7 @@ implementation {$ifdef i386} fpu_used:=maxfpuregs; {$endif i386} + interruptvector:=-1; end; @@ -3360,6 +3372,8 @@ implementation else import_name:=nil; import_nr:=ppufile.getword; + if target_info.system in systems_interrupt_table then + interruptvector:=ppufile.getlongint; if (po_msgint in procoptions) then messageinf.i:=ppufile.getlongint; if (po_msgstr in procoptions) then @@ -3496,6 +3510,8 @@ implementation if po_has_importname in procoptions then ppufile.putstring(import_name^); ppufile.putword(import_nr); + if target_info.system in systems_interrupt_table then + ppufile.putlongint(interruptvector); if (po_msgint in procoptions) then ppufile.putlongint(messageinf.i); if (po_msgstr in procoptions) then diff --git a/compiler/symsym.pas b/compiler/symsym.pas index 43638e036c..7a3c95f05e 100644 --- a/compiler/symsym.pas +++ b/compiler/symsym.pas @@ -200,6 +200,7 @@ interface private _mangledname : pshortstring; public + section : ansistring; constructor create(const n : string;vsp:tvarspez;def:tdef;vopts:tvaroptions); constructor create_dll(const n : string;vsp:tvarspez;def:tdef); constructor create_C(const n,mangled : string;vsp:tvarspez;def:tdef); @@ -1312,6 +1313,8 @@ implementation _mangledname:=stringdup(ppufile.getstring) else _mangledname:=nil; + if vo_has_section in varoptions then + section:=ppufile.getansistring; end; @@ -1336,6 +1339,8 @@ implementation inherited ppuwrite(ppufile); if vo_has_mangledname in varoptions then ppufile.putstring(_mangledname^); + if vo_has_section in varoptions then + ppufile.putansistring(section); ppufile.writeentry(ibstaticvarsym); end; diff --git a/compiler/symtable.pas b/compiler/symtable.pas index 35879a931c..f067caadc6 100644 --- a/compiler/symtable.pas +++ b/compiler/symtable.pas @@ -2199,6 +2199,7 @@ implementation var hashedid : THashedIDString; begin + result:=false; hashedid.id:=s; srsymtable:=recordh.symtable; srsym:=tsym(srsymtable.FindWithHash(hashedid)); diff --git a/compiler/symtype.pas b/compiler/symtype.pas index c7ce1f8495..a30260ffa6 100644 --- a/compiler/symtype.pas +++ b/compiler/symtype.pas @@ -73,6 +73,7 @@ interface function mangledparaname:string; function getmangledparaname:string;virtual; function rtti_mangledname(rt:trttitype):string;virtual;abstract; + function OwnerHierarchyName: string; virtual; abstract; function size:asizeint;virtual;abstract; function packedbitsize:asizeint;virtual; function alignment:shortint;virtual;abstract; @@ -258,12 +259,13 @@ implementation function tdef.typename:string; begin + result:=OwnerHierarchyName; if assigned(typesym) and not(typ in [procvardef,procdef]) and (typesym.realname[1]<>'$') then - result:=typesym.realname + result:=result+typesym.realname else - result:=GetTypeName; + result:=result+GetTypeName; end; @@ -275,10 +277,11 @@ implementation function tdef.typesymbolprettyname:string; begin + result:=OwnerHierarchyName; if assigned(typesym) then - result:=typesym.prettyname + result:=result+typesym.prettyname else - result:='<no type symbol>' + result:=result+'<no type symbol>' end; function tdef.mangledparaname:string; diff --git a/compiler/systems.pas b/compiler/systems.pas index e8e462245f..5824c83586 100644 --- a/compiler/systems.pas +++ b/compiler/systems.pas @@ -185,6 +185,7 @@ interface ,as_ggas { gnu assembler called "gas" instead of "as" } ,as_i386_nasmhaiku ,as_powerpc_vasm + ,as_i386_nlmcoff ); tar = (ar_none @@ -448,6 +449,8 @@ interface systems_internal_sysinit = [system_i386_linux,system_i386_win32]; + systems_interrupt_table = [{system_arm_embedded}]; + { all symbian systems } systems_symbian = [system_i386_symbian,system_arm_symbian]; diff --git a/compiler/systems/i_nwm.pas b/compiler/systems/i_nwm.pas index 8d729bf88c..307f2fee8f 100644 --- a/compiler/systems/i_nwm.pas +++ b/compiler/systems/i_nwm.pas @@ -34,7 +34,7 @@ unit i_nwm; system : system_i386_netware; name : 'Netware for i386(clib)'; shortname : 'Netware'; - flags : [tf_smartlink_library]; + flags : [tf_smartlink_library,tf_smartlink_sections,tf_dwarf_only_local_labels]; cpu : cpu_i386; unit_env : 'NETWAREUNITS'; extradefines : 'NETWARE_CLIB'; @@ -50,18 +50,18 @@ unit i_nwm; resobjext : '.or'; sharedlibext : '.nlm'; staticlibext : '.a'; - staticlibprefix : ''; + staticlibprefix : 'libp'; sharedlibprefix : ''; sharedClibext : '.nlm'; staticClibext : '.a'; - staticClibprefix : ''; + staticClibprefix : 'lib'; sharedClibprefix : ''; - importlibprefix : 'imp'; + importlibprefix : 'libimp'; importlibext : '.a'; Cprefix : ''; newline : #13#10; dirsep : '/'; - assem : as_i386_elf32; + assem : as_i386_nlmcoff; // as_i386_elf32; assemextern : as_gas; link : nil; linkextern : nil; diff --git a/compiler/systems/i_wii.pas b/compiler/systems/i_wii.pas index 848480bf64..c9c7a8c1cd 100644 --- a/compiler/systems/i_wii.pas +++ b/compiler/systems/i_wii.pas @@ -86,7 +86,7 @@ unit i_wii; maxCrecordalign : 8 ); first_parm_offset : 8; - stacksize : 32*1024*1024; + stacksize : 131072; // 128 kb abi : abi_powerpc_sysv; ); diff --git a/compiler/systems/t_embed.pas b/compiler/systems/t_embed.pas index 7a7fd67a53..a1a2c52fb5 100644 --- a/compiler/systems/t_embed.pas +++ b/compiler/systems/t_embed.pas @@ -267,7 +267,7 @@ begin Add('{'); Add(' .text :'); Add(' {'); - Add(' *(.init, .init.*)'); + Add(' KEEP(*(.init, .init.*))'); Add(' *(.text, .text.*)'); Add(' *(.strings)'); Add(' *(.rodata, .rodata.*)'); diff --git a/compiler/systems/t_nwm.pas b/compiler/systems/t_nwm.pas index a371343f02..f85619df5b 100644 --- a/compiler/systems/t_nwm.pas +++ b/compiler/systems/t_nwm.pas @@ -97,7 +97,7 @@ implementation verbose,systems,globtype,globals, symconst,script, fmodule,aasmbase,aasmtai,aasmdata,aasmcpu,cpubase,symsym,symdef, - import,export,link,i_nwm,ogbase + import,export,link,i_nwm,ogbase, ogcoff, ognlm, cclasses {$ifdef netware} ,dos {$endif} ; @@ -123,6 +123,16 @@ implementation function MakeExecutable:boolean;override; end; + TInternalLinkerNetware = class(TInternalLinker) + prelude : string; + constructor create;override; + destructor destroy;override; + procedure DefaultLinkScript;override; + procedure InitSysInitUnitName;override; + procedure ConcatEntryName; virtual; + Function MakeSharedLibrary:boolean;override; + end; + Const tmpLinkFileName = 'link~tmp._o_'; minStackSize = 32768; @@ -330,10 +340,26 @@ begin { add objectfiles, start with nwpre always } LinkRes.Add ('INPUT('); - s2 := FindObjectFile('nwpre','',false); + if target_info.system = system_i386_netwlibc then + begin + s2 := FindObjectFile('nwplibc','',false); + if s2 = '' then + s2 := FindObjectFile('libcpre.gcc','',false); + end else + s2 := FindObjectFile('nwpre','',false); Comment (V_Debug,'adding Object File '+s2); {$ifndef netware} LinkRes.Add (s2); {$else} LinkRes.Add (FExpand(s2)); {$endif} + if target_info.system = system_i386_netwlibc then + begin + if isDll then {needed to provide main} + s2 := FindObjectFile('nwl_dlle','',false) + else + s2 := FindObjectFile('nwl_main','',false); + Comment (V_Debug,'adding Object File '+s2); + {$ifndef netware} LinkRes.Add (s2); {$else} LinkRes.Add (FExpand(s2)); {$endif} + end; + { main objectfiles, add to linker input } while not ObjectFiles.Empty do begin @@ -355,9 +381,20 @@ begin {$endif} { start and stop-procedures } - NLMConvLinkFile.Add ('START _Prelude'); { defined in rtl/netware/nwpre.as } - NLMConvLinkFile.Add ('EXIT _Stop'); { nwpre.as } - NLMConvLinkFile.Add ('CHECK FPC_NW_CHECKFUNCTION'); { system.pp } + + if target_info.system = system_i386_netwlibc then + begin + NLMConvLinkFile.Add ('START _LibCPrelude'); + NLMConvLinkFile.Add ('EXIT _LibCPostlude'); + NLMConvLinkFile.Add ('CHECK _LibCCheckUnload'); + NLMConvLinkFile.Add ('REENTRANT'); { needed by older libc versions } + end else + begin + NLMConvLinkFile.Add ('START _Prelude'); { defined in rtl/netware/nwpre.as } + NLMConvLinkFile.Add ('EXIT _Stop'); { nwpre.as } + NLMConvLinkFile.Add ('CHECK FPC_NW_CHECKFUNCTION'); { system.pp } + end; + if not (cs_link_strip in current_settings.globalswitches) then begin @@ -549,6 +586,395 @@ begin end; +{**************************************************************************** + TInternalLinkerNetware +****************************************************************************} + + constructor TInternalLinkerNetware.Create; + begin + inherited Create; + CExeoutput:=TNLMexeoutput; + CObjInput:=TNLMCoffObjInput; + nlmSpecialSymbols_Segments := TFPHashList.create; + end; + + destructor TInternalLinkerNetware.destroy; + begin + if assigned(nlmSpecialSymbols_Segments) then + begin + nlmSpecialSymbols_Segments.Free; + nlmSpecialSymbols_Segments := nil; + end; + inherited destroy; + end; + + procedure TInternalLinkerNetware.DefaultLinkScript; + var + s,s2 : TCmdStr; + secname, + secnames : string; + hasCopyright, + hasScreenname, + hasThreadname, + hasVersion, + hasDescription, + hasStacksize: boolean; + t : text; + + + + procedure addLinkerOption(s : string); + var op : string; + begin + if s = '' then exit; + if s[1] = '#' then exit; + LinkScript.Concat(s); + op := upper(GetToken(s,' ')); + {check for options via -k that can also be specified vie + compiler directives in source, -k options will override + options in source} + if op = 'COPYRIGHT' then hasCopyright := true else + if op = 'SCREENNAME' then hasScreenname := true else + if op = 'THREADNAME' then hasThreadname := true else + if op = 'VERSION' then hasVersion := true else + if op = 'DESCRIPTION' then hasDescription := true else + if (op = 'STACK') or (op = 'STACKSIZE') then hasStacksize := true; + end; + + { add linker scropt specified by -k@FileName } + procedure addLinkerOptionsFile (fileName : string); + var + t : text; + option : string; + fn : TCmdStr; + begin + fn := fileName; + if not sysutils.fileExists(fn) then + if not includesearchpath.FindFile(fileName,true,fn) then + begin + comment(v_error,'linker options file "'+fileName+'" not found'); + exit; + end; + assign(t,fn); reset(t); + while not eof(t) do + begin + readln(t,option); + addLinkerOption(option); + end; + close(t); + end; + + { add linker options specified by command line parameter -k } + procedure addLinkerOptions; + var + s,option : string; + p : integer; + begin + s := ParaLinkOptions; + option := GetToken(s,';'); + while option <> '' do + begin + if copy(option,1,1)='@' then + begin + delete(option,1,1); + addLinkerOptionsFile(option); + end else + addLinkerOption(option); + option := GetToken(s,';'); + end; + end; + + { default: nwpre but can be specified via linker options + bacuse this has to be the first object, we have to scan + linker options before adding other options } + + function findPreludeInFile (fileName : string):string; + var + t : text; + option,s : string; + fn : TCmdStr; + begin + result := ''; + fn := fileName; + if not sysutils.fileExists(fn) then + if not includesearchpath.FindFile(fileName,true,fn) then + begin + comment(v_error,'linker options file "'+fileName+'" not found'); + exit; + end; + assign(t,fn); reset(t); + while not eof(t) do + begin + readln(t,option); + option := upper(GetToken(s,' ')); + if option='PRELUDE' then + begin + result := getToken(s,' '); + close(t); + exit; + end; + end; + close(t); + end; + + function findPrelude : string; + var + s,option,keyword : string; + p : integer; + begin + s := ParaLinkOptions; + option := GetToken(s,';'); + while option <> '' do + begin + if copy(option,1,1)='@' then + begin + delete(option,1,1); + result := findPreludeInFile(option); + if result <> '' then exit; + end else + begin + keyword := GetToken(option,' '); + if keyword = 'PRELUDE' then + begin + result := GetToken(option,' '); + exit; + end; + end; + option := GetToken(s,';'); + end; + if target_info.system = system_i386_netwlibc then + result := 'libcpre' + else + result := 'nwpre'; + end; + + begin + with LinkScript do + begin + prelude := findPrelude; // needs to be first object, can be specified by -k"PRELUDE ObjFileName" + if prelude = '' then internalerror(201103271); + if pos ('.',prelude) = 0 then prelude := prelude + '.o'; + s2 := FindObjectFile(prelude,'',false); + Comment (V_Debug,'adding init Object File '+s2); + Concat('READOBJECT '+MaybeQuoted(s2)); + while not ObjectFiles.Empty do + begin + s:=ObjectFiles.GetFirst; + if s<>'' then + begin + Concat('READOBJECT '+MaybeQuoted(s)); + Comment (V_Debug,'adding Object File '+s); + end; + end; + while not StaticLibFiles.Empty do + begin + s:=StaticLibFiles.GetFirst; + if s<>'' then + begin + Comment (V_Debug,'adding StaticLibFile '+s); + Concat('READSTATICLIBRARY '+MaybeQuoted(s)); + end; + end; + { While not SharedLibFiles.Empty do + begin + S:=SharedLibFiles.GetFirst; + if FindLibraryFile(s,target_info.staticClibprefix,target_info.importlibext,s2) then + begin + Comment (V_Debug,'adding LibraryFile '+s); + Concat('READSTATICLIBRARY '+MaybeQuoted(s2)); + end else + Comment(V_Error,'Import library not found for '+S); + end;} + if IsSharedLibrary then + Concat('ISSHAREDLIBRARY'); + ConcatEntryName; + Concat('IMAGEBASE $' + hexStr(0, SizeOf(imagebase)*2)); + Concat('HEADER'); + Concat('EXESECTION .text'); + Concat(' SYMBOL __text_start__'); nlmSpecialSymbols_Segments.Add('__text_start__',pointer(ptruint(Section_text))); + Concat(' OBJSECTION .text*'); + Concat(' SYMBOL ___CTOR_LIST__'); nlmSpecialSymbols_Segments.Add('___CTOR_LIST__',pointer(ptruint(Section_text))); + Concat(' SYMBOL __CTOR_LIST__'); nlmSpecialSymbols_Segments.Add('__CTOR_LIST__',pointer(ptruint(Section_text))); + Concat(' LONG -1'); + Concat(' OBJSECTION .ctor*'); + Concat(' LONG 0'); + Concat(' SYMBOL ___DTOR_LIST__'); nlmSpecialSymbols_Segments.Add('___DTOR_LIST__',pointer(ptruint(Section_text))); + Concat(' SYMBOL __DTOR_LIST__'); nlmSpecialSymbols_Segments.Add('__DTOR_LIST__',pointer(ptruint(Section_text))); + Concat(' LONG -1'); + Concat(' OBJSECTION .dtor*'); + Concat(' LONG 0'); + Concat(' SYMBOL etext'); nlmSpecialSymbols_Segments.Add('etext',pointer(ptruint(Section_text))); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .data'); + Concat(' SYMBOL __data_start__'); nlmSpecialSymbols_Segments.Add('__data_start__',pointer(ptruint(Section_data))); + Concat(' OBJSECTION .data*'); + Concat(' OBJSECTION .fpc*'); + Concat(' SYMBOL edata'); nlmSpecialSymbols_Segments.Add('edata',pointer(ptruint(Section_data))); + Concat(' SYMBOL __data_end__'); nlmSpecialSymbols_Segments.Add('__data_end__',pointer(ptruint(Section_data))); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .bss'); + Concat(' SYMBOL __bss_start__'); nlmSpecialSymbols_Segments.Add('__bss_start__',pointer(ptruint(Section_data))); + Concat(' OBJSECTION .bss*'); + Concat(' SYMBOL __bss_end__'); nlmSpecialSymbols_Segments.Add('__bss_end__',pointer(ptruint(Section_data))); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .imports'); + Concat(' SYMBOL __imports_start__'); + Concat(' OBJSECTION .imports*'); + Concat(' SYMBOL __imports_end__'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .modules'); + Concat(' SYMBOL __modules_start__'); + Concat(' OBJSECTION .modules*'); + Concat(' SYMBOL __modules_end__'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .exports'); + Concat(' SYMBOL __exports_start__'); + Concat(' OBJSECTION .exports*'); + Concat(' SYMBOL __exports_end__'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .reloc'); + Concat(' SYMBOL __reloc_start__'); + Concat(' OBJSECTION .reloc*'); + Concat(' SYMBOL __reloc_end__'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .xdc'); + Concat(' OBJSECTION .xdc*'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .custom'); + Concat(' OBJSECTION .custom*'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .messages'); + Concat(' OBJSECTION .messages*'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .help'); + Concat(' OBJSECTION .help*'); + Concat('ENDEXESECTION'); + + Concat('EXESECTION .rdata'); + Concat(' SYMBOL ___RUNTIME_PSEUDO_RELOC_LIST__'); + Concat(' SYMBOL __RUNTIME_PSEUDO_RELOC_LIST__'); + Concat(' OBJSECTION .rdata_runtime_pseudo_reloc'); + Concat(' SYMBOL ___RUNTIME_PSEUDO_RELOC_LIST_END__'); + Concat(' SYMBOL __RUNTIME_PSEUDO_RELOC_LIST_END__'); + Concat(' OBJSECTION .rdata*'); + Concat(' OBJSECTION .rodata*'); + Concat('ENDEXESECTION'); + Concat('EXESECTION .pdata'); + Concat(' OBJSECTION .pdata'); + Concat('ENDEXESECTION'); + secnames:='.edata,.rsrc,.gnu_debuglink,'+ + '.debug_aranges,.debug_pubnames,.debug_info,.debug_abbrev,.debug_line,.debug_frame,.debug_str,.debug_loc,'+ + '.debug_macinfo,.debug_weaknames,.debug_funcnames,.debug_typenames,.debug_varnames,.debug_ranges'; + repeat + secname:=gettoken(secnames,','); + if secname='' then + break; + Concat('EXESECTION '+secname); + Concat(' OBJSECTION '+secname+'*'); + Concat('ENDEXESECTION'); + until false; + { Can't use the generic rules, because that will add also .stabstr to .stab } + Concat('EXESECTION .stab'); + Concat(' OBJSECTION .stab'); + Concat('ENDEXESECTION'); + Concat('EXESECTION .stabstr'); + Concat(' OBJSECTION .stabstr'); + Concat('ENDEXESECTION'); + Concat('STABS'); + Concat('SYMBOLS'); + Concat(''); + + hasCopyright := false; + hasScreenname := false; + hasThreadname := false; + hasVersion := false; + hasDescription := false; + hasStacksize := false; + addLinkerOptions; + if not hasCopyright then + if nwcopyright <> '' then + Concat('COPYRIGHT "'+nwCopyright+'"'); + if not hasScreenname then + if nwscreenname <> '' then + Concat('SCREENNAME "'+nwscreenname+'"'); + if not hasThreadname then + if nwthreadname <> '' then + Concat('THREADNAME "'+nwthreadname+'"'); + if not hasVersion then + Concat('VERSION '+tostr(dllmajor)+' '+tostr(dllminor)+' '+tostr(dllrevision)); + if not hasDescription then + if description <> '' then + Concat ('DESCRIPTION "'+description+'"'); + if not hasStacksize then + if MaxStackSizeSetExplicity then + begin + if stacksize < minStackSize then stacksize := minStackSize; + Concat ('STACKSIZE '+tostr(stacksize)); + end else + Concat ('STACKSIZE '+tostr(minStackSize)); + if target_info.system = system_i386_netwlibc then + Concat ('REENTRANT'); { needed by older libc versions } + end; + + // add symbols needed by nwpre. We have not loaded the ppu, + // therefore we do not know the externals so read it from nwpre.imp + s := ChangeFileExt(prelude,'.imp'); // nwpre.imp + if not librarysearchpath.FindFile(s,true,s2) then + begin + comment(v_error,s+' not found'); + exit; + end; + assign(t,s2); reset(t); + while not eof(t) do + begin + readln(t,s); + s := trimspace(s); + if (length(s) > 0) then + if copy(s,1,1) <> '#' then + AddImportSymbol('!clib',s,0,false); + end; + close(t); + end; + + + procedure TInternalLinkerNetware.InitSysInitUnitName; + begin + //if target_info.system=system_i386_netware then + // GlobalInitSysInitUnitName(self); + end; + + procedure TInternalLinkerNetware.ConcatEntryName; + begin + with LinkScript do + begin + if IsSharedLibrary then + begin + Concat('ISSHAREDLIBRARY'); + Concat('ENTRYNAME _Prelude') + end + else + begin + Concat('ENTRYNAME _Prelude') + end; + end; + end; + + + Function TInternalLinkerNetware.MakeSharedLibrary:boolean; + begin + Comment(V_Error,'Make shared library not supported for netware'); + end; + {***************************************************************************** Initialize *****************************************************************************} @@ -556,6 +982,7 @@ end; initialization RegisterExternalLinker(system_i386_netware_info,TLinkerNetware); + RegisterInternalLinker(system_i386_netware_info,TInternalLinkerNetware); RegisterImport(system_i386_netware,TImportLibNetware); RegisterExport(system_i386_netware,TExportLibNetware); RegisterTarget(system_i386_netware_info); diff --git a/compiler/systems/t_wii.pas b/compiler/systems/t_wii.pas index ee0764bacc..485eb5bc89 100644 --- a/compiler/systems/t_wii.pas +++ b/compiler/systems/t_wii.pas @@ -562,9 +562,8 @@ begin { Call linker } SplitBinCmd(Info.ExeCmd[1],binstr,cmdstr); - Replace(cmdstr,'$OPT',Info.ExtraOptions); - Replace(cmdstr,'$EXE',(maybequoted(ScriptFixFileName(ChangeFileExt(current_module.exefilename^,'.elf'))))); + Replace(cmdstr,'$OPT',Info.ExtraOptions); Replace(cmdstr,'$RES',(maybequoted(ScriptFixFileName(outputexedir+Info.ResName)))); Replace(cmdstr,'$STATIC',StaticStr); Replace(cmdstr,'$STRIP',StripStr); diff --git a/compiler/tokens.pas b/compiler/tokens.pas index d41ee371a0..82b7325123 100644 --- a/compiler/tokens.pas +++ b/compiler/tokens.pas @@ -203,6 +203,7 @@ type _PRIVATE, _PROGRAM, _R12BASE, + _SECTION, _STDCALL, _SYSCALL, _VARARGS, @@ -497,6 +498,7 @@ const (str:'PRIVATE' ;special:false;keyword:m_none;op:NOTOKEN), (str:'PROGRAM' ;special:false;keyword:m_all;op:NOTOKEN), (str:'R12BASE' ;special:false;keyword:m_none;op:NOTOKEN), { Syscall variation on MorphOS } + (str:'SECTION' ;special:false;keyword:m_none;op:NOTOKEN), (str:'STDCALL' ;special:false;keyword:m_none;op:NOTOKEN), (str:'SYSCALL' ;special:false;keyword:m_none;op:NOTOKEN), (str:'VARARGS' ;special:false;keyword:m_none;op:NOTOKEN), diff --git a/compiler/utils/samplecfg b/compiler/utils/samplecfg index 68abd32674..c939e9e5d3 100644 --- a/compiler/utils/samplecfg +++ b/compiler/utils/samplecfg @@ -5,30 +5,6 @@ # Generate Sample Free Pascal configuration file # -setgccdir() { -# Find path to libgcc.a -GCCSPEC=`(gcc -v $@ 2>&1)| head -n 1| awk '{ print $4 } '` -if [ -z "$GCCSPEC" ] ; then - GCCSPEC=`gcc -print-libgcc-file-name $@ 2>/dev/null` -fi -GCCDIR=`dirname "$GCCSPEC"` -} - - -setgccdirarch() { -# First argument is fpc define for CPU type; remaining args are passed to gcc to set corresponding architecture -FPCDEFINE=$1 -shift -setgccdir $@ - -if [ -z "$GCCDIR" ] ; then - return -fi -GCCDIR="#ifdef $FPCDEFINE --Fl$GCCDIR -#endif" -} - HOSTOS=`uname -s | tr A-Z a-z` echo Running on $HOSTOS @@ -47,18 +23,23 @@ else fi FPCBIN=`dirname "$1"`/../../bin/fpc FPBIN=`dirname "$1"`/../../bin/fp +FPPKGBIN=`dirname "$1"`/../../bin/fppkg sysfpdirbase=`dirname "$1"`/`"$FPCBIN" -iV` sysfpdirbase2=$sysfpdirbase/ide sysfpdir=$sysfpdirbase2/text -fpctargetos=`"$FPCBIN" -iTO` # Detect if we have write permission in sysdir. if [ -w "$sysdir" ] ; then echo Write permission in $sysdir. fpccfgfile="$sysdir"/fpc.cfg + fppkgfile="$sysdir"/fppkg.cfg + defaultfile="$sysdir"/fppkg/default + compilerconfigdir="-d CompilerConfigDir=$sysdir/fppkg" else echo No write premission in $sysdir. fpccfgfile="$HOME"/.fpc.cfg + fppkgfile="$HOME"/.config/fppkg.cfg + defaultfile="$HOME"/.fppkg/config/default fi # @@ -69,388 +50,24 @@ if [ -f "$FPBIN" ] ; then fpinifile="$HOME"/.fp/fp.ini fpcfgfile="$HOME"/.fp/fp.cfg -# Detect if we have write permission in sysfpdirbase. - if [ -w "$sysfpdirbase" ] ; then - echo Write permission in $sysfpdirbase. - if ! [ -d "$sysfpdirbase2" ] ; then - echo Directory $sysfpdirbase2 did not exist, attempting to create it now - mkdir $sysfpdirbase2 >/dev/null 2>&1 - echo Attempting to create directory $sysfpdir - mkdir $sysfpdir >/dev/null 2>&1 - elif ! [ -d "$sysfpdir" ] ; then - echo Directory $sysfpdir did not exist, attempting to create it now - mkdir $sysfpdir >/dev/null 2>&1 - fi - if [ -w "$sysfpdir" ] ; then - fpinifile="$sysfpdir"/fp.ini - fpcfgfile="$sysfpdir"/fp.cfg - fi +# Detect if we have write permission in sysfpdir, or that the directory can be made + if ( [ -d "$sysfpdirbase" ] && [ -w "$sysfpdirbase" ] && ! [ -d "$sysfpdirbase2" ] ) || + ( [ -d "$sysfpdirbase2" ] && [ -w "$sysfpdirbase2" ] && ! [ -d "$sysfpdir" ] ) || + ( [ -d "$sysfpdir" ] && [ -w "$sysfpdir" ] ) ; then + fpinifile="$sysfpdir"/fp.ini + fpcfgfile="$sysfpdir"/fp.cfg fi # - -# When the local FP IDE configuration is used, check if the directory exists - if [ $fpcfgfile = "$HOME"/.fp/fp.cfg -a ! -d "$HOME"/.fp ] ; then - echo Directory $HOME/.fp did not exist, attempting to create it now - mkdir "$HOME"/.fp >/dev/null 2>&1 - fi -fi -# - -if [ -f "$fpccfgfile" ] ; then - mv "$fpccfgfile" "$fpccfgfile.orig" >/dev/null 2>&1 - if [ $? = 0 ]; then - echo Saved old compiler config to $fpccfgfile.orig - else - echo Could not save old compiler config. Bailing out... - exit - fi fi -if [ -f "$FPBIN" ] ; then - if [ -f "$fpinifile" ] ; then - mv "$fpinifile" "$fpinifile.orig" >/dev/null 2>&1 - if [ $? = 0 ]; then - echo Saved old fp.ini to $fpinifile.orig - else - echo Could not save old fp.ini. Bailing out... - exit - fi - fi - - if [ -f "$fpcfgfile" ] ; then - mv "$fpcfgfile" "$fpcfgfile.orig" >/dev/null 2>&1 - if [ $? = 0 ]; then - echo Saved old fp.cfg to $fpcfgfile.orig - else - echo Could not save old fp.cfg. Bailing out... - exit - fi - fi -fi - -setgccdir -GCCDIR2="" -GCCDIR3="" -GCCDIR4="" - -singlearch() { - if [ -d "$GCCDIR" ]; then - echo Found libgcc.a in "$GCCDIR" - GCCDIR=-Fl$GCCDIR - fi -} - -# include ports tree dir for FreeBSDers. -case "$HOSTOS" in - freebsd) - GCCDIR=-Fl/usr/local/lib - ;; - openbsd) - GCCDIR=-Fl/usr/local/lib - ;; - netbsd) - GCCDIR=-Fl/usr/pkg/lib - ;; - darwin) - setgccdirarch cpupowerpc -arch ppc - GCCDIR2="$GCCDIR" - setgccdirarch cpupowerpc64 -arch ppc64 - GCCDIR3="$GCCDIR" - setgccdirarch cpui386 -arch i386 - GCCDIR4="$GCCDIR" - setgccdirarch cpux86_64 -arch x86_64 - ;; - linux) - case `"$FPCBIN" -PP` in - i?86|x86_64|amd64) - # Allow for the possibility of both 32 and 64 bit compilation on same system - setgccdirarch cpui386 -m32 - GCCDIR4="$GCCDIR" - setgccdirarch cpux86_64 -m64 - ;; - powerpc|powerpc64) - # Allow for the possibility of both 32 and 64 bit compilation on same system - setgccdirarch cpupowerpc -m32 - GCCDIR4="$GCCDIR" - setgccdirarch cpupowerpc64 -m64 - ;; - # Add cases for other linux dual architectures here - *) singlearch # Default - ;; - esac - ;; - - *) singlearch - ;; - -esac - -CPUCROSSIFDEF1="#DEFINE NEEDCROSSBINUTILS" -CPUCROSSIFDEF2="" - -case `"$FPCBIN" -PP` in - i?86|x86_64|amd64) - # Cross-binutils are not needed to compile for i386 on an x86_64 system - CPUCROSSIFDEF1=" -#IFNDEF CPUI386 -#IFNDEF CPUAMD64 -#DEFINE NEEDCROSSBINUTILS -#ENDIF -#ENDIF -" - CPUCROSSIFDEF2=" -#IFNDEF $HOSTOS -#DEFINE NEEDCROSSBINUTILS -#ENDIF -" - ;; - *) - CPUCROSSIFDEF1="#DEFINE NEEDCROSSBINUTILS" - CPUCROSSIFDEF2="" - ;; -esac - -# darwin->darwin does not need cross binutils -case "$HOSTOS" in - darwin) - CPUCROSSIFDEF2=" -#ifdef darwin -#undef NEEDCROSSBINUTILS -#endif -" - ;; -esac - - # set right path to FPC with $fpcversion FPCPATH=`dirname "$1"`/\$fpcversion +# set right prefix to FPC +FPCGLOBALPREFIX=`dirname "$1"`/../../ # Write (.)fpc.cfg echo Writing sample configuration file to $fpccfgfile -cat <<EOFCFG > $fpccfgfile -# -# Example fpc.cfg for Free Pascal Compiler -# - -# ---------------------- -# Defines (preprocessor) -# ---------------------- - -# -# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed -# -# -d is the same as #DEFINE -# -u is the same as #UNDEF -# - -# -# Some examples (for switches see below, and the -? helppages) -# -# Try compiling with the -dRELEASE or -dDEBUG on the commandline -# - -# For a release compile with optimizes and strip debuginfo -#IFDEF RELEASE - -O2 - -Xs - #WRITE Compiling Release Version -#ENDIF - -# For a debug version compile with debuginfo and all codegeneration checks on -#IFDEF DEBUG - -g - -Crtoi - #WRITE Compiling Debug Version -#ENDIF - -# set binutils prefix -$CPUCROSSIFDEF1 -$CPUCROSSIFDEF2 - -#IFDEF FPC_CROSSCOMPILING -#IFDEF NEEDCROSSBINUTILS - -XP\$fpctarget- -#ENDIF NEEDCROSSBINUTILS -#ENDIF - -# assembling -#ifdef darwin -# use pipes instead of temporary files for assembling --ap -#endif - -# ---------------- -# Parsing switches -# ---------------- - -# Pascal language mode -# -Mfpc free pascal dialect (default) -# -Mobjfpc switch some Delphi 2 extensions on -# -Mdelphi tries to be Delphi compatible -# -Mtp tries to be TP/BP 7.0 compatible -# -Mgpc tries to be gpc compatible -# -Mmacpas tries to be compatible to the macintosh pascal dialects -# -# Turn on Object Pascal extensions by default -#-Mobjfpc - -# Assembler reader mode -# -Rdefault use default assembler -# -Ratt read AT&T style assembler -# -Rintel read Intel style assembler -# -# All assembler blocks are AT&T styled by default -#-Ratt - -# Semantic checking -# -S2 same as -Mobjfpc -# -Sc supports operators like C (*=,+=,/= and -=) -# -Sa include assertion code. -# -Sd same as -Mdelphi -# -Se<x> error options. <x> is a combination of the following: -# <n> : compiler stops after the <n> errors (default is 1) -# w : compiler stops also after warnings -# n : compiler stops also after notes -# h : compiler stops also after hints -# -Sg allow LABEL and GOTO -# -Sh Use ansistrings -# -Si support C++ styled INLINE -# -Sk load fpcylix unit -# -SI<x> set interface style to <x> -# -SIcom COM compatible interface (default) -# -SIcorba CORBA compatible interface -# -Sm support macros like C (global) -# -So same as -Mtp -# -Sp same as -Mgpc -# -Ss constructor name must be init (destructor must be done) -# -Sx enable exception keywords (default in Delphi/ObjFPC modes) -# -# Allow goto, inline, C-operators, C-vars --Sgic - -# --------------- -# Code generation -# --------------- - -# Uncomment the next line if you always want static/dynamic units by default -# (can be overruled with -CD, -CS at the commandline) -#-CS -#-CD - -# Set the default heapsize to 8Mb -#-Ch8000000 - -# Set default codegeneration checks (iocheck, overflow, range, stack) -#-Ci -#-Co -#-Cr -#-Ct - -# Optimizer switches -# -Os generate smaller code -# -O1 level 1 optimizations (quick optimizations, debuggable) -# -O2 level 2 optimizations (-O1 + optimizations which make debugging more difficult) -# -O3 level 3 optimizations (-O2 + optimizations which also may make the program slower rather than faster) -# -Op<x> set target cpu for optimizing, see fpc -i for possible values -# -# See "fpc -i" also for more fine-grained control over which optimizations -# to perform - -#ifdef darwin -#ifdef cpui386 --Cppentiumm --Oppentiumm -#endif -#endif - -# ----------------------- -# Set Filenames and Paths -# ----------------------- - -# Slashes are also allowed under dos - -# path to the messagefile, not necessary anymore but can be used to override -# the default language -#-Fr$FPCPATH/msg/errore.msg -#-Fr$FPCPATH/msg/errorn.msg - -# searchpath for units and other system dependent things --Fu$FPCPATH/units/\$fpctarget --Fu$FPCPATH/units/\$fpctarget/* --Fu$FPCPATH/units/\$fpctarget/rtl -#-Fu~/fpc/packages/base/*/units/$fpctarget;~/fpc/fcl/units/$fpctarget;~/fpc/rtl/units/$fpctarget - -#IFDEF FPCAPACHE_1_3 --Fu$FPCPATH/units/\$fpctarget/httpd13/ -#ELSE -#IFDEF FPCAPACHE_2_0 --Fu$FPCPATH/units/\$fpctarget/httpd20 -#ELSE --Fu$FPCPATH/units/\$fpctarget/httpd22 -#ENDIF -#ENDIF - -# searchpath for libraries -$GCCDIR -$GCCDIR2 -$GCCDIR3 -$GCCDIR4 -#-Fl/pp/lib -#-Fl/lib;/usr/lib - - -# ------------- -# Linking -# ------------- - -# generate always debugging information for GDB (slows down the compiling -# process) -# -gc generate checks for pointers -# -gd use dbx -# -gg use gsym -# -gh use heap trace unit (for memory leak debugging) -# -gl use line info unit to show more info for backtraces -# -gv generates programs tracable with valgrind -# -gw generate dwarf debugging info -# -# Enable debuginfo and use the line info unit by default -#-gl - -# always pass an option to the linker -#-k-s - -# Always strip debuginfo from the executable --Xs - - -# ------------- -# Miscellaneous -# ------------- - -# Write always a nice FPC logo ;) --l - -# Verbosity -# e : Show errors (default) d : Show debug info -# w : Show warnings u : Show unit info -# n : Show notes t : Show tried/used files -# h : Show hints c : Show conditionals -# i : Show general info d : Show debug info -# l : Show linenumbers r : Rhide/GCC compatibility mode -# a : Show everything x : Executable info (Win32 only) -# b : Write file names messages with full path -# v : write fpcdebug.txt with p : Write tree.log with parse tree -# lots of debugging info -# -# Display Info, Warnings and Notes --viwn -# If you don't want so much verbosity use -#-vw - -# -# That's all folks -# -EOFCFG +fpcmkcfg -d "basepath=$FPCPATH" -o $fpccfgfile if ! [ -f "$FPBIN" ] ; then exit @@ -458,132 +75,21 @@ fi # Write fp.cfg echo Writing sample configuration file to $fpcfgfile -cat <<EOFFPCFG > $fpcfgfile -#IFDEF NORMAL - -Ci - -XS - -T$fpctargetos - -Sg - -O1 - -Fu$FPCPATH/units/\$fpctarget - -Fu$FPCPATH/units/\$fpctarget\* - -Fu$FPCPATH/units/\$fpctarget\rtl - $GCCDIR - $GCCDIR2 - $GCCDIR3 - $GCCDIR4 - -g- - -p- - -b- -#ENDIF - -#IFDEF DEBUG - -Ci - -XS - -T$fpctargetos - -Sg - -Cr - -Co - -Fu$FPCPATH/units/\$fpctarget - -Fu$FPCPATH/units/\$fpctarget\* - -Fu$FPCPATH/units/\$fpctarget\rtl - $GCCDIR - $GCCDIR2 - $GCCDIR3 - $GCCDIR4 - -g - -p- - -b- -#ENDIF - -#IFDEF RELEASE - -XS - -T$fpctargetos - -Sg - -O2 - -Fu$FPCPATH/units/\$fpctarget - -Fu$FPCPATH/units/\$fpctarget\* - -Fu$FPCPATH/units/\$fpctarget\rtl - $GCCDIR - $GCCDIR2 - $GCCDIR3 - $GCCDIR4 - -g- - -p- - -b- -#ENDIF -EOFFPCFG +fpcmkcfg -p -1 -d "basepath=$FPCPATH" -o $fpcfgfile # Write fp.ini echo Writing sample configuration file to $fpinifile -cat <<EOFFPINI > $fpinifile -[Compile] -CompileMode=DEBUG - -[Editor] -DefaultTabSize=8 -DefaultFlags=20599 -DefaultSaveExt=.pas -DefaultIndentSize=1 - -[Highlight] -Exts="*.pas;*.pp;*.inc" -NeedsTabs="make*;make*.*" - -[SourcePath] -SourceList="" - -[Mouse] -DoubleDelay=8 -ReverseButtons=0 -AltClickAction=6 -CtrlClickAction=1 - -[Search] -FindFlags=4 +fpcmkcfg -p -2 -o $fpinifile -[Breakpoints] -Count=0 - -[Watches] -Count=0 - -[Preferences] -DesktopFileFlags=209 -CenterCurrentLineWhileDebugging=1 -AutoSaveFlags=7 -MiscOptions=6 -DesktopLocation=1 - -[Misc] -ShowReadme=1 +# Do not write fppkg configuration when fppkg is not available +if ! [ -f "$FPPKGBIN" ] ; then + exit +fi -[Files] -OpenExts="*.pas;*.pp;*.inc" +# Write fppkg.cfg +echo Writing sample configuration file to $fppkgfile +fpcmkcfg -p -3 $compilerconfigdir -o $fppkgfile -[Tools] -Title1="svn ~u~p (curr. dir)" -Program1="svn" -Params1="up \$CAP_MSG()" -HotKey1=23296 -Title2="svn c~i~ (curr. dir)" -Program2="svn" -Params2="ci \$CAP_MSG()" -HotKey2=23552 -Title3="svn ~d~iff" -Program3="svn" -Params3="diff \$CAP_MSG() \$EDNAME" -HotKey3=23808 -Title4="svn ~l~og" -Program4="svn" -Params4="log \$CAP_MSG() \$EDNAME" -HotKey4=34560 -Title5="svn ~b~lame" -Program5="svn" -Params5="blame \$CAP_MSG() \$EDNAME" -HotKey5=34816 -Title6="svn ~a~dd" -Program6="svn" -Params6="add \$CAP_MSG() \$EDNAME" -HotKey6=0' -EOFFPINI +# Write default +echo Writing sample configuration file to $defaultfile +fpcmkcfg -p -4 -d "GlobalPrefix=$FPCGLOBALPREFIX" -o $defaultfile diff --git a/compiler/x86/agx86int.pas b/compiler/x86/agx86int.pas index 739c3b4e39..545a71e361 100644 --- a/compiler/x86/agx86int.pas +++ b/compiler/x86/agx86int.pas @@ -59,7 +59,7 @@ implementation const line_length = 70; - secnames : array[TAsmSectiontype] of string[4] = ('', + secnames : array[TAsmSectiontype] of string[4] = ('','', 'CODE','DATA','DATA','DATA','BSS','', '','','','','','', '','','','', @@ -109,7 +109,7 @@ implementation '' ); - secnamesml64 : array[TAsmSectiontype] of string[7] = ('', + secnamesml64 : array[TAsmSectiontype] of string[7] = ('','', '_TEXT','_DATE','_DATA','_DATA','_BSS','', '','','','', 'idata$2','idata$4','idata$5','idata$6','idata$7','edata', @@ -978,7 +978,7 @@ implementation { better do this at end of WriteTree, but then there comes a trouble with al_const which does not have leading ait_section and thus goes out of segment } - + { TODO: probably ml64 needs 'closing' last section, too } if LastSecType <> sec_none then AsmWriteLn('_'+secnames[LasTSecType]+#9#9'ENDS'); diff --git a/compiler/x86/x86ins.dat b/compiler/x86/x86ins.dat index 098771c7b0..32cdd1bd54 100644 --- a/compiler/x86/x86ins.dat +++ b/compiler/x86/x86ins.dat @@ -2557,7 +2557,9 @@ xmmreg,mem \1\x66\301\323\2\x0F\xE3\110 WILLAMETTE,SSE2,SM [PEXTRW] (Ch_All, Ch_None, Ch_None) reg32,mmxreg,imm \2\x0F\xC5\110\22 KATMAI,MMX,SB,AR2 -reg32,xmmreg,imm \1\x66\323\2\x0F\xC5\110\26 WILLAMETTE,SSE2,SB,AR2 +reg32,xmmreg,imm \1\x66\323\2\x0F\xC5\110\26 SSE4 +mem32,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x15\101\26 SSE4 + [PINSRW] (Ch_All, Ch_None, Ch_None) @@ -3269,7 +3271,7 @@ mem,xmmreg \333\300\323\2\x0F\x2B\101 SSE4,SD [MOVNTSD] (Ch_All, Ch_None, Ch_None) -mem,xmmreg \300\334\325\323\2\x0F\x2B\\101 SSE4 ;,SQ +mem,xmmreg \300\334\325\323\2\x0F\x2B\101 SSE4 ;,SQ [INSERTQ] (Ch_All, Ch_None, Ch_None) @@ -3287,7 +3289,432 @@ xmmreg,xmmreg \336\323\2\x0F\x79\110 SSE4 reg16,regmem \320\333\301\323\2\x0F\xBD\110 386,SM,SSE4 reg32|64,regmem \321\333\301\323\2\x0F\xBD\110 386,SM,SSE4 +;******************************************************************************* +;**********SSSE3**************************************************************** +;******************************************************************************* +;Use SSE4, but need special flag for SSSE3 insructions set +[PABSB] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x1C\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x1C\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1C\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x1C\110 SSE4 + +[PABSW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x1D\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x1D\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1D\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x1D\110 SSE4 + +[PABSD] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x1E\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x1E\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x1E\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x1E\110 SSE4 + +[PALIGNR] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg,imm \331\3\x0F\x3A\x0F\110\26 SSE4 +mmxreg,mem,imm \301\331\3\x0F\x3A\x0F\110\26 SSE4 +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0F\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0F\110\26 SSE4 + +[PHADDW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x01\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x01\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x01\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x01\110 SSE4 + +[PHADDD] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x02\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x02\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x02\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x02\110 SSE4 + +[PHADDSW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x03\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x03\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x03\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x03\110 SSE4 + +[PHSUBW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x05\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x05\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x05\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x05\110 SSE4 + +[PHSUBD] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x06\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x06\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x06\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x06\110 SSE4 + +[PHSUBSW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x07\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x07\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x07\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x07\110 SSE4 + +[PMADDUBSW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x04\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x04\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x04\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x04\110 SSE4 + +[PMULHRSW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x0B\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x0B\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x0B\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x0B\110 SSE4 + +[PSHUFB] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x00\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x00\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x00\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x00\110 SSE4 + +[PSIGNB] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x08\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x08\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x08\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x08\110 SSE4 + +[PSIGNW] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x09\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x09\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x09\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x09\110 SSE4 + +[PSIGND] +(Ch_All, Ch_None, Ch_None) +mmxreg,mmxreg \331\3\x0F\x38\x0A\110 SSE4 +mmxreg,mem \301\331\3\x0F\x38\x0A\110 SSE4 +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x0A\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x0A\110 SSE4 +;******************************************************************************* +;**********SSE4.1*************************************************************** +;******************************************************************************* +[BLENDPS] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0C\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0C\110\26 SSE4 + +[BLENDPD] ;By hands delete 'or ot_signed' from i386tab.inc or x8664tab.inc +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\2\x0F\x3A\375\1\x0D\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\2\x0F\x3A\375\1\x0D\110\26 SSE4 + +[BLENDVPS] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x14\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x14\110 SSE4 + +[BLENDVPD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x15\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x15\110 SSE4 + +[DPPS] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x40\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x40\110\26 SSE4 + +[DPPD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x41\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x41\110\26 SSE4 + +[EXTRACTPS] +(Ch_All, Ch_None, Ch_None) +mem,xmmreg,imm \1\x66\325\3\x0F\x3A\x17\101\26 SSE4 +reg32|64,xmmreg,imm \1\x66\300\3\x0F\x3A\x17\101\26 SSE4 + +[INSERTPS] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x21\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x21\110\26 SSE4 + +[MOVNTDQA] +(Ch_All, Ch_None, Ch_None) +xmmreg,mem \1\x66\301\331\3\x0F\x38\x2A\110 SSE4 + +[MPSADBW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x42\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x42\110\26 SSE4 + +[PACKUSDW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x2B\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x2B\110 SSE4 + +[PBLENDVB] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x10\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x10\110 SSE4 + +[PBLENDW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0E\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0E\110\26 SSE4 + +[PCMPEQQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x29\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x29\110 SSE4 + +[PEXTRB] +(Ch_All, Ch_None, Ch_None) +reg32,xmmreg,imm \1\x66\323\3\x0F\x3A\x14\101\26 SSE4 +mem8,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x14\101\26 SSE4 + +;PEXTRW - Look is prev. implementation + +[PEXTRD] +(Ch_All, Ch_None, Ch_None) +reg32,xmmreg,imm \1\x66\323\3\x0F\x3A\x16\101\26 SSE4 +mem32,xmmreg,imm \1\x66\300\323\3\x0F\x3A\x16\101\26 SSE4 + +[PEXTRQ] +(Ch_All, Ch_None, Ch_None) +reg64,xmmreg,imm \1\x66\326\3\x0F\x3A\x16\101\26 SSE4 +mem64,xmmreg,imm \1\x66\300\326\3\x0F\x3A\x16\101\26 SSE4 + +[PHMINPOSUW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x41\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x41\110 SSE4 + +[PINSRB] +(Ch_All, Ch_None, Ch_None) +xmmreg,reg32,imm \1\x66\331\3\x0F\x3A\x20\110\26 SSE4 +xmmreg,mem8,imm \1\x66\301\331\3\x0F\x3A\x20\110\26 SSE4 + +[PINSRD] +(Ch_All, Ch_None, Ch_None) +xmmreg,reg32,imm \1\x66\331\3\x0F\x3A\x22\110\26 SSE4 +xmmreg,mem32,imm \1\x66\301\331\3\x0F\x3A\x22\110\26 SSE4 + +[PINSRQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,reg64,imm \1\x66\326\3\x0F\x3A\x22\110\26 SSE4 +xmmreg,mem64,imm \1\x66\301\326\3\x0F\x3A\x22\110\26 SSE4 + +[PMAXSB] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3C\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3C\110 SSE4 + +[PMAXSD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3D\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3D\110 SSE4 + +[PMAXUD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3F\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3F\110 SSE4 + +[PMAXUW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3E\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3E\110 SSE4 + +[PMINSB] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x38\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x38\110 SSE4 + +[PMINSD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x39\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x39\110 SSE4 + +[PMINUW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3A\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3A\110 SSE4 + +[PMINUD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x3B\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x3B\110 SSE4 + +[PMOVSXBW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x20\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x20\110 SSE4 + +[PMOVSXBD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x21\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x21\110 SSE4 + +[PMOVSXBQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x22\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x22\110 SSE4 + +[PMOVSXWD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x23\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x23\110 SSE4 + +[PMOVSXWQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x24\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x24\110 SSE4 + +[PMOVSXDQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x25\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x25\110 SSE4 + +[PMOVZXBW] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x30\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x30\110 SSE4 + +[PMOVZXBD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x31\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x31\110 SSE4 + +[PMOVZXBQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x32\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x32\110 SSE4 + +[PMOVZXWD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x33\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x33\110 SSE4 + +[PMOVZXWQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x34\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x34\110 SSE4 + +[PMOVZXDQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x35\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x35\110 SSE4 + +[PMULDQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x28\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x28\110 SSE4 + +[PTEST] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x17\110 SSE4 + +[ROUNDPS] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x08\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x08\110\26 SSE4 + +[ROUNDPD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x09\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x09\110\26 SSE4 + +[ROUNDSS] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0A\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0A\110\26 SSE4 + +[ROUNDSD] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x0B\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x0B\110\26 SSE4 +;******************************************************************************* +;**********SSE4.2*************************************************************** +;******************************************************************************* +[PCMPESTRI] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x61\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x61\110\26 SSE4 +[PCMPESTRM] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x60\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x60\110\26 SSE4 +[PCMPISTRI] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x63\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x63\110\26 SSE4 +[PCMPISTRM] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\x62\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\x62\110\26 SSE4 +[PCMPGTQ] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\x37\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\x37\110 SSE4 +; CRC32 [POPCNT,popcntX] (Ch_All, Ch_None, Ch_None) -reg16,regmem \320\333\301\323\2\x0F\xB8\110 386,SM,SSE4 -reg32|64,regmem \321\333\301\323\2\x0F\xB8\110 386,SM,SSE4 +reg16,rm16 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4 +reg32,rm32 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4 +reg64,rm64 \1\xF3\301\320\2\x0F\xB8\110 386,SM,SSE4 +;******************************************************************************* +;**********AES****************************************************************** +;******************************************************************************* +;Use SSE4, but need special flag for AES insructions set + +[AESENC] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDC\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\xDC\110 SSE4 + +[AESENCLAST] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDD\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\xDD\110 SSE4 + +[AESDEC] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDE\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\xDE\110 SSE4 + +[AESDECLAST] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDF\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\xDF\110 SSE4 + +[AESIMC] +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg \1\x66\331\3\x0F\x38\xDB\110 SSE4 +xmmreg,mem \1\x66\301\331\3\x0F\x38\xDB\110 SSE4 + +[AESKEYGEN] ;AESKEYGENASIST +(Ch_All, Ch_None, Ch_None) +xmmreg,xmmreg,imm \1\x66\331\3\x0F\x3A\xDF\110\26 SSE4 +xmmreg,mem,imm \1\x66\301\331\3\x0F\x3A\xDF\110\26 SSE4 +;******************************************************************************* +;******************************************************************************* +;******************************************************************************* +[STOSQ] +(Ch_RRAX, Ch_WMemEDI, Ch_RWRDI) +void \2\x48\xAB X86_64 + +[LODSQ] +(Ch_WRAX, Ch_RWRSI, Ch_None) +void \2\x48\xAD X86_64 + +[CMPSQ] +(Ch_All, Ch_None, Ch_None) +void \2\x48\xA7 X86_64
\ No newline at end of file diff --git a/compiler/x86_64/cgcpu.pas b/compiler/x86_64/cgcpu.pas index 812acd713f..e204268fd0 100644 --- a/compiler/x86_64/cgcpu.pas +++ b/compiler/x86_64/cgcpu.pas @@ -90,8 +90,13 @@ unit cgcpu; else { in intf. wrapper code generation } framepointer:=RS_FRAME_POINTER_REG; - rg[R_INTREGISTER]:=trgcpu.create(R_INTREGISTER,R_SUBWHOLE,[RS_RAX,RS_RDX,RS_RCX,RS_RBX,RS_RSI,RS_RDI, - RS_R8,RS_R9,RS_R10,RS_R11,RS_R12,RS_R13,RS_R14,RS_R15],first_int_imreg,[framepointer]); + if target_info.system=system_x86_64_win64 then + rg[R_INTREGISTER]:=trgcpu.create(R_INTREGISTER,R_SUBWHOLE,[RS_RAX,RS_RDX,RS_RCX,RS_R8,RS_R9,RS_R10, + RS_R11,RS_RBX,RS_RSI,RS_RDI,RS_R12,RS_R13,RS_R14,RS_R15],first_int_imreg,[framepointer]) + else + rg[R_INTREGISTER]:=trgcpu.create(R_INTREGISTER,R_SUBWHOLE,[RS_RAX,RS_RDX,RS_RCX,RS_RSI,RS_RDI,RS_R8, + RS_R9,RS_R10,RS_R11,RS_RBX,RS_R12,RS_R13,RS_R14,RS_R15],first_int_imreg,[framepointer]); + rg[R_MMREGISTER]:=trgcpu.create(R_MMREGISTER,R_SUBWHOLE,[RS_XMM0,RS_XMM1,RS_XMM2,RS_XMM3,RS_XMM4,RS_XMM5,RS_XMM6,RS_XMM7, RS_XMM8,RS_XMM9,RS_XMM10,RS_XMM11,RS_XMM12,RS_XMM13,RS_XMM14,RS_XMM15],first_mm_imreg,[]); rgfpu:=Trgx86fpu.create; diff --git a/compiler/x86_64/x8664ats.inc b/compiler/x86_64/x8664ats.inc index f8a8d8d702..f012e395d6 100644 --- a/compiler/x86_64/x8664ats.inc +++ b/compiler/x86_64/x8664ats.inc @@ -602,5 +602,82 @@ attsufNONE, attsufNONE, attsufNONE, attsufINT, -attsufINT +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufINT, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE, +attsufNONE ); diff --git a/compiler/x86_64/x8664att.inc b/compiler/x86_64/x8664att.inc index 04e9e8387e..b34c6193fe 100644 --- a/compiler/x86_64/x8664att.inc +++ b/compiler/x86_64/x8664att.inc @@ -602,5 +602,82 @@ 'insertq', 'extrq', 'lzcnt', -'popcnt' +'pabsb', +'pabsw', +'pabsd', +'palignr', +'phaddw', +'phaddd', +'phaddsw', +'phsubw', +'phsubd', +'phsubsw', +'pmaddubsw', +'pmulhrsw', +'pshufb', +'psignb', +'psignw', +'psignd', +'blendps', +'blendpd', +'blendvps', +'blendvpd', +'dpps', +'dppd', +'extractps', +'insertps', +'movntdqa', +'mpsadbw', +'packusdw', +'pblendvb', +'pblendw', +'pcmpeqq', +'pextrb', +'pextrd', +'pextrq', +'phminposuw', +'pinsrb', +'pinsrd', +'pinsrq', +'pmaxsb', +'pmaxsd', +'pmaxud', +'pmaxuw', +'pminsb', +'pminsd', +'pminuw', +'pminud', +'pmovsxbw', +'pmovsxbd', +'pmovsxbq', +'pmovsxwd', +'pmovsxwq', +'pmovsxdq', +'pmovzxbw', +'pmovzxbd', +'pmovzxbq', +'pmovzxwd', +'pmovzxwq', +'pmovzxdq', +'pmuldq', +'ptest', +'roundps', +'roundpd', +'roundss', +'roundsd', +'pcmpestri', +'pcmpestrm', +'pcmpistri', +'pcmpistrm', +'pcmpgtq', +'popcnt', +'aesenc', +'aesenclast', +'aesdec', +'aesdeclast', +'aesimc', +'aeskeygen', +'stosq', +'lodsq', +'cmpsq' ); diff --git a/compiler/x86_64/x8664int.inc b/compiler/x86_64/x8664int.inc index 3e030b7150..a661e19278 100644 --- a/compiler/x86_64/x8664int.inc +++ b/compiler/x86_64/x8664int.inc @@ -602,5 +602,82 @@ 'insertq', 'extrq', 'lzcnt', -'popcnt' +'pabsb', +'pabsw', +'pabsd', +'palignr', +'phaddw', +'phaddd', +'phaddsw', +'phsubw', +'phsubd', +'phsubsw', +'pmaddubsw', +'pmulhrsw', +'pshufb', +'psignb', +'psignw', +'psignd', +'blendps', +'blendpd', +'blendvps', +'blendvpd', +'dpps', +'dppd', +'extractps', +'insertps', +'movntdqa', +'mpsadbw', +'packusdw', +'pblendvb', +'pblendw', +'pcmpeqq', +'pextrb', +'pextrd', +'pextrq', +'phminposuw', +'pinsrb', +'pinsrd', +'pinsrq', +'pmaxsb', +'pmaxsd', +'pmaxud', +'pmaxuw', +'pminsb', +'pminsd', +'pminuw', +'pminud', +'pmovsxbw', +'pmovsxbd', +'pmovsxbq', +'pmovsxwd', +'pmovsxwq', +'pmovsxdq', +'pmovzxbw', +'pmovzxbd', +'pmovzxbq', +'pmovzxwd', +'pmovzxwq', +'pmovzxdq', +'pmuldq', +'ptest', +'roundps', +'roundpd', +'roundss', +'roundsd', +'pcmpestri', +'pcmpestrm', +'pcmpistri', +'pcmpistrm', +'pcmpgtq', +'popcnt', +'aesenc', +'aesenclast', +'aesdec', +'aesdeclast', +'aesimc', +'aeskeygen', +'stosq', +'lodsq', +'cmpsq' ); diff --git a/compiler/x86_64/x8664nop.inc b/compiler/x86_64/x8664nop.inc index c04c39f905..b1481b46ce 100644 --- a/compiler/x86_64/x8664nop.inc +++ b/compiler/x86_64/x8664nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -1372; +1555; diff --git a/compiler/x86_64/x8664op.inc b/compiler/x86_64/x8664op.inc index 2077fbebdf..7386f7fcd5 100644 --- a/compiler/x86_64/x8664op.inc +++ b/compiler/x86_64/x8664op.inc @@ -602,5 +602,82 @@ A_MOVNTSD, A_INSERTQ, A_EXTRQ, A_LZCNT, -A_POPCNT +A_PABSB, +A_PABSW, +A_PABSD, +A_PALIGNR, +A_PHADDW, +A_PHADDD, +A_PHADDSW, +A_PHSUBW, +A_PHSUBD, +A_PHSUBSW, +A_PMADDUBSW, +A_PMULHRSW, +A_PSHUFB, +A_PSIGNB, +A_PSIGNW, +A_PSIGND, +A_BLENDPS, +A_BLENDPD, +A_BLENDVPS, +A_BLENDVPD, +A_DPPS, +A_DPPD, +A_EXTRACTPS, +A_INSERTPS, +A_MOVNTDQA, +A_MPSADBW, +A_PACKUSDW, +A_PBLENDVB, +A_PBLENDW, +A_PCMPEQQ, +A_PEXTRB, +A_PEXTRD, +A_PEXTRQ, +A_PHMINPOSUW, +A_PINSRB, +A_PINSRD, +A_PINSRQ, +A_PMAXSB, +A_PMAXSD, +A_PMAXUD, +A_PMAXUW, +A_PMINSB, +A_PMINSD, +A_PMINUW, +A_PMINUD, +A_PMOVSXBW, +A_PMOVSXBD, +A_PMOVSXBQ, +A_PMOVSXWD, +A_PMOVSXWQ, +A_PMOVSXDQ, +A_PMOVZXBW, +A_PMOVZXBD, +A_PMOVZXBQ, +A_PMOVZXWD, +A_PMOVZXWQ, +A_PMOVZXDQ, +A_PMULDQ, +A_PTEST, +A_ROUNDPS, +A_ROUNDPD, +A_ROUNDSS, +A_ROUNDSD, +A_PCMPESTRI, +A_PCMPESTRM, +A_PCMPISTRI, +A_PCMPISTRM, +A_PCMPGTQ, +A_POPCNT, +A_AESENC, +A_AESENCLAST, +A_AESDEC, +A_AESDECLAST, +A_AESIMC, +A_AESKEYGEN, +A_STOSQ, +A_LODSQ, +A_CMPSQ ); diff --git a/compiler/x86_64/x8664pro.inc b/compiler/x86_64/x8664pro.inc index 75aab26425..87dd25a2ac 100644 --- a/compiler/x86_64/x8664pro.inc +++ b/compiler/x86_64/x8664pro.inc @@ -602,5 +602,82 @@ (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_All, Ch_None, Ch_None)), +(Ch: (Ch_RRAX, Ch_WMemEDI, Ch_RWRDI)), +(Ch: (Ch_WRAX, Ch_RWRSI, Ch_None)), (Ch: (Ch_All, Ch_None, Ch_None)) ); diff --git a/compiler/x86_64/x8664tab.inc b/compiler/x86_64/x8664tab.inc index 4c1025a7a7..02f8efb5a6 100644 --- a/compiler/x86_64/x8664tab.inc +++ b/compiler/x86_64/x8664tab.inc @@ -7705,7 +7705,14 @@ ops : 3; optypes : (ot_reg32,ot_xmmreg,ot_immediate); code : #1#102#211#2#15#197#72#22; - flags : if_willamette or if_sse2 or if_sb or if_ar2 + flags : if_sse4 + ), + ( + opcode : A_PEXTRW; + ops : 3; + optypes : (ot_memory or ot_bits32,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#21#65#22; + flags : if_sse4 ), ( opcode : A_PINSRW; @@ -9552,7 +9559,7 @@ opcode : A_MOVNTSD; ops : 2; optypes : (ot_memory,ot_xmmreg,ot_none); - code : #192#220#213#211#2#15#43#0#65; + code : #192#220#213#211#2#15#43#65; flags : if_sse4 ), ( @@ -9591,17 +9598,1291 @@ flags : if_386 or if_sm or if_sse4 ), ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#28#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#29#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PABSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#30#72; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_mmxreg,ot_mmxreg,ot_immediate); + code : #217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_mmxreg,ot_memory,ot_immediate); + code : #193#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PALIGNR; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#15#72#22; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#1#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#2#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHADDSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#3#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#5#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#6#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PHSUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#7#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMADDUBSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#4#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PMULHRSW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#11#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSHUFB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#0#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#8#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGNW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#9#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_mmxreg,ot_mmxreg,ot_none); + code : #217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_mmxreg,ot_memory,ot_none); + code : #193#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_PSIGND; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#10#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDPS; + ops : 3; + optypes : (ot_xmmreg or ot_signed,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#12#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPS; + ops : 3; + optypes : (ot_xmmreg or ot_signed,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#12#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#2#15#58#253#1#13#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#2#15#58#253#1#13#72#22; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPS; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#20#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPS; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#20#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#21#72; + flags : if_sse4 + ), + ( + opcode : A_BLENDVPD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#21#72; + flags : if_sse4 + ), + ( + opcode : A_DPPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#64#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#64#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#65#72#22; + flags : if_sse4 + ), + ( + opcode : A_DPPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#65#72#22; + flags : if_sse4 + ), + ( + opcode : A_EXTRACTPS; + ops : 3; + optypes : (ot_memory,ot_xmmreg,ot_immediate); + code : #1#102#213#3#15#58#23#65#22; + flags : if_sse4 + ), + ( + opcode : A_EXTRACTPS; + ops : 3; + optypes : (ot_reg32 or ot_bits64,ot_xmmreg,ot_immediate); + code : #1#102#192#3#15#58#23#65#22; + flags : if_sse4 + ), + ( + opcode : A_INSERTPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#33#72#22; + flags : if_sse4 + ), + ( + opcode : A_INSERTPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#33#72#22; + flags : if_sse4 + ), + ( + opcode : A_MOVNTDQA; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#42#72; + flags : if_sse4 + ), + ( + opcode : A_MPSADBW; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#66#72#22; + flags : if_sse4 + ), + ( + opcode : A_MPSADBW; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#66#72#22; + flags : if_sse4 + ), + ( + opcode : A_PACKUSDW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#43#72; + flags : if_sse4 + ), + ( + opcode : A_PACKUSDW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#43#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDVB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#16#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDVB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#16#72; + flags : if_sse4 + ), + ( + opcode : A_PBLENDW; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate or ot_signed); + code : #1#102#217#3#15#58#14#72#22; + flags : if_sse4 + ), + ( + opcode : A_PBLENDW; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate or ot_signed); + code : #1#102#193#217#3#15#58#14#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPEQQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#41#72; + flags : if_sse4 + ), + ( + opcode : A_PCMPEQQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#41#72; + flags : if_sse4 + ), + ( + opcode : A_PEXTRB; + ops : 3; + optypes : (ot_reg32,ot_xmmreg,ot_immediate); + code : #1#102#211#3#15#58#20#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRB; + ops : 3; + optypes : (ot_memory or ot_bits8,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#20#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRD; + ops : 3; + optypes : (ot_reg32,ot_xmmreg,ot_immediate); + code : #1#102#211#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRD; + ops : 3; + optypes : (ot_memory or ot_bits32,ot_xmmreg,ot_immediate); + code : #1#102#192#211#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRQ; + ops : 3; + optypes : (ot_reg64,ot_xmmreg,ot_immediate); + code : #1#102#214#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PEXTRQ; + ops : 3; + optypes : (ot_memory or ot_bits64,ot_xmmreg,ot_immediate); + code : #1#102#192#214#3#15#58#22#65#22; + flags : if_sse4 + ), + ( + opcode : A_PHMINPOSUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#65#72; + flags : if_sse4 + ), + ( + opcode : A_PHMINPOSUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#65#72; + flags : if_sse4 + ), + ( + opcode : A_PINSRB; + ops : 3; + optypes : (ot_xmmreg,ot_reg32,ot_immediate); + code : #1#102#217#3#15#58#32#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRB; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits8,ot_immediate); + code : #1#102#193#217#3#15#58#32#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRD; + ops : 3; + optypes : (ot_xmmreg,ot_reg32,ot_immediate); + code : #1#102#217#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRD; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits32,ot_immediate); + code : #1#102#193#217#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRQ; + ops : 3; + optypes : (ot_xmmreg,ot_reg64,ot_immediate); + code : #1#102#214#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PINSRQ; + ops : 3; + optypes : (ot_xmmreg,ot_memory or ot_bits64,ot_immediate); + code : #1#102#193#214#3#15#58#34#72#22; + flags : if_sse4 + ), + ( + opcode : A_PMAXSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#60#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#60#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#61#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#61#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#63#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#63#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#62#72; + flags : if_sse4 + ), + ( + opcode : A_PMAXUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#62#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSB; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#56#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSB; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#56#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#57#72; + flags : if_sse4 + ), + ( + opcode : A_PMINSD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#57#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#58#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#58#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#59#72; + flags : if_sse4 + ), + ( + opcode : A_PMINUD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#59#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#32#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#32#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#33#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#33#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#34#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#34#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#35#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#35#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#36#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#36#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#37#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVSXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#37#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBW; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#48#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBW; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#48#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#49#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#49#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#50#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXBQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#50#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWD; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#51#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWD; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#51#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#52#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXWQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#52#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#53#72; + flags : if_sse4 + ), + ( + opcode : A_PMOVZXDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#53#72; + flags : if_sse4 + ), + ( + opcode : A_PMULDQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#40#72; + flags : if_sse4 + ), + ( + opcode : A_PMULDQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#40#72; + flags : if_sse4 + ), + ( + opcode : A_PTEST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#23#72; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#8#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#8#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#9#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDPD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#9#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSS; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#10#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSS; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#10#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSD; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#11#72#22; + flags : if_sse4 + ), + ( + opcode : A_ROUNDSD; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#11#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRI; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#97#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRI; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#97#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRM; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#96#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPESTRM; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#96#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRI; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#99#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRI; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#99#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRM; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#98#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPISTRM; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#98#72#22; + flags : if_sse4 + ), + ( + opcode : A_PCMPGTQ; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#55#72; + flags : if_sse4 + ), + ( + opcode : A_PCMPGTQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#55#72; + flags : if_sse4 + ), + ( opcode : A_POPCNT; ops : 2; - optypes : (ot_reg16,ot_regmem,ot_none); - code : #208#219#193#211#2#15#184#72; + optypes : (ot_reg16,ot_regmem or ot_bits16,ot_none); + code : #1#243#193#208#2#15#184#72; flags : if_386 or if_sm or if_sse4 ), ( opcode : A_POPCNT; ops : 2; - optypes : (ot_reg32 or ot_bits64,ot_regmem,ot_none); - code : #209#219#193#211#2#15#184#72; + optypes : (ot_reg32,ot_regmem or ot_bits32,ot_none); + code : #1#243#193#208#2#15#184#72; + flags : if_386 or if_sm or if_sse4 + ), + ( + opcode : A_POPCNT; + ops : 2; + optypes : (ot_reg64,ot_regmem or ot_bits64,ot_none); + code : #1#243#193#208#2#15#184#72; flags : if_386 or if_sm or if_sse4 + ), + ( + opcode : A_AESENC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#220#72; + flags : if_sse4 + ), + ( + opcode : A_AESENC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#220#72; + flags : if_sse4 + ), + ( + opcode : A_AESENCLAST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#221#72; + flags : if_sse4 + ), + ( + opcode : A_AESENCLAST; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#221#72; + flags : if_sse4 + ), + ( + opcode : A_AESDEC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#222#72; + flags : if_sse4 + ), + ( + opcode : A_AESDEC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#222#72; + flags : if_sse4 + ), + ( + opcode : A_AESDECLAST; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#223#72; + flags : if_sse4 + ), + ( + opcode : A_AESDECLAST; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#223#72; + flags : if_sse4 + ), + ( + opcode : A_AESIMC; + ops : 2; + optypes : (ot_xmmreg,ot_xmmreg,ot_none); + code : #1#102#217#3#15#56#219#72; + flags : if_sse4 + ), + ( + opcode : A_AESIMC; + ops : 2; + optypes : (ot_xmmreg,ot_memory,ot_none); + code : #1#102#193#217#3#15#56#219#72; + flags : if_sse4 + ), + ( + opcode : A_AESKEYGEN; + ops : 3; + optypes : (ot_xmmreg,ot_xmmreg,ot_immediate); + code : #1#102#217#3#15#58#223#72#22; + flags : if_sse4 + ), + ( + opcode : A_AESKEYGEN; + ops : 3; + optypes : (ot_xmmreg,ot_memory,ot_immediate); + code : #1#102#193#217#3#15#58#223#72#22; + flags : if_sse4 + ), + ( + opcode : A_STOSQ; + ops : 0; + optypes : (ot_none,ot_none,ot_none); + code : #2#72#171; + flags : if_x86_64 + ), + ( + opcode : A_LODSQ; + ops : 0; + optypes : (ot_none,ot_none,ot_none); + code : #2#72#173; + flags : if_x86_64 + ), + ( + opcode : A_CMPSQ; + ops : 0; + optypes : (ot_none,ot_none,ot_none); + code : #2#72#167; + flags : if_x86_64 ) ); |