Groups | Search | Server Info | Login | Register
Groups > comp.lang.forth > #23763
| From | anton@mips.complang.tuwien.ac.at (Anton Ertl) |
|---|---|
| Newsgroups | comp.lang.forth |
| Subject | Re: Moving 2/ from assembler to loadable extension |
| Date | 2013-06-18 15:51 +0000 |
| Organization | Institut fuer Computersprachen, Technische Universitaet Wien |
| Message-ID | <2013Jun18.175104@mips.complang.tuwien.ac.at> (permalink) |
| References | (4 earlier) <kpl8fa$r64$1@online.de> <1x8xyx5q30urn.1fkwzme6d87l2.dlg@40tude.net> <kpmt8u$65c$1@online.de> <n5bf1wplvvg.1tzdamt947ck6.dlg@40tude.net> <kPSdnVorFepfuV3MnZ2dnUVZ_tidnZ2d@supernews.com> |
Andrew Haley <andrew29@littlepinkcloud.invalid> writes:
>Coos Haak <chforth@hccnet.nl> wrote:
>> You apperently use a different implementation. My SF uses IDIV for / MOD
>> and /MOD.
>> Surprisingly, SM/REM is _very_ long, extracting signs, according to your
>> description.
>
>SM/REM is a single instruction on x86.
SwiftForth i386-Linux 3.4.4 31-Jul-2012
: foo sm/rem ; ok
see foo
8082ADF 804E0EF ( SM/REM ) JMP E90BB6FCFF ok
see sm/rem
804E0EF 8 # EBP SUB 83ED08
804E0F2 EBX 4 [EBP] MOV 895D04
804E0F5 8 [EBP] EAX MOV 8B4508
804E0F8 EAX 0 [EBP] MOV 894500
804E0FB 0 [EBP] EBX XOR 335D00
804E0FE 4 # EBP ADD 83C504
804E101 EBX PUSH 53
804E102 0 [EBP] EBX MOV 8B5D00
804E105 4 # EBP ADD 83C504
804E108 4 # EBP SUB 83ED04
804E10B EBX 0 [EBP] MOV 895D00
804E10E 4 [EBP] EBX MOV 8B5D04
804E111 EBX PUSH 53
804E112 0 [EBP] EBX MOV 8B5D00
804E115 4 # EBP ADD 83C504
804E118 EBX EBX OR 09DB
804E11A 804E11E JNS 7902
804E11C EBX NEG F7DB
804E11E EBX PUSH 53
804E11F 0 [EBP] EBX MOV 8B5D00
804E122 4 # EBP ADD 83C504
804E125 EBX EBX OR 09DB
804E127 804E135 JNS 790C
804E129 0 [EBP] NOT F75500
804E12C EBX NOT F7D3
804E12E 1 # 0 [EBP] ADD 83450001
804E132 0 # EBX ADC 83D300
804E135 4 # EBP SUB 83ED04
804E138 EBX 0 [EBP] MOV 895D00
804E13B EBX POP 5B
804E13C 0 [EBP] EDX MOV 8B5500
804E13F 4 [EBP] EAX MOV 8B4504
804E142 4 # EBP ADD 83C504
804E145 EBX DIV F7F3
804E147 EDX 0 [EBP] MOV 895500
804E14A EAX EBX MOV 8BD8
804E14C 0 [EBP] EAX MOV 8B4500
804E14F EBX 0 [EBP] MOV 895D00
804E152 EAX EBX MOV 8BD8
804E154 4 # EBP SUB 83ED04
804E157 EBX 0 [EBP] MOV 895D00
804E15A EBX POP 5B
804E15B EBX EAX MOV 8BC3
804E15D CDQ 99
804E15E EDX EBX MOV 8BDA
804E160 EBX EBX OR 09DB
804E162 0 [EBP] EBX MOV 8B5D00
804E165 4 [EBP] EBP LEA 8D6D04
804E168 804E170 JZ 0F8402000000
804E16E EBX NEG F7DB
804E170 0 [EBP] EAX MOV 8B4500
804E173 EBX 0 [EBP] MOV 895D00
804E176 EAX EBX MOV 8BD8
804E178 4 # EBP SUB 83ED04
804E17B EBX 0 [EBP] MOV 895D00
804E17E EBX POP 5B
804E17F EBX EAX MOV 8BC3
804E181 CDQ 99
804E182 EDX EBX MOV 8BDA
804E184 EBX EBX OR 09DB
804E186 0 [EBP] EBX MOV 8B5D00
804E189 4 [EBP] EBP LEA 8D6D04
804E18C 804E194 JZ 0F8402000000
804E192 EBX NEG F7DB
804E194 RET C3 ok
Aparently it's based on (unsigned) DIV, not (signed) idiv.
Let's see if gforth-fast is shorter:
Gforth 0.7.9-20120209, Copyright (C) 1995-2011 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
see sm/rem
Code sm/rem
0x0000000000405387 <gforth_engine+3751>: mov 0x10(%r15),%rdx
0x000000000040538b <gforth_engine+3755>: lea 0x8(%r15),%rcx
0x000000000040538f <gforth_engine+3759>: lea 0x8(%rbx),%rbx
0x0000000000405393 <gforth_engine+3763>: mov %rdx,0x580(%rsp)
0x000000000040539b <gforth_engine+3771>: mov 0x8(%r15),%rax
0x000000000040539f <gforth_engine+3775>: mov %rdx,%rsi
0x00000000004053a2 <gforth_engine+3778>: mov %rsi,0x570(%rsp)
0x00000000004053aa <gforth_engine+3786>: mov %rsi,0x560(%rsp)
0x00000000004053b2 <gforth_engine+3794>: mov %rcx,%r15
0x00000000004053b5 <gforth_engine+3797>: mov %rax,0x588(%rsp)
0x00000000004053bd <gforth_engine+3805>: mov %rax,%rdx
0x00000000004053c0 <gforth_engine+3808>: mov %rax,0x578(%rsp)
0x00000000004053c8 <gforth_engine+3816>: mov %rax,0x568(%rsp)
0x00000000004053d0 <gforth_engine+3824>: mov %rsi,%rax
0x00000000004053d3 <gforth_engine+3827>: idiv %r14
0x00000000004053d6 <gforth_engine+3830>: mov %rax,%r14
0x00000000004053d9 <gforth_engine+3833>: mov %rdx,0x8(%rcx)
0x00000000004053dd <gforth_engine+3837>: mov -0x8(%rbx),%rbp
0x00000000004053e1 <gforth_engine+3841>: mov %rbp,%rax
0x00000000004053e4 <gforth_engine+3844>: jmpq 0x404540 <gforth_engine+96>
end-code
Not really great, either.
- anton
--
M. Anton Ertl http://www.complang.tuwien.ac.at/anton/home.html
comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
New standard: http://www.forth200x.org/forth200x.html
EuroForth 2013: http://www.euroforth.org/ef13/
Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar
Moving 2/ from assembler to loadable extension albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-06-10 14:10 +0000
Re: Moving 2/ from assembler to loadable extension The Beez <the.beez.speaks@gmail.com> - 2013-06-10 08:12 -0700
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-10 21:50 +0200
Re: Moving 2/ from assembler to loadable extension anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-11 12:52 +0000
Re: Moving 2/ from assembler to loadable extension Sieur de Bienville <morrimichael@gmail.com> - 2013-06-15 21:21 -0700
Re: Moving 2/ from assembler to loadable extension Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-16 09:41 -0500
Re: Moving 2/ from assembler to loadable extension Bernd Paysan <bernd.paysan@gmx.de> - 2013-06-16 22:50 +0200
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-17 01:21 +0200
Re: Moving 2/ from assembler to loadable extension Bernd Paysan <bernd.paysan@gmx.de> - 2013-06-17 13:51 +0200
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-17 17:04 +0200
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-17 17:07 +0200
Re: Moving 2/ from assembler to loadable extension Bernd Paysan <bernd.paysan@gmx.de> - 2013-06-18 00:49 +0200
Re: Moving 2/ from assembler to loadable extension anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-18 07:41 +0000
Re: Moving 2/ from assembler to loadable extension "Elizabeth D. Rather" <erather@forth.com> - 2013-06-17 22:11 -1000
Re: Moving 2/ from assembler to loadable extension Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-18 04:13 -0500
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-18 13:37 +0200
Re: Moving 2/ from assembler to loadable extension Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-18 09:42 -0500
Re: Moving 2/ from assembler to loadable extension anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-18 15:51 +0000
Re: Moving 2/ from assembler to loadable extension Coos Haak <chforth@hccnet.nl> - 2013-06-18 22:52 +0200
Re: Moving 2/ from assembler to loadable extension albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-06-19 00:12 +0000
Re: Moving 2/ from assembler to loadable extension albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-06-17 19:55 +0000
Re: Moving 2/ from assembler to loadable extension anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-17 16:04 +0000
Re: Moving 2/ from assembler to loadable extension Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-17 16:16 -0500
Re: Moving 2/ from assembler to loadable extension albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-06-17 22:59 +0000
Euclidian division (was: Moving 2/ from assembler ...) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-18 07:49 +0000
Re: Moving 2/ from assembler to loadable extension rickman <gnuarm@gmail.com> - 2013-06-18 17:29 -0400
Re: Moving 2/ from assembler to loadable extension Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-18 18:18 -0500
Re: Moving 2/ from assembler to loadable extension rickman <gnuarm@gmail.com> - 2013-06-18 19:47 -0400
Re: Moving 2/ from assembler to loadable extension albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-06-19 00:16 +0000
Re: Moving 2/ from assembler to loadable extension Bernd Paysan <bernd.paysan@gmx.de> - 2013-06-19 15:09 +0200
Re: Moving 2/ from assembler to loadable extension rickman <gnuarm@gmail.com> - 2013-06-19 17:55 -0400
Euclidian Division (was: Moving 2/ from assembler ...) anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-06-28 14:49 +0000
Re: Euclidian Division Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-06-28 11:20 -0500
Re: Moving 2/ from assembler to loadable extension Marc Olschok <nobody@nowhere.invalid> - 2013-06-19 23:11 +0000
Re: Moving 2/ from assembler to loadable extension Pablo Hugo Reda <pabloreda@gmail.com> - 2013-06-18 17:05 -0700
csiph-web