mstarzinger@chromium.org
bf3d436b57
Fix typed lowering of JSUnaryNot to work with graph reducer.
...
R=titzer@chromium.org
TEST=cctest/test-js-typed-lowering/UnaryNot[Effects]
Review URL: https://codereview.chromium.org/523633002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23561 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-09-01 12:17:43 +00:00
jarin@chromium.org
a668cd6fc8
Context deoptimization and removal of the deoptimization block in Turbofan
...
This adds context deoptimization to Turbofan and Crankshaft (also submitted separately as https://codereview.chromium.org/515723004/ ).
The second patchset removes the deoptimization/continuation block from calls.
BUG=
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/522873002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23547 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-09-01 09:31:14 +00:00
mstarzinger@chromium.org
e019dc7414
Fix Node::ReplaceUses to handle unused nodes.
...
R=bmeurer@chromium.org
TEST=cctest/test-node/NodeUseIteratorReplaceNoUses
Review URL: https://codereview.chromium.org/521643002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23519 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-29 12:14:52 +00:00
rodolph.perfetta@arm.com
fb7e3c8f95
ARM64: re-enable turbofan tests.
...
The tests were already passing.
BUG=
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/513253002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23514 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-29 09:49:50 +00:00
sigurds@chromium.org
9091e87d8f
Add more inlining unit tests.
...
- Scheduler can inline a function with a loop.
- Inlining strict into non-strict works correctly.
- Inlining non-strict into strict works correctly.
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/515103002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23511 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-29 08:58:51 +00:00
bmeurer@chromium.org
804ef93d99
Fix windows build.
...
TBR=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/524533002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23508 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-29 05:45:16 +00:00
bmeurer@chromium.org
ffbe019e22
Fix cctest/test-run-properties/TypedArrayLoad.
...
Note: The test failure was unrelated to the fact that it run on actual
ARM hardware, but it was failing because the test relied on undefined
and implementation defined behaviour of the C++ compiler.
TBR=mstarzinger@chromium.org
TEST=cctest
Review URL: https://codereview.chromium.org/517943002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23507 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-29 05:37:55 +00:00
mstarzinger@chromium.org
d0ea36cb5b
Move constructors for [Element/Field]Access into AccessBuilder.
...
R=titzer@chromium.org
TEST=cctest/test-simplified-lowering
Review URL: https://codereview.chromium.org/516943002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23501 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 17:53:24 +00:00
mstarzinger@chromium.org
7c6759e982
Fix test failures after r23492.
...
R=vogelheim@chromium.org
TEST=cctest/test-run-properties/TypedArrayLoad
Review URL: https://codereview.chromium.org/517673002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23498 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 17:28:57 +00:00
mstarzinger@chromium.org
cc8cec354c
Preliminary lowering of typed array loads in TF.
...
R=titzer@chromium.org
TEST=cctest/test-run-properties/TypedArrayLoad
Review URL: https://codereview.chromium.org/516853002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23492 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 14:35:11 +00:00
titzer@chromium.org
d6831dbd4b
Use TruncateFloat64ToInt32 instead of ChangeFloat64ToInt32 in lowering of simplified operators NumberToInt32/NumberToUint32.
...
R=mstarzinger@chromium.org
BUG=
Review URL: https://codereview.chromium.org/509653003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23491 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 13:31:55 +00:00
titzer@chromium.org
496697df4e
Add MachineSignature, which is an encapsulation of the machine types for parameters and return values in a graph.
...
This utility will be used to simplify Linkage and fix representation inference
to work with graphs where parameters and return values are something other
than tagged. It will also make testing representation inference a lot
easier, since we can then exactly nail down the machine types of parameters
and returns.
This CL also adds c-signature.h, which demonstrates how to convert C function
signatures into MachineSignatures. The CSignatures will be used in tests to
make it easier and simpler to codegen tests.
R=jarin@chromium.org
BUG=
Review URL: https://codereview.chromium.org/515173002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23490 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 13:17:38 +00:00
sigurds@chromium.org
7bdba61b02
Simplify inlining now that the scheduler is smart(er).
...
* Only control adjustment is to move everything from the inlinee's
start block to the block the call was in.
* Add a unit test to ensure that the scheduler actually picks the
right order when placing the code.
R=mstarzinger@chromium.org , titzer@chromium.org
Review URL: https://codereview.chromium.org/508953002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23489 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 12:18:25 +00:00
sigurds@chromium.org
6afb739efe
Fix build.
...
GCC needs definitions for constant members (clang doesn't).
TBR=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/511133002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23480 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 08:47:11 +00:00
sigurds@chromium.org
e7817a9e54
Remove dependency from generic lowering on compilation info for determining strictness and builtins.
...
This makes the graphs compositional for inlining (i.e. we can now inline a strict function into a non-strict function, or vice versa).
1) Store strict mode as parameter in StoreNamed/StoreProperty.
R=mstarzinger@chromium.org , titzer@chromium.org
Review URL: https://codereview.chromium.org/473263004
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23479 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-28 08:39:24 +00:00
titzer@chromium.org
f875dd66c6
Disable running some change tests on unsupported backends.
...
TBR=vogelheim@chromium.org
BUG=
Review URL: https://codereview.chromium.org/515583002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23468 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-27 16:17:16 +00:00
jarin@chromium.org
8eb5c1524d
Unit test of instruction selection for calls with deoptimization.
...
BUG=
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/505133002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23467 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-27 15:56:11 +00:00
titzer@chromium.org
fa34ea60c4
Disable some changes tests on ARM64. Also, fix the changes lowering to not use the more expensive TruncateFloat64ToInt32, but to use ChangeFloat64ToInt32/ChangeFloat64ToUint32, as it was before.
...
R=mstarzinger@chromium.org
BUG=
Review URL: https://codereview.chromium.org/512753002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23460 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-27 13:49:30 +00:00
titzer@chromium.org
5bf4c830dd
Remove old changes lowering code and convert test to use new changes lowering code.
...
R=bmeurer@chromium.org
BUG=
Review URL: https://codereview.chromium.org/515433003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23449 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-27 11:14:10 +00:00
titzer@chromium.org
6bbf6c5cb0
Schedule floating control.
...
This CL makes several changes to the scheduling algorithm to handle control
flow that is not connected to End. Such control nodes constitute "floating
control islands" that must be linearized by the schedule. This is done
by considering such nodes to be schedulable, and then editing the control
dependencies after a first pass of scheduling. Then a subsequent pass of
scheduling will place all nodes correctly into the fully connected graph.
R=mstarzinger@chromium.org , rossberg@chromium.org
BUG=
Review URL: https://codereview.chromium.org/499363002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23411 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-26 15:25:07 +00:00
mstarzinger@chromium.org
ecca77ce76
Move context specialization flag into CompilationInfo.
...
R=titzer@chromium.org
Review URL: https://codereview.chromium.org/507603003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23410 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-26 15:17:57 +00:00
bmeurer@chromium.org
90c8932596
Replace our homegrown ARRAY_SIZE() with Chrome's arraysize().
...
Our own ARRAY_SIZE() was pretty bad at error checking. If you use
arrasize() in a wrong way, the compiler will issue an error instead of
silently doing the wrong thing. The previous ARRAY_SIZE() macro is still
available as ARRAYSIZE_UNSAFE() similar to Chrome.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/501323002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23389 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-26 09:19:24 +00:00
bmeurer@chromium.org
3e188ace5c
[turbofan] Add backend support for load/store float32 values.
...
This is the bare minimum required to support typed arrays. Support for
working with float32 values will be added based on this.
TEST=compiler-unittests,cctest
R=svenpanne@chromium.org
Review URL: https://codereview.chromium.org/500343002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23386 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-26 08:29:12 +00:00
mstarzinger@chromium.org
0bf838456f
Fix continue statements within for-in loops.
...
R=titzer@chromium.org
TEST=cctest/test-run-jsbranches/ForInContinueStatement
BUG=v8:3522
LOG=N
Review URL: https://codereview.chromium.org/502043002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23369 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-25 16:32:35 +00:00
mstarzinger@chromium.org
4cf2cfad0a
Fix borked tests after r23354.
...
TBR=vogelheim@chromium.org
TEST=cctest/test-run-inlining
Review URL: https://codereview.chromium.org/505753002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23356 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-25 13:38:10 +00:00
bmeurer@chromium.org
66dd869980
[turbofan] Add backend support for signed loads.
...
Also rename the arch opcodes to match their native counterparts.
TEST=compiler-unittests,cctest
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/505713002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23345 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-25 10:35:38 +00:00
jarin@chromium.org
d8295050d2
Fix deoptimization address patching in Turbofan to use safepoints.
...
Since the deopt patch address needs to be available during GC to
resolve safepoints, we need to move it to the code object (instead of
the deoptimization input data) - accessing a separate fixed array
is not safe during GC. This CL adds a deoptimization_pc field to
each safepoint. The fields points to the deoptimization block.
The CL also fixes wrong register allocator constraints for
frame states on calls. These should always live on the stack
because registers are not preserved during a call.
BUG=
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/504493002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23334 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-25 07:02:19 +00:00
yangguo@chromium.org
3a1c55590f
Correctly forward-declare inline function headers in generic-node.h
...
R=bmeurer@chromium.org , jarin@chromium.org
Review URL: https://codereview.chromium.org/488363003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23331 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-25 06:57:13 +00:00
sigurds@chromium.org
dd3c097123
Reland "Load global object and builtins from activation."
...
Reland fixes:
Don't set string flags (doing so leaks memory).
Load closure from activation for building literals.
R=titzer@chromium.org
Review URL: https://codereview.chromium.org/484273003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23275 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-21 12:40:10 +00:00
sigurds@chromium.org
566cdc3bcd
Reland "Add initial support for inlining."
...
Reland Fixes:
* Remove usage of C++11 vector members.
* Guard tests by V8_TURBO_TARGET.
Changes:
* Make context specialization clean up after itself.
* Add UpdateToAndIncrement to Inputs::iterator.
Uses:iterator already provides this member function.
* Allow next node id in graph to be set.
R=titzer@chromium.org , mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/484083003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23231 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-20 13:05:03 +00:00
bmeurer@chromium.org
37058c1413
[turbofan] Add TruncateFloat64ToInt32 machine operator.
...
Fix ChangeLowering to use TruncateFloat64ToInt32.
TEST=cctest,compiler-unittests
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/484103002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23214 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-20 04:01:00 +00:00
sigurds@chromium.org
ae41c7e4a5
Revert "Load global object and builtins from activation."
...
This reverts commit r23205.
Setting string-type flags in unit tests is not a good idea.
TBR=titzer@chromium.org
Review URL: https://codereview.chromium.org/489543002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23208 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 16:07:15 +00:00
sigurds@chromium.org
e07c82baf2
Load global object and builtins from activation.
...
BUG=
R=titzer@chromium.org
Review URL: https://codereview.chromium.org/474633003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23205 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 15:16:23 +00:00
sigurds@chromium.org
b488b2ed29
Revert "Add initial support for inlining."
...
This reverts commit r23197.
TBR=titzer@chromium.org
Review URL: https://codereview.chromium.org/481413002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23198 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 12:48:44 +00:00
sigurds@chromium.org
4b943f35cf
Add initial support for inlining.
...
* Add stack depth checking to function tester.
* Make context specialization clean up after itself.
* Add UpdateToAndIncrement to Inputs::iterator.
Uses:iterator already provides this member function.
* Allow next node id in graph to be set.
R=mstarzinger@chromium.org , titzer@chromium.org
Review URL: https://codereview.chromium.org/453833003
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23197 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 12:23:19 +00:00
sigurds@chromium.org
85058ce97d
Set ScopeInfo when compiling for unit tests.
...
This is required to correctly treat eval in unit tests.
BUG=
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/453953002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23193 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 11:24:24 +00:00
bmeurer@chromium.org
cf51230881
[turbofan] Add proper conversion operators for int32<->int64.
...
This affects arm64 and x64. Note that we do not yet optimize
these conversions. Later we will add support for merging these
conversion operators into other operations during instruction
selection.
TEST=cctest,compiler-unittests
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/487723002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23184 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-19 08:48:41 +00:00
titzer@chromium.org
5281cbebca
Finish TODO in Schedule. s/entry/start/g and s/exit/end/g to be more regular.
...
R=jarin@chromium.org
BUG=
Review URL: https://codereview.chromium.org/484653002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23161 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-18 13:28:10 +00:00
bmeurer@chromium.org
e4db78e705
[arm] Recognize comparisons of shifts with zero.
...
For example, recognize
0 == r1 << r2
and generate a single
MOVS rt, r1, lsl r2
instruction.
TEST=cctest,compiler-unittests
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/478233002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23148 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-18 11:10:01 +00:00
mstarzinger@chromium.org
3adac582b0
Deprecate LoweringBuilder in favor of Reducer.
...
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/476733002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23128 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-14 12:24:37 +00:00
titzer@chromium.org
8741997982
Enable more tests for simplified lowering after assuming signed for word32.
...
R=mstarzinger@chromium.org
BUG=
Review URL: https://codereview.chromium.org/461933002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23125 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-14 09:52:21 +00:00
titzer@chromium.org
9803a72417
Unify MachineType and RepType.
...
MachineType now tracks both the representation and the value type of machine quantities and is used uniformly throughout TurboFan.
These types can now express uint8, int8, uint16, and int16, i.e. signed and unsigned smallish integers. Note that currently only uint8 and uint16 are implemented in the TF backends.
R=bmeurer@chromium.org , mstarzinger@chromium.org
BUG=
Review URL: https://codereview.chromium.org/470593002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23122 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-14 09:19:54 +00:00
bmeurer@chromium.org
ae7d781d8b
[turbofan] Introduce WordRor machine operator.
...
Move recognition of rotate-right operations to the
MachineOperatorReducer, so we don't need to repeat that in the
InstructionSelector for every backend.
TEST=base-unittests,compiler-unittests,cctests
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/469213002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23121 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-14 09:07:58 +00:00
bmeurer@chromium.org
f4b5224ae9
[turbofan] Refactor the InstructionSelector tests.
...
Also fix some issues and improve test coverage.
TEST=compiler-unittests
BUG=v8:3489
LOG=y
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/469743002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23111 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-14 06:33:50 +00:00
mstarzinger@chromium.org
76a49573f3
Fix non-TF target build after r23107.
...
TBR=jarin@chromium.org
TEST=cctest/test-run-deopt
Review URL: https://codereview.chromium.org/473453002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23110 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-13 14:47:32 +00:00
mstarzinger@chromium.org
8b7dd630da
Move %IsOptimized runtime helper into test case.
...
R=jarin@chromium.org
TEST=cctest/test-run-deopt
Review URL: https://codereview.chromium.org/468153002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23107 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-13 14:09:50 +00:00
titzer@chromium.org
07ab6791a1
Add FOR_INT32_SHIFTS to value-helper.h
...
R=bmeurer@chromium.org
BUG=
Review URL: https://codereview.chromium.org/470533002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-13 10:30:00 +00:00
rodolph.perfetta@arm.com
b5b4e2c0b9
ARM64: unit tests for instruction selection.
...
BUG=
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/464773004
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23099 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-13 10:29:22 +00:00
mstarzinger@chromium.org
44247036a7
Fix newly discovered presubmit errors.
...
R=jochen@chromium.org
Review URL: https://codereview.chromium.org/462033002
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23081 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-12 13:33:35 +00:00
jochen@chromium.org
5f1f897894
Revert 23077 - "Use CommonNodeCache for heap constants in ChangeLowering."
...
Breaks compilation on Mac64
| TEST=compiler-unittests
| R=jarin@chromium.org
|
| Committed: https://code.google.com/p/v8/source/detail?r=23077
TBR=bmeurer@chromium.org ,jarin@chromium.org
LOG=n
BUG=none
Review URL: https://codereview.chromium.org/456843004
git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23079 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-08-12 12:53:14 +00:00