flat assembler
Message board for the users of flat assembler.
![]() Goto page Previous 1, 2, 3, 4 Next |
Author |
|
sina 10 Jan 2004, 21:42
fresh compiles itself in 2.914 seconds on my intel p4 2400
and when the cc window is up there is a new window appears in the taskbar with the icon of fresh with no caption winxp pro |
|||
![]() |
|
JohnFound 10 Jan 2004, 21:53
pelaillo wrote: Fresh compiles itself in 10.1 sec on an AthlonXP 2600. Hm, are you sure? 10 seconds on 2600MHz machine... ![]() VeSCeRa wrote: ...and when the cc window is up there is a new window appears in the taskbar with the icon of fresh with no caption Yea, I fixed this just now. ![]() |
|||
![]() |
|
Betov 10 Jan 2004, 22:07
Nice work, John. I did not found anything wrong... though we always may hope
![]() ![]() ![]() Compilation speed, here: Celeron 1.3 >>> 7.4 seconds. This seems a bit slow to me (if you have fixed the Memory problems you were suspecting...), but i may also have under-estimate the impact of Multi-Passes on the time growing curve. It remains much fast enough for a real life Applications production, but, if i were you ![]() ... Unless this flag would already exist... ![]() ... Unless the time would have nothing to do with Multi-Passes... ![]() Courage. Betov. |
|||
![]() |
|
Kain 10 Jan 2004, 22:34
A farily consistant 22.9s on a Celeron 600
But that's for 75 passes. I wonder how long it would take for 1 pass? |
|||
![]() |
|
JohnFound 10 Jan 2004, 22:44
Hi Betov.
Betov wrote: This seems a bit slow to me (if you have fixed the Memory problems you were suspecting...), but i may also have under-estimate the impact of Multi-Passes on the time growing curve. Well, the original timings without creating CC tree. (for one of the previous versions, but it is approximately true) are: Code: In seconds: 4.337 (31%) - preprocessing 3.303 (23%) - parsing 6.114 (43%) - assembling - for 67 passes 0.385 ( 3%) - formating ------ 14.139 - total Current total time for 75 passes (without CC) is 15 seconds. Now, in work version, the label capturing costs additional 5 seconds. btw, this is not the maximum possible speed - I only fixed most valuable problems. And in the end version maybe this CC processing will be executed in separate thread, not in the compilation one and will not impact the compiler performance at all, because it will be suspended on compilation. Quote: ... i would try to implement a Flag in the Assembler to disable the Multi-Passes, on user decision. This would turn FASM a blazing Assembler, for everydays ordinary Devs ... Yea, I have this idea, but it is work that should be provided by Privalov. I don't want to change compiler sources, because of compatibility with FASM's future versions. Regards. |
|||
![]() |
|
Tomasz Grysztar 10 Jan 2004, 23:21
Fasm's architecture is so deeply based on the multi-pass philosophy, that it's almost impossible to force it to do something in 2 passes only. But as this is mainly the optimization of conditional jumps that causes the large amount of passes, you can get rid of the most of them by putting such declaration at the beginning of source:
Code: je equ je dword jz equ jz dword jc equ jc dword jnc equ jnc dword jb equ jb dword jnb equ jnb dword ja equ ja dword jna equ jna dword jg equ jg dword jge equ jge dword jl equ jl dword jle equ jle dword jo equ jo dword js equ js dword jp equ jp dword (it's possible I've forgotten some mnemonics) Also you could do the same with JMP instruction, but as it may cause problems with "jmp near" and "jmp far" syntax it's better to do it with macro in this case: Code: macro jmp label { if label eqtype 0 jmp dword label else jmp label end if } In my quick test I was able to reduce number of passes in Fresh compilation to 14 this way, and the compilation time was reduced by about 30%. |
|||
![]() |
|
Betov 10 Jan 2004, 23:46
Hi Priv. Once you have forced the jmps Sizes Long, what are the 12 or 13 added Passes for?
Also, I suppose that, when one Pass is done, you have some Flag that indicates that some Address was Long whereas it could be Short. Unless i miss something (i suppose yes ![]() It would be really be much better, inside Fresh menu to have an added Option for [Quick Compile] than having to insert the Long jmps Macros, IMHO. Betov. |
|||
![]() |
|
JohnFound 10 Jan 2004, 23:53
Thank you Privalov.
It may be usefull for some tasks where fast compilation is important. But I have an impression that on more complex/big projects, preprocessing and parsing becomes more valuable in the total compilation time. Regards |
|||
![]() |
|
Tomasz Grysztar 10 Jan 2004, 23:56
Betov: No, there's no such flag - it's completely different mechanism, I've written something about it here: http://board.win32asmcommunity.net/showthread.php?s=&threadid=10640#post80063 (in the latest releases it got even a bit more complex). You can look also in this thread to see some examples of situations that have nothing to do with instruction length optimization, but cause more passes to occur: http://board.flatassembler.net/topic.php?t=695 (especially the first "equation solving" example).
|
|||
![]() |
|
Betov 11 Jan 2004, 00:08
I see. Yes, more complex than i first thought.
Betov. |
|||
![]() |
|
JohnFound 11 Jan 2004, 00:21
Betov wrote: It would be really be much better, inside Fresh menu to have an added Option for [Quick Compile] than having to insert the Long jmps Macros, IMHO. Well, it's not a problem to insert those lines in the main file of the project before compilation. Fresh uses "virtual" files because of other reason, but they allows similar processing too. BTW: In the future, this approach will be widely used for IDE generated code - for visual created parts, compilator options etc. |
|||
![]() |
|
sina 11 Jan 2004, 00:28
Quote:
so i have the record then ![]() p4 2400 256mb ddr ram win xp pro (this one was slower becouse i was encoding a tv show into divx ![]()
|
||||||||||
![]() |
|
Ivan Poddubny 11 Jan 2004, 06:58
<ctrl>+<space> doesn't work in Windows XP!!!
And it works in WinMe! |
|||
![]() |
|
Tommy 11 Jan 2004, 09:51
I know that John (you need to type something before pressing Ctrl+Space), but it doesn't work on my machine though... I use WinXP... So this is probably a bug!
![]() |
|||
![]() |
|
Tommy 11 Jan 2004, 10:13
Another bug (this should probably be posted in another thread...but...): When setting either the Help-path or the Debugger-path, both are set to the same!
![]() ![]() So long! Tommy |
|||
![]() |
|
JohnFound 11 Jan 2004, 12:12
Please someone with WinXP, help me to find this stupid bug.
Here is debug version of Fresh with some breakpoints inside. Start it, load some project, compile, then press Ctrl+Space on the empty place in the editor (spaces from left of the caret). INT3 exception should be fired. Please, report to me address and registers reported by Windows. Thanks in advance. Regards. [EDIT] File is removed, because of no need. [/EDIT] Last edited by JohnFound on 11 Jan 2004, 12:59; edited 1 time in total |
|||
![]() |
|
Tommy 11 Jan 2004, 12:34
Hi John.... Here's the result on my computer:
Code: Registers: EAX: 0000FF81 ECX: 00000002 EDX: 00000001 EBX: 00000100 ESP: 0006FC18 EBP: 0006FD28 ESI: 0041A9B7 EDI: 00857680 EIP: 0041AB6C Flags: C:0 P:1 A:0 Z:0 S:0 T:0 D:0 O:0 Anything more you need?? Regards, Tommy |
|||
![]() |
|
JohnFound 11 Jan 2004, 12:47
Hm, are you sure about IP: 0041AB6C, because in my computer the INT3 instruction is on the next byte: 0041AB6D and the exception is fired with IP= 0041AB6E .
Also, please try to fire exception only by pressing <Space> key to let me to compare eax value. There is something strange with GetKeyState function, it seems that in XP it returns 16bit value. ![]() Regards. PS: OK, I think I fixed it. (I should read API help more carefully ![]() GetKeyState returns SHORT (I think it means 16bit) result. But in Win98 it is actually sign extended to 32bit. Thank you for the help. Please, check updated file here, it should work with XP: [EDIT] Obsolete file deleted. Check for latest version on the Fresh site[/EDIT] Last edited by JohnFound on 13 Jan 2004, 19:58; edited 1 time in total |
|||
![]() |
|
Tommy 11 Jan 2004, 14:53
Good! Now it works!
![]() 1) <Ctrl+Space> and then trying to write "..Open" (in Fresh project) the list closes... (in other word: when there's no characters at caret, all characters which are typed should count...!?) 2) Using arrows etc. to navigate should close the list... 3) Double clicking on a list item should select the item... 4) BTW: the list is not sorted (have you attempted to do so, or is this on your schedule?) Thanks for your fix! Keep up the good work! Best regards, Tommy |
|||
![]() |
|
Goto page Previous 1, 2, 3, 4 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2023, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.