flat assembler
Message board for the users of flat assembler.
Index
> IDE Development > "Fresh" work version with code completition 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 |
|||
10 Jan 2004, 21:42 |
|
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. |
|||
10 Jan 2004, 21:53 |
|
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 ... 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 (much probably under one second per Mega on my config, for example), and, when the user would want the Jmps Sizes optimizations, he would just have to reset the Multi-Passes Flag on, for final releases and/or for real speed Tests. ... Unless this flag would already exist... ... Unless the time would have nothing to do with Multi-Passes... Courage. Betov. |
|||
10 Jan 2004, 22:07 |
|
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? |
|||
10 Jan 2004, 22:34 |
|
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. |
|||
10 Jan 2004, 22:44 |
|
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%. |
|||
10 Jan 2004, 23:21 |
|
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 ), why is it impossible to kill this Flag Checking? 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. |
|||
10 Jan 2004, 23:46 |
|
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 |
|||
10 Jan 2004, 23:53 |
|
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).
|
|||
10 Jan 2004, 23:56 |
|
Betov 11 Jan 2004, 00:08
I see. Yes, more complex than i first thought.
Betov. |
|||
11 Jan 2004, 00:08 |
|
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. |
|||
11 Jan 2004, 00:21 |
|
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 but i have seen 2.9 sec )
|
||||||||||
11 Jan 2004, 00:28 |
|
Ivan Poddubny 11 Jan 2004, 06:58
<ctrl>+<space> doesn't work in Windows XP!!!
And it works in WinMe! |
|||
11 Jan 2004, 06:58 |
|
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!
|
|||
11 Jan 2004, 09:51 |
|
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! BTW found a spell error in the appearance dialog: debugger, not debuger
So long! Tommy |
|||
11 Jan 2004, 10:13 |
|
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 |
|||
11 Jan 2004, 12:12 |
|
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 |
|||
11 Jan 2004, 12:34 |
|
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 |
|||
11 Jan 2004, 12:47 |
|
Tommy 11 Jan 2004, 14:53
Good! Now it works! ...just some notes on the behaviour:
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 |
|||
11 Jan 2004, 14:53 |
|
Goto page Previous 1, 2, 3, 4 Next < Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.