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