develooper Front page | perl.perl5.porters | Postings from October 2014

[perl #122945] [PATCH] optimize & rmv from public API Perl_tmps_grow and related code

Thread Previous
From:
bulk88
Date:
October 10, 2014 18:38
Subject:
[perl #122945] [PATCH] optimize & rmv from public API Perl_tmps_grow and related code
Message ID:
rt-4.0.18-12829-1412966308-1449.122945-75-0@perl.org
# New Ticket Created by  bulk88 
# Please include the string:  [perl #122945]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=122945 >


This is a bug report for perl from bulk88@hotmail.com,
generated with the help of perlbug 1.40 running under perl 5.21.4.


-----------------------------------------------------------------
[Please describe your issue here]

See attached patch.

x86-32 VC 2003 -O1 threaded .text section before size in bytes 0xC6F03
x86-32 VC 2003 -O1 threaded .text section after size in bytes 0xC6EF3
ARM EVC 4 -O1 unthreaded .text section before size in bytes 0x1104b0
ARM EVC 4 -O1 unthreaded .text section after size in bytes 0x1104a0

For before samples see 
https://rt.perl.org/Public/Bug/Display.html?id=121845#txn-1312541


compiler is EVC4, basically VC 6, too ancient for my taste but Im not 
near my VC for Smart Devices 2008 compiler, there is non-ideal register 
allocation going on here by the compiler

after
                 LDR     R1, =PL_tmps_ix
                 LDR     R0, [R1]
                 ADD     R2, R0, #1
                 LDR     R0, =PL_tmps_max ; this should have been load 
into R2, not R0
                 STR     R2, [R1]
                 LDR     R1, [R0]
                 CMP     R2, R1
                 BLT     loc_280D66C0 ; gone if "BLLT Perl_tmps_grow" 
was used, BLT = Branch, if Less Than
                 MOV     R0, R2          ;this shouldn't happen, ix 
should have been in R0 to begin with
                 BL      Perl_tmps_grow_p ; this should have been 
"BL{cond} label" or "BLLT Perl_tmps_grow"
                                                   ;BLLT=Branch, with 
save instruction pointer into Link reg (func call), if Less Than
                 MOV     R2, R0          ;stupid, this mov wouldnt be 
needed if ix was stored in R0 before the Perl_tmps_grow branch
loc_280D66C0:
                 LDR     R0, =PL_tmps_stack
                 LDR     R1, [R0]
                 STR     R4, [R1,R2,LSL#2]
                 LDR     R0, [R4,#8]
                 ORR     R1, R0, #0x80000
                 STR     R1, [R4,#8]
                 MOV     R0, R4
                 LDMFD   SP, {R4,SP,PC}
; End of function Perl_sv_2mortal

x86-32 VC 2003 -o1 after
                 inc     dword ptr [esi+tmps_ix]
                 mov     eax, [esi+tmps_ix]
                 cmp     eax, [esi+tmps_max]
                 jl      short loc_28091509
                 push    eax             ; ix
                 push    esi             ; my_perl
                 call    _Perl_tmps_grow_p
                 pop     ecx
                 pop     ecx
loc_28091509:
                 mov     ecx, [esi+tmps_stack]
                 mov     [ecx+eax*4], edi
                 or      byte ptr [edi+0Ah], 8
                 pop     esi
                 mov     eax, edi
                 pop     edi
                 retn
; End of function Perl_sv_2mortal



[Please do not change anything below this line]
-----------------------------------------------------------------
---
Flags:
                  category=core
                  severity=low
---
Site configuration information for perl 5.21.4:

Configured by Owner at Thu Sep 18 12:08:58 2014.

Summary of my perl5 (revision 5 version 21 subversion 4) configuration:
                Derived from: 7d2b2edb94ab56333b9049a3e26d15ea18445512
                Ancestor: 19be3be6968e2337bcdfe480693fff795ecd1304
                Platform:
                  osname=MSWin32, osvers=5.1,
archname=MSWin32-x86-multi-thread
                  uname=''
                  config_args='undef'
                  hint=recommended, useposix=true, d_sigaction=undef
                  useithreads=define, usemultiplicity=define
                  use64bitint=undef, use64bitall=undef, uselongdouble=undef
                  usemymalloc=n, bincompat5005=undef
                Compiler:
                  cc='cl', ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG
-DWIN32
-D_CONSOLE -DNO_STRICT  -DPERL_TEXTMODE_SCRIPTS
-DPERL_HASH_FUNC_ONE_AT_A_TIME -DPERL_IMPLICIT_CONTEXT
-DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T',
                  optimize='-O1 -MD -Zi -DNDEBUG',
                  cppflags='-DWIN32'
                  ccversion='12.00.8168', gccversion='', gccosandvers=''
                  intsize=4, longsize=4, ptrsize=4, doublesize=8,
byteorder=1234
                  d_longlong=undef, longlongsize=8, d_longdbl=define,
longdblsize=8,
longdblkind=0
                  ivtype='long', ivsize=4, nvtype='double', nvsize=8,
Off_t='__int64',
lseeksize=8
                  alignbytes=8, prototype=define
                Linker and Libraries:
                  ld='link', ldflags ='-nologo -nodefaultlib -debug
-opt:ref,icf
-libpath:"c:\perl521\lib\CORE"  -machine:x86'
                  libpth=C:\PROGRA~1\MIAF9D~1\VC98\lib
                  libs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib
odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                  perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib
version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib
                  libc=msvcrt.lib, so=dll, useshrplib=true,
libperl=perl521.lib
                  gnulibc_version=''
                Dynamic Linking:
                  dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef,
ccdlflags=' '
                  cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib
-debug
-opt:ref,icf  -libpath:"c:\perl521\lib\CORE"  -machine:x86'

Locally applied patches:
                  uncommitted-changes
                  a0fe7a7e75de29e59f1da0d6822dc06e5be658fe
                  a261faffee83d0145642ab5d1d046c9f813bc497
                  6506ab86ad1602a9ca720fcd30446dce1461d23d
                  7d2b2edb94ab56333b9049a3e26d15ea18445512

---
@INC for perl 5.21.4:
                  lib
                  C:/perl521/srcnew/lib
                  .

---
Environment for perl 5.21.4:
                  HOME (unset)
                  LANG (unset)
                  LANGUAGE (unset)
                  LD_LIBRARY_PATH (unset)
                  LOGDIR (unset)
                  PATH=
                  PERL_BADLANG (unset)
                  PERL_JSON_BACKEND=Cpanel::JSON::XS
                  PERL_YAML_BACKEND=YAML
                  SHELL (unset)

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About