summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/aasmbase.pas4
-rw-r--r--compiler/aggas.pas12
-rw-r--r--compiler/aoptobj.pas8
-rw-r--r--compiler/arm/cgcpu.pas2
-rw-r--r--compiler/arm/cpuinfo.pas17
-rw-r--r--compiler/cclasses.pas3
-rw-r--r--compiler/cgobj.pas54
-rw-r--r--compiler/comprsrc.pas6
-rw-r--r--compiler/cstreams.pas36
-rw-r--r--compiler/cwindirs.pp123
-rw-r--r--compiler/defcmp.pas4
-rw-r--r--compiler/finput.pas45
-rw-r--r--compiler/fmodule.pas16
-rw-r--r--compiler/globals.pas32
-rw-r--r--compiler/globtype.pas7
-rw-r--r--compiler/i386/ag386nsm.pas2
-rw-r--r--compiler/i386/cgcpu.pas38
-rw-r--r--compiler/i386/i386att.inc79
-rw-r--r--compiler/i386/i386atts.inc79
-rw-r--r--compiler/i386/i386int.inc79
-rw-r--r--compiler/i386/i386nop.inc2
-rw-r--r--compiler/i386/i386op.inc79
-rw-r--r--compiler/i386/i386prop.inc77
-rw-r--r--compiler/i386/i386tab.inc1272
-rw-r--r--compiler/link.pas5
-rw-r--r--compiler/msg/errorct.msg2
-rw-r--r--compiler/msg/errord.msg622
-rw-r--r--compiler/msg/errorda.msg2
-rw-r--r--compiler/msg/errordu.msg2
-rw-r--r--compiler/msg/errore.msg6
-rw-r--r--compiler/msg/errores.msg2
-rw-r--r--compiler/msg/errorf.msg2
-rw-r--r--compiler/msg/errorfi.msg2
-rw-r--r--compiler/msg/errorhe.msg2
-rw-r--r--compiler/msg/errorheu.msg2
-rw-r--r--compiler/msg/errorid.msg2
-rw-r--r--compiler/msg/errorn.msg2
-rw-r--r--compiler/msg/errorpl.msg2
-rw-r--r--compiler/msg/errorpli.msg2
-rw-r--r--compiler/msg/errorpt.msg2
-rw-r--r--compiler/msg/errorptu.msg2
-rw-r--r--compiler/msg/errorr.msg2
-rw-r--r--compiler/msg/errorru.msg2
-rw-r--r--compiler/msg/errorues.msg2
-rw-r--r--compiler/msgidx.inc6
-rw-r--r--compiler/msgtxt.inc747
-rw-r--r--compiler/ncal.pas22
-rw-r--r--compiler/ncgcal.pas11
-rw-r--r--compiler/ncgmem.pas197
-rw-r--r--compiler/ncgrtti.pas3
-rw-r--r--compiler/ncgutil.pas144
-rw-r--r--compiler/nset.pas11
-rw-r--r--compiler/ogbase.pas11
-rw-r--r--compiler/ogcoff.pas38
-rw-r--r--compiler/ogelf.pas52
-rw-r--r--compiler/ogmacho.pas1
-rw-r--r--compiler/ognlm.pas1516
-rw-r--r--compiler/owar.pas4
-rw-r--r--compiler/owbase.pas8
-rw-r--r--compiler/paramgr.pas6
-rw-r--r--compiler/pdecl.pas7
-rw-r--r--compiler/pdecobj.pas3
-rw-r--r--compiler/pdecsub.pas17
-rw-r--r--compiler/pdecvar.pas30
-rw-r--r--compiler/pexpr.pas12
-rw-r--r--compiler/pinline.pas6
-rw-r--r--compiler/pmodules.pas23
-rw-r--r--compiler/powerpc/agppcmpw.pas1
-rw-r--r--compiler/ppu.pas111
-rw-r--r--compiler/procinfo.pas65
-rw-r--r--compiler/psub.pas25
-rw-r--r--compiler/ptype.pas145
-rw-r--r--compiler/regvars.pas2
-rw-r--r--compiler/symconst.pas3
-rw-r--r--compiler/symdef.pas34
-rw-r--r--compiler/symsym.pas5
-rw-r--r--compiler/symtable.pas1
-rw-r--r--compiler/symtype.pas11
-rw-r--r--compiler/systems.pas3
-rw-r--r--compiler/systems/i_nwm.pas10
-rw-r--r--compiler/systems/i_wii.pas2
-rw-r--r--compiler/systems/t_embed.pas2
-rw-r--r--compiler/systems/t_nwm.pas437
-rw-r--r--compiler/systems/t_wii.pas3
-rw-r--r--compiler/tokens.pas2
-rw-r--r--compiler/utils/samplecfg548
-rw-r--r--compiler/x86/agx86int.pas6
-rw-r--r--compiler/x86/x86ins.dat435
-rw-r--r--compiler/x86_64/cgcpu.pas9
-rw-r--r--compiler/x86_64/x8664ats.inc79
-rw-r--r--compiler/x86_64/x8664att.inc79
-rw-r--r--compiler/x86_64/x8664int.inc79
-rw-r--r--compiler/x86_64/x8664nop.inc2
-rw-r--r--compiler/x86_64/x8664op.inc79
-rw-r--r--compiler/x86_64/x8664pro.inc77
-rw-r--r--compiler/x86_64/x8664tab.inc1293
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
)
);