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
Thread Post new topic Reply to topic
pelaillo
Missing in inaction


Joined: 19 Jun 2003
Posts: 878
Location: Colombia
pelaillo 10 Jan 2004, 21:23
Hi JohnFound,

Fresh compiles itself in 10.1 sec on an AthlonXP 2600.

About the code completion, I like the behavior as you do. Right now I am looking at sources.

Thanks,
pelaillo
Post 10 Jan 2004, 21:23
View user's profile Send private message Yahoo Messenger Reply with quote
sina



Joined: 18 Aug 2003
Posts: 132
Location: istanbul turkey
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
Post 10 Jan 2004, 21:42
View user's profile Send private message ICQ Number Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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... Confused

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. Smile
Post 10 Jan 2004, 21:53
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
Betov



Joined: 17 Jun 2003
Posts: 98
Betov 10 Jan 2004, 22:07
Nice work, John. I did not found anything wrong... though we always may hope Very Happy Very Happy Very Happy


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 Wink ... 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... Wink

... Unless the time would have nothing to do with Multi-Passes... Wink


Courage. Betov.
Post 10 Jan 2004, 22:07
View user's profile Send private message Visit poster's website Reply with quote
Kain



Joined: 26 Oct 2003
Posts: 108
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?
Post 10 Jan 2004, 22:34
View user's profile Send private message Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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.
Post 10 Jan 2004, 22:44
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8357
Location: Kraków, Poland
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%.
Post 10 Jan 2004, 23:21
View user's profile Send private message Visit poster's website Reply with quote
Betov



Joined: 17 Jun 2003
Posts: 98
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 Wink ), 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.
Post 10 Jan 2004, 23:46
View user's profile Send private message Visit poster's website Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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
Post 10 Jan 2004, 23:53
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
Tomasz Grysztar



Joined: 16 Jun 2003
Posts: 8357
Location: Kraków, Poland
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).
Post 10 Jan 2004, 23:56
View user's profile Send private message Visit poster's website Reply with quote
Betov



Joined: 17 Jun 2003
Posts: 98
Betov 11 Jan 2004, 00:08
I see. Yes, more complex than i first thought.


Betov.
Post 11 Jan 2004, 00:08
View user's profile Send private message Visit poster's website Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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.
Post 11 Jan 2004, 00:21
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
sina



Joined: 18 Aug 2003
Posts: 132
Location: istanbul turkey
sina 11 Jan 2004, 00:28
Quote:

Originally posted by JohnFound:
Hm, are you sure? 10 seconds on 2600MHz machine...

so i have the record then Smile
p4 2400
256mb ddr ram
win xp pro
(this one was slower becouse i was encoding a tv show into divx Smile but i have seen 2.9 sec )


Description:
Filesize: 2.28 KB
Viewed: 15447 Time(s)

record.PNG


Post 11 Jan 2004, 00:28
View user's profile Send private message ICQ Number Reply with quote
Ivan Poddubny



Joined: 21 Sep 2003
Posts: 32
Location: Yaroslavl, Russia
Ivan Poddubny 11 Jan 2004, 06:58
<ctrl>+<space> doesn't work in Windows XP!!!
And it works in WinMe!
Post 11 Jan 2004, 06:58
View user's profile Send private message Visit poster's website Reply with quote
Tommy



Joined: 17 Jun 2003
Posts: 489
Location: Norway
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! Sad
Post 11 Jan 2004, 09:51
View user's profile Send private message Visit poster's website Reply with quote
Tommy



Joined: 17 Jun 2003
Posts: 489
Location: Norway
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! Sad BTW found a spell error in the appearance dialog: debugger, not debuger Wink

So long!

Tommy
Post 11 Jan 2004, 10:13
View user's profile Send private message Visit poster's website Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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
Post 11 Jan 2004, 12:12
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
Tommy



Joined: 17 Jun 2003
Posts: 489
Location: Norway
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
Post 11 Jan 2004, 12:34
View user's profile Send private message Visit poster's website Reply with quote
JohnFound



Joined: 16 Jun 2003
Posts: 3499
Location: Bulgaria
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. Confused

Regards.

PS: OK, I think I fixed it. (I should read API help more carefully Wink )
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
Post 11 Jan 2004, 12:47
View user's profile Send private message Visit poster's website ICQ Number Reply with quote
Tommy



Joined: 17 Jun 2003
Posts: 489
Location: Norway
Tommy 11 Jan 2004, 14:53
Good! Now it works! Wink ...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
Post 11 Jan 2004, 14:53
View user's profile Send private message Visit poster's website Reply with quote
Display posts from previous:
Post new topic Reply to topic

Jump to:  
Goto page Previous  1, 2, 3, 4  Next

< Last Thread | Next Thread >
Forum Rules:
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Copyright © 1999-2024, Tomasz Grysztar. Also on GitHub, YouTube.

Website powered by rwasa.