mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-04 03:37:35 +01:00
Merged revisions 2908,2911,2913-2917 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/linker/compiler ........ r2908 | peter | 2006-03-13 13:35:48 +0100 (Mon, 13 Mar 2006) | 2 lines * merge trunk upto r2907 ........ r2911 | peter | 2006-03-13 18:08:00 +0100 (Mon, 13 Mar 2006) | 2 lines * rename values to make room for operand size codes ........ ........ ........ r2915 | peter | 2006-03-14 13:51:35 +0100 (Tue, 14 Mar 2006) | 2 lines * check aktcputype ........ r2916 | peter | 2006-03-14 15:06:32 +0100 (Tue, 14 Mar 2006) | 3 lines * merge 300 opcodes * more 64bit versions of opcodes ........ r2917 | peter | 2006-03-14 17:34:03 +0100 (Tue, 14 Mar 2006) | 3 lines * x86_64 tables * convert movq with normal registers to mov ........ git-svn-id: trunk@2931 -
This commit is contained in:
parent
7d88ba2831
commit
eb725d4e44
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1679;
|
||||
1380;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1795,6 +1795,7 @@ asmw_e_redefined_label=08017_E_Asm: Redefined label $1
|
||||
asmw_e_first_defined_label=08018_E_Asm: First defined here
|
||||
asmw_e_invalid_register=08019_E_Asm: Invalid register $1
|
||||
asmw_e_16bit_32bit_not_supported=08020_E_Asm: 16 or 32 Bit references not supported
|
||||
asmw_e_64bit_not_supported=08021_E_Asm: 64 Bit operands not supported
|
||||
|
||||
#
|
||||
# Executing linker/assembler
|
||||
|
||||
@ -537,6 +537,7 @@ const
|
||||
asmw_e_first_defined_label=08018;
|
||||
asmw_e_invalid_register=08019;
|
||||
asmw_e_16bit_32bit_not_supported=08020;
|
||||
asmw_e_64bit_not_supported=08021;
|
||||
exec_w_source_os_redefined=09000;
|
||||
exec_i_assembling_pipe=09001;
|
||||
exec_d_cant_create_asmfile=09002;
|
||||
@ -671,9 +672,9 @@ const
|
||||
option_info=11024;
|
||||
option_help_pages=11025;
|
||||
|
||||
MsgTxtSize = 39564;
|
||||
MsgTxtSize = 39607;
|
||||
|
||||
MsgIdxMax : array[1..20] of longint=(
|
||||
19,75,219,59,62,47,100,21,135,60,
|
||||
19,75,219,59,62,47,100,22,135,60,
|
||||
41,1,1,1,1,1,1,1,1,1
|
||||
);
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{$ifdef Delphi}
|
||||
const msgtxt : array[0..000164] of string[240]=(
|
||||
const msgtxt : array[0..000165] of string[240]=(
|
||||
{$else Delphi}
|
||||
const msgtxt : array[0..000164,1..240] of char=(
|
||||
const msgtxt : array[0..000165,1..240] of char=(
|
||||
{$endif Delphi}
|
||||
'01000_T_Compiler: $1'#000+
|
||||
'01001_D_Compiler OS: $1'#000+
|
||||
@ -587,147 +587,149 @@ const msgtxt : array[0..000164,1..240] of char=(
|
||||
'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+
|
||||
'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 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+
|
||||
'09004_E_Can'#039't ','create archive file: $1'#000+
|
||||
'09005_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 call the assembler, error $1 switching to external a'+
|
||||
'ssembling'#000+
|
||||
'09009_I_Assembling $1'#000+
|
||||
'09010_I_Assembling with s','martlinking $1'#000+
|
||||
'0900','9_I_Assembling $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 linking'#000+
|
||||
'09014_E_Can'#039't call the linker, switching to external linking'#000+
|
||||
'09014_E_Can'#039't call the linker, switching to external link','ing'#000+
|
||||
'09015_I_Linking $1'#000+
|
||||
'09016_E_Util $1 not ','found, switching to external linking'#000+
|
||||
'09016_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/Shared Libraries not supported'#000+
|
||||
'09020_I_Closing script $1'#000+
|
||||
'09021_E_resource compiler not found, switching to ','external mode'#000+
|
||||
'09021_E','_resource compiler not 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 linking'+
|
||||
#000+
|
||||
'09025_T_unit $1 can'#039't be shared linked, switching to stati','c link'+
|
||||
'09025_T_unit $1',' can'#039't be shared linked, 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 resource compiler "$1" with "$2" as command line'#000+
|
||||
'09128_F_Can'#039't post process executable $1'#000+
|
||||
'09129_F_Can'#039't open executab','le $1'#000+
|
||||
'09128_F_Can'#039't post proces','s executable $1'#000+
|
||||
'09129_F_Can'#039't open executable $1'#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+
|
||||
'10000_T_Unitsearch: $1'#000+
|
||||
'10001_T_PPU L','oading $1'#000+
|
||||
'10001_T_PPU Loading $1'#000+
|
||||
'10002_U_PPU Name: $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+
|
||||
'10008_U_PPU Invalid Version $1'#000+
|
||||
'10009_U_PPU is compiled for another pro','cessor'#000+
|
||||
'10008_U_PPU Invalid Version',' $1'#000+
|
||||
'10009_U_PPU is compiled for another processor'#000+
|
||||
'10010_U_PPU is compiled for an other 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+
|
||||
'10015_F_unexpected end of PPU-File'#000+
|
||||
'10016_F_Invalid PPU-File entry: $1'#000+
|
||||
'10017_F_PPU Dbx c','ount problem'#000+
|
||||
'10016_F_I','nvalid PPU-File entry: $1'#000+
|
||||
'10017_F_PPU Dbx count problem'#000+
|
||||
'10018_E_Illegal unit name: $1'#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+
|
||||
'10022_F_Can'#039't find unit $1'#000+
|
||||
'10023_W_Unit $1 was not found but $2 exists'#000+
|
||||
'1','0024_F_Unit $1 searched but $2 found'#000+
|
||||
'10','023_W_Unit $1 was not found but $2 exists'#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+
|
||||
'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+
|
||||
'10028_U_Reco','mpiling $1, checksum changed for $2'#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+
|
||||
'10032_U_Recompiling unit, obj and asm are older than ppufile'#000+
|
||||
'10033_U_Recompiling unit, ','obj is older than asm'#000+
|
||||
'10032_U_Recompiling unit, obj and asm are ol','der than ppufile'#000+
|
||||
'10033_U_Recompiling unit, obj is older than asm'#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+
|
||||
'10040_W_Can'#039't recompile unit $1, but found modifed include files'#000+
|
||||
'10041_H_File $1 is',' newer than Release PPU file $2'#000+
|
||||
'10040_W_Can'#039't recompile unit $1, but fou','nd modifed include files'+
|
||||
#000+
|
||||
'10041_H_File $1 is newer than Release PPU file $2'#000+
|
||||
'10042_U_Using a unit which was not compiled with correct FPU mode'#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_Impleme','ntation CRC changed for unit $1'#000+
|
||||
'10045_U_Interf','ace CRC changed for unit $1'#000+
|
||||
'10046_U_Implementation CRC changed for unit $1'#000+
|
||||
'10047_U_Finished compiling unit $1'#000+
|
||||
'10048_U_Add dependency of $1 to $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+
|
||||
'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+
|
||||
'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+
|
||||
'10058_U_Re-resolving unit',' $1'#000+
|
||||
'10059_U_Skipping re-resolving unit $1, still loading used units'#000+
|
||||
'11000_O_$1 [options] <inputfile> [options]'#000+
|
||||
'11001_W_Only one source file supported'#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+
|
||||
'11003_E_nested response files are not suppor','ted'#000+
|
||||
'11004_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_Too many config files nested'#000+
|
||||
'11009_F_Unable to open file $1'#000+
|
||||
'11010_D_Reading further options from $1'#000+
|
||||
'11011_W_Target is already se','t to: $1'#000+
|
||||
'11010_D_Reading further o','ptions 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_too many IF(N)DEFs'#000+
|
||||
'11014_F_too many ENDIFs'#000+
|
||||
'11015_F_open conditional at the end of the file'#000+
|
||||
'11016_W_Debug information generation is not supported by this',' execut'+
|
||||
'11016_W_Debug info','rmation generation is not supported by this execut'+
|
||||
'able'#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+
|
||||
'11020_N_Switching assembler to default source writing assembler'#000+
|
||||
'11021_W_Assembler output',' selected "$1" is not compatible with "$2"'#000+
|
||||
'11020_N_Switching assembler to default source',' writing assembler'#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+
|
||||
'11027_T_Reading options from environment $1'#000+
|
||||
'11028_D_Handling option "$1"'#000+
|
||||
'11029__*** press enter ***'#000+
|
||||
'11030_H_Start of reading c','onfig file $1'#000+
|
||||
'11029__***',' press enter ***'#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+
|
||||
'11033_D_interpreting file option "$1"'#000+
|
||||
'11034_D_Reading config file "$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+
|
||||
'11023_Free Pascal Compiler version $FPCVERSION [$FPCDATE] for $FPCCPU'#010+
|
||||
'Copyright (c) 1993-2005 by Florian Klaempfl'#000+
|
||||
'11024_Free Pascal Compiler version $FPCVERSION'#010+
|
||||
'11024_Free Pascal Compil','er version $FPCVERSION'#010+
|
||||
#010+
|
||||
'Compiler Date ',': $FPCDATE'#010+
|
||||
'Compiler Date : $FPCDATE'#010+
|
||||
'Compiler CPU Target: $FPCCPU'#010+
|
||||
#010+
|
||||
'Supported targets:'#010+
|
||||
@ -739,167 +741,167 @@ const msgtxt : array[0..000164,1..240] of char=(
|
||||
'Supported FPU instruction sets:'#010+
|
||||
' $FPUINSTRUCTIONSETS'#010+
|
||||
#010+
|
||||
'Supported Optimizations:'#010+
|
||||
'Supported Optimi','zations:'#010+
|
||||
' $OPTIMIZATIONS'#010+
|
||||
#010+
|
||||
'This program com','es under the GNU General Public Licence'#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+
|
||||
' bugrep@freepascal.org'#000+
|
||||
'11025_**0*_put + after a boolean switch option to enable it, - to disa'+
|
||||
'ble it'#010+
|
||||
'**1a_the comp','iler doesn'#039't delete the generated assembler file'#010+
|
||||
'11025_**0*_put + after a boolean switch option ','to enable it, - to di'+
|
||||
'sable it'#010+
|
||||
'**1a_the compiler doesn'#039't delete the generated 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+
|
||||
'**2ar_list register allocation/release info ','in assembler file'#010+
|
||||
'*','*2ar_list register allocation/release info in assembler 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*2Anasmcoff_coff (Go32v2) file using Nasm'#010+
|
||||
'3*2Anasmelf_elf32 (Linux) file usin','g Nasm'#010+
|
||||
'3*2Anasmcoff_coff (Go32v2) file usi','ng Nasm'#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*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 (','Borland)'#010+
|
||||
'3*2Amasm_obj file using Masm',' (Microsoft)'#010+
|
||||
'3*2Atasm_obj file using Tasm (Borland)'#010+
|
||||
'3*2Aelf_elf32 (Linux) using internal writer'#010+
|
||||
'3*2Acoff_coff (Go32v2) using internal writer'#010+
|
||||
'3*2Apecoff_pecoff (Win32) using internal writer'#010+
|
||||
'4*2Aas_assemble using GNU AS'#010+
|
||||
'6*2Aas_Unix o-file using GNU AS'#010+
|
||||
'6*2Aas_Unix o-file usi','ng 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+
|
||||
'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+
|
||||
'**2bl_generate local',' symbol info'#010+
|
||||
'**1B_build all modules'#010+
|
||||
'**1C<x>','_code generation options:'#010+
|
||||
'**1C<x>_code generation options:'#010+
|
||||
'**2Cc<x>_set default calling convention to <x>'#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 pos','sible '+
|
||||
'**2Cf<x>_Select fpu',' instruction set to use, see fpc -i for possible '+
|
||||
'values'#010+
|
||||
'**2Cg_Generate PIC code'#010+
|
||||
'**2Ch<n>_<n> bytes heap (between 1023 and 67107840)'#010+
|
||||
'**2Ci_IO-checking'#010+
|
||||
'**2Cn_omit linking stage'#010+
|
||||
'**2Co_check overflow of integer operations'#010+
|
||||
'**2Cp<x>_select instruction set, see fpc -i for possible values'#010+
|
||||
'*','*2Cr_range checking'#010+
|
||||
'**2Cp<x>_select instru','ction set, see fpc -i for possible values'#010+
|
||||
'**2Cr_range checking'#010+
|
||||
'**2CR_verify object method call validity'#010+
|
||||
'**2Cs<n>_set stack size to <n>'#010+
|
||||
'**2Ct_stack checking'#010+
|
||||
'**2CX_create also smartlinked library'#010+
|
||||
'**1d<x>_defines the symbol <x>'#010+
|
||||
'**1D_generate a DEF file'#010+
|
||||
'**1D_generate a',' DEF file'#010+
|
||||
'**2Dd<x>_set description to <x>'#010+
|
||||
'*','*2Dv<x>_set DLL version to <x>'#010+
|
||||
'**2Dv<x>_set DLL version to <x>'#010+
|
||||
'*O2Dw_PM application'#010+
|
||||
'**1e<x>_set path to executable'#010+
|
||||
'**1E_same as -Cn'#010+
|
||||
'**1F<x>_set file names and paths:'#010+
|
||||
'**2Fa<x>[,y]_for a program load first units <x> and [y] before uses is'+
|
||||
' parsed'#010+
|
||||
'**2Fc<x>_sets input codepage',' to <x>'#010+
|
||||
'**2Fa<x>[,y]_for a program load first units <x> and [y] before ','uses '+
|
||||
'is parsed'#010+
|
||||
'**2Fc<x>_sets input codepage to <x>'#010+
|
||||
'**2FD<x>_sets the directory where to search for compiler utilities'#010+
|
||||
'**2Fe<x>_redirect error output to <x>'#010+
|
||||
'**2FE<x>_set exe/unit output path to <x>'#010+
|
||||
'**2Fi<x>_adds <x> to include path'#010+
|
||||
'**2Fl<x>_adds <x> to library path'#010+
|
||||
'**2FL<x>_uses <x> ','as dynamic linker'#010+
|
||||
'**2Fl<x>_','adds <x> to library path'#010+
|
||||
'**2FL<x>_uses <x> as dynamic linker'#010+
|
||||
'**2Fo<x>_adds <x> to object path'#010+
|
||||
'**2Fr<x>_load error message file <x>'#010+
|
||||
'**2Fu<x>_adds <x> to unit path'#010+
|
||||
'**2FU<x>_set unit output path to <x>, overrides -FE'#010+
|
||||
'*g1g_generate debugger information:'#010+
|
||||
'*g2gc_generate checks for pointer','s'#010+
|
||||
'*g1g_generate debugger inf','ormation:'#010+
|
||||
'*g2gc_generate checks for pointers'#010+
|
||||
'*g2gd_use dbx'#010+
|
||||
'*g2gg_use gsym'#010+
|
||||
'*g2gh_use heap trace unit (for memory leak debugging)'#010+
|
||||
'*g2gl_use line info unit to show more info for backtraces'#010+
|
||||
'*g2gv_generates programs traceable with valgrind'#010+
|
||||
'*g2gw_generate dwarf debugging info'#010+
|
||||
'**1i_informa','tion'#010+
|
||||
'*g2gw','_generate dwarf debugging info'#010+
|
||||
'**1i_information'#010+
|
||||
'**2iD_return compiler date'#010+
|
||||
'**2iV_return compiler version'#010+
|
||||
'**2iSO_return compiler OS'#010+
|
||||
'**2iSP_return compiler processor'#010+
|
||||
'**2iTO_return target OS'#010+
|
||||
'**2iTP_return target processor'#010+
|
||||
'**1I<x>_adds <x> to include path'#010+
|
||||
'**1k<x>_Pass <x> to the linker'#010,
|
||||
'**1I<x>_adds <x> to i','nclude path'#010+
|
||||
'**1k<x>_Pass <x> to the linker'#010+
|
||||
'**1l_write logo'#010+
|
||||
'**1M<x>_set language mode to <x>'#010+
|
||||
'**2Mfpc_free pascal dialect (default)'#010+
|
||||
'**2Mobjfpc_switch some Delphi 2 extensions on'#010+
|
||||
'**2Mdelphi_tries to be Delphi compatible'#010+
|
||||
'**2Mtp_tries to be TP/BP 7.0 compatible'#010+
|
||||
'**2Mgpc_tries to be gpc co','mpatible'#010+
|
||||
'**2Mtp_tries to be TP/B','P 7.0 compatible'#010+
|
||||
'**2Mgpc_tries to be gpc compatible'#010+
|
||||
'**2Mmacpas_tries to be compatible to the macintosh pascal dialects'#010+
|
||||
'**1n_don'#039't read the default config file'#010+
|
||||
'**1N<x>_node tree optimizations'#010+
|
||||
'**2Nu_unroll loops'#010+
|
||||
'**1o<x>_change the name of the executable produced to <x>'#010+
|
||||
'**1O<x>_optimiz','ations:'#010+
|
||||
'**1o<x>_change the name of the',' executable produced to <x>'#010+
|
||||
'**1O<x>_optimizations:'#010+
|
||||
'**2O-_disable optimizations'#010+
|
||||
'**2O1_level 1 optimizations (quick and debugger friendly)'#010+
|
||||
'**2O2_level 2 optimizations (-O1 + quick optimizations)'#010+
|
||||
'**2O3_level 3 optimizations (-O2 + slow optimizations)'#010+
|
||||
'**2O3_level 3 optimizations (-O2 + slow optimiz','ations)'#010+
|
||||
'**2Oa<x>=<y>_set alignment'#010+
|
||||
'**2Oo[NO',']<x>_enable or disable optimizations, see fpc -i for possibl'+
|
||||
'e 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 values'+
|
||||
#010+
|
||||
'**2Os_generate smaller code'#010+
|
||||
'**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+
|
||||
'**1R<x>_asse','mbler reading style:'#010+
|
||||
'**1pg_generate profile code f','or gprof (defines FPC_PROFILE)'#010+
|
||||
'**1R<x>_assembler reading style:'#010+
|
||||
'**2Rdefault_use default 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+
|
||||
'**2S2_same as -Mobjfpc'#010+
|
||||
'**2Sc_supports operators like',' C (*=,+=,/= and -=)'#010+
|
||||
'**2S2_sam','e as -Mobjfpc'#010+
|
||||
'**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
|
||||
'**2Sa_include assertion code.'#010+
|
||||
'**2Sd_same as -Mdelphi'#010+
|
||||
'**2Se<x>_error options. <x> is a combination of the following:'#010+
|
||||
'**3*_<n> : compiler stops after the <n> errors (default is 1)'#010+
|
||||
'**3*_w : compiler stops also after warnin','gs'#010+
|
||||
'**3*_<n> : compiler stops after the <n> errors (default is 1',')'#010+
|
||||
'**3*_w : compiler stops also after warnings'#010+
|
||||
'**3*_n : compiler stops also after notes'#010+
|
||||
'**3*_h : compiler stops also after hints'#010+
|
||||
'**2Sg_allow LABEL and GOTO'#010+
|
||||
'**2Sh_Use ansistrings'#010+
|
||||
'**2Si_support C++ styled INLINE'#010+
|
||||
'**2Sk_load fpcylix unit'#010+
|
||||
'**2SI<x>_set interface style to <x>'#010+
|
||||
'**3SIcom_COM c','ompatible interface (default)'#010+
|
||||
'**2SI<x','>_set interface style to <x>'#010+
|
||||
'**3SIcom_COM compatible interface (default)'#010+
|
||||
'**3SIcorba_CORBA compatible interface'#010+
|
||||
'**2Sm_support macros like C (global)'#010+
|
||||
'**2So_same as -Mtp'#010+
|
||||
'**2Sp_same as -Mgpc'#010+
|
||||
'**2Ss_constructor name must be init (destructor must be done)'#010+
|
||||
'**2St_allow static keyword in obje','cts'#010+
|
||||
'**2Ss_constructor name must be init (destructor must ','be done)'#010+
|
||||
'**2St_allow static keyword in objects'#010+
|
||||
'**1s_don'#039't call assembler and linker'#010+
|
||||
'**2sh_Generate script 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*2Temx_OS/2 via EMX (including EMX','/RSX extender)'#010+
|
||||
'**1T<x>_Target operating ','system:'#010+
|
||||
'3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
|
||||
'3*2Tfreebsd_FreeBSD'#010+
|
||||
'3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
|
||||
'3*2Tlinux_Linux'#010+
|
||||
'3*2Tnetbsd_NetBSD'#010+
|
||||
'3*2Tnetware_Novell Netware Module (clib)'#010+
|
||||
'3*2Tnetwlibc_Novell Netware Module (libc)'#010+
|
||||
'3*2Tnetwlibc_Novell Netware Module (lib','c)'#010+
|
||||
'3*2Topenbsd_OpenBSD'#010+
|
||||
'3*2Tos2_OS/2 / eComS','tation'#010+
|
||||
'3*2Tos2_OS/2 / eComStation'#010+
|
||||
'3*2Tsunos_SunOS/Solaris'#010+
|
||||
'3*2Twatcom_Watcom compatible DOS extender'#010+
|
||||
'3*2Twdosx_WDOSX DOS extender'#010+
|
||||
@ -907,63 +909,63 @@ const msgtxt : array[0..000164,1..240] of char=(
|
||||
'3*2Twince_Windows CE'#010+
|
||||
'4*2Tlinux_Linux'#010+
|
||||
'6*2Tamiga_Commodore Amiga'#010+
|
||||
'6*2Tatari_Atari ST/STe/TT'#010+
|
||||
'6*2Tata','ri_Atari ST/STe/TT'#010+
|
||||
'6*2Tlinux_Linux/m68k'#010+
|
||||
'6*2','Tmacos_Macintosh m68k (not supported)'#010+
|
||||
'6*2Tmacos_Macintosh m68k (not supported)'#010+
|
||||
'6*2Tpalmos_PalmOS'#010+
|
||||
'A*2Tlinux_Linux'#010+
|
||||
'A*2Twince_Windows CE'#010+
|
||||
'P*2Tamiga_AmigaOS on PowerPC'#010+
|
||||
'P*2Tdarwin_Darwin and MacOS X on PowerPC'#010+
|
||||
'P*2Tlinux_Linux on PowerPC'#010+
|
||||
'P*2Tmacos_MacOS (classic) on PowerPC'#010+
|
||||
'P*2Tmorphos_M','orphOS'#010+
|
||||
'P*2Tmac','os_MacOS (classic) on PowerPC'#010+
|
||||
'P*2Tmorphos_MorphOS'#010+
|
||||
'S*2Tlinux_Linux'#010+
|
||||
'**1u<x>_undefines the symbol <x>'#010+
|
||||
'**1U_unit options:'#010+
|
||||
'**2Un_don'#039't check the unit name'#010+
|
||||
'**2Ur_generate release unit files'#010+
|
||||
'**2Us_compile a system unit'#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+
|
||||
'**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 : Show condition','als'#010+
|
||||
'**2*_h : Sho','w 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*_a : Show everything x : Executable info (Win32 only)'#010+
|
||||
'**2*_b : Write file names messages with',' full path'#010+
|
||||
'**2*_a : Show everything x : Executable info (Win32 on','ly'+
|
||||
')'#010+
|
||||
'**2*_b : Write file names messages with full path'#010+
|
||||
'**2*_v : write fpcdebug.txt with p : Write tree.log with parse tre'+
|
||||
'e'#010+
|
||||
'**2*_ lots of debugging info'#010+
|
||||
'3*1W<x>_Win32-like target options'#010+
|
||||
'3*2WB_Create a relocatable image'#010+
|
||||
'3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
|
||||
'3*2WC_Spe','cify console type application'#010+
|
||||
'3*2WB<x>_Set Im','age base to Hexadecimal <x> value'#010+
|
||||
'3*2WC_Specify console type application'#010+
|
||||
'3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
|
||||
'3*2WF_Specify full-screen type application (OS/2 only)'#010+
|
||||
'3*2WG_Specify graphic type application'#010+
|
||||
'3*2WN_Do not generate relocation code (necessary for debugging)'#010,
|
||||
'3*2WN_Do not generate',' relocation code (necessary for debugging)'#010+
|
||||
'3*2WR_Generate relocation code'#010+
|
||||
'P*2WC_Specify console type application (MacOS only)'#010+
|
||||
'P*2WG_Specify graphic type application (MacOS only)'#010+
|
||||
'P*2WT_Specify tool type application (MPW tool, MacOS only)'#010+
|
||||
'**1X_executable options:'#010+
|
||||
'**2Xc_pass --shared t','o the linker (Unix only)'#010+
|
||||
'**1','X_executable options:'#010+
|
||||
'**2Xc_pass --shared to the linker (Unix only)'#010+
|
||||
'**2Xd_don'#039't use standard library search path (needed for cross com'+
|
||||
'pile)'#010+
|
||||
'**2XD_try to link units dynamic (defines FPC_LINK_DYNAMIC)'#010+
|
||||
'**2Xm_generate link map'#010+
|
||||
'**2XM<x>_set the name of the '#039'main'#039' program routine',' (default'+
|
||||
'**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+
|
||||
'**2Xr<x>_set library search path to <x> (needed for cross compile)'#010+
|
||||
'**2Xs_strip all symbols from executable'#010+
|
||||
'**2XS_try to link units static (default) (defines FPC_LI','NK_STATIC)'#010+
|
||||
'**2XS_try to ','link units static (default) (defines FPC_LINK_STATIC)'#010+
|
||||
'**2Xt_link with static libraries (-static is passed to linker)'#010+
|
||||
'**2XX_try to link units smart (defines FPC_LINK_SMART)'#010+
|
||||
'**1*_'#010+
|
||||
'**1?_shows this help'#010+
|
||||
'**1h_shows this help without waiting'#000
|
||||
'**1h_shows this help without w','aiting'#000
|
||||
);
|
||||
|
||||
@ -15,36 +15,13 @@
|
||||
program mkx86ins;
|
||||
|
||||
const
|
||||
Version = '1.5.0';
|
||||
Version = '1.5.1';
|
||||
|
||||
var
|
||||
s : string;
|
||||
i : longint;
|
||||
x86_64 : boolean;
|
||||
|
||||
{$ifndef FPC}
|
||||
procedure readln(var t:text;var s:string);
|
||||
var
|
||||
c : char;
|
||||
i : longint;
|
||||
begin
|
||||
c:=#0;
|
||||
i:=0;
|
||||
while (not eof(t)) and (c<>#10) do
|
||||
begin
|
||||
read(t,c);
|
||||
if c<>#10 then
|
||||
begin
|
||||
inc(i);
|
||||
s[i]:=c;
|
||||
end;
|
||||
end;
|
||||
if (i>0) and (s[i]=#13) then
|
||||
dec(i);
|
||||
s[0]:=chr(i);
|
||||
end;
|
||||
{$endif}
|
||||
|
||||
function lower(const s : string) : string;
|
||||
{
|
||||
return lowercased string of s
|
||||
@ -76,35 +53,48 @@ var
|
||||
end;
|
||||
|
||||
|
||||
function formatop(s:string):string;
|
||||
function formatop(s:string;allowsizeonly:boolean):string;
|
||||
const
|
||||
replaces=19;
|
||||
replaces=26;
|
||||
replacetab : array[1..replaces,1..2] of string[32]=(
|
||||
(':',' or ot_colon'),
|
||||
('mem8','mem or ot_bits8'),
|
||||
('mem16','mem or ot_bits16'),
|
||||
('mem32','mem or ot_bits32'),
|
||||
('mem64','mem or ot_bits64'),
|
||||
('mem80','mem or ot_bits80'),
|
||||
('mem','memory'),
|
||||
('memory_offs','mem_offs'),
|
||||
('imm8','imm or ot_bits8'),
|
||||
('imm16','imm or ot_bits16'),
|
||||
('imm32','imm or ot_bits32'),
|
||||
('imm64','imm or ot_bits64'),
|
||||
('imm80','imm or ot_bits80'),
|
||||
('imm','immediate'),
|
||||
('reg','regnorm'),
|
||||
('regmem','regmem'),
|
||||
('rm8','regmem or ot_bits8'),
|
||||
('rm16','regmem or ot_bits16'),
|
||||
('rm32','regmem or ot_bits32'),
|
||||
('rm64','regmem or ot_bits64'),
|
||||
('rm80','regmem or ot_bits80')
|
||||
('rm80','regmem or ot_bits80'),
|
||||
('mem8','memory or ot_bits8'),
|
||||
('mem16','memory or ot_bits16'),
|
||||
('mem32','memory or ot_bits32'),
|
||||
('mem64','memory or ot_bits64'),
|
||||
('mem80','memory or ot_bits80'),
|
||||
('mem','memory'),
|
||||
('memory_offs','mem_offs'),
|
||||
('imm8','immediate or ot_bits8'),
|
||||
('imm16','immediate or ot_bits16'),
|
||||
('imm32','immediate or ot_bits32'),
|
||||
('imm64','immediate or ot_bits64'),
|
||||
('imm80','immediate or ot_bits80'),
|
||||
('imm','immediate'),
|
||||
('8','bits8'),
|
||||
('16','bits16'),
|
||||
('32','bits32'),
|
||||
('64','bits64'),
|
||||
('80','bits80')
|
||||
);
|
||||
var
|
||||
i : longint;
|
||||
begin
|
||||
for i:=1to replaces do
|
||||
replace(s,replacetab[i,1],replacetab[i,2]);
|
||||
begin
|
||||
if s=replacetab[i,1] then
|
||||
begin
|
||||
s:=replacetab[i,2];
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
formatop:=s;
|
||||
end;
|
||||
|
||||
@ -349,16 +339,11 @@ begin
|
||||
if (hs='void') or (hs='ignore') then
|
||||
break;
|
||||
inc(ops);
|
||||
optypes[ops]:=optypes[ops]+'ot_'+formatop(hs);
|
||||
{ if s[i]=':' then
|
||||
begin
|
||||
inc(i);
|
||||
optypes[ops]:=optypes[ops]+' or ot_'+formatop(readstr);
|
||||
end;}
|
||||
optypes[ops]:=optypes[ops]+'ot_'+formatop(hs,false);
|
||||
while s[i]='|' do
|
||||
begin
|
||||
inc(i);
|
||||
optypes[ops]:=optypes[ops]+' or ot_'+formatop(readstr);
|
||||
optypes[ops]:=optypes[ops]+' or ot_'+formatop(readstr,true);
|
||||
end;
|
||||
if s[i] in [',',':'] then
|
||||
inc(i)
|
||||
|
||||
@ -51,15 +51,14 @@ interface
|
||||
OT_BITS32 = $00000004;
|
||||
OT_BITS64 = $00000008; { FPU only }
|
||||
OT_BITS80 = $00000010;
|
||||
|
||||
OT_SIZE_MASK = $0000001F; { all the size attributes }
|
||||
OT_NON_SIZE = longint(not OT_SIZE_MASK);
|
||||
|
||||
OT_FAR = $00000020; { this means 16:16 or 16:32, like in CALL/JMP }
|
||||
OT_NEAR = $00000040;
|
||||
OT_SHORT = $00000080;
|
||||
|
||||
OT_SIZE_MASK = $000000FF; { all the size attributes }
|
||||
OT_NON_SIZE = longint(not OT_SIZE_MASK);
|
||||
|
||||
OT_SIGNED = $00000100; { the operand need to be signed -128-127 }
|
||||
|
||||
OT_TO = $00000200; { operand is followed by a colon }
|
||||
{ reverse effect in FADD, FSUB &c }
|
||||
OT_COLON = $00000400;
|
||||
@ -233,7 +232,6 @@ interface
|
||||
private
|
||||
FOperandOrder : TOperandOrder;
|
||||
procedure init(_size : topsize); { this need to be called by all constructor }
|
||||
{$ifndef NOAG386BIN}
|
||||
public
|
||||
{ the next will reset all instructions that can change in pass 2 }
|
||||
procedure ResetPass1;override;
|
||||
@ -264,7 +262,6 @@ interface
|
||||
function NeedAddrPrefix(opidx:byte):boolean;
|
||||
procedure Swapoperands;
|
||||
function FindInsentry(objdata:TObjData):boolean;
|
||||
{$endif NOAG386BIN}
|
||||
end;
|
||||
|
||||
function spilling_create_load(const ref:treference;r:tregister): tai;
|
||||
@ -501,12 +498,10 @@ implementation
|
||||
FOperandOrder:=op_att;
|
||||
segprefix:=NR_NO;
|
||||
opsize:=_size;
|
||||
{$ifndef NOAG386BIN}
|
||||
insentry:=nil;
|
||||
LastInsOffset:=-1;
|
||||
InsOffset:=0;
|
||||
InsSize:=0;
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
|
||||
@ -979,8 +974,6 @@ implementation
|
||||
Assembler
|
||||
*****************************************************************************}
|
||||
|
||||
{$ifndef NOAG386BIN}
|
||||
|
||||
type
|
||||
ea=packed record
|
||||
sib_present : boolean;
|
||||
@ -1051,7 +1044,7 @@ implementation
|
||||
not assigned(currsym) or
|
||||
(currsym.objsection=objdata.currobjsec)
|
||||
) then
|
||||
ot:=OT_IMM32 or OT_SHORT
|
||||
ot:=OT_IMM8 or OT_SHORT
|
||||
else
|
||||
ot:=OT_IMM32 or OT_NEAR;
|
||||
end
|
||||
@ -1132,13 +1125,13 @@ implementation
|
||||
begin
|
||||
insot:=p^.optypes[i];
|
||||
currot:=oper[i]^.ot;
|
||||
{ Check that the operand flags }
|
||||
if (insot and (not currot))<>0 then
|
||||
{ Check the operand flags }
|
||||
if (insot and (not currot) and OT_NON_SIZE)<>0 then
|
||||
exit;
|
||||
{ Check if the passed operand size matches with the required
|
||||
instruction operand size. The second 'and' with insot is used
|
||||
to allow matching with undefined size }
|
||||
if ((currot xor insot) and insot and OT_SIZE_MASK)<>0 then
|
||||
{ Check if the passed operand size matches with one of
|
||||
the supported operand sizes }
|
||||
if ((insot and OT_SIZE_MASK)<>0) and
|
||||
((insot and currot and OT_SIZE_MASK)<>(currot and OT_SIZE_MASK)) then
|
||||
exit;
|
||||
end;
|
||||
|
||||
@ -1429,9 +1422,6 @@ implementation
|
||||
{No register, so memory reference.}
|
||||
if (input.typ<>top_ref) then
|
||||
internalerror(200409262);
|
||||
if ((input.ref^.index<>NR_NO) and (getregtype(input.ref^.index)<>R_INTREGISTER)) or
|
||||
((input.ref^.base<>NR_NO) and (getregtype(input.ref^.base)<>R_INTREGISTER)) then
|
||||
internalerror(200301081);
|
||||
ir:=input.ref^.index;
|
||||
br:=input.ref^.base;
|
||||
isub:=getsubreg(ir);
|
||||
@ -1439,7 +1429,10 @@ implementation
|
||||
s:=input.ref^.scalefactor;
|
||||
o:=input.ref^.offset;
|
||||
sym:=input.ref^.symbol;
|
||||
{ it's direct address }
|
||||
if ((ir<>NR_NO) and (getregtype(ir)<>R_INTREGISTER)) or
|
||||
((br<>NR_NO) and (getregtype(br)<>R_INTREGISTER)) then
|
||||
internalerror(200301081);
|
||||
{ it's direct address }
|
||||
if (br=NR_NO) and (ir=NR_NO) then
|
||||
begin
|
||||
{ it's a pure offset }
|
||||
@ -1717,7 +1710,7 @@ implementation
|
||||
inc(codes,c);
|
||||
inc(len,c);
|
||||
end;
|
||||
8,9,10 :
|
||||
8,9,10,11 :
|
||||
begin
|
||||
inc(codes);
|
||||
inc(len);
|
||||
@ -1747,38 +1740,34 @@ implementation
|
||||
192,193,194 :
|
||||
if NeedAddrPrefix(c-192) then
|
||||
inc(len);
|
||||
208,
|
||||
210 :
|
||||
208,209,210 :
|
||||
begin
|
||||
case (oper[c-208]^.ot and OT_SIZE_MASK) of
|
||||
OT_BITS16,
|
||||
OT_BITS64 :
|
||||
inc(len);
|
||||
end;
|
||||
end;
|
||||
212,
|
||||
214 :
|
||||
inc(len);
|
||||
200,
|
||||
201,
|
||||
202,
|
||||
209,
|
||||
211,
|
||||
213,
|
||||
215,
|
||||
217,218: ;
|
||||
219,220 :
|
||||
inc(len);
|
||||
216 :
|
||||
64..191 :
|
||||
begin
|
||||
inc(codes);
|
||||
inc(len);
|
||||
end;
|
||||
224,225,226 :
|
||||
begin
|
||||
InternalError(777002);
|
||||
if not process_ea(oper[(c shr 3) and 7]^, ea_data, 0) then
|
||||
Message(asmw_e_invalid_effective_address)
|
||||
else
|
||||
inc(len,ea_data.size);
|
||||
end;
|
||||
else
|
||||
begin
|
||||
if (c>=64) and (c<=191) then
|
||||
begin
|
||||
if not process_ea(oper[(c shr 3) and 7]^, ea_data, 0) then
|
||||
Message(asmw_e_invalid_effective_address)
|
||||
else
|
||||
inc(len,ea_data.size);
|
||||
end
|
||||
else
|
||||
InternalError(777003);
|
||||
end;
|
||||
InternalError(200603141);
|
||||
end;
|
||||
until false;
|
||||
calcsize:=len;
|
||||
@ -1796,6 +1785,8 @@ implementation
|
||||
* on operand 0
|
||||
* \10, \11, \12 - a literal byte follows in the code stream, to be added
|
||||
* to the register value of operand 0, 1 or 2
|
||||
* \13 - a literal byte follows in the code stream, to be added
|
||||
* to the condition code value of the instruction.
|
||||
* \17 - encodes the literal byte 0. (Some compilers don't take
|
||||
* kindly to a zero byte in the _middle_ of a compile time
|
||||
* string constant, so I had to put this hack in.)
|
||||
@ -1816,21 +1807,19 @@ implementation
|
||||
* field the register value of operand b.
|
||||
* \2ab - a ModRM, calculated on EA in operand a, with the spare
|
||||
* field equal to digit b.
|
||||
* \30x - might be an 0x67 byte, depending on the address size of
|
||||
* \300,\301,\302 - might be an 0x67 or 0x48 byte, depending on the address size of
|
||||
* the memory reference in operand x.
|
||||
* \310 - indicates fixed 16-bit address size, i.e. optional 0x67.
|
||||
* \311 - indicates fixed 32-bit address size, i.e. optional 0x67.
|
||||
* \312 - indicates fixed 64-bit address size, i.e. optional 0x48.
|
||||
* \320 - indicates fixed 16-bit operand size, i.e. optional 0x66.
|
||||
* \321 - indicates fixed 32-bit operand size, i.e. optional 0x66.
|
||||
* \322 - indicates fixed 64-bit operand size, i.e. optional 0x48.
|
||||
* \323 - indicates that this instruction is only valid when the
|
||||
* \320,\321,\322 - might be an 0x66 or 0x48 byte, depending on the operand
|
||||
* size of operand x.
|
||||
* \324 - indicates fixed 16-bit operand size, i.e. optional 0x66.
|
||||
* \325 - indicates fixed 32-bit operand size, i.e. optional 0x66.
|
||||
* \326 - indicates fixed 64-bit operand size, i.e. optional 0x48.
|
||||
* \327 - indicates that this instruction is only valid when the
|
||||
* operand size is the default (instruction to disassembler,
|
||||
* generates no code in the assembler)
|
||||
* \330 - a literal byte follows in the code stream, to be added
|
||||
* to the condition code value of the instruction.
|
||||
* \340 - reserve <operand 0> bytes of uninitialised storage.
|
||||
* Operand 0 had better be a segmentless constant.
|
||||
}
|
||||
|
||||
var
|
||||
@ -1931,6 +1920,12 @@ implementation
|
||||
inc(codes);
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
11 :
|
||||
begin
|
||||
bytes[0]:=ord(codes^)+condval[condition];
|
||||
inc(codes);
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
15 :
|
||||
begin
|
||||
bytes[0]:=0;
|
||||
@ -2031,31 +2026,37 @@ implementation
|
||||
bytes[0]:=$67;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
208 :
|
||||
208,209,210 :
|
||||
begin
|
||||
case oper[c-208]^.ot and OT_SIZE_MASK of
|
||||
OT_BITS16 :
|
||||
begin
|
||||
bytes[0]:=$66;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
OT_BITS64 :
|
||||
begin
|
||||
{$ifndef x86_64}
|
||||
Message(asmw_e_64bit_not_supported);
|
||||
{$endif x86_64}
|
||||
bytes[0]:=$48;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
212 :
|
||||
begin
|
||||
bytes[0]:=$66;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
210 :
|
||||
214 :
|
||||
begin
|
||||
{$ifndef x86_64}
|
||||
Message(asmw_e_64bit_not_supported);
|
||||
{$endif x86_64}
|
||||
bytes[0]:=$48;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
216 :
|
||||
begin
|
||||
bytes[0]:=ord(codes^)+condval[condition];
|
||||
inc(codes);
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
201,
|
||||
202,
|
||||
209,
|
||||
211,
|
||||
217,218 :
|
||||
begin
|
||||
{ these are dissambler hints or 32 bit prefixes which
|
||||
are not needed }
|
||||
end;
|
||||
219 :
|
||||
begin
|
||||
bytes[0]:=$f3;
|
||||
@ -2066,9 +2067,17 @@ implementation
|
||||
bytes[0]:=$f2;
|
||||
objdata.writebytes(bytes,1);
|
||||
end;
|
||||
201,
|
||||
202,
|
||||
213,
|
||||
215,
|
||||
217,218 :
|
||||
begin
|
||||
{ these are dissambler hints or 32 bit prefixes which
|
||||
are not needed }
|
||||
end;
|
||||
31,
|
||||
48,49,50,
|
||||
224,225,226 :
|
||||
48,49,50 :
|
||||
begin
|
||||
InternalError(777006);
|
||||
end
|
||||
@ -2131,7 +2140,6 @@ implementation
|
||||
end;
|
||||
until false;
|
||||
end;
|
||||
{$endif NOAG386BIN}
|
||||
|
||||
|
||||
function taicpu.is_same_reg_move(regtype: Tregistertype):boolean;
|
||||
@ -2260,12 +2268,9 @@ implementation
|
||||
*****************************************************************************}
|
||||
|
||||
procedure BuildInsTabCache;
|
||||
{$ifndef NOAG386BIN}
|
||||
var
|
||||
i : longint;
|
||||
{$endif}
|
||||
begin
|
||||
{$ifndef NOAG386BIN}
|
||||
new(instabcache);
|
||||
FillChar(instabcache^,sizeof(tinstabcache),$ff);
|
||||
i:=0;
|
||||
@ -2275,17 +2280,14 @@ implementation
|
||||
InsTabCache^[InsTab[i].OPcode]:=i;
|
||||
inc(i);
|
||||
end;
|
||||
{$endif NOAG386BIN}
|
||||
end;
|
||||
|
||||
|
||||
procedure InitAsm;
|
||||
begin
|
||||
build_spilling_operation_type_table;
|
||||
{$ifndef NOAG386BIN}
|
||||
if not assigned(instabcache) then
|
||||
BuildInsTabCache;
|
||||
{$endif NOAG386BIN}
|
||||
end;
|
||||
|
||||
|
||||
@ -2296,13 +2298,11 @@ implementation
|
||||
dispose(operation_type_table);
|
||||
operation_type_table:=nil;
|
||||
end;
|
||||
{$ifndef NOAG386BIN}
|
||||
if assigned(instabcache) then
|
||||
begin
|
||||
dispose(instabcache);
|
||||
instabcache:=nil;
|
||||
end;
|
||||
{$endif NOAG386BIN}
|
||||
end;
|
||||
|
||||
|
||||
|
||||
@ -874,7 +874,7 @@ unit nx86add;
|
||||
left_and_right_must_be_fpureg;
|
||||
|
||||
{$ifndef x86_64}
|
||||
if aktoptimizecputype<cpu_Pentium2 then
|
||||
if aktcputype<cpu_Pentium2 then
|
||||
begin
|
||||
emit_none(A_FCOMPP,S_NO);
|
||||
tcgx86(cg).dec_fpu_stack;
|
||||
|
||||
@ -309,7 +309,7 @@ implementation
|
||||
r : tregister;
|
||||
begin
|
||||
{$ifdef i386}
|
||||
if aktoptimizecputype>=cpu_Pentium3 then
|
||||
if aktcputype>=cpu_Pentium3 then
|
||||
{$endif i386}
|
||||
begin
|
||||
secondpass(left);
|
||||
|
||||
@ -554,6 +554,16 @@ begin
|
||||
siz:=S_FAR;
|
||||
end;
|
||||
|
||||
{$ifdef x86_64}
|
||||
{ Convert movq with at least one general registers to mov instruction }
|
||||
if (opcode=A_MOVQ) and
|
||||
(ops=2) and
|
||||
(
|
||||
(operands[1].opr.typ=OPR_REGISTER) or
|
||||
(operands[2].opr.typ=OPR_REGISTER)
|
||||
) then
|
||||
opcode:=A_MOV;
|
||||
{$endif x86_64}
|
||||
|
||||
{ GNU AS interprets FDIV without operand differently
|
||||
for version 2.9.1 and 2.10
|
||||
@ -683,15 +693,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{This is dead code since opcode and opsize aren't used from here!
|
||||
Commented out...
|
||||
if (opcode=A_CALL) and (opsize=S_FAR) then
|
||||
opcode:=A_LCALL;
|
||||
if (opcode=A_JMP) and (opsize=S_FAR) then
|
||||
opcode:=A_LJMP;
|
||||
if (opcode=A_LCALL) or (opcode=A_LJMP) then
|
||||
opsize:=S_FAR;}
|
||||
|
||||
{ Condition ? }
|
||||
if condition<>C_None then
|
||||
ai.SetCondition(condition);
|
||||
@ -700,11 +701,7 @@ begin
|
||||
if assigned(ai) then
|
||||
begin
|
||||
{ Check the instruction if it's valid }
|
||||
{$ifndef NOAG386BIN}
|
||||
{$ifndef x86_64}
|
||||
ai.CheckIfValid;
|
||||
{$endif x86_64}
|
||||
{$endif NOAG386BIN}
|
||||
p.concat(ai);
|
||||
end
|
||||
else
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from x86ins.dat }
|
||||
1691;
|
||||
1380;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user