Procházet zdrojové kódy

* align fixes from pierre

peter před 26 roky
rodič
revize
69d6f577cb
2 změnil soubory, kde provedl 188 přidání a 135 odebrání
  1. 134 132
      compiler/errores.msg
  2. 54 3
      compiler/ra386att.pas

+ 134 - 132
compiler/errores.msg

@@ -1435,139 +1435,141 @@ ol004=**2at_mostrar alojamiento/desaloj. temporal info. en fichero ensamblador
 ol005=**1b_generar informaci¢n de navegador
 ol006=**2bl_generar informacion de s¡mbolos locales
 ol007=**1B_construir todos los m¢dulos
-ol008=3*2CD_crear librer¡a din mica
-ol009=**2Ch<n>_<n> bytes de heap (entre 1023 y 67107840)
-ol010=**2Ci_chequeo de E/S
-ol011=**2Cn_omitir enlazado
-ol012=**2Co_chequea el desbordamiento de operaciones con enteros
-ol013=**2Cr_chequeo de rango
-ol014=**2Cs<n>_pone el tama¤o del stack a <n>
-ol015=**2Ct_chequeo del stack
-ol016=3*2CS_crear librer¡a est tica
-ol017=3*2Cx_usar enlaze-inteligente
-ol018=**1d<x>_define el s¡mbolo <x>
-ol019=*O1D_genera un fichero DEF
-ol020=*O2Dd<x>_pone la descripci¢n a <x>
-ol021=*O2Dw_aplicacion PM
-ol022=**1e<x>_pone el path a ejecutables
-ol023=**1E_igual a -Cn
-ol024=**1F_pone nombres de ficheros y paths
-ol025=**2FD<x>_pone el directorio donde buscar para utilidades del compilador
-ol026=**2Fe<x>_redirecciona la salida de errores a <x>
-ol027=**2FE<x>_pone el path de destino de ejecutable/unidad a <x>
-ol028=**2Fi<x>_a¤ade <x> al path de incluidos
-ol029=**2Fl<x>_a¤ade <x> al path de librerias
-ol030=*L2FL<x>_usa <x> como enlazador din mico
-ol031=**2Fo<x>_a¤ade <x> al path de objetos
-ol032=**2Fr<x>_carga fichero de mensages de error <x>
-ol033=**2Fu<x>_a¤ade <x> al path de unidades
-ol034=**2FU<x>_pone el path de destino de unidades a <x>, anula -FE
-ol035=*g1g_genera informaci¢n de depuraci¢n
-ol036=*g2gg_usa gsym
-ol037=*g2gd_usa dbx
-ol038=*g2gh_usa la unidad de trazado del heap
-ol039=**1i_informaci¢n
-ol040=**2iD_devuelve la fecha del compilador
-ol041=**2iV_devuelve la versi¢n del compilador
-ol042=**2iSO_devuelve el OS de origen
-ol043=**2iSP_devuelve el procesador de origen
-ol044=**2iTO_devuelve el OS de destino
-ol045=**2iTP_devuelve el procesador de destino
-ol046=**1I<x>_a¤ade <x> al path de a¤adidos
-ol047=**1k<x>_Pasa <x> al enlazador
-ol048=**1l_escribe logotipo
-ol049=**1n_no lee el fichero de configuraci¢n por defecto
-ol050=**1o<x>_cambia el nombre del ejecutable producido a <x>
-ol051=**1pg_genera c¢digo de perfil para gprof
-ol052=*L1P_usa pipes en vez de crear ficheros ensamblador temporales
-ol053=**1S_opciones de sintaxis
-ol054=**2S2_habilita algunas extensiones de Delphi 2
-ol055=**2Sc_soportar operadores tipo C (*=,+=,/= y -=)
-ol056=**2Sd_intenta ser compatible con Delphi
-ol057=**2Se_el compilador se para despu‚s del primer error
-ol058=**2Sg_permite LABEL y GOTO
-ol059=**2Sh_Usar cadenas ansi (ansistrings)
-ol060=**2Si_soportar INLINE estilo C++
-ol061=**2Sm_soportar macros tipo C (globales)
-ol062=**2So_intenta ser compatible con TP/BP 7.0
-ol063=**2Sp_intenta ser compatible con gpc
-ol064=**2Ss_nombre del constructor tiene que ser init (destructor tiene que ser done)
-ol065=**2St_permite la palabra clave static en objetos
-ol066=**1s_no llama al ensamblador ni al enlazador (solo con -a)
-ol067=**1u<x>_indefine el s¡mbolo <x>
-ol068=**1U_opciones de unidad
-ol069=**2Un_no testea el nombre de unidad
-ol070=**2Us_compila una unidad de sistema
-ol071=**1v<x>_Ser explicativo. <x> es una combinaci¢n de las siguientes letras :
-ol072=**2*_e : muestra errores (defecto)   d : muestra info de depuraci¢n
-ol073=**2*_w : muestra advertencias        u : muestra info de unidades
-ol074=**2*_n : muestra notas               t : muestra ficheros inten./usados
-ol075=**2*_h : muestra trucos              m : muestra macros definidas
-ol076=**2*_i : muestra informaci¢n general p : muestra procedures compilados
-ol077=**2*_l : muestra n£mero de l¡nea     c : muestra condicionales
-ol078=**2*_a : muestra todo                0 : no muestra nada (excepto errores)
-ol079=**2*_b : muestra toda la declaraci¢n r : modo compatible con Rhide/GCC
-ol080=**2*_    del procedure si ocurre     x : info. de ejecutable (solo Win32)
-ol081=**2*_    un error
-ol082=**1X_opciones del ejecutable
-ol083=*L2Xc_enlaza con la librer¡a c
-ol084=**2XD_enlaza con librer¡as din micass (define FPC_LINK_DYNAMIC)
-ol085=**2Xs_elimina todos los s¡mbolos del ejecutable
-ol086=**2XS_enlaza con librer¡as est ticas (define FPC_LINK_STATIC)
-ol087=**0*_Opciones espec¡ficas del procesador:
-ol088=3*1A<x>_formato de salida
-ol089=3*2Ao_fichero coff usando GNU AS
-ol090=3*2Anasmcoff_fichero coff usando Nasm
-ol091=3*2Anasmelf_fichero elf32 (linux) usando Nasm
-ol092=3*2Anasmobj_obj usando Nasm
-ol093=3*2Amasm_obj usando Masm (Microsoft)
-ol094=3*2Atasm_obj usando Tasm (Borland/Inprise)
-ol095=3*1R<x>_tipo de lectura de ensamblador
-ol096=3*2Ratt_lee ensamblador estilo AT&T
-ol097=3*2Rintel_lee ensamblador estilo Intel
-ol098=3*2Rdirect_copiar texto ensamblador directamente al fichero ensamblador
-ol099=3*1O<x>_optimizaciones
-ol100=3*2Og_generar c¢digo m s peque¤o
-ol101=3*2OG_generar c¢digo m s r pido (defecto)
-ol102=3*2Or_mantener ciertas variables en registros (todab¡a con fallos!!!)
-ol103=3*2Ou_habilita las optimizaciones inciertas (mira la documentaci¢n)
-ol104=3*2O1_nivel 1 de optimizaci¢n (optimizaciones r pidas)
-ol105=3*2O2_nivel 2 de optimizaci¢n (-O1 + optimizaciones lentas)
-ol106=3*2O3_nivel 3 de optimizaci¢n (igual que -O2u)
-ol107=3*2Op_procesador de destino
-ol108=3*3Op1_pone el procesador de destino en 386/486
-ol109=3*3Op2_pone el procesador de destino en Pentium/PentiumMMX (tm)
-ol110=3*3Op3_pone el procesador de destino en PPro/PII/c6x86/K6 (tm)
-ol111=3*1T<x>_Sistema operativo de destino
-ol112=3*2TGO32V1_versi¢n 1 del extensor del DOS de DJ Delorie
-ol113=3*2TGO32V2_versi¢n 2 del extensor del DOS de DJ Delorie
-ol114=3*2TLINUX_Linux
-ol115=3*2TOS2_OS/2 2.x
-ol116=3*2TWin32_Windows 32 Bit
-ol117=6*1A<x>_formato de salida
-ol118=6*2Ao_Unix o-file usando GNU AS
-ol119=6*2Agas_Ensamblador GNU Motorola
-ol120=6*2Amit_Sintaxis MIT (antiguo GAS)
-ol121=6*2Amot_Ensamblador estandard de Motorola
-ol122=6*1O_optimizaciones
-ol123=6*2Oa_enchega el optimizador
-ol124=6*2Og_generar el c¢digo m s peque¤o
-ol125=6*2OG_generar el c¢digo m s r pido (defecto)
-ol126=6*2Ox_optimizar al m ximo (todab¡a con fallos!!!)
-ol127=6*2O2_pone el procesador de destino para un MC68020+
-ol128=6*1R<x>_estilo de lectura de ensamblador
-ol129=6*2RMOT_lee el estilo de ensamblador de motorola
-ol130=6*1T<x>_Sistema operativo de destino
-ol131=6*2TAMIGA_Commodore Amiga
-ol132=6*2TATARI_Atari ST/STe/TT
-ol133=6*2TMACOS_Macintosh m68k
-ol134=6*2TLINUX_Linux-68k
-
-ol136=**1*_
-ol137=**1?_muestra esta ayuda
+ol008=**1C<x>_code generation options:
+ol009=3*2CD_crear librer¡a din mica
+ol010=**2Ch<n>_<n> bytes de heap (entre 1023 y 67107840)
+ol011=**2Ci_chequeo de E/S
+ol012=**2Cn_omitir enlazado
+ol013=**2Co_chequea el desbordamiento de operaciones con enteros
+ol014=**2Cr_chequeo de rango
+ol015=**2Cs<n>_pone el tama¤o del stack a <n>
+ol016=**2Ct_chequeo del stack
+ol017=3*2CS_crear librer¡a est tica
+ol018=3*2Cx_usar enlaze-inteligente
+ol019=**1d<x>_define el s¡mbolo <x>
+ol020=*O1D_genera un fichero DEF
+ol021=*O2Dd<x>_pone la descripci¢n a <x>
+ol022=*O2Dw_aplicacion PM
+ol023=**1e<x>_pone el path a ejecutables
+ol024=**1E_igual a -Cn
+ol025=**1F_pone nombres de ficheros y paths
+ol026=**2FD<x>_pone el directorio donde buscar para utilidades del compilador
+ol027=**2Fe<x>_redirecciona la salida de errores a <x>
+ol028=**2FE<x>_pone el path de destino de ejecutable/unidad a <x>
+ol029=**2Fi<x>_a¤ade <x> al path de incluidos
+ol030=**2Fl<x>_a¤ade <x> al path de librerias
+ol031=*L2FL<x>_usa <x> como enlazador din mico
+ol032=**2Fo<x>_a¤ade <x> al path de objetos
+ol033=**2Fr<x>_carga fichero de mensages de error <x>
+ol034=**2Fu<x>_a¤ade <x> al path de unidades
+ol035=**2FU<x>_pone el path de destino de unidades a <x>, anula -FE
+ol036=*g1g_genera informaci¢n de depuraci¢n
+ol037=*g2gg_usa gsym
+ol038=*g2gd_usa dbx
+ol039=*g2gh_usa la unidad de trazado del heap
+ol040=*g2gc_generate checks for pointers
+ol041=**1i_informaci¢n
+ol042=**2iD_devuelve la fecha del compilador
+ol043=**2iV_devuelve la versi¢n del compilador
+ol044=**2iSO_devuelve el OS de origen
+ol045=**2iSP_devuelve el procesador de origen
+ol046=**2iTO_devuelve el OS de destino
+ol047=**2iTP_devuelve el procesador de destino
+ol048=**1I<x>_a¤ade <x> al path de a¤adidos
+ol049=**1k<x>_Pasa <x> al enlazador
+ol050=**1l_escribe logotipo
+ol051=**1n_no lee el fichero de configuraci¢n por defecto
+ol052=**1o<x>_cambia el nombre del ejecutable producido a <x>
+ol053=**1pg_genera c¢digo de perfil para gprof
+ol054=*L1P_usa pipes en vez de crear ficheros ensamblador temporales
+ol055=**1S_opciones de sintaxis
+ol056=**2S2_habilita algunas extensiones de Delphi 2
+ol057=**2Sc_soportar operadores tipo C (*=,+=,/= y -=)
+ol058=**2Sd_intenta ser compatible con Delphi
+ol059=**2Se_el compilador se para despu‚s del primer error
+ol060=**2Sg_permite LABEL y GOTO
+ol061=**2Sh_Usar cadenas ansi (ansistrings)
+ol062=**2Si_soportar INLINE estilo C++
+ol063=**2Sm_soportar macros tipo C (globales)
+ol064=**2So_intenta ser compatible con TP/BP 7.0
+ol065=**2Sp_intenta ser compatible con gpc
+ol066=**2Ss_nombre del constructor tiene que ser init (destructor tiene que ser done)
+ol067=**2St_permite la palabra clave static en objetos
+ol068=**1s_no llama al ensamblador ni al enlazador (solo con -a)
+ol069=**1u<x>_indefine el s¡mbolo <x>
+ol070=**1U_opciones de unidad
+ol071=**2Un_no testea el nombre de unidad
+ol072=**2Us_compila una unidad de sistema
+ol073=**1v<x>_Ser explicativo. <x> es una combinaci¢n de las siguientes letras :
+ol074=**2*_e : muestra errores (defecto)   d : muestra info de depuraci¢n
+ol075=**2*_w : muestra advertencias        u : muestra info de unidades
+ol076=**2*_n : muestra notas               t : muestra ficheros inten./usados
+ol077=**2*_h : muestra trucos              m : muestra macros definidas
+ol078=**2*_i : muestra informaci¢n general p : muestra procedures compilados
+ol079=**2*_l : muestra n£mero de l¡nea     c : muestra condicionales
+ol080=**2*_a : muestra todo                0 : no muestra nada (excepto errores)
+ol081=**2*_b : muestra toda la declaraci¢n r : modo compatible con Rhide/GCC
+ol082=**2*_    del procedure si ocurre     x : info. de ejecutable (solo Win32)
+ol083=**2*_    un error
+ol084=**1X_opciones del ejecutable
+ol085=*L2Xc_enlaza con la librer¡a c
+ol086=**2XD_enlaza con librer¡as din micass (define FPC_LINK_DYNAMIC)
+ol087=**2Xs_elimina todos los s¡mbolos del ejecutable
+ol088=**2XS_enlaza con librer¡as est ticas (define FPC_LINK_STATIC)
+ol089=**0*_Opciones espec¡ficas del procesador:
+ol090=3*1A<x>_formato de salida
+ol091=3*2Aas_fichero coff usando GNU AS
+ol092=3*2Aasaout_fichero coff usando GNU AS for aout (Go32v1)
+ol093=3*2Anasmcoff_coff (Go32v2) file using Nasm
+ol094=3*2Anasmelf_elf32 (Linux) file using Nasm
+ol095=3*2Anasmobj_obj file using Nasm
+ol096=3*2Amasm_obj usando Masm (Microsoft)
+ol097=3*2Atasm_obj usando Tasm (Borland)
+ol098=3*2Acoff_coff (Go32v2) using internal writer
+ol099=3*2Apecoff_pecoff (Win32) using internal writer
+ol100=3*1R<x>_tipo de lectura de ensamblador
+ol101=3*2Ratt_lee ensamblador estilo AT&T
+ol102=3*2Rintel_lee ensamblador estilo Intel
+ol103=3*2Rdirect_copiar texto ensamblador directamente al fichero ensamblador
+ol104=3*1O<x>_optimizaciones
+ol105=3*2Og_generar c¢digo m s peque¤o
+ol106=3*2OG_generar c¢digo m s r pido (defecto)
+ol107=3*2Or_mantener ciertas variables en registros (todab¡a con fallos!!!)
+ol108=3*2Ou_habilita las optimizaciones inciertas (mira la documentaci¢n)
+ol109=3*2O1_nivel 1 de optimizaci¢n (optimizaciones r pidas)
+ol110=3*2O2_nivel 2 de optimizaci¢n (-O1 + optimizaciones lentas)
+ol111=3*2O3_nivel 3 de optimizaci¢n (igual que -O2u)
+ol112=3*2Op_procesador de destino
+ol113=3*3Op1_pone el procesador de destino en 386/486
+ol114=3*3Op2_pone el procesador de destino en Pentium/PentiumMMX (tm)
+ol115=3*3Op3_pone el procesador de destino en PPro/PII/c6x86/K6 (tm)
+ol116=3*1T<x>_Sistema operativo de destino
+ol117=3*2TGO32V1_versi¢n 1 del extensor del DOS de DJ Delorie
+ol118=3*2TGO32V2_versi¢n 2 del extensor del DOS de DJ Delorie
+ol119=3*2TLINUX_Linux
+ol120=3*2TOS2_OS/2 2.x
+ol121=3*2TWin32_Windows 32 Bit
+ol122=6*1A<x>_formato de salida
+ol123=6*2Aas_Unix o-file usando GNU AS
+ol124=6*2Agas_Ensamblador GNU Motorola
+ol125=6*2Amit_Sintaxis MIT (antiguo GAS)
+ol126=6*2Amot_Ensamblador estandard de Motorola
+ol127=6*1O_optimizaciones
+ol128=6*2Oa_enchega el optimizador
+ol129=6*2Og_generar el c¢digo m s peque¤o
+ol130=6*2OG_generar el c¢digo m s r pido (defecto)
+ol131=6*2Ox_optimizar al m ximo (todab¡a con fallos!!!)
+ol132=6*2O2_pone el procesador de destino para un MC68020+
+ol133=6*1R<x>_estilo de lectura de ensamblador
+ol134=6*2RMOT_lee el estilo de ensamblador de motorola
+ol135=6*1T<x>_Sistema operativo de destino
+ol136=6*2TAMIGA_Commodore Amiga
+ol137=6*2TATARI_Atari ST/STe/TT
+ol138=6*2TMACOS_Macintosh m68k
+ol139=6*2TLINUX_Linux-68k
+ol140=**1*_
+ol141=**1?_muestra esta ayuda
 ol_end=**1h_muestra esta ayuda sin esperar
-
 #
 # The End...
 #
-

+ 54 - 3
compiler/ra386att.pas

@@ -48,7 +48,8 @@ type
    AS_RPAREN,AS_COLON,AS_DOT,AS_PLUS,AS_MINUS,AS_STAR,
    AS_SEPARATOR,AS_ID,AS_REGISTER,AS_OPCODE,AS_SLASH,AS_DOLLAR,
    {------------------ Assembler directives --------------------}
-   AS_DB,AS_DW,AS_DD,AS_DQ,AS_GLOBAL,AS_ALIGN,AS_ASCII,
+   AS_DB,AS_DW,AS_DD,AS_DQ,AS_GLOBAL,
+   AS_ALIGN,AS_BALIGN,AS_P2ALIGN,AS_ASCII,
    AS_ASCIIZ,AS_LCOMM,AS_COMM,AS_SINGLE,AS_DOUBLE,AS_EXTENDED,
    AS_DATA,AS_TEXT,AS_END,
    {------------------ Assembler Operators  --------------------}
@@ -71,7 +72,8 @@ const
     'float',',','(',
     ')',':','.','+','-','*',
     ';','identifier','register','opcode','/','$',
-    '.byte','.word','.long','.quad','.globl','.align','.ascii',
+    '.byte','.word','.long','.quad','.globl',
+    '.align','.balign','.p2align','.ascii',
     '.asciz','.lcomm','.comm','.single','.double','.tfloat',
     '.data','.text','END',
     '%','<<','>>','!','&','|','^','~');
@@ -1676,6 +1678,7 @@ Var
   hl         : PAsmLabel;
   commname   : string;
   lastsec    : tsection;
+  l1,l2      : longint;
   instr      : T386ATTInstruction;
 Begin
   Message1(asmr_d_start_reading,'AT&T');
@@ -1785,11 +1788,49 @@ Begin
       AS_ALIGN:
         Begin
           Consume(AS_ALIGN);
+          l1:=BuildConstExpression(false,false);
+          if (target_info.target in [target_i386_GO32V1,target_i386_GO32V2]) then
+            begin
+               l2:=1;
+               if (l1>=0) and (l1<=16) then
+                 while (l1>0) do
+                   begin
+                     l2:=2*l2;
+                     dec(l1);
+                   end;
+               l1:=l2;
+            end;
+          ConcatAlign(curlist,l1);
+          Comment(V_Note,'.align is target specific, use .balign or .p2align');
+          if actasmtoken<>AS_SEPARATOR then
+           Consume(AS_SEPARATOR);
+        end;
+
+      AS_BALIGN:
+        Begin
+          Consume(AS_BALIGN);
           ConcatAlign(curlist,BuildConstExpression(false,false));
           if actasmtoken<>AS_SEPARATOR then
            Consume(AS_SEPARATOR);
         end;
 
+      AS_P2ALIGN:
+        Begin
+          Consume(AS_P2ALIGN);
+          l1:=BuildConstExpression(false,false);
+          l2:=1;
+          if (l1>=0) and (l1<=16) then
+            while (l1>0) do
+              begin
+                 l2:=2*l2;
+                 dec(l1);
+              end;
+          l1:=l2;
+          ConcatAlign(curlist,l1);
+          if actasmtoken<>AS_SEPARATOR then
+           Consume(AS_SEPARATOR);
+        end;
+
       AS_ASCIIZ:
         Begin
           Consume(AS_ASCIIZ);
@@ -1889,7 +1930,17 @@ begin
 end.
 {
   $Log$
-  Revision 1.50  1999-06-08 11:51:58  peter
+  Revision 1.50.2.1  1999-06-14 17:30:44  peter
+    * align fixes from pierre
+
+  Revision 1.51  1999/06/11 22:54:12  pierre
+    * .align problem treated :
+      .align is considered as .p2align on go32v1 and go32v2
+      and as .balign on other targets
+    + ra386att supports also .balign and .p2align
+    * ag386att uses .balign allways
+
+  Revision 1.50  1999/06/08 11:51:58  peter
     * fixed some intel bugs with scale parsing
     * end is now also a separator in many more cases