Closed
Bug 409216
Opened 17 years ago
Closed 14 years ago
TC: investigate stack alignment for jitted code
Categories
(Tamarin Graveyard :: Baseline JIT (CodegenLIR), defect, P3)
Tracking
(Not tracked)
RESOLVED
FIXED
Q3 11 - Serrano
People
(Reporter: edwsmith, Assigned: wsharp)
Details
(Whiteboard: PACMAN, fixed-in-tamarin, fixed-in-nanojit)
Attachments
(4 files)
574 bytes,
text/plain
|
Details | |
9.44 KB,
patch
|
edwsmith
:
feedback+
|
Details | Diff | Splinter Review |
7.76 KB,
patch
|
stejohns
:
review+
edwsmith
:
superreview+
gal
:
feedback+
|
Details | Diff | Splinter Review |
10.62 KB,
patch
|
edwsmith
:
superreview+
|
Details | Diff | Splinter Review |
At least windows and possibly linux don't guarantee stack pointer alignment in their ABI. Investigate adding dynamic alignment to the prologue/epilogue code to ensure spilled doubles and 8-aligned double args are 8-aligned.
On Darwin, ESP is 16-aligned, double check to make sure spilled varibles are at least 8-aligned within the stack frame.
Dupe of this bug tracked in bugs.adobe.com:
https://bugs.adobe.com/jira/browse/ASC-2273
Reporter | ||
Updated•17 years ago
|
Summary: TC - investigate stack alignment for jitted code → TC: investigate stack alignment for jitted code
Reporter | ||
Updated•17 years ago
|
Severity: normal → enhancement
Reporter | ||
Comment 1•17 years ago
|
||
Moh from intel found very little split loads and stores in some testing. Still a worthwhile optimization, but apparently we are getting very lucky most of the time.
Reporter | ||
Updated•17 years ago
|
Priority: -- → P2
Comment 2•16 years ago
|
||
good comments from jira bug, which I am duping and closing:
From Ed Smith:
alignment could cause that and there isn't any logic in either build to guarantee argument alignment. kind of random chance to get misaligned.
-----Original Message-----
From: Werner Sharp
Sent: Monday, December 11, 2006 9:48 AM
To: Edwin Smith; Rick Reitmaier
Subject: FW: next performance test
Some weird results with this test case: The release_debugger player is a good 20-30% faster than the release player using the slow code.
VTUNE shows the release doubleToAtom_SSE2 taking 4.4 clock ticks per instruction while the release_debugger code taking 1.5 clock ticks per instruction. Perhaps some sort of alignment difference of double values used in MIR? I tried turning on some other event ratios in VTUNE but I didn't get any good insight that way.
-Werner
-----Original Message-----
From: Werner Sharp
Sent: Monday, December 11, 2006 6:23 AM
To: Matt Chotin; DL-Flash Player VM
Subject: RE: next performance test
This is the main problem...
sum += dataArray [uint(k)];
It would be substantially faster to do:
var temp:Number = dataArrray[k];
sum += temp;
I'm not sure what numberOfPoint and p are supposed to be. If I pick 10k and 1k, the top code takes 1.0 second to run. The new code only takes 0.147 seconds.
-Werner
-----Original Message-----
From: Matt Chotin
Sent: Sunday, December 10, 2006 5:20 PM
To: DL-Flash Player VM
Subject: next performance test
As a follow-up to my previous request for benchmark data the customer sent another test that I guess they want to improve.
My first thought is to use Number instead of uint to avoid the casts?
I haven't run this code but I'm guessing that numberOfPoint is the p variable below and that it needs to be assigned a value?
var dataArray:Array = new Array();
var dummyNumber:Number = 0.0;
dataArray[dataArray.length] = (dummyNumber);
dummyNumber = 1.0;
for( var i:uint = 0; i < numberOfPoint; i++) {
dataArray[dataArray.length] = dummyNumber;
}
var result:Array = new Array(dataArray.length);
var len:uint = dataArray.length-p;
result[0] = dataArray[0]+p-1;
for(var i:uint=len; i>0; --i)
{
var sum:Number=0.0;
var len2:uint = i + p-1;
for (var k:uint=len2; k>=i; --k)
{
sum += dataArray [uint(k)];
}
result[i]=(sum/p);
}
return result;
Updated•15 years ago
|
Priority: P2 → --
Target Milestone: --- → Future
Reporter | ||
Updated•15 years ago
|
Whiteboard: PACMAN
Reporter | ||
Updated•15 years ago
|
Component: Virtual Machine → JIT Compiler (NanoJIT)
Assignee | ||
Comment 3•15 years ago
|
||
Adding this test case which shows some strange behavior. On win32 release standalone, the 1st, 3rd and 4th calls to foo run at about 750 msec while the 2nd call runs at 200. If I delete the Vector code inbetween, then all our fast.
In this specific example, we are calling the JITed foo with a stack alignment that just happens to place some floating point loads (movq) across a 128 byte boundary. From VTUNEing this JITed code, the unaligned load across the boundary is 12x slower than the neighboring (also unaligned) load. We need some logic to align our stack to 8-byte boundaries before calling JIT routines.
02070CB5 movq xmm0,mmword ptr [ebx+4]
02070CBA movq mmword ptr [ebp-50h],xmm0
02070CBF movq xmm0,mmword ptr [ebx+0Ch]
02070CC4 movq mmword ptr [ebp-48h],xmm0
...
02070D29 movq xmm0,mmword ptr [ebp-50h]
02070D2E movq xmm1,mmword ptr [ebp-48h]
02070D33 ucomisd xmm0,xmm1
02070D37 lahf
02070D38 test ah,44h
02070D3B jp 02070D46
02070D3D mov ebx,dword ptr [ebp-38h]
02070D40 lea ebx,[ebx+1]
02070D43 mov dword ptr [ebp-38h],ebx
02070D46 mov ebx,dword ptr [ebp-30h]
02070D49 lea ebx,[ebx+1]
02070D4C mov dword ptr [ebp-30h],ebx
02070D4F mov ebx,dword ptr [ebp-30h]
02070D52 cmp ebx,5F5E100h
02070D58 jl 02070D29
Also note that the first thing we do in JITed code is cause EBP to be unaligned when ESP comes in aligned. So we really need ESP to come in as a 4-byte offset and then the push ebp will cause it to be 8-byte aligned:
01ECEC77 push ebp // prior to this, ESP is 0x....0
01ECEC78 mov ebp,esp // EBP is 0x...C
01ECEC7A sub esp,88h
Assignee | ||
Comment 4•15 years ago
|
||
Ed and I work up this patch to coerceEnter to fix some alignment problems:
REALLY_INLINE Atom MethodEnv::coerceEnter(int32_t argc, Atom* args)
{
#if defined(_MSC_VER) && defined(AVMPLUS_IA32)
_asm
{
push eax
mov eax, esp
and eax, 0x4
xor eax, 0x4
sub esp, eax
push eax
}
#endif
Atom result = (*method->_invoker)(this, argc, args);
#if defined(_MSC_VER) && defined(AVMPLUS_IA32)
_asm
{
pop eax
add esp, eax
pop eax
}
#endif
AvmAssert(VMPI_memset(args, 0, (argc+1)*sizeof(Atom)) == args); // clobber incoming args in DEBUG
return result;
}
Unfortunately, running the performance tests shows some significant degradations as well as significant improvements. This clearly aligns some code better while other code is worse. One test I looked at was asmicro/string-charAt-1.as. I verified that toggling the "xor" instruction above changed performance about 30% so the added ASM code is not the culprit. If I added code alignment code to BaseExecMgr::endCoerce (either with or without the XOR), we lost another 20% or so because it is called so often...once for each charAt call in the test.
Assignee | ||
Comment 5•15 years ago
|
||
Latest patch which adds stack alignment fix ups to entry points for JITed code.
Here are the perf test results where avm has the stack fixing while avm2 does not. Some significant performance improvements and some slight degradations.
Profiling "isNaN-1.as" shows that we are slower because our JIT code calls back into C++ helper routines (Toplevel::isNaN, MathUtils::isNaN) and the stack gets unaligned in the C++ code. We were getting lucky before and now are running unaligned.
avm:0 avm2:0
test best avg best avg %diff sig
Metric: v8 (largerValuesFaster)
asmicro/alloc-1.as 21 21.0 19 19.3 -4.8 -2.0 -
asmicro/alloc-10.as 6 5.7 5 5.3 0.0 0.0
asmicro/alloc-11.as 6 5.3 5 5.7 0.0 0.0
asmicro/alloc-12.as 3 3.0 3 3.0 0.0 0.0
asmicro/alloc-13.as 32 31.7 29 30.7 3.1 0.4
asmicro/alloc-14.as 27 26.0 25 25.3 -3.7 -0.7
asmicro/alloc-2.as 10 10.0 9 9.7 0.0 0.0
asmicro/alloc-3.as 7 7.0 6 6.0 -14.3 -3.0 --
asmicro/alloc-4.as 18 18.0 16 16.3 -5.6 -1.9 -
asmicro/alloc-5.as 15 14.7 13 14.3 0.0 0.0
asmicro/alloc-6.as 26 25.0 25 26.3 3.8 0.6
asmicro/alloc-7.as 15 15.0 15 15.3 6.7 2.2 ++
asmicro/alloc-8.as 5 5.0 5 5.0 0.0 0.0
asmicro/alloc-9.as 6 5.3 5 5.0 -16.7 -1.9 -
asmicro/array-1.as 1823 1755.7 1713 1735.7 -3.3 -0.8
asmicro/array-2.as 710 678.0 564 600.3 -10.7 -1.3 -
asmicro/array-pop-1.as 451 428.3 378 412.7 -4.0 -0.4
asmicro/array-push-1.as 236 226.3 221 234.7 2.5 0.4
asmicro/array-shift-1.as 109 108.3 99 108.7 4.6 0.7
asmicro/array-slice-1.as 14 12.7 10 12.0 -7.1 -0.3
asmicro/array-sort-1.as 21 21.0 21 21.0 0.0 0.0
asmicro/array-sort-2.as 1 1.0 1 1.0 0.0 0.0
asmicro/array-sort-3.as 21 18.0 16 18.0 0.0 0.0
asmicro/array-sort-4.as 6 5.7 6 6.0 0.0 0.0
asmicro/array-unshift-1.as 84 82.0 80 83.0 4.8 0.8
asmicro/closedvar-read-1.as 2821 2675.3 3413 3447.0 24.1 4.8 ++
asmicro/closedvar-write-1.as 2428 2381.0 2183 2227.0 -6.5 -2.2 --
asmicro/closedvar-write-2.as 2787 2718.7 2150 2175.0 -20.8 -6.5 --
asmicro/do-1.as 2945 2773.0 2749 2826.7 -1.9 -0.3
asmicro/for-1.as 2675 2663.7 2645 2689.0 1.6 1.1 +
asmicro/for-2.as 1983 1937.7 1872 1897.3 -2.6 -0.6
asmicro/for-3.as 2027 1938.7 1929 1979.0 -0.5 -0.1
asmicro/for-in-1.as 381 368.0 347 361.3 -2.1 -0.3
asmicro/for-in-2.as 221 212.3 197 204.7 -4.5 -0.6
asmicro/funcall-1.as 228 216.3 205 217.0 0.4 0.1
asmicro/funcall-2.as 160 155.3 171 178.7 15.0 2.3 ++
asmicro/funcall-3.as 190 187.3 201 208.7 14.7 2.9 ++
asmicro/funcall-4.as 61 59.3 57 57.7 -3.3 -0.7
asmicro/globalvar-read-1.as 2910 2833.0 3234 3270.7 14.3 3.5 ++
asmicro/globalvar-write-1.as 2723 2703.0 2592 2762.3 5.9 1.2 +
asmicro/isNaN-1.as 227 226.3 294 301.0 36.6 13.9 ++
smicro/lookup-array-fetch-1.as 567 546.7 508 527.3 -1.9 -0.3
asmicro/lookup-array-in-1.as 1412 1382.7 1354 1393.0 0.6 0.2
cro/lookup-negindex-array-1.as 386 360.0 352 364.0 -2.3 -0.2
cro/lookup-negindex-array-2.as 308 301.0 286 305.0 7.8 0.8
ro/lookup-negindex-object-1.as 376 373.0 367 380.3 4.8 1.2 +
ro/lookup-negindex-object-2.as 378 364.0 339 354.7 -4.0 -0.6
micro/lookup-object-fetch-1.as 666 650.0 622 634.3 -3.5 -1.0
asmicro/lookup-object-in-1.as 1118 1095.7 1069 1116.0 3.0 0.6
asmicro/number-toString-1.as 2 2.0 2 2.0 0.0 0.0
asmicro/number-toString-2.as 26 25.0 22 22.7 -11.5 -2.2 --
asmicro/oop-1.as 2 2.0 2 2.0 0.0 0.0
asmicro/parseFloat-1.as 52 51.0 55 56.0 9.6 3.1 ++
asmicro/parseInt-1.as 119 116.0 104 107.7 -5.9 -1.0
asmicro/regex-exec-1.as 23 22.3 21 22.3 4.3 0.6
asmicro/regex-exec-2.as 27 26.0 26 26.7 3.7 0.6
asmicro/regex-exec-3.as 55 53.3 53 54.0 0.0 0.0
asmicro/regex-exec-4.as 108 106.3 97 101.0 -3.7 -0.9
asmicro/restarg-1.as 535 505.7 482 504.0 -3.0 -0.4
asmicro/restarg-2.as 337 323.3 331 334.0 -0.3 -0.1
asmicro/restarg-3.as 17 16.0 15 16.3 0.0 0.0
asmicro/restarg-4.as 11 10.7 11 11.0 0.0 0.0
asmicro/string-casechange-1.as 12 11.0 11 11.0 -8.3 -1.1 -
asmicro/string-casechange-2.as 11 11.0 11 11.3 9.1 2.2 ++
asmicro/string-charAt-1.as 259 253.7 92 96.3 -60.6 -9.6 --
asmicro/string-charAt-2.as 24 23.3 21 21.7 -8.3 -2.0 -
asmicro/string-charCodeAt-1.as 259 251.7 90 93.0 -63.3 -11.7 --
asmicro/string-charCodeAt-2.as 254 242.3 139 141.7 -42.9 -7.6 --
micro/string-fromCharCode-1.as 269 258.3 254 259.0 -1.1 -0.2
micro/string-fromCharCode-2.as 22 21.0 22 22.0 0.0 0.0
asmicro/string-indexOf-1.as 131 127.3 97 102.0 -19.8 -3.5 --
asmicro/string-indexOf-2.as 124 122.7 116 119.3 0.8 0.2
asmicro/string-indexOf-3.as 75 73.0 69 73.0 2.7 0.4
smicro/string-lastIndexOf-1.as 467 462.0 422 446.7 -0.4 -0.1
smicro/string-lastIndexOf-2.as 75 71.3 73 74.0 0.0 0.0
smicro/string-lastIndexOf-3.as 258 249.7 287 297.0 19.8 2.9 ++
asmicro/string-slice-1.as 47 45.7 45 46.3 4.3 0.5
asmicro/string-split-1.as 4 3.7 3 3.7 0.0 0.0
asmicro/string-split-2.as 3 3.0 3 3.0 0.0 0.0
asmicro/string-substring-1.as 45 44.0 45 48.3 13.3 1.9 +
asmicro/switch-1.as 565 553.0 529 544.7 -1.9 -0.5
asmicro/switch-2.as 38 37.3 34 37.0 2.6 0.4
asmicro/switch-3.as 54 52.7 48 49.7 -5.6 -1.3 -
asmicro/try-1.as 149 147.7 155 159.0 8.7 3.2 ++
asmicro/try-2.as 5 5.0 5 5.0 0.0 0.0
asmicro/try-3.as 25 24.3 22 23.3 -4.0 -0.7
asmicro/vector-push-1.as 37 36.0 35 35.3 -2.7 -0.8
asmicro/while-1.as 2832 2733.7 2684 2771.7 0.1 0.0
Metric: time
jsbench/Crypt.as 4419 4513.0 6713 6765.0 -51.9 -17.7 --
jsbench/Euler.as 16385 16679 16763 17007 -2.3 -1.0
jsbench/FFT.as 16995 17038 17994 18061 -5.9 -11.7 --
jsbench/HeapSort.as 3738 3744.3 3868 3881.0 -3.5 -6.4 -
jsbench/LUFact.as 15127 16091 15095 15171 0.2 0.0
jsbench/Moldyn.as 19417 19467 19629 19749 -1.1 -1.2 -
jsbench/RayTracer.as 13783 13800 14694 14714 -6.6 -32.9 --
jsbench/Series.as 16553 16567 16117 16236 2.6 4.0 +
jsbench/SOR.as 70239 70452 70492 70536 -0.4 -0.8
jsbench/SparseMatmult.as 20290 20495 21191 21345 -4.4 -3.3 -
jsbench/typed/Crypt.as 766 768.3 1429 1431.0 -86.6 -189.9 --
jsbench/typed/Euler.as 19192 19241 18383 18428 4.2 11.2 +
jsbench/typed/FFT.as 8479 8485.0 8821 8827.3 -4.0 -29.9 -
jsbench/typed/HeapSort.as 1440 1521.0 1484 1487.0 -3.1 -0.4
jsbench/typed/LUFact.as 19222 19254 19012 19044 1.1 4.0 +
jsbench/typed/Moldyn.as 16671 16779 17573 17576 -5.4 -11.5 --
jsbench/typed/RayTracer.as 1615 1617.3 1726 1727.3 -6.9 -25.3 --
jsbench/typed/Series.as 15206 15267 15464 15466 -1.7 -5.7 -
jsbench/typed/SOR.as 56735 56815 58282 58375 -2.7 -9.2 -
jsbench/typed/SparseMatmult.as 1990 1992.0 2518 2524.0 -26.5 -82.8 --
Metric: v8 (largerValuesFaster)
jsmicro/alloc-1.as 21 21.0 20 20.0 -4.8 -2.0 -
jsmicro/alloc-10.as 7 7.0 7 7.0 0.0 0.0
jsmicro/alloc-11.as 8 8.0 8 8.0 0.0 0.0
jsmicro/alloc-12.as 7 7.0 7 7.0 0.0 0.0
jsmicro/alloc-13.as 39 39.0 37 37.0 -5.1 -3.0 --
jsmicro/alloc-14.as 32 32.0 31 31.0 -3.1 -2.0 -
jsmicro/alloc-2.as 13 13.0 13 13.0 0.0 0.0
jsmicro/alloc-3.as 10 10.0 10 10.0 0.0 0.0
jsmicro/alloc-4.as 25 23.7 23 23.0 -8.0 -2.0 --
jsmicro/alloc-5.as 20 20.0 21 21.0 5.0 2.0 +
jsmicro/alloc-6.as 32 32.0 31 31.7 3.1 1.0 +
jsmicro/alloc-7.as 21 21.0 21 21.0 0.0 0.0
jsmicro/alloc-8.as 8 8.0 8 8.0 0.0 0.0
jsmicro/alloc-9.as 8 8.0 8 8.0 0.0 0.0
jsmicro/array-1.as 358 357.3 359 359.0 0.3 2.1 +
jsmicro/array-2.as 272 270.3 274 274.3 1.1 1.7 +
jsmicro/array-pop-1.as 188 186.7 203 205.0 10.1 5.6 ++
jsmicro/array-push-1.as 199 199.0 215 215.7 8.5 39.1 ++
jsmicro/array-shift-1.as 95 93.7 94 94.0 -1.1 -1.0 -
jsmicro/array-slice-1.as 14 14.0 14 14.3 7.1 2.2 ++
jsmicro/array-sort-1.as 22 22.0 22 22.0 0.0 0.0
jsmicro/array-sort-2.as 3 3.0 3 3.0 0.0 0.0
jsmicro/array-sort-3.as 22 22.0 22 22.0 0.0 0.0
jsmicro/array-sort-4.as 9 7.7 7 8.7 11.1 0.4
jsmicro/array-unshift-1.as 69 65.7 72 75.7 13.0 1.7 +
jsmicro/closedvar-read-1.as 393 389.3 380 383.7 -1.3 -0.8
jsmicro/closedvar-write-1.as 309 306.3 294 297.3 -1.6 -0.7
jsmicro/closedvar-write-2.as 304 299.7 290 298.3 2.0 0.5
jsmicro/do-1.as 388 381.3 376 389.7 4.6 1.0 +
jsmicro/for-1.as 410 381.7 393 394.7 -3.2 -0.5
jsmicro/for-2.as 60 58.7 56 58.7 1.7 0.3
jsmicro/for-3.as 26 25.7 25 25.3 0.0 0.0
jsmicro/for-in-1.as 226 209.7 202 204.0 -8.4 -1.3 -
jsmicro/for-in-2.as 151 149.0 144 148.7 2.0 0.5
jsmicro/funcall-1.as 147 139.7 126 130.7 -9.5 -1.5 -
jsmicro/funcall-2.as 142 137.3 121 127.0 -8.5 -1.2 -
jsmicro/funcall-3.as 136 133.3 110 120.3 -5.1 -0.6
jsmicro/funcall-4.as 57 55.7 58 59.0 7.0 1.7 +
jsmicro/globalvar-read-1.as 400 376.3 381 383.0 -4.0 -0.7
jsmicro/globalvar-write-1.as 328 310.7 274 290.3 -6.4 -0.7
jsmicro/isNaN-1.as 187 182.3 135 145.3 -17.6 -2.4 --
smicro/lookup-array-fetch-1.as 470 451.0 427 451.7 0.4 0.1
jsmicro/lookup-array-in-1.as 761 728.7 693 708.0 -3.8 -0.6
micro/lookup-object-fetch-1.as 516 495.7 496 527.0 5.4 0.6
jsmicro/lookup-object-in-1.as 708 678.3 579 632.3 -2.0 -0.2
jsmicro/number-toString-1.as 3 3.0 3 3.0 0.0 0.0
jsmicro/number-toString-2.as 24 23.0 21 21.7 -4.2 -0.5
jsmicro/oop-1.as 3 3.0 3 3.3 33.3 2.4 ++
jsmicro/parseFloat-1.as 23 21.3 22 22.0 -4.3 -0.7
jsmicro/parseInt-1.as 82 79.7 68 71.7 -8.5 -1.4 -
jsmicro/regex-exec-1.as 20 18.7 18 18.3 -5.0 -0.7
jsmicro/regex-exec-2.as 27 24.3 23 24.0 -7.4 -0.7
jsmicro/regex-exec-3.as 49 47.0 43 45.3 0.0 0.0
jsmicro/regex-exec-4.as 95 89.0 83 86.0 -6.3 -0.8
jsmicro/string-casechange-1.as 12 11.3 11 11.3 0.0 0.0
jsmicro/string-casechange-2.as 13 12.0 11 11.7 -7.7 -0.7
jsmicro/string-charAt-1.as 107 105.3 75 82.7 -18.7 -2.1 --
jsmicro/string-charAt-2.as 22 22.0 19 20.3 0.0 0.0
jsmicro/string-charCodeAt-1.as 107 104.0 66 68.0 -34.6 -7.7 --
jsmicro/string-charCodeAt-2.as 108 103.0 65 66.7 -36.1 -4.5 --
micro/string-fromCharCode-1.as 158 154.0 151 153.3 -1.9 -0.5
micro/string-fromCharCode-2.as 27 23.3 22 26.7 7.4 0.3
micro/string-fromCharCode-3.as 41 41.0 41 41.0 0.0 0.0
micro/string-fromCharCode-4.as 42 42.0 41 41.0 -2.4 -2.0 -
jsmicro/string-indexOf-1.as 128 127.3 105 105.0 -18.0 -48.5 --
jsmicro/string-indexOf-2.as 81 80.7 74 74.0 -8.6 -14.8 --
jsmicro/string-indexOf-3.as 61 61.0 59 59.0 -3.3 -2.0 -
smicro/string-lastIndexOf-1.as 117 117.0 94 94.0 -19.7 -3.0 --
smicro/string-lastIndexOf-2.as 58 58.0 57 57.0 -1.7 -2.0 -
smicro/string-lastIndexOf-3.as 116 116.0 102 102.0 -12.1 -3.0 --
jsmicro/string-slice-1.as 44 43.3 43 43.0 -2.3 -2.1 -
jsmicro/string-split-1.as 6 6.0 6 6.0 0.0 0.0
jsmicro/string-split-2.as 5 5.0 5 5.0 0.0 0.0
jsmicro/string-substring-1.as 38 38.0 41 41.0 7.9 3.0 ++
jsmicro/switch-1.as 122 121.7 114 114.7 -5.7 -7.2 --
jsmicro/switch-2.as 48 48.0 45 45.0 -6.2 -3.0 --
jsmicro/switch-3.as 62 62.0 58 58.0 -6.5 -3.0 --
jsmicro/try-1.as 134 133.7 144 144.7 8.2 12.1 ++
jsmicro/try-2.as 8 8.0 8 8.0 0.0 0.0
jsmicro/try-3.as 27 27.0 28 28.0 3.7 2.0 +
jsmicro/while-1.as 517 516.0 514 514.7 -0.4 -1.5 -
Metric: time
e/describetype/desctypeperf.as 855 856.7 861 861.3 -0.7 -3.5 -
anguage/e4x/addingToXMLList.as 27 27.7 27 27.0 0.0 0.0
ge/e4x/appendChildAndString.as 59 59.0 61 61.0 -3.4 -2.0 -
concatenatingStringsFromE4X.as 11 11.0 11 11.3 0.0 0.0
x/simpleStringConcatenation.as 3 3.0 3 3.0 0.0 0.0
/e4x/usingAppendChildAndE4X.as 62 62.3 62 62.0 0.0 0.0
nguage/string/append_concat.as 115 115.7 115 116.3 0.0 0.0
ge/string/append_equal_plus.as 97 98.3 101 102.0 -4.1 -2.3 -
ge/string/append_plus_equal.as 97 97.7 102 103.0 -5.2 -2.8 --
language/string/charAt.as 269 277.7 357 361.3 -32.7 -8.3 --
language/string/charCodeAt.as 276 278.3 435 440.3 -57.6 -30.7 --
language/string/indexOf.as 219 219.7 219 220.3 0.0 0.0
language/string/lastIndexOf.as 227 229.0 224 225.3 1.3 1.0 +
language/string/replace.as 453 458.0 468 468.7 -3.3 -3.4 -
language/string/replace2.as 1886 1886.0 1868 1870.0 1.0 8.3 +
language/string/search.as 33 34.0 34 34.0 -3.0 -1.3 -
language/string/slice.as 470 471.7 587 587.3 -24.9 -72.2 --
language/string/split.as 788 795.7 790 791.0 -0.3 -0.3
ring/static_ascii_array_100.as 893 895.0 888 891.3 0.6 1.2 +
tring/static_ascii_array_50.as 865 867.3 859 860.3 0.7 2.0 +
ing/static_latin1_array_100.as 1741 1744.0 1730 1731.7 0.6 2.3 +
ring/static_latin1_array_50.as 874 875.7 867 871.0 0.8 1.0 +
language/string/substr.as 370 370.0 450 450.0 -21.6 -3.0 --
language/string/substring.as 369 369.7 380 381.7 -3.0 -5.1 -
/string/typed/append_concat.as 103 103.3 103 104.3 0.0 0.0
ing/typed/append_equal_plus.as 90 90.7 93 95.3 -3.3 -1.2 -
ing/typed/append_plus_equal.as 90 90.7 94 94.3 -4.4 -4.4 -
anguage/string/typed/charAt.as 51 51.0 51 51.3 0.0 0.0
age/string/typed/charCodeAt.as 45 45.0 44 44.7 2.2 2.1 +
nguage/string/typed/indexOf.as 219 220.0 220 220.7 -0.5 -0.8
ge/string/typed/lastIndexOf.as 222 224.0 224 225.3 -0.9 -0.7
nguage/string/typed/replace.as 453 454.7 460 460.3 -1.5 -2.5 -
guage/string/typed/replace2.as 1889 1890.3 1878 1879.7 0.6 3.1 +
anguage/string/typed/search.as 33 34.0 34 35.0 -3.0 -0.6
language/string/typed/slice.as 333 338.3 326 326.3 2.1 0.9
language/string/typed/split.as 791 792.7 786 787.0 0.6 2.4 +
anguage/string/typed/substr.as 253 253.0 256 256.7 -1.2 -6.5 -
uage/string/typed/substring.as 243 243.7 255 255.7 -4.9 -8.8 -
misc/boids.as 2894 2897.0 2849 2850.0 1.6 10.3 +
misc/boidshack.as 635 641.3 644 645.3 -1.4 -1.2 -
misc/gameoflife.as 2574 2575.7 2739 2740.7 -6.4 -57.5 --
misc/primes.as 3983 3984.7 7262 7264.0 -82.3 -1348.7 --
mmgc/gcbench.as 5520 5532.3 5502 5505.0 0.3 1.5 +
mmgc/ofib-rc.as 561 565.0 564 570.7 -0.5 -0.3
mmgc/ofib.as 2329 2344.0 2370 2388.3 -1.8 -1.1 -
mmgc/sfib.as 629 629.3 620 620.7 1.4 9.5 +
scimark/FFT.as 5213 5219.7 5374 5380.0 -3.1 -16.2 -
scimark/LU.as 4340 4342.7 4362 4362.7 -0.5 -6.4 -
scimark/MonteCarlo.as 4004 4007.7 5266 5267.3 -31.5 -262.7 --
scimark/SOR.as 5150 5159.7 5236 5241.7 -1.7 -6.2 -
scimark/SparseCompRow.as 117 117.3 137 137.3 -17.1 -22.9 --
nspider/access-binary-trees.as 52 52.3 53 53.7 -1.9 -1.1 -
sunspider/access-fannkuch.as 69 69.0 79 79.0 -14.5 -3.0 --
sunspider/access-nbody.as 132 132.3 134 134.7 -1.5 -2.1 -
sunspider/access-nsieve.as 46 46.7 48 48.3 -4.3 -1.5 -
er/bitops-3bit-bits-in-byte.as 12 12.0 12 12.3 0.0 0.0
nspider/bitops-bits-in-byte.as 25 25.0 25 25.0 0.0 0.0
unspider/bitops-bitwise-and.as 152 152.3 156 158.7 -2.6 -1.8 -
unspider/bitops-nsieve-bits.as 53 53.7 55 55.0 -3.8 -4.3 -
pider/controlflow-recursive.as 18 18.3 19 19.3 -5.6 -1.1 -
sunspider/crypto-aes.as 42 42.3 46 46.3 -9.5 -4.5 --
sunspider/crypto-md5.as 28 28.3 29 29.7 -3.6 -1.1 -
sunspider/crypto-sha1.as 30 30.3 31 31.7 -3.3 -1.1 -
sunspider/date-format-tofte.as 102 102.7 101 101.3 1.0 1.1 +
sunspider/math-cordic.as 104 105.0 110 111.3 -5.8 -3.6 --
sunspider/math-partial-sums.as 223 223.0 220 223.0 1.3 0.8
unspider/math-spectral-norm.as 61 61.3 64 64.3 -4.9 -3.3 -
sunspider/s3d-cube.as 145 145.3 141 142.0 2.8 3.1 +
sunspider/s3d-morph.as 59 59.7 57 58.3 3.4 1.4 +
sunspider/s3d-raytrace.as 120 120.0 120 121.0 0.0 0.0
sunspider/string-fasta.as 100 100.7 96 96.3 4.0 4.2 +
unspider/string-unpack-code.as 305 306.0 300 303.7 1.6 1.4 +
pider/string-validate-input.as 62 62.7 62 62.3 0.0 0.0
der/as3/access-binary-trees.as 18 18.3 19 19.0 -5.6 -2.2 --
nspider/as3/access-fannkuch.as 44 44.7 46 46.0 -4.5 -4.3 -
sunspider/as3/access-nbody.as 7 7.7 8 8.3 -14.3 -1.2 -
sunspider/as3/access-nsieve.as 36 37.7 37 37.3 -2.8 -0.6
s3/bitops-3bit-bits-in-byte.as 5 5.3 5 5.0 0.0 0.0
der/as3/bitops-bits-in-byte.as 8 8.7 8 8.3 0.0 0.0
ider/as3/bitops-bitwise-and.as 1 1.7 1 1.7 0.0 0.0
ider/as3/bitops-nsieve-bits.as 42 43.3 43 43.7 -2.4 -0.7
r/as3/controlflow-recursive.as 5 5.0 5 5.3 0.0 0.0
sunspider/as3/crypto-aes.as 34 35.0 36 36.0 -5.9 -2.5 --
sunspider/as3/crypto-md5.as 47 47.3 47 47.3 0.0 0.0
sunspider/as3/crypto-sha1.as 34 34.7 35 35.7 -2.9 -1.1 -
pider/as3/date-format-tofte.as 94 94.3 94 94.0 0.0 0.0
sunspider/as3/math-cordic.as 45 45.0 54 54.7 -20.0 -23.2 --
pider/as3/math-partial-sums.as 70 70.0 75 75.0 -7.1 -3.0 --
ider/as3/math-spectral-norm.as 6 6.7 8 8.0 -33.3 -4.7 --
sunspider/as3/s3d-cube.as 28 28.3 34 34.3 -21.4 -7.1 --
sunspider/as3/s3d-morph.as 45 45.7 49 49.3 -8.9 -2.9 --
sunspider/as3/s3d-raytrace.as 64 64.0 72 72.3 -12.5 -19.2 --
sunspider/as3/string-fasta.as 73 74.0 70 70.3 4.1 2.3 +
ider/as3/string-unpack-code.as 306 307.0 304 306.0 0.7 0.9
r/as3/string-validate-input.as 53 53.3 54 54.0 -1.9 -2.1 -
r/as3vector/access-fannkuch.as 26 26.0 30 30.0 -15.4 -3.0 --
ider/as3vector/access-nbody.as 7 7.3 8 8.0 -14.3 -2.2 --
der/as3vector/access-nsieve.as 11 11.7 11 11.7 0.0 0.0
s3vector/bitops-nsieve-bits.as 6 6.3 6 6.0 0.0 0.0
pider/as3vector/math-cordic.as 24 24.0 24 24.7 0.0 0.0
s3vector/math-spectral-norm.as 24 24.3 24 24.0 0.0 0.0
unspider/as3vector/s3d-cube.as 32 32.3 35 35.0 -9.4 -6.4 --
nspider/as3vector/s3d-morph.as 39 41.0 39 39.3 0.0 0.0
ider/as3vector/string-fasta.as 84 84.0 76 77.0 9.5 9.0 ++
ector/string-validate-input.as 55 56.3 55 55.3 0.0 0.0
Metric: v8 (largerValuesFaster)
v8/crypto.as 301 300.7 263 263.3 -12.3 -36.6 --
v8/deltablue.as 1372 1367.0 1445 1448.7 5.8 11.7 ++
v8/raytrace.as 1714 1712.3 1702 1713.3 0.3 0.5
v8/richards.as 963 960.0 972 975.3 1.5 2.7 +
v8/typed/crypto.as 304 304.0 251 251.3 -17.1 -91.2 --
v8/typed/deltablue.as 2152 2139.7 2129 2140.3 0.1 0.1
v8/typed/raytrace.as 3598 3593.3 3506 3510.3 -2.3 -10.8 -
v8/typed/richards.as 1507 1504.3 1504 1515.0 1.1 1.6 +
v8.5/js/crypto.as 280 279.7 242 242.0 -13.6 -80.5 --
v8.5/js/deltablue.as 276 275.0 280 280.7 1.8 3.9 +
v8.5/js/raytrace.as 457 454.7 446 446.3 -2.2 -3.9 -
v8.5/js/regexp.as 36.9 36.9 36.6 36.7 -0.5 -0.0
v8.5/js/richards.as 240 239.7 233 233.0 -2.9 -14.8 -
v8.5/js/splay.as 541 495.0 476 506.3 -2.2 -0.2
v8.5/optimized/crypto.as 4606 4601.0 4584 4592.0 -0.1 -0.3
v8.5/optimized/deltablue.as 2392 2381.3 2358 2371.0 -0.2 -0.3
v8.5/optimized/raytrace.as 4135 4128.3 4023 4032.3 -2.2 -6.9 -
v8.5/optimized/regexp.as 36.5 36.5 36.6 36.7 0.8 0.0
v8.5/optimized/richards.as 1977 1973.7 2122 2124.0 7.6 34.3 ++
v8.5/optimized/splay.as 2865 2854.7 2838 2843.7 -0.6 -1.2 -
v8.5/typed/crypto.as 2230 2211.0 1948 1952.3 -12.1 -11.9 --
v8.5/typed/deltablue.as 2543 2527.7 2498 2510.3 -0.9 -1.1 -
v8.5/typed/raytrace.as 4131 4127.0 4027 4031.0 -2.3 -14.5 -
v8.5/typed/regexp.as 36.5 36.4 36.7 36.7 0.8 0.0
v8.5/typed/richards.as 1979 1975.3 2123 2126.0 7.6 26.9 ++
v8.5/typed/splay.as 681 679.0 678 678.3 -0.3 -1.1 -
v8.5/untyped/crypto.as 300 299.0 276 276.3 -7.7 -17.3 --
v8.5/untyped/deltablue.as 1397 1392.0 1473 1480.3 6.6 6.9 ++
v8.5/untyped/raytrace.as 1797 1780.3 1792 1797.7 0.4 0.4
v8.5/untyped/regexp.as 36.9 36.8 36.8 36.8 -0.3 -0.0
v8.5/untyped/richards.as 454 452.7 459 459.3 1.3 4.3 +
v8.5/untyped/splay.as 593 570.7 562 592.7 6.2 0.8
Attachment #458659 -
Flags: feedback?(edwsmith)
Reporter | ||
Comment 6•15 years ago
|
||
At the call sites for STACKADJUST, add a comment, maybe: // dynamically align ESP on windows-x86.
And, the definitions of STACKADJUST/STACKRESTORE should be stripped down to the one we want to keep, and add detailed explanations.
CHECKSTACKALIGNMENT is a cool tool, we should keep it and add a comment explaining how to use it to troubleshoot "mystery slowdowns".
the avmshellWin.cpp change (which is nice) should be split into a separate bug, and needs comments.
I think overall this change is desireable. But, I also think we should dig into the more serious slowdowns to identify how things are becoming misaligned, and see if we can fix the misalignment. These can be followon bugs to this one. You previously mentioned isNaN as one case. This one can be fixed by making MathUtils.isNaN() and Toplevel.isNaN() forcibly inlined, so that the isNaN thunk itself inlines the isNaN code and therefore doesn't need to misalign the stack. Alternatively, Toplevel::isNaN could be marked as FASTCALL, which would move its [unused] ScriptObject* parameter into a register, and leave the double parameter aligned on the stack.
isNaN is probably not alone, and if there are others we can fix them; sin()? cos? etc.
here are the tests that will cause a twinge of pain, if we regress them as much as this data is showing, because of other efforts to speed up those same tests, or just because i know they're testing use cases that have come up in customer threads.
asmicro/isNaN-1.as 227 226.3 294 301.0 36.6 13.9 ++
jsmicro/array-push-1.as 199 199.0 215 215.7 8.5 39.1 ++
jsmicro/try-1.as 134 133.7 144 144.7 8.2 12.1 ++
v8.5/optimized/richards.as 1977 1973.7 2122 2124.0 7.6 34.3 ++
v8.5/typed/richards.as 1979 1975.3 2123 2126.0 7.6 26.9 ++
v8.5/untyped/deltablue.as 1397 1392.0 1473 1480.3 6.6 6.9 ++
8/deltablue.as 1372 1367.0 1445 1448.7 5.8 11.7 ++
If we drill into these tests, hopefully we'll find some function like isNaN() which can be tweaked to ensure the stack stays aligned.
Reporter | ||
Updated•15 years ago
|
Attachment #458659 -
Flags: feedback?(edwsmith) → feedback+
Assignee | ||
Comment 7•15 years ago
|
||
Random notes:
In VTUNE, using the LD1_SPLIT.STORES and LD1_SPLIT.LOADS events show the impact of unaligned doubles that happen to cross a cache line boundary. These events are rare but with the latest code, some tests like typed\Moldyn.as are hitting doubleToAtom_SSE2 hard with an unaligned double. Our JIT code is aligned correctly but it calls out to getprop_obj_slot_double_sse2 which skips the EBP frame pointer manipulation and then places the double in an unaligned location.
Using "max speed" optimizations in VC2008 will omit frame pointers where possible. In VC2010, the compiler settings make it easier to use "max speed" while still forcing frame pointers to be on. This should be investigated in a different bug...in the Moldyn test, emitting frame pointers with VC2010 made it the fastest of all because our memory layout was not hitting the split cache loads/stores vs. 2008.
Assignee | ||
Comment 8•15 years ago
|
||
Same basic patch as before but cleaned up and added comments.
Performance metrics from the latest code are below. AVM is the new code while AVM2 is the old code. Slowdowns have moved around some because of random memory layout. If we are unlucky to get a double access across a L1 cache line, we get a big peformance hit. In the case of Moldyn, we are calling into doubleToAtom_sse2 with an unaligned L1 cacheline spanning double. See prior notes about EBP frame pointer omission by MSVC.
avm:cyclone avm2:cyclone
test best avg best avg %dBst %dAvg
Metric: v8 custom v8 normalized metric (hardcoded in the test)
asmicro/alloc-1.as 35 35 36 36 2.86 2.86 +
asmicro/alloc-10.as 12 12 12 12 0 0
asmicro/alloc-11.as 12 12 12 12 0 0
asmicro/alloc-12.as 7 7 7 7 0 0
asmicro/alloc-13.as 77 77 77 77 0 0
asmicro/alloc-14.as 68 67.3 68 67.7 0 0.50
asmicro/alloc-2.as 17 17 17 17 0 0
asmicro/alloc-3.as 14 14 14 14 0 0
asmicro/alloc-4.as 46 46 46 46 0 0
asmicro/alloc-5.as 33 33 32 32 -3.03 -3.03 -
asmicro/alloc-6.as 61 61 61 61 0 0
asmicro/alloc-7.as 34 34 34 34 0 0
asmicro/alloc-8.as 14 14 14 14 0 0
asmicro/alloc-9.as 14 14 14 14 0 0
asmicro/array-1.as 2277 2275 2274 2273 -0.13 -0.09 -
asmicro/array-2.as 821 820 885 883 7.80 7.68 ++
asmicro/array-pop-1.as 572 570.3 566 559.3 -1.05 -1.93
asmicro/array-push-1.as 309 308.7 315 314.3 1.94 1.84 +
asmicro/array-shift-1.as 143 142.3 141 140 -1.40 -1.64 -
asmicro/array-slice-1.as 19 19 19 19 0 0
asmicro/array-sort-1.as 23 23 23 23 0 0
asmicro/array-sort-2.as 2 2 2 2 0 0
asmicro/array-sort-3.as 22 21.3 21 21 -4.55 -1.56 -
asmicro/array-sort-4.as 8 8 9 9 12.50 12.50 ++
asmicro/array-unshift-1.as 114 113.3 116 116 1.75 2.35 +
asmicro/closedvar-read-1.as 3649 3628 3947 3926.7 8.17 8.23 ++
asmicro/closedvar-write-1.as 3524 3513.7 2459 2457 -30.22 -30.07 --
asmicro/closedvar-write-2.as 3550 3546.7 2474 2472.7 -30.31 -30.28 --
asmicro/do-1.as 3694 3688.7 3652 3649.7 -1.14 -1.06 -
asmicro/for-1.as 3646 3645 3688 3686 1.15 1.12 +
asmicro/for-2.as 2539 2538.3 1534 1533.3 -39.58 -39.59 --
asmicro/for-3.as 2642 2640.7 1556 1555.7 -41.11 -41.09 --
asmicro/for-in-1.as 459 458.3 473 472 3.05 2.98 +
asmicro/for-in-2.as 284 281.3 286 282 0.70 0.24
asmicro/funcall-1.as 347 343.3 389 388.7 12.10 13.20 ++
asmicro/funcall-2.as 246 245.3 281 280 14.23 14.13 ++
asmicro/funcall-3.as 301 300.3 348 348 15.61 15.87 ++
asmicro/funcall-4.as 97 97 96 96 -1.03 -1.03 -
asmicro/globalvar-read-1.as 3597 3591.7 4187 4175.3 16.40 16.25 ++
asmicro/globalvar-write-1.as 3759 3758.3 2298 2297.7 -38.87 -38.86 --
asmicro/isNaN-1.as 398 397.7 296 296 -25.63 -25.57 --
smicro/lookup-array-fetch-1.as 722 720.7 734 732.7 1.66 1.67 +
asmicro/lookup-array-in-1.as 1910 1908.3 1898 1897 -0.63 -0.59 -
cro/lookup-negindex-array-1.as 500 499.3 495 494.7 -1 -0.93 -
cro/lookup-negindex-array-2.as 407 406 406 405.3 -0.25 -0.16
ro/lookup-negindex-object-1.as 509 508.7 508 507.7 -0.20 -0.20 -
ro/lookup-negindex-object-2.as 463 463 462 461.7 -0.22 -0.29 -
micro/lookup-object-fetch-1.as 856 854.3 852 851.3 -0.47 -0.35 -
asmicro/lookup-object-in-1.as 1467 1464.7 1439 1436.7 -1.91 -1.91 -
asmicro/number-toString-1.as 4 4 4 4 0 0
asmicro/number-toString-2.as 57 56.7 57 57 0 0.59
asmicro/oop-1.as 3 3 3 3 0 0
asmicro/parseFloat-1.as 71 71 66 66 -7.04 -7.04 --
asmicro/parseInt-1.as 150 150 142 142 -5.33 -5.33 --
asmicro/regex-exec-1.as 48 47.7 47 47 -2.08 -1.40 -
asmicro/regex-exec-2.as 56 55.3 55 55 -1.79 -0.60 -
asmicro/regex-exec-3.as 97 97 97 97 0 0
asmicro/regex-exec-4.as 215 214.7 215 214.7 0 0
asmicro/restarg-1.as 666 665 752 751 12.91 12.93 ++
asmicro/restarg-2.as 431 429.7 437 433.7 1.39 0.93 +
asmicro/restarg-3.as 39 39 39 39 0 0
asmicro/restarg-4.as 24 24 26 26 8.33 8.33 ++
asmicro/string-casechange-1.as 27 27 27 27 0 0
asmicro/string-casechange-2.as 27 26.7 27 27 0 1.25
asmicro/string-charAt-1.as 337 336.7 266 266 -21.07 -20.99 --
asmicro/string-charAt-2.as 59 59 59 59 0 0
asmicro/string-charCodeAt-1.as 335 335 268 268 -20 -20 --
asmicro/string-charCodeAt-2.as 275 275 259 258.3 -5.82 -6.06 --
micro/string-fromCharCode-1.as 342 341.7 348 348 1.75 1.85 +
micro/string-fromCharCode-2.as 55 55 56 56 1.82 1.82 +
asmicro/string-indexOf-1.as 171 170 138 138 -19.30 -18.82 --
asmicro/string-indexOf-2.as 164 164 165 165 0.61 0.61
asmicro/string-indexOf-3.as 95 95 95 95 0 0
smicro/string-lastIndexOf-1.as 612 611.7 616 615 0.65 0.54 +
smicro/string-lastIndexOf-2.as 94 94 94 94 0 0
smicro/string-lastIndexOf-3.as 436 434 451 450 3.44 3.69 +
asmicro/string-slice-1.as 116 116 123 123 6.03 6.03 ++
asmicro/string-split-1.as 7 7 7 7 0 0
asmicro/string-split-2.as 6 6 6 6 0 0
asmicro/string-substring-1.as 138 138 134 133.3 -2.90 -3.38 -
asmicro/switch-1.as 737 736.3 804 803.7 9.09 9.14 ++
asmicro/switch-2.as 48 48 47 47 -2.08 -2.08 -
asmicro/switch-3.as 63 63 62 62 -1.59 -1.59 -
asmicro/try-1.as 227 224.3 239 238 5.29 6.09 ++
asmicro/try-2.as 15 15 15 15 0 0
asmicro/try-3.as 52 52 54 54 3.85 3.85 +
asmicro/vector-push-1.as 45 44.3 51 51 13.33 15.04 ++
asmicro/while-1.as 3647 3646.7 3690 3689 1.18 1.16 +
Metric: time
jsbench/Crypt.as 3430 3436.3 4098 4101.3 -19.48 -19.35 --
jsbench/Euler.as 8797 8807.3 9288 9365.3 -5.58 -6.34 --
jsbench/FFT.as 8643 8663 9056 9065.3 -4.78 -4.64 -
jsbench/HeapSort.as 2914 2921.3 3063 3079.7 -5.11 -5.42 --
jsbench/LUFact.as 10011 10028.3 10215 10237.7 -2.04 -2.09 -
jsbench/Moldyn.as 14432 14450 11856 11897.3 17.85 17.67 ++
jsbench/RayTracer.as 8436 8439.7 8728 8760 -3.46 -3.80 -
jsbench/Series.as 11565 11579.3 11572 11588.3 -0.06 -0.08
jsbench/SOR.as 38889 42393.3 44436 49305.3 -14.26 -16.30
jsbench/SparseMatmult.as 14027 16895 15889 18374.7 -13.27 -8.76
jsbench/typed/Crypt.as 754 755 950 951.3 -25.99 -26.00 --
jsbench/typed/Euler.as 10502 10532.7 10680 10695.7 -1.69 -1.55 -
jsbench/typed/FFT.as 4930 4935 5379 5380.7 -9.11 -9.03 --
jsbench/typed/HeapSort.as 1485 1486.3 1558 1571.7 -4.92 -5.74 -
jsbench/typed/LUFact.as 8943 8977.3 10778 10791 -20.52 -20.20 --
jsbench/typed/Moldyn.as 4892 4912 4517 4520 7.67 7.98 ++
jsbench/typed/RayTracer.as 1464 1466.3 1403 1403.7 4.17 4.27 +
jsbench/typed/Series.as 9194 9198.3 10042 10047 -9.22 -9.23 --
jsbench/typed/SOR.as 26015 26021.3 30443 30465 -17.02 -17.08 --
jsbench/typed/SparseMatmult.as 1992 1999 2675 2678 -34.29 -33.97 --
Metric: v8 custom v8 normalized metric (hardcoded in the test)
jsmicro/alloc-1.as 34 34 34 34 0 0
jsmicro/alloc-10.as 12 12 14 13.3 16.67 11.11 ++
jsmicro/alloc-11.as 13 13 12 12 -7.69 -7.69 --
jsmicro/alloc-12.as 8 8 8 8 0 0
jsmicro/alloc-13.as 65 65 61 61 -6.15 -6.15 --
jsmicro/alloc-14.as 60 58.7 56 56 -6.67 -4.55 --
jsmicro/alloc-2.as 18 18 17 17 -5.56 -5.56 --
jsmicro/alloc-3.as 14 14 14 14 0 0
jsmicro/alloc-4.as 45 44.3 42 42 -6.67 -5.26 --
jsmicro/alloc-5.as 34 32.7 32 32 -5.88 -2.04 --
jsmicro/alloc-6.as 52 52 50 50 -3.85 -3.85 -
jsmicro/alloc-7.as 34 34 33 33 -2.94 -2.94 -
jsmicro/alloc-8.as 14 14 14 14 0 0
jsmicro/alloc-9.as 14 14 14 14 0 0
jsmicro/array-1.as 359 357.7 264 264 -26.46 -26.19 --
jsmicro/array-2.as 277 276.7 212 212 -23.47 -23.37 --
jsmicro/array-pop-1.as 186 184.3 164 161.3 -11.83 -12.48 --
jsmicro/array-push-1.as 201 200.3 231 229.7 14.93 14.64 ++
jsmicro/array-shift-1.as 92 91.7 89 87 -3.26 -5.09 -
jsmicro/array-slice-1.as 19 19 19 19 0 0
jsmicro/array-sort-1.as 24 24 24 24 0 0
jsmicro/array-sort-2.as 4 4 4 4 0 0
jsmicro/array-sort-3.as 22 20.7 23 22.3 4.55 8.06
jsmicro/array-sort-4.as 10 10 10 10 0 0
jsmicro/array-unshift-1.as 93 93 99 99 6.45 6.45 ++
jsmicro/closedvar-read-1.as 514 512 322 322 -37.35 -37.11 --
jsmicro/closedvar-write-1.as 395 394.3 312 311.7 -21.01 -20.96 --
jsmicro/closedvar-write-2.as 395 394.3 312 311.7 -21.01 -20.96 --
jsmicro/do-1.as 515 515 388 387.3 -24.66 -24.79 --
jsmicro/for-1.as 517 516.3 363 362.3 -29.79 -29.83 --
jsmicro/for-2.as 117 117 155 154.7 32.48 32.19 ++
jsmicro/for-3.as 60 59.3 66 66 10 11.24 ++
jsmicro/for-in-1.as 281 280.7 225 224.3 -19.93 -20.07 --
jsmicro/for-in-2.as 207 207 170 170 -17.87 -17.87 --
jsmicro/funcall-1.as 196 194 182 181.7 -7.14 -6.36 --
jsmicro/funcall-2.as 189 189 175 174.3 -7.41 -7.76 --
jsmicro/funcall-3.as 185 184.7 174 173.7 -5.95 -5.96 --
jsmicro/funcall-4.as 1292 1292 1223 1221.7 -5.34 -5.44 --
jsmicro/globalvar-read-1.as 513 512.3 322 321.7 -37.23 -37.22 --
jsmicro/globalvar-write-1.as 398 398 312 311.7 -21.61 -21.69 --
jsmicro/isNaN-1.as 220 219.7 174 174 -20.91 -20.79 --
smicro/lookup-array-fetch-1.as 615 614.7 627 625.7 1.95 1.79 +
jsmicro/lookup-array-in-1.as 999 997.7 1012 1009 1.30 1.14 +
micro/lookup-object-fetch-1.as 698 695.3 708 706.7 1.43 1.63 +
jsmicro/lookup-object-in-1.as 866 865.3 864 863.7 -0.23 -0.19 -
jsmicro/number-toString-1.as 5 5 5 5 0 0
jsmicro/number-toString-2.as 53 53 47 47 -11.32 -11.32 --
jsmicro/oop-1.as 4 4 4 4 0 0
jsmicro/parseFloat-1.as 41 41 36 36 -12.20 -12.20 --
jsmicro/parseInt-1.as 108 108 87 87 -19.44 -19.44 --
jsmicro/regex-exec-1.as 41 41 41 41 0 0
jsmicro/regex-exec-2.as 50 50 49 49 -2 -2 -
jsmicro/regex-exec-3.as 84 84 85 84.7 1.19 0.79 +
jsmicro/regex-exec-4.as 173 173 179 178.7 3.47 3.28 +
jsmicro/string-casechange-1.as 25 24.3 24 24 -4 -1.37 -
jsmicro/string-casechange-2.as 24 24 25 24.7 4.17 2.78 +
jsmicro/string-charAt-1.as 142 142 113 113 -20.42 -20.42 --
jsmicro/string-charAt-2.as 48 48 46 46 -4.17 -4.17 -
jsmicro/string-charCodeAt-1.as 138 138 106 106 -23.19 -23.19 --
jsmicro/string-charCodeAt-2.as 136 136 114 114 -16.18 -16.18 --
micro/string-fromCharCode-1.as 208 208 188 188 -9.62 -9.62 --
micro/string-fromCharCode-2.as 53 51.7 52 52 -1.89 0.65 -
micro/string-fromCharCode-3.as 66 66 66 66 0 0
micro/string-fromCharCode-4.as 71 71 72 72 1.41 1.41 +
jsmicro/string-indexOf-1.as 130 128.7 100 100 -23.08 -22.28 --
jsmicro/string-indexOf-2.as 80 80 71 71 -11.25 -11.25 --
jsmicro/string-indexOf-3.as 61 61 58 58 -4.92 -4.92 -
smicro/string-lastIndexOf-1.as 117 115.7 91 91 -22.22 -21.33 --
smicro/string-lastIndexOf-2.as 57 57 56 56 -1.75 -1.75 -
smicro/string-lastIndexOf-3.as 118 117.3 97 97 -17.80 -17.33 --
jsmicro/string-slice-1.as 68 68 59 59 -13.24 -13.24 --
jsmicro/string-split-1.as 8 8 8 8 0 0
jsmicro/string-split-2.as 7 7 7 7 0 0
jsmicro/string-substring-1.as 66 65.3 71 70.3 7.58 7.65 ++
jsmicro/switch-1.as 122 122 110 109.3 -9.84 -10.38 --
jsmicro/switch-2.as 45 45 43 43 -4.44 -4.44 -
jsmicro/switch-3.as 58 58 55 55 -5.17 -5.17 --
jsmicro/try-1.as 139 139 143 143 2.88 2.88 +
jsmicro/try-2.as 15 15 15 15 0 0
jsmicro/try-3.as 40 40 41 40.7 2.50 1.67 +
jsmicro/while-1.as 518 517 362 362 -30.12 -29.98 --
Metric: time
e/describetype/desctypeperf.as 605 606 595 598.3 1.65 1.27 +
anguage/e4x/addingToXMLList.as 18 18.7 18 19 0 -1.79
ge/e4x/appendChildAndString.as 50 50.7 50 50.7 0 0
concatenatingStringsFromE4X.as 6 6.7 6 7 0 -5.00
x/simpleStringConcatenation.as 1 1.7 1 1.7 0 0
/e4x/usingAppendChildAndE4X.as 51 51 52 52.3 -1.96 -2.61 -
nguage/string/append_concat.as 82 83.7 82 82.7 0 1.20
ge/string/append_equal_plus.as 67 67.7 69 69 -2.99 -1.97 -
ge/string/append_plus_equal.as 67 67 69 70 -2.99 -4.48 -
language/string/charAt.as 250 254 340 343 -36 -35.04 --
language/string/charCodeAt.as 266 275 339 347 -27.44 -26.18 --
language/string/indexOf.as 220 220.7 219 219.3 0.45 0.60 +
language/string/lastIndexOf.as 221 223.7 224 226.3 -1.36 -1.19
language/string/replace.as 385 385.7 382 383.7 0.78 0.52 +
language/string/replace2.as 1516 1516.7 1502 1502.3 0.92 0.95 +
language/string/search.as 31 31.7 31 31.7 0 0
language/string/slice.as 305 305 329 329 -7.87 -7.87 --
language/string/split.as 496 500.3 502 505.7 -1.21 -1.07
ring/static_ascii_array_100.as 857 861 859 859.7 -0.23 0.15
tring/static_ascii_array_50.as 839 840 837 841.7 0.24 -0.20
ing/static_latin1_array_100.as 1707 1732.3 1689 1694.7 1.05 2.17
ring/static_latin1_array_50.as 852 856.7 846 849.7 0.70 0.82
language/string/substr.as 232 232 240 240 -3.45 -3.45 -
language/string/substring.as 275 275 209 209 24 24 ++
/string/typed/append_concat.as 70 71.3 70 71 0 0.47
ing/typed/append_equal_plus.as 58 58.3 59 60 -1.72 -2.86
ing/typed/append_plus_equal.as 57 58.3 60 60 -5.26 -2.86 --
anguage/string/typed/charAt.as 50 50.7 48 48 4 5.26 +
age/string/typed/charCodeAt.as 44 44.3 43 43 2.27 3.01 +
nguage/string/typed/indexOf.as 219 220 219 219.3 0 0.30
ge/string/typed/lastIndexOf.as 222 225.3 226 227.7 -1.80 -1.04
nguage/string/typed/replace.as 386 387 399 400.7 -3.37 -3.53 -
guage/string/typed/replace2.as 1534 1535.3 1516 1517 1.17 1.19 +
anguage/string/typed/search.as 31 31.7 32 32.3 -3.23 -2.11
language/string/typed/slice.as 166 168.3 164 164.7 1.20 2.18
language/string/typed/split.as 495 498.3 502 505.3 -1.41 -1.40 -
anguage/string/typed/substr.as 121 121 122 122.3 -0.83 -1.10 -
uage/string/typed/substring.as 113 113 126 126 -11.50 -11.50 --
misc/boids.as 2013 2014 1971 1972 2.09 2.09 +
misc/boidshack.as 515 517.3 515 517 0 0.06
misc/gameoflife.as 2507 2510.7 2592 2594.3 -3.39 -3.33 -
misc/primes.as 3997 3999.7 3999 3999.3 -0.05 0.01
mmgc/gcbench.as 2998 3012.3 2927 2944 2.37 2.27 +
mmgc/ofib-rc.as 363 366 365 371 -0.55 -1.37
mmgc/ofib.as 1543 1551.3 1531 1540.3 0.78 0.71
mmgc/sfib.as 428 429 424 424 0.93 1.17 +
scimark/FFT.as 2795 2802.7 2842 2853.7 -1.68 -1.82 -
scimark/LU.as 2850 2855.7 3381 3386 -18.63 -18.57 --
scimark/MonteCarlo.as 2716 2718 2832 2839.7 -4.27 -4.48 -
scimark/SOR.as 2827 2836.3 3756 3761.7 -32.86 -32.62 --
scimark/SparseCompRow.as 95 95.3 117 118 -23.16 -23.78 --
nspider/access-binary-trees.as 39 39 39 39 0 0
sunspider/access-fannkuch.as 69 69.3 74 74.7 -7.25 -7.69 --
sunspider/access-nbody.as 94 94.3 97 97.3 -3.19 -3.18 -
sunspider/access-nsieve.as 44 44.3 46 47 -4.55 -6.02 -
er/bitops-3bit-bits-in-byte.as 11 11 11 11.7 0 -6.06
nspider/bitops-bits-in-byte.as 24 24.3 26 26.7 -8.33 -9.59 --
unspider/bitops-bitwise-and.as 165 169.7 169 171.7 -2.42 -1.18
unspider/bitops-nsieve-bits.as 40 40.7 40 40.7 0 0
pider/controlflow-recursive.as 17 17 16 16 5.88 5.88 ++
sunspider/crypto-aes.as 34 34 38 38.3 -11.76 -12.75 --
sunspider/crypto-md5.as 21 21.3 21 21.3 0 0
sunspider/crypto-sha1.as 21 22 24 24 -14.29 -9.09 --
sunspider/date-format-tofte.as 77 78.7 75 76 2.60 3.39
sunspider/math-cordic.as 75 75.3 69 71.3 8 5.31 ++
sunspider/math-partial-sums.as 183 185.3 188 191 -2.73 -3.06 -
unspider/math-spectral-norm.as 36 37.3 41 42.3 -13.89 -13.39 --
sunspider/s3d-cube.as 89 89.3 91 92 -2.25 -2.99 -
sunspider/s3d-morph.as 44 44.7 51 52 -15.91 -16.42 --
sunspider/s3d-raytrace.as 92 92.3 96 96.3 -4.35 -4.33 -
sunspider/string-fasta.as 83 83 81 81 2.41 2.41 +
unspider/string-unpack-code.as 238 239 235 236 1.26 1.26 +
pider/string-validate-input.as 46 47.7 47 47.3 -2.17 0.70
der/as3/access-binary-trees.as 11 11 11 11 0 0
nspider/as3/access-fannkuch.as 44 44.3 45 45.3 -2.27 -2.26 -
sunspider/as3/access-nbody.as 7 7.3 7 7 0 4.55
sunspider/as3/access-nsieve.as 34 34.7 34 35 0 -0.96
s3/bitops-3bit-bits-in-byte.as 5 5 4 4.3 20 13.33 +
der/as3/bitops-bits-in-byte.as 8 8.3 8 8.7 0 -4.00
ider/as3/bitops-bitwise-and.as 2 2 1 1.7 50 16.67 +
ider/as3/bitops-nsieve-bits.as 29 29.7 29 29 0 2.25
r/as3/controlflow-recursive.as 5 5 6 6 -20 -20 --
sunspider/as3/crypto-aes.as 27 27.3 27 27.7 0 -1.22
sunspider/as3/crypto-md5.as 29 29 29 29.7 0 -2.30
sunspider/as3/crypto-sha1.as 21 21.7 21 21.7 0 0
pider/as3/date-format-tofte.as 69 69 68 69 1.45 0 +
sunspider/as3/math-cordic.as 28 28.3 44 44.3 -57.14 -56.47 --
pider/as3/math-partial-sums.as 62 62.7 61 62.7 1.61 0
ider/as3/math-spectral-norm.as 6 6.7 7 7 -16.67 -5.00 --
sunspider/as3/s3d-cube.as 20 20 24 24 -20 -20 --
sunspider/as3/s3d-morph.as 33 33 29 30.3 12.12 8.08 ++
sunspider/as3/s3d-raytrace.as 63 63.7 61 61.7 3.17 3.14 +
sunspider/as3/string-fasta.as 43 43.7 43 43.3 0 0.76
ider/as3/string-unpack-code.as 236 237.3 235 236.3 0.42 0.42
r/as3/string-validate-input.as 39 39.7 39 39 0 1.68
r/as3vector/access-fannkuch.as 25 25.7 26 26.3 -4 -2.60 -
ider/as3vector/access-nbody.as 7 7 6 6.7 14.29 4.76 ++
der/as3vector/access-nsieve.as 10 10.7 10 10.3 0 3.12
s3vector/bitops-nsieve-bits.as 6 6 6 6 0 0
pider/as3vector/math-cordic.as 15 15 32 32.3 -113.33 -115.56 --
s3vector/math-spectral-norm.as 15 15.3 17 17 -13.33 -10.87 --
unspider/as3vector/s3d-cube.as 22 23 24 24 -9.09 -4.35 --
nspider/as3vector/s3d-morph.as 26 27 32 33 -23.08 -22.22 --
ider/as3vector/string-fasta.as 44 45 44 45.7 0 -1.48
ector/string-validate-input.as 39 40.3 40 40.3 -2.56 0
Metric: v8 custom v8 normalized metric (hardcoded in the test)
v8/crypto.as 416 415.3 373 372 -10.34 -10.43 --
v8/deltablue.as 1510 1502.3 1614 1608 6.89 7.03 ++
v8/earley-boyer.as 946 942 957 947.7 1.16 0.60
v8/raytrace.as 2591 2584.7 2543 2537.3 -1.85 -1.83 -
v8/richards.as 989 988 1042 1035.7 5.36 4.82 ++
v8/typed/crypto.as 426 424.3 345 344.3 -19.01 -18.85 --
v8/typed/deltablue.as 2581 2575.3 2574 2551.7 -0.27 -0.92
v8/typed/earley-boyer.as 945 943 964 959 2.01 1.70 +
v8/typed/raytrace.as 5910 5906 5600 5586 -5.25 -5.42 --
v8/typed/richards.as 1929 1925 1933 1931 0.21 0.31
v8.5/js/crypto.as 378 377.3 309 309 -18.25 -18.11 --
v8.5/js/deltablue.as 324 323.7 330 329.7 1.85 1.85 +
v8.5/js/earley-boyer.as 940 921.7 949 945 0.96 2.53
v8.5/js/raytrace.as 614 606.7 611 610.3 -0.49 0.60
v8.5/js/regexp.as 48.5 48.2 49.2 49.1 1.44 1.87 +
v8.5/js/richards.as 241 240.3 245 245 1.66 1.94 +
v8.5/js/splay.as 672 613.7 626 616.7 -6.85 0.49
v8.5/optimized/crypto.as 4673 4667 4742 4737 1.48 1.50 +
v8.5/optimized/deltablue.as 3013 2990 2661 2649.7 -11.68 -11.38 --
v8.5/optimized/earley-boyer.as 935 929.3 942 938.7 0.75 1.00 +
v8.5/optimized/raytrace.as 6834 6824.7 6827 6822.3 -0.10 -0.03
v8.5/optimized/regexp.as 48.4 48.3 48.8 48.8 0.83 0.97
v8.5/optimized/richards.as 3245 3241 3345 3343 3.08 3.15 +
v8.5/optimized/splay.as 4776 4738.3 4952 4845 3.69 2.25 +
v8.5/typed/crypto.as 2276 2273.7 2023 2020.3 -11.12 -11.14 --
v8.5/typed/deltablue.as 3236 3217.3 2766 2754 -14.52 -14.40 --
v8.5/typed/earley-boyer.as 937 926.7 942 940.3 0.53 1.47
v8.5/typed/raytrace.as 6827 6818.7 6840 6838 0.19 0.28 +
v8.5/typed/regexp.as 48.4 48.4 48.9 48.9 1.03 0.96 +
v8.5/typed/richards.as 3242 3237 3345 3344 3.18 3.31 +
v8.5/typed/splay.as 837 835 838 796 0.12 -4.67
v8.5/untyped/crypto.as 413 411.3 379 378.3 -8.23 -8.02 --
v8.5/untyped/deltablue.as 1568 1564 1664 1660 6.12 6.14 ++
v8.5/untyped/earley-boyer.as 935 930.7 954 932.3 2.03 0.18
v8.5/untyped/raytrace.as 2765 2753 2665 2650 -3.62 -3.74 -
v8.5/untyped/regexp.as 48.5 48.4 49 48.9 1.03 1.03 +
v8.5/untyped/richards.as 462 461.3 465 463.7 0.65 0.51 +
v8.5/untyped/splay.as 773 772.3 774 772.7 0.13 0.04
Attachment #465677 -
Flags: superreview?(edwsmith)
Attachment #465677 -
Flags: review?(stejohns)
Assignee | ||
Comment 9•15 years ago
|
||
Numbers are also different from prior run because VC2008 release build settings were not correct before.
Comment 10•15 years ago
|
||
Comment on attachment 465677 [details] [diff] [review]
updated patch from feedback
Seems unfortunate that we have to add another 8 instructions to the prolog/epilog of every call, but I don't have a better suggestion...
Attachment #465677 -
Flags: review?(stejohns) → review+
Reporter | ||
Comment 11•15 years ago
|
||
Comment on attachment 465677 [details] [diff] [review]
updated patch from feedback
(In reply to comment #10)
> Seems unfortunate that we have to add another 8 instructions to the
> prolog/epilog of every call, but I don't have a better suggestion...
They execute along each C++ -> JIT call path, but are not added to every JIT prolog/epilog. JIT->JIT calls, and JIT->C++ calls, are unchanged.
The biggest impact is probably from the inserted code in coerceEnter(), since that's inlined in a lot of places. We could suppress that inlining if desired.
one alternative that was considered is only doing the alignment in implementations of MethodInfo._invoker, but that means doing it in the many many jit'd invoker stubs as well. There's more of them than there are coerceEnter() call sites in the player.
Adding Gal for feedback on the nanojit part -- in particular, does TM already ensure ESP is aligned when calling into JIT code? IIRC, yes, and if so, no problem -- the increase of alignment at the point of asm_call() shouldn't matter. but... heads up since this can subtly shift the point of misalignments in C++ helper functions called directly by JIT code.
Attachment #465677 -
Flags: superreview?(edwsmith)
Attachment #465677 -
Flags: superreview+
Attachment #465677 -
Flags: feedback?(gal)
Assignee | ||
Updated•15 years ago
|
Assignee: nobody → wsharp
Assignee | ||
Comment 12•15 years ago
|
||
Slightly updated the last patch with a few pragmas added to critical helper functions that use misaligned doubles. We don't want to enable frame pointers on the entire codebase for performance reasons but these two functions move the needle in our performance suite. Follow up post will have the latest performance numbers run. (No way to macro'ize the pragmas or I would have done so).
Attachment #466628 -
Flags: superreview?(edwsmith)
Attachment #466628 -
Flags: review?(stejohns)
Assignee | ||
Comment 13•15 years ago
|
||
avm is newer, faster build. avm2 is original. Two moldyn test cases are now significantly faster.
avm:cyclone avm2:cyclone
test best avg best avg %dBst %dAvg
Metric: v8 custom v8 normalized metric (hardcoded in the test)
asmicro/alloc-1.as 35 35 36 36 2.86 2.86 +
asmicro/alloc-10.as 13 13 13 13 0 0
asmicro/alloc-11.as 12 12 13 13 8.33 8.33 ++
asmicro/alloc-12.as 7 7 7 7 0 0
asmicro/alloc-13.as 78 78 79 79 1.28 1.28 +
asmicro/alloc-14.as 69 69 70 69.7 1.45 0.97 +
asmicro/alloc-2.as 17 17 17 17 0 0
asmicro/alloc-3.as 14 14 14 14 0 0
asmicro/alloc-4.as 47 47 47 47 0 0
asmicro/alloc-5.as 34 34 33 33 -2.94 -2.94 -
asmicro/alloc-6.as 63 63 61 61 -3.17 -3.17 -
asmicro/alloc-7.as 32 32 33 33 3.12 3.12 +
asmicro/alloc-8.as 14 14 14 14 0 0
asmicro/alloc-9.as 14 14 14 14 0 0
asmicro/array-1.as 2320 2317 2319 2316.7 -0.04 -0.01
asmicro/array-2.as 820 815.3 906 903 10.49 10.75 ++
asmicro/array-pop-1.as 589 586 585 580.3 -0.68 -0.97
asmicro/array-push-1.as 305 304 315 314.3 3.28 3.40 +
asmicro/array-shift-1.as 143 141.3 143 142.7 0 0.94
asmicro/array-slice-1.as 19 19 20 20 5.26 5.26 ++
asmicro/array-sort-1.as 23 23 23 23 0 0
asmicro/array-sort-2.as 2 2 2 2 0 0
asmicro/array-sort-3.as 22 22 22 22 0 0
asmicro/array-sort-4.as 8 8 9 9 12.50 12.50 ++
asmicro/array-unshift-1.as 118 117.3 115 115 -2.54 -1.99 -
asmicro/closedvar-read-1.as 3693 3683 4467 4450 20.96 20.83 ++
asmicro/closedvar-write-1.as 3568 3557.3 2523 2522.7 -29.29 -29.09 --
asmicro/closedvar-write-2.as 3617 3607 2529 2526 -30.08 -29.97 --
asmicro/do-1.as 3739 3732.3 3745 3744 0.16 0.31
asmicro/for-1.as 3724 3718.3 3760 3753.7 0.97 0.95 +
asmicro/for-2.as 2588 2584 1564 1563.7 -39.57 -39.49 --
asmicro/for-3.as 2693 2690 1587 1586.3 -41.07 -41.03 --
asmicro/for-in-1.as 474 473.3 475 452 0.21 -4.51
asmicro/for-in-2.as 223 222.7 221 221 -0.90 -0.75 -
asmicro/funcall-1.as 347 344.3 391 391 12.68 13.55 ++
asmicro/funcall-2.as 257 253 286 285.7 11.28 12.91 ++
asmicro/funcall-3.as 304 302 339 338.7 11.51 12.14 ++
asmicro/funcall-4.as 98 97.7 101 100.7 3.06 3.07 +
asmicro/globalvar-read-1.as 3840 3778.7 4562 4541 18.80 20.17 ++
asmicro/globalvar-write-1.as 3772 3763.7 2335 2330 -38.10 -38.09 --
asmicro/isNaN-1.as 393 391.3 300 299.3 -23.66 -23.51 --
smicro/lookup-array-fetch-1.as 684 656.3 691 664.7 1.02 1.27
asmicro/lookup-array-in-1.as 1538 1480.3 1467 1424.3 -4.62 -3.78
cro/lookup-negindex-array-1.as 500 496.7 498 495.3 -0.40 -0.27
cro/lookup-negindex-array-2.as 413 395.3 412 411.3 -0.24 4.05
ro/lookup-negindex-object-1.as 511 508.7 511 508.3 0 -0.07
ro/lookup-negindex-object-2.as 464 456.3 471 464 1.51 1.68
micro/lookup-object-fetch-1.as 829 626.7 844 640.3 1.81 2.18
asmicro/lookup-object-in-1.as 1531 1520.3 1536 1532.7 0.33 0.81
asmicro/number-toString-1.as 4 4 4 4 0 0
asmicro/number-toString-2.as 62 61.7 62 61.7 0 0
asmicro/oop-1.as 3 3 3 3 0 0
asmicro/parseFloat-1.as 69 68.3 62 62 -10.14 -9.27 --
asmicro/parseInt-1.as 155 155 147 147 -5.16 -5.16 --
asmicro/regex-exec-1.as 47 47 46 45.3 -2.13 -3.55 -
asmicro/regex-exec-2.as 54 54 54 53.7 0 -0.62
asmicro/regex-exec-3.as 92 91.3 95 94 3.26 2.92 +
asmicro/regex-exec-4.as 214 212.7 216 214.3 0.93 0.78
asmicro/restarg-1.as 730 726.7 736 725 0.82 -0.23
asmicro/restarg-2.as 447 444 456 455.3 2.01 2.55 +
asmicro/restarg-3.as 40 40 41 40.3 2.50 0.83 +
asmicro/restarg-4.as 26 25.7 26 26 0 1.30
asmicro/string-casechange-1.as 28 28 28 28 0 0
asmicro/string-casechange-2.as 28 28 28 28 0 0
asmicro/string-charAt-1.as 341 340.3 270 269.3 -20.82 -20.86 --
asmicro/string-charAt-2.as 60 60 60 59.7 0 -0.56
asmicro/string-charCodeAt-1.as 342 340.3 273 272.3 -20.18 -19.98 --
asmicro/string-charCodeAt-2.as 280 279.3 264 263.3 -5.71 -5.73 --
micro/string-fromCharCode-1.as 348 347 350 348.3 0.57 0.38
micro/string-fromCharCode-2.as 58 58 57 57 -1.72 -1.72 -
asmicro/string-indexOf-1.as 172 171.3 141 140.7 -18.02 -17.90 --
asmicro/string-indexOf-2.as 167 166.3 167 167 0 0.40
asmicro/string-indexOf-3.as 96 95.7 97 96.3 1.04 0.70 +
smicro/string-lastIndexOf-1.as 605 598 619 616.3 2.31 3.07 +
smicro/string-lastIndexOf-2.as 95 94.3 95 95 0 0.71
smicro/string-lastIndexOf-3.as 439 418.7 450 449.3 2.51 7.32
asmicro/string-slice-1.as 116 115.3 125 125 7.76 8.38 ++
asmicro/string-split-1.as 7 7 7 7 0 0
asmicro/string-split-2.as 6 6 6 6 0 0
asmicro/string-substring-1.as 139 138.7 140 139.3 0.72 0.48 +
asmicro/switch-1.as 748 746.3 816 813.3 9.09 8.98 ++
asmicro/switch-2.as 50 50 51 51 2 2 +
asmicro/switch-3.as 67 66.3 69 69 2.99 4.02 +
asmicro/try-1.as 230 228 241 240.7 4.78 5.56 +
asmicro/try-2.as 14 13.7 14 13.7 0 0
asmicro/try-3.as 52 52 55 54.3 5.77 4.49 ++
asmicro/vector-push-1.as 46 46 52 51.7 13.04 12.32 ++
asmicro/while-1.as 3726 3722 3741 3736 0.40 0.38 +
Metric: time
jsbench/Crypt.as 3476 3505.3 4129 4144 -18.79 -18.22 --
jsbench/Euler.as 8957 9036.3 9493 9524.7 -5.98 -5.40 --
jsbench/FFT.as 8600 8719.3 9168 9196.7 -6.60 -5.47 --
jsbench/HeapSort.as 2903 2969.3 3033 3057.3 -4.48 -2.96 -
jsbench/LUFact.as 10130 10192 10208 10239 -0.77 -0.46 -
jsbench/Moldyn.as 10623 10674 11911 11943 -12.12 -11.89 --
jsbench/RayTracer.as 8171 8242 8784 8811.3 -7.50 -6.91 --
jsbench/Series.as 11506 11511 11573 11590.7 -0.58 -0.69 -
jsbench/SOR.as 38132 38365.3 44132 44141.3 -15.73 -15.06 --
jsbench/SparseMatmult.as 13484 13538.7 15333 15354.3 -13.71 -13.41 --
jsbench/typed/Crypt.as 736 738 929 929.7 -26.22 -25.97 --
jsbench/typed/Euler.as 9929 9949 10518 10521 -5.93 -5.75 --
jsbench/typed/FFT.as 4793 4802 5254 5259 -9.62 -9.52 --
jsbench/typed/HeapSort.as 1422 1427 1466 1466.3 -3.09 -2.76 -
jsbench/typed/LUFact.as 8738 8757 10450 10453.3 -19.59 -19.37 --
jsbench/typed/Moldyn.as 4316 4320.7 4456 4458.3 -3.24 -3.19 -
jsbench/typed/RayTracer.as 1442 1450.7 1378 1378 4.44 5.01 +
jsbench/typed/Series.as 8804 8806.3 9927 9933 -12.76 -12.79 --
jsbench/typed/SOR.as 25373 25410.7 29825 29844 -17.55 -17.45 --
jsbench/typed/SparseMatmult.as 1957 1962.3 2629 2633.3 -34.34 -34.19 --
Metric: v8 custom v8 normalized metric (hardcoded in the test)
jsmicro/alloc-1.as 35 35 34 34 -2.86 -2.86 -
jsmicro/alloc-10.as 14 13.7 13 13 -7.14 -4.88 --
jsmicro/alloc-11.as 13 13 13 13 0 0
jsmicro/alloc-12.as 8 8 8 8 0 0
jsmicro/alloc-13.as 66 66 63 63 -4.55 -4.55 -
jsmicro/alloc-14.as 60 60 57 57 -5 -5 -
jsmicro/alloc-2.as 18 18 18 18 0 0
jsmicro/alloc-3.as 15 15 15 15 0 0
jsmicro/alloc-4.as 44 44 45 43.7 2.27 -0.76 +
jsmicro/alloc-5.as 33 33 34 33.3 3.03 1.01 +
jsmicro/alloc-6.as 54 54 50 50 -7.41 -7.41 --
jsmicro/alloc-7.as 31 31 30 30 -3.23 -3.23 -
jsmicro/alloc-8.as 14 14 15 15 7.14 7.14 ++
jsmicro/alloc-9.as 14 14 16 15.3 14.29 9.52 ++
jsmicro/array-1.as 374 370 271 269.7 -27.54 -27.12 --
jsmicro/array-2.as 274 273.3 222 221 -18.98 -19.15 --
jsmicro/array-pop-1.as 188 186.3 167 166 -11.17 -10.91 --
jsmicro/array-push-1.as 201 199.7 228 227 13.43 13.69 ++
jsmicro/array-shift-1.as 92 91.3 89 89 -3.26 -2.55 -
jsmicro/array-slice-1.as 19 19 19 19 0 0
jsmicro/array-sort-1.as 24 24 24 24 0 0
jsmicro/array-sort-2.as 4 4 4 4 0 0
jsmicro/array-sort-3.as 23 22.7 23 23 0 1.47
jsmicro/array-sort-4.as 10 10 12 11.3 20 13.33 ++
jsmicro/array-unshift-1.as 98 97.3 103 102 5.10 4.79 ++
jsmicro/closedvar-read-1.as 538 536.3 328 328 -39.03 -38.84 --
jsmicro/closedvar-write-1.as 409 407.3 318 318 -22.25 -21.93 --
jsmicro/closedvar-write-2.as 409 408 318 318 -22.25 -22.06 --
jsmicro/do-1.as 523 521.3 393 392.3 -24.86 -24.74 --
jsmicro/for-1.as 532 530.7 369 369 -30.64 -30.46 --
jsmicro/for-2.as 180 179.7 159 159 -11.67 -11.50 --
jsmicro/for-3.as 69 69 65 64 -5.80 -7.25 --
jsmicro/for-in-1.as 278 276.3 224 223 -19.42 -19.30 --
jsmicro/for-in-2.as 175 174.3 147 146 -16 -16.25 --
jsmicro/funcall-1.as 202 201.7 180 180 -10.89 -10.74 --
jsmicro/funcall-2.as 195 194.3 176 176 -9.74 -9.43 --
jsmicro/funcall-3.as 189 188 171 171 -9.52 -9.04 --
jsmicro/funcall-4.as 1323 1320.7 1253 1252.7 -5.29 -5.15 --
jsmicro/globalvar-read-1.as 535 532.7 328 328 -38.69 -38.42 --
jsmicro/globalvar-write-1.as 407 404.7 319 318.3 -21.62 -21.33 --
jsmicro/isNaN-1.as 220 219.7 178 177.7 -19.09 -19.12 --
smicro/lookup-array-fetch-1.as 612 611.3 625 624 2.12 2.07 +
jsmicro/lookup-array-in-1.as 999 997.3 993 992.3 -0.60 -0.50 -
micro/lookup-object-fetch-1.as 704 701.7 717 703 1.85 0.19
jsmicro/lookup-object-in-1.as 872 859 888 876 1.83 1.98
jsmicro/number-toString-1.as 5 5 5 5 0 0
jsmicro/number-toString-2.as 54 53.7 51 51 -5.56 -4.97 --
jsmicro/oop-1.as 4 4 4 4 0 0
jsmicro/parseFloat-1.as 41 41 36 36 -12.20 -12.20 --
jsmicro/parseInt-1.as 114 112.3 90 89 -21.05 -20.77 --
jsmicro/regex-exec-1.as 42 41.7 41 41 -2.38 -1.60 -
jsmicro/regex-exec-2.as 50 49.7 50 49.7 0 0
jsmicro/regex-exec-3.as 85 85 85 85 0 0
jsmicro/regex-exec-4.as 179 178.7 179 179 0 0.19
jsmicro/string-casechange-1.as 26 25.3 25 25 -3.85 -1.32 -
jsmicro/string-casechange-2.as 24 24 25 25 4.17 4.17 +
jsmicro/string-charAt-1.as 146 145.3 115 115 -21.23 -20.87 --
jsmicro/string-charAt-2.as 46 46 47 47 2.17 2.17 +
jsmicro/string-charCodeAt-1.as 140 139.7 108 108 -22.86 -22.67 --
jsmicro/string-charCodeAt-2.as 140 139.7 116 116 -17.14 -16.95 --
micro/string-fromCharCode-1.as 211 209.7 191 191 -9.48 -8.90 --
micro/string-fromCharCode-2.as 55 54.3 53 53 -3.64 -2.45 -
micro/string-fromCharCode-3.as 68 68 67 67 -1.47 -1.47 -
micro/string-fromCharCode-4.as 71 71 74 74 4.23 4.23 +
jsmicro/string-indexOf-1.as 131 130.7 102 102 -22.14 -21.94 --
jsmicro/string-indexOf-2.as 84 83.3 72 72 -14.29 -13.60 --
jsmicro/string-indexOf-3.as 62 62 59 59 -4.84 -4.84 -
smicro/string-lastIndexOf-1.as 123 121.7 93 93 -24.39 -23.56 --
smicro/string-lastIndexOf-2.as 60 59.7 56 56 -6.67 -6.15 --
smicro/string-lastIndexOf-3.as 122 120.7 102 101.3 -16.39 -16.02 --
jsmicro/string-slice-1.as 68 68 62 60.7 -8.82 -10.78 --
jsmicro/string-split-1.as 8 8 8 8 0 0
jsmicro/string-split-2.as 7 7 7 7 0 0
jsmicro/string-substring-1.as 67 67 74 73.3 10.45 9.45 ++
jsmicro/switch-1.as 128 127 110 110 -14.06 -13.39 --
jsmicro/switch-2.as 48 47.7 47 47 -2.08 -1.40 -
jsmicro/switch-3.as 61 61 59 59 -3.28 -3.28 -
jsmicro/try-1.as 139 138.3 147 145.7 5.76 5.30 ++
jsmicro/try-2.as 17 15.7 15 15 -11.76 -4.26 -
jsmicro/try-3.as 40 40 42 41 5 2.50 +
jsmicro/while-1.as 530 528 371 369.7 -30 -29.99 --
Metric: time
e/describetype/desctypeperf.as 599 602.3 587 588 2.00 2.38 +
anguage/e4x/addingToXMLList.as 18 18.7 18 18.7 0 0
ge/e4x/appendChildAndString.as 51 51 51 51.7 0 -1.31
concatenatingStringsFromE4X.as 6 6.7 7 7 -16.67 -5.00 --
x/simpleStringConcatenation.as 1 1.7 1 1.7 0 0
/e4x/usingAppendChildAndE4X.as 38 38.7 36 36.7 5.26 5.17 +
nguage/string/append_concat.as 62 64.7 62 62.7 0 3.09
ge/string/append_equal_plus.as 48 49.3 49 52 -2.08 -5.41
ge/string/append_plus_equal.as 46 48 49 49.7 -6.52 -3.47 -
language/string/charAt.as 267 268.7 330 335.7 -23.60 -24.94 --
language/string/charCodeAt.as 268 269.7 352 354.7 -31.34 -31.52 --
language/string/indexOf.as 219 219.3 219 219.3 0 0
language/string/lastIndexOf.as 225 227.7 227 229.7 -0.89 -0.88
language/string/replace.as 421 424.7 421 421.7 0 0.71
language/string/replace2.as 1484 1486.7 1475 1476.7 0.61 0.67 +
language/string/search.as 18 18.7 16 17 11.11 8.93 +
language/string/slice.as 293 294 313 313.7 -6.83 -6.69 --
language/string/split.as 477 479.3 475 477.3 0.42 0.42
ring/static_ascii_array_100.as 853 858.3 860 861.3 -0.82 -0.35 -
tring/static_ascii_array_50.as 833 835.3 840 841 -0.84 -0.68 -
ing/static_latin1_array_100.as 1706 1709 1711 1734.7 -0.29 -1.50
ring/static_latin1_array_50.as 850 855 852 853.3 -0.24 0.19
language/string/substr.as 223 224.3 234 234.7 -4.93 -4.61 -
language/string/substring.as 266 267.7 197 197.3 25.94 26.28 ++
/string/typed/append_concat.as 51 53 50 51 1.96 3.77
ing/typed/append_equal_plus.as 40 41 40 40.7 0 0.81
ing/typed/append_plus_equal.as 39 40.7 39 40 0 1.64
anguage/string/typed/charAt.as 48 50 48 48.3 0 3.33
age/string/typed/charCodeAt.as 44 44 43 43 2.27 2.27 +
nguage/string/typed/indexOf.as 218 218.7 219 219.7 -0.46 -0.46 -
ge/string/typed/lastIndexOf.as 227 228.7 225 230.3 0.88 -0.73
nguage/string/typed/replace.as 418 423.3 420 422 -0.48 0.31
guage/string/typed/replace2.as 1503 1504.7 1493 1493 0.67 0.78 +
anguage/string/typed/search.as 16 17 16 16.3 0 3.92
language/string/typed/slice.as 151 152.3 150 150 0.66 1.53
language/string/typed/split.as 463 465 462 462.7 0.22 0.50
anguage/string/typed/substr.as 114 114.7 113 113 0.88 1.45 +
uage/string/typed/substring.as 105 107.7 115 115.3 -9.52 -7.12 --
misc/boids.as 1936 1945 1932 1932 0.21 0.67
misc/boidshack.as 481 489.3 479 480 0.42 1.91
misc/gameoflife.as 2500 2503.3 2586 2590.7 -3.44 -3.49 -
misc/primes.as 3957 3959.3 3987 3988.3 -0.76 -0.73 -
mmgc/gcbench.as 2975 2977.7 2854 2861 4.07 3.92 +
mmgc/ofib-rc.as 329 330.7 332 332.7 -0.91 -0.60 -
mmgc/ofib.as 1364 1375.3 1377 1397.7 -0.95 -1.62
mmgc/sfib.as 410 411 409 410.3 0.24 0.16
scimark/FFT.as 2757 2758.7 2799 2804.3 -1.52 -1.66 -
scimark/LU.as 2822 2824.3 3330 3334.7 -18.00 -18.07 --
scimark/MonteCarlo.as 2699 2702.3 2797 2797.7 -3.63 -3.53 -
scimark/SOR.as 2800 2808.7 3762 3763.7 -34.36 -34.00 --
scimark/SparseCompRow.as 73 75.7 100 100.3 -36.99 -32.60 --
nspider/access-binary-trees.as 19 21.3 21 21.3 -10.53 0
sunspider/access-fannkuch.as 49 51 55 55 -12.24 -7.84 --
sunspider/access-nbody.as 74 75.3 77 77 -4.05 -2.21 -
sunspider/access-nsieve.as 23 25.3 25 26 -8.70 -2.63
er/bitops-3bit-bits-in-byte.as 1 1 1 1 0 0
nspider/bitops-bits-in-byte.as 5 6.7 7 7.7 -40 -15 -
unspider/bitops-bitwise-and.as 142 144.7 153 154 -7.75 -6.45 --
unspider/bitops-nsieve-bits.as 19 21.3 21 21 -10.53 1.56
pider/controlflow-recursive.as 1 1.3 1 1 0 25.00
sunspider/crypto-aes.as 16 19.7 18 19 -12.50 3.39
sunspider/crypto-md5.as 2 3.3 2 2.3 0 30
sunspider/crypto-sha1.as 2 4.3 5 5 -150 -15.38 --
sunspider/date-format-tofte.as 59 75 56 56.7 5.08 24.44
sunspider/math-cordic.as 46 47.7 49 50.3 -6.52 -5.59
sunspider/math-partial-sums.as 176 180 174 175.7 1.14 2.41
unspider/math-spectral-norm.as 19 20.7 24 24.7 -26.32 -19.35 --
sunspider/s3d-cube.as 61 63 72 72 -18.03 -14.29 --
sunspider/s3d-morph.as 25 27.3 32 32.3 -28.00 -18.29 --
sunspider/s3d-raytrace.as 71 73.3 75 75.7 -5.63 -3.18 -
sunspider/string-fasta.as 63 65.7 63 64 0 2.54
unspider/string-unpack-code.as 221 223.7 220 220.7 0.45 1.34
pider/string-validate-input.as 28 29.3 29 29.3 -3.57 0
der/as3/access-binary-trees.as 1 1 1 1 0 0
nspider/as3/access-fannkuch.as 24 26.3 25 26.3 -4.17 0
sunspider/as3/access-nbody.as 1 1 1 1 0 0
sunspider/as3/access-nsieve.as 14 15.7 14 15 0 4.26
s3/bitops-3bit-bits-in-byte.as 1 1 0 0 100 100 ++
der/as3/bitops-bits-in-byte.as 1 1 1 1 0 0
ider/as3/bitops-bitwise-and.as 0 0.3 0 0 0 100
ider/as3/bitops-nsieve-bits.as 9 10.3 9 9.7 0 6.45
r/as3/controlflow-recursive.as 0 0.7 1 1 0 -50.00
sunspider/as3/crypto-aes.as 9 10.7 9 9.7 0 9.38
sunspider/as3/crypto-md5.as 9 11.3 9 9.7 0 14.71
sunspider/as3/crypto-sha1.as 2 3.3 2 2.3 0 30
pider/as3/date-format-tofte.as 49 52 49 49.7 0 4.49
sunspider/as3/math-cordic.as 7 8.7 24 25 -242.86 -188.46 --
pider/as3/math-partial-sums.as 48 50 46 46 4.17 8
ider/as3/math-spectral-norm.as 0 0.7 1 1 0 -50.00
sunspider/as3/s3d-cube.as 1 2.3 4 4.3 -300 -85.71 --
sunspider/as3/s3d-morph.as 13 16.3 8 9.7 38.46 40.82 +
sunspider/as3/s3d-raytrace.as 44 45.7 39 40.7 11.36 10.95 +
sunspider/as3/string-fasta.as 20 22.7 23 24 -15 -5.88 -
ider/as3/string-unpack-code.as 240 246.3 247 248 -2.92 -0.68 -
r/as3/string-validate-input.as 20 21.7 20 21.3 0 1.54
r/as3vector/access-fannkuch.as 7 8 7 7.7 0 4.17
ider/as3vector/access-nbody.as 1 1 0 0.7 100 33.33 +
der/as3vector/access-nsieve.as 1 1 1 1 0 0
s3vector/bitops-nsieve-bits.as 1 1 0 0.7 100 33.33 +
pider/as3vector/math-cordic.as 1 1 13 13.3 -1200 -1233 --
s3vector/math-spectral-norm.as 1 1.3 1 1 0 25.00
unspider/as3vector/s3d-cube.as 4 6 4 4.7 0 22.22
nspider/as3vector/s3d-morph.as 8 9.7 13 14.3 -62.50 -48.28 -
ider/as3vector/string-fasta.as 24 25 26 26.3 -8.33 -5.33 -
ector/string-validate-input.as 21 22.7 22 22.3 -4.76 1.47
Metric: v8 custom v8 normalized metric (hardcoded in the test)
v8/crypto.as 419 419 373 372.3 -10.98 -11.14 --
v8/deltablue.as 1531 1529.7 1638 1628.7 6.99 6.47 ++
v8/earley-boyer.as 974 961.3 981 970.3 0.72 0.94
v8/raytrace.as 2665 2653 2598 2594 -2.51 -2.22 -
v8/richards.as 1010 1002.7 1059 1049.7 4.85 4.69 +
v8/typed/crypto.as 427 426 344 344 -19.44 -19.25 --
v8/typed/deltablue.as 2674 2657.7 2631 2629 -1.61 -1.08 -
v8/typed/earley-boyer.as 973 969.7 974 972 0.10 0.24
v8/typed/raytrace.as 6014 5952.3 5672 5639 -5.69 -5.26 --
v8/typed/richards.as 1978 1976 1957 1953.7 -1.06 -1.13 -
v8.5/js/crypto.as 382 374 313 310.7 -18.06 -16.93 --
v8.5/js/deltablue.as 326 323.7 334 333 2.45 2.88 +
v8.5/js/earley-boyer.as 961 956.3 975 967.3 1.46 1.15
v8.5/js/raytrace.as 634 632.3 625 621 -1.42 -1.79 -
v8.5/js/regexp.as 49.4 49.3 49.4 49.2 0 -0.14
v8.5/js/richards.as 237 236.3 255 254.3 7.59 7.62 ++
v8.5/js/splay.as 656 622 589 583.7 -10.21 -6.16 --
v8.5/optimized/crypto.as 4711 4703.7 4818 4812.3 2.27 2.31 +
v8.5/optimized/deltablue.as 3050 3027 2590 2586 -15.08 -14.57 --
v8.5/optimized/earley-boyer.as 964 957.3 969 960.7 0.52 0.35
v8.5/optimized/raytrace.as 7005 6991.3 6939 6934.7 -0.94 -0.81 -
v8.5/optimized/regexp.as 49.4 49.2 49 49 -0.81 -0.47
v8.5/optimized/richards.as 3307 3301.7 3407 3406 3.02 3.16 +
v8.5/optimized/splay.as 4756 4679.3 5011 4912 5.36 4.97 +
v8.5/typed/crypto.as 2325 2314.3 2069 2062 -11.01 -10.90 --
v8.5/typed/deltablue.as 3329 3317 2844 2837.7 -14.57 -14.45 --
v8.5/typed/earley-boyer.as 965 955.3 964 962.7 -0.10 0.77
v8.5/typed/raytrace.as 7018 6988.7 6947 6944.3 -1.01 -0.63 -
v8.5/typed/regexp.as 49.3 49.3 49.1 49 -0.41 -0.54
v8.5/typed/richards.as 3310 3300.3 3407 3403.7 2.93 3.13 +
v8.5/typed/splay.as 802 801.3 796 739 -0.75 -7.78
v8.5/untyped/crypto.as 421 420 380 379.3 -9.74 -9.68 --
v8.5/untyped/deltablue.as 1590 1582.7 1723 1717.3 8.36 8.51 ++
v8.5/untyped/earley-boyer.as 973 969.7 976 959.3 0.31 -1.07
v8.5/untyped/raytrace.as 2835 2814.3 2724 2721.7 -3.92 -3.29 -
v8.5/untyped/regexp.as 49.5 49.5 49.4 49.3 -0.20 -0.34
v8.5/untyped/richards.as 475 471.7 477 472.7 0.42 0.21
v8.5/untyped/splay.as 783 781.3 768 766 -1.92 -1.96 -
wsharp@wsharp-PC ~/tamarin-redux/test/performance
$
Reporter | ||
Comment 14•15 years ago
|
||
Comment on attachment 466628 [details] [diff] [review]
updated patch with some frame pointer fixes
any obvious alignment problems in these:
language/string/substring.as 266 267.7 197 197.3 25.94 26.28
asmicro/switch-1.as 748 746.3 816 813.3 9.09 8.98
asmicro/globalvar-read-1.as 3840 3778.7 4562 4541 18.80 20.17
asmicro/closedvar-read-1.as 3693 3683 4467 4450 20.96 20.83
asmicro/array-2.as 820 815.3 906 903 10.49 10.75
Reporter | ||
Comment 15•15 years ago
|
||
Comment on attachment 466628 [details] [diff] [review]
updated patch with some frame pointer fixes
Nothing obviously wrong, and these are nice wins on windows.
The hard part will be maintaining these pragmas as other modifications are made. they are the kind of thing that just lingers and becomes folklore. These injected pragmas should reference this bug, and/or reference a writeup that describes the problem, how to detect it with vtune, and how we found the places to insert the pragmas.
Attachment #466628 -
Flags: superreview?(edwsmith) → superreview+
Assignee | ||
Comment 16•15 years ago
|
||
substring.as : AS3_substring uses unaligned doubles and calls toInt, ClampB.
The other four show nothing obvious. The globalvar_read-1.as test case is a tight loop purely in JITed code.
for ( var i:uint=0; i < 100000 ; i++ )
v = global_var
Something completely random about the memory layout causes the difference in performance? All we are doing is aligning stack variables (none of them doubles) slightly different.
(This gets back to our offline discussion of running these tests on lots of different CPUs).
Reporter | ||
Updated•15 years ago
|
Severity: enhancement → major
Priority: -- → P3
Target Milestone: Future → flash10.2
Assignee | ||
Comment 17•14 years ago
|
||
TR side pushed: http://hg.mozilla.org/tamarin-redux/rev/0f6eda981843
Updated•14 years ago
|
Attachment #465677 -
Flags: feedback?(gal) → feedback+
Comment 18•14 years ago
|
||
We should use this in TM as well.
Comment 19•14 years ago
|
||
Comment on attachment 466628 [details] [diff] [review]
updated patch with some frame pointer fixes
Werner, this review seems to have slipped thru the cracks on my part, sorry about that -- is a review still needed?
Assignee | ||
Updated•14 years ago
|
Attachment #466628 -
Flags: review?(stejohns)
Assignee | ||
Comment 20•14 years ago
|
||
Add forgotten NJ part to NC
http://hg.mozilla.org/projects/nanojit-central/rev/15146f891b3a
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
Comment 21•14 years ago
|
||
Whiteboard: PACMAN → PACMAN, fixed-in-tamarin, fixed-in-nanojit
Updated•14 years ago
|
Flags: flashplayer-bug+
You need to log in
before you can comment on or make changes to this bug.
Description
•