1) Options->Compiler->Assembler assembler output options has not bees working properly (asm_output_options_ide.patch)
2) make available Assembler reader options for x86_64 (asm_reader_options_x86_64_ide.patch)
3) make asm output options for x86_64 look like they do for i386 (asm_output_options_strings_ide_v2.patch)
missing strings not implemented
4) video have to be "done" same way as it was initialized (udrivers_doneenhancedvideo_fpc331.patch)
5) In linux solves problem when Ide have weird visual glitches (if fp.ans is present and opening / closing menu leaves trails behind) (legacy_video_refresh_unix_fpc331_v2.patch)
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas --- u/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000 +++ v/packages/ide/fpswitch.pas 2024-06-07 22:12:56.278957000 +0000 @@ -1145,7 +1150,7 @@ st:='Asm '+asminfos[ta]^.idtxt; if asminfos[ta]^.idtxt='AS' then st:=opt_usegnuas; -{$ifdef I386} +{$if defined(i386) or defined(x86_64)} if asminfos[ta]^.idtxt='NASMCOFF' then st:=opt_usenasmcoff; if asminfos[ta]^.idtxt='NASMOBJ' then @@ -1172,7 +1177,7 @@ st:=opt_usepecoffwdosx; if asminfos[ta]^.idtxt='ELF' then st:=opt_useelf; -{$endif I386} +{$endif defined(i386) or defined(x86_64)} AddSelectItem(st,asminfos[ta]^.idtxt,idNone); end; end;
diff -ru a/packages/rtl-console/src/unix/video.pp b/packages/rtl-console/src/unix/video.pp --- a/packages/rtl-console/src/unix/video.pp 2024-05-30 23:04:11.000000000 +0000 +++ b/packages/rtl-console/src/unix/video.pp 2024-06-07 21:18:14.423422423 +0000 @@ -1233,8 +1233,14 @@ else {$endif} updateTTY(force); - for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do - OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I]; + if VideoInitialized then + begin + move(VideoBuf^,OldVideoBuf^,VideoBufSize); + end else + begin + for I := Low(EnhancedVideoBuf) to High(EnhancedVideoBuf) do + OldEnhancedVideoBuf[I] := EnhancedVideoBuf[I]; + end; end;
diff -ru u/packages/fv/src/drivers.inc v/packages/fv/src/drivers.inc --- u/packages/fv/src/drivers.inc 2024-05-30 23:04:11.000000000 +0000 +++ v/packages/fv/src/drivers.inc 2024-06-07 15:14:20.627191205 +0000 @@ -1614,7 +1614,11 @@ {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetVideoMode(StartupScreenMode); {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.ClearScreen; {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.SetCursorPos(0,0); +{$ifdef FV_UNICODE} + {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneEnhancedVideo; +{$else FV_UNICODE} {$IFDEF FPC_DOTTEDUNITS}System.Console.{$ENDIF}Video.DoneVideo; +{$endif FV_UNICODE} VideoInitialized:=false; END;
diff -ru a/packages/ide/fpmcomp.inc b/packages/ide/fpmcomp.inc --- a/packages/ide/fpmcomp.inc 2021-05-15 18:38:31.000000000 +0000 +++ b/packages/ide/fpmcomp.inc 2024-06-06 02:15:11.738646000 +0000 @@ -50,6 +50,7 @@ if L<>RB^.Value then PrevMainFile:=''; UpdateTarget; + UpdateAsmOutputSwitches; end; Dispose(D, Done); end; diff -ru a/packages/ide/fpmopts.inc b/packages/ide/fpmopts.inc --- a/packages/ide/fpmopts.inc 2021-05-15 18:38:31.000000000 +0000 +++ b/packages/ide/fpmopts.inc 2024-06-06 02:37:15.185815000 +0000 @@ -255,17 +255,17 @@ R2.B.Y:=R2.A.Y+1; New(Label52, Init(R2, label_compiler_assemblerinfo, CB5)); - Count:=AsmOutputSwitches^.ItemCount; + UpdateAsmOutputSwitches; + Count:=AsmOutputSwitches[SwitchesMode]^.ItemCount; R2.Copy(TabIR); R2.A.X:=R2.B.X-(R2.B.X-R2.A.X) div 2; Dec(R2.B.X,4); R2.B.Y:=R2.A.Y+Count; Items:=nil; - UpdateAsmOutputSwitches; for I:=Count-1 downto 0 do - Items:=NewSItem(AsmOutputSwitches^.ItemName(I), Items); + Items:=NewSItem(AsmOutputSwitches[SwitchesMode]^.ItemName(I), Items); New(RB6, Init(R2, Items)); - L:=AsmOutputSwitches^.GetCurrSel; + L:=AsmOutputSwitches[SwitchesMode]^.GetCurrSel; RB6^.SetData(L); Dec(R2.A.Y); R2.B.Y:=R2.A.Y+1; @@ -348,7 +348,7 @@ AsmReaderSwitches^.SetCurrSel(RB5^.Value); for I:=0 to AsmInfoSwitches^.ItemCount-1 do AsmInfoSwitches^.SetBooleanItem(I,CB5^.Mark(I)); - AsmOutputSwitches^.SetCurrSel(RB6^.Value); + AsmOutputSwitches[SwitchesMode]^.SetCurrSel(RB6^.Value); BrowserSwitches^.SetCurrSel(RB4^.Value); ConditionalSwitches^.SetStringItem(0,IL^.Data^); CustomArg[SwitchesMode]:=IL2^.Data^; @@ -464,11 +464,11 @@ OtherLinkerSwitches^.SetBooleanItem(1,CB2^.Mark(0)); if LibLinkerSwitches^.GetCurrSelParam='X' then if CompareText(TargetSwitches^.GetCurrSelParam,'Windows')=0 then - if CompareText(AsmOutputSwitches^.GetCurrSelParam,'pecoff')<>0 then + if CompareText(AsmOutputSwitches[SwitchesMode]^.GetCurrSelParam,'pecoff')<>0 then if ConfirmBox( FormatStrStr3(msg_xmustbesettoyforz_doyouwanttochangethis, label_compiler_assembleroutput,'pecoff','smartlinking'),nil,false)=cmYes then - AsmOutputSwitches^.SetCurrSelParam('pecoff'); + AsmOutputSwitches[SwitchesMode]^.SetCurrSelParam('pecoff'); for I:=0 to LinkAfterSwitches^.ItemCount-1 do LinkAfterSwitches^.SetBooleanItem(I,CB^.Mark(I)); end; diff -ru a/packages/ide/fpswitch.pas b/packages/ide/fpswitch.pas --- a/packages/ide/fpswitch.pas 2021-05-15 18:38:31.000000000 +0000 +++ b/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000 @@ -173,13 +173,15 @@ ProcessorOptimizationSwitches, AsmReaderSwitches, AsmInfoSwitches, - AsmOutputSwitches, TargetSwitches, ConditionalSwitches, MemorySwitches, BrowserSwitches, DirectorySwitches : PSwitches; + {Every mode can have different target, thus have its own AsmOutput} + AsmOutputSwitches: array [TSwitchMode] of PSwitches; + { write/read the Switches to fpc.cfg file } procedure WriteSwitches(const fn:string); procedure ReadSwitches(const fn:string); @@ -961,7 +963,8 @@ ProcessorOptimizationSwitches^.WriteItemsCfg; AsmReaderSwitches^.WriteItemsCfg; AsmInfoSwitches^.WriteItemsCfg; - AsmOutputSwitches^.WriteItemsCfg; + if assigned(AsmOutputSwitches[SwitchesMode]) then + AsmOutputSwitches[SwitchesMode]^.WriteItemsCfg; DirectorySwitches^.WriteItemsCfg; MemorySwitches^.WriteItemsCfg; ConditionalSwitches^.WriteItemsCfg; @@ -988,6 +991,7 @@ res : boolean; OldSwitchesMode,i : TSwitchMode; begin + assign(CfgFile,fn); {$I-} reset(CfgFile); @@ -1010,7 +1014,10 @@ Delete(s,1,2); case c of 'a' : res:=AsmInfoSwitches^.ReadItemsCfg(s); - 'A' : res:=AsmOutputSwitches^.ReadItemsCfg(s); + 'A' : begin + UpdateAsmOutputSwitches; + res:=AsmOutputSwitches[SwitchesMode]^.ReadItemsCfg(s); + end; 'b' : res:=BrowserSwitches^.ReadItemsCfg(s); 'C' : begin res:=CodegenSwitches^.ReadItemsCfg(s); @@ -1095,18 +1102,44 @@ procedure UpdateAsmOutputSwitches; var ta : tasm; + zt : tsystem; + sy : tsystem; + sw : TSwitchMode; st : string; + L : String; + t : string; begin - if assigned(AsmOutputSwitches) then - dispose(AsmOutputSwitches,Done); - New(AsmOutputSwitches,InitSelect('A')); - with AsmOutputSwitches^ do + sw:=SwitchesMode; + t:=''; + if assigned(TargetSwitches) then + t:=TargetSwitches^.ItemName(TargetSwitches^.GetCurrSel); + + sy:=target_info.system; + for zt:=low(tsystem) to high(tsystem) do + if assigned(targetinfos[zt]) then + begin + if targetinfos[zt]^.name = t then + begin + sy:=zt; + break; + end; + end; + + L:=''; + if assigned(AsmOutputSwitches[sw]) then + begin + L:=AsmOutputSwitches[sw]^.GetCurrSelParam; + dispose(AsmOutputSwitches[sw],Done); + end; + + New(AsmOutputSwitches[sw],InitSelect('A')); + with AsmOutputSwitches[sw]^ do begin AddDefaultSelect(opt_usedefaultas); for ta:=low(tasm) to high(tasm) do if assigned(asminfos[ta]) and - ((target_info.system in asminfos[ta]^.supported_targets) or + ((sy in asminfos[ta]^.supported_targets) or (system_any in asminfos[ta]^.supported_targets)) then begin st:='Asm '+asminfos[ta]^.idtxt; @@ -1143,6 +1176,7 @@ AddSelectItem(st,asminfos[ta]^.idtxt,idNone); end; end; + AsmOutputSwitches[sw]^.SetCurrSelParam(L); end; {***************************************************************************** @@ -1471,7 +1505,7 @@ end; procedure DoneSwitches; - +var sw : TSwitchMode; begin dispose(SyntaxSwitches,Done); dispose(CompilerModeSwitches,Done); @@ -1483,7 +1517,6 @@ dispose(BrowserSwitches,Done); dispose(TargetSwitches,Done); dispose(AsmReaderSwitches,Done); - dispose(AsmOutputSwitches,Done); dispose(AsmInfoSwitches,Done); dispose(ConditionalSwitches,Done); dispose(MemorySwitches,Done); @@ -1494,6 +1527,9 @@ dispose(LinkAfterSwitches,Done); dispose(OtherLinkerSwitches,Done); dispose(ProfileInfoSwitches,Done); + for sw:=low(TSwitchMode) to high(TSwitchMode) do + if assigned(AsmOutputSwitches[sw]) then + dispose(AsmOutputSwitches[sw],Done); end; procedure GetCompilerOptionLines(C: PUnsortedStringCollection); @@ -1570,7 +1606,7 @@ EnumSwitches(ProcessorCodeGenerationSwitches); EnumSwitches(AsmReaderSwitches); EnumSwitches(AsmInfoSwitches); - EnumSwitches(AsmOutputSwitches); + EnumSwitches(AsmOutputSwitches[SM]); EnumSwitches(TargetSwitches); EnumSwitches(ConditionalSwitches); EnumSwitches(MemorySwitches);
diff -ru u/packages/ide/fpswitch.pas v/packages/ide/fpswitch.pas --- u/packages/ide/fpswitch.pas 2024-06-06 08:28:00.074662000 +0000 +++ v/packages/ide/fpswitch.pas 2024-06-06 09:03:30.961527000 +0000 @@ -1340,6 +1340,11 @@ AddSelectItem(opt_attassembler,'att',idAsmATT); AddSelectItem(opt_intelassembler,'intel',idAsmIntel); {$endif I386} +{$ifdef x86_64} + AddSelectItem(opt_defaultassembler,'default',idNone); + AddSelectItem(opt_attassembler,'att',idAsmATT); + AddSelectItem(opt_intelassembler,'intel',idAsmIntel); +{$endif x86_64} {$ifdef M68K} AddSelectItem(opt_defaultassembler,'default',idNone); //AddSelectItem(opt_standardassembler,'standard',idAsmStandard);
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel