Groups | Search | Server Info | Login | Register


Groups > comp.lang.forth > #23763

Re: Moving 2/ from assembler to loadable extension

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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