diff --git a/compiler/aggas.pas b/compiler/aggas.pas index 495942d8b2..a372676277 100644 --- a/compiler/aggas.pas +++ b/compiler/aggas.pas @@ -133,6 +133,13 @@ implementation #9'.short'#9,#9'.long'#9,#9'.quad'#9 ); + ait_solaris_const2str : array[aitconst_128bit..aitconst_64bit_unaligned] of string[20]=( + #9'.fixme128'#9,#9'.8byte'#9,#9'.4byte'#9,#9'.2byte'#9,#9'.byte'#9, + #9'.sleb128'#9,#9'.uleb128'#9, + #9'.rva'#9,#9'.secrel32'#9,#9'.8byte'#9,#9'.4byte'#9,#9'.2byte'#9,#9'.2byte'#9, + #9'.2byte'#9,#9'.4byte'#9,#9'.8byte'#9 + ); + ait_unaligned_consts = [aitconst_16bit_unaligned..aitconst_64bit_unaligned]; { Sparc type of unaligned pseudo-instructions } @@ -951,6 +958,8 @@ implementation unaligned tai -> always use vbyte } else if target_info.system in systems_aix then writer.AsmWrite(#9'.vbyte'#9+tostr(tai_const(hp).size)+',') + else if (asminfo^.id=as_solaris_as) then + writer.AsmWrite(ait_solaris_const2str[constdef]) else writer.AsmWrite(ait_const2str[constdef]); l:=0; diff --git a/compiler/assemble.pas b/compiler/assemble.pas index fa85da99bd..292c2894ca 100644 --- a/compiler/assemble.pas +++ b/compiler/assemble.pas @@ -735,7 +735,7 @@ Implementation begin DoPipe:=(cs_asm_pipe in current_settings.globalswitches) and (([cs_asm_extern,cs_asm_leave,cs_link_on_target] * current_settings.globalswitches) = []) and - ((asminfo^.id in [as_gas,as_ggas,as_darwin,as_powerpc_xcoff,as_clang])); + ((asminfo^.id in [as_gas,as_ggas,as_darwin,as_powerpc_xcoff,as_clang,as_solaris_as])); end; diff --git a/compiler/systems.inc b/compiler/systems.inc index d834446466..fbe654f1f6 100644 --- a/compiler/systems.inc +++ b/compiler/systems.inc @@ -221,6 +221,7 @@ ,as_i8086_omf ,as_llvm ,as_clang + ,as_solaris_as ); tlink = (ld_none, diff --git a/compiler/x86/agx86att.pas b/compiler/x86/agx86att.pas index 9c43ebdb36..057316eb35 100644 --- a/compiler/x86/agx86att.pas +++ b/compiler/x86/agx86att.pas @@ -296,7 +296,7 @@ interface calljmp:=is_calljmp(op); // BUGFIX GAS-assembler - // Intel "Intel 64 and IA-32 Architectures Software Developers manual 12/2011 + // Intel "Intel 64 and IA-32 Architectures Software Developers manual 12/2011" // Intel: VCVTDQ2PD YMMREG, YMMREG/mem128 ((intel syntax)) // GAS: VCVTDQ2PD YMMREG, XMMREG/mem128 ((intel syntax)) if (op = A_VCVTDQ2PD) and @@ -356,13 +356,14 @@ interface (op<>A_FLDCW) and (not fskipPopcountSuffix or (op<>A_POPCNT)) and + ((owner.asminfo^.id=as_solaris_as) and (op<>A_Jcc) and (op<>A_SETcc)) and not( (taicpu(hp).ops<>0) and (taicpu(hp).oper[0]^.typ=top_reg) and (getregtype(taicpu(hp).oper[0]^.reg)=R_FPUREGISTER) ) then begin - if gas_needsuffix[op] = AttSufMM then + if (gas_needsuffix[op] = AttSufMM)then begin for i:=0 to taicpu(hp).ops-1 do begin @@ -470,6 +471,20 @@ interface ); + as_x86_64_solaris_info : tasminfo = + ( + id : as_solaris_as; + idtxt : 'AS-SOL'; + asmbin : 'as'; + asmcmd : ' -m64 -o $OBJ $EXTRAOPT $ASM'; + supported_targets : [system_x86_64_solaris]; + flags : [af_needar,af_smartlink_sections,af_supports_dwarf]; + labelprefix : '.L'; + comment : '# '; + dollarsign: '$'; + ); + + as_x86_64_gas_darwin_info : tasminfo = ( @@ -586,6 +601,21 @@ interface comment : '# '; dollarsign: '$'; ); + + as_i386_solaris_info : tasminfo = + ( + id : as_solaris_as; + idtxt : 'AS-SOL'; + asmbin : 'as'; + asmcmd : ' -o $OBJ $EXTRAOPT $ASM'; + supported_targets : [system_i386_solaris]; + flags : [af_needar,af_smartlink_sections,af_supports_dwarf]; + labelprefix : '.L'; + comment : '# '; + dollarsign: '$'; + ); + + {$endif x86_64} initialization @@ -595,6 +625,7 @@ initialization RegisterAssembler(as_x86_64_gas_info,Tx86ATTAssembler); RegisterAssembler(as_x86_64_gas_darwin_info,Tx86AppleGNUAssembler); RegisterAssembler(as_x86_64_clang_darwin_info,Tx86AppleGNUAssembler); + RegisterAssembler(as_x86_64_solaris_info,Tx86ATTAssembler); {$else x86_64} RegisterAssembler(as_i386_as_info,Tx86ATTAssembler); RegisterAssembler(as_i386_gas_info,Tx86ATTAssembler); @@ -602,5 +633,6 @@ initialization RegisterAssembler(as_i386_gas_darwin_info,Tx86AppleGNUAssembler); RegisterAssembler(as_i386_clang_darwin_info,Tx86AppleGNUAssembler); RegisterAssembler(as_i386_as_aout_info,Tx86AoutGNUAssembler); + RegisterAssembler(as_i386_solaris_info,Tx86ATTAssembler); {$endif x86_64} end.