Hal Finkel
edfeeb6d70
[PowerPC] Improve instruction selection bit-permuting operations (32-bit)
...
The PowerPC backend, somewhat embarrassingly, did not generate an
optimal-length sequence of instructions for a 32-bit bswap. While adding a
pattern for the bswap intrinsic to fix this would not have been terribly
difficult, doing so would not have addressed the real problem: we had been
generating poor code for many bit-permuting operations (by which I mean things
like byte-swap that permute the bits of one or more inputs around in various
ways). Here are some initial steps toward solving this deficiency.
Bit-permuting operations are represented, at the SDAG level, using ISD::ROTL,
SHL, SRL, AND and OR (mostly with constant second operands). Looking back
through these operations, we can build up a description of the bits in the
resulting value in terms of bits of one or more input values (and constant
zeros). For each bit, we compute the rotation amount from the original value,
and then group consecutive (value, rotation factor) bits into groups. Groups
sharing these attributes are then collected and sorted, and we can then
instruction select the entire permutation using a combination of masked
rotations (rlwinm), imm ands (andi/andis), and masked rotation inserts
(rlwimi).
The result is that instead of lowering an i32 bswap as:
rlwinm 5, 3, 24, 16, 23
rlwinm 4, 3, 24, 0, 7
rlwimi 4, 3, 8, 8, 15
rlwimi 5, 3, 8, 24, 31
rlwimi 4, 5, 0, 16, 31
we now produce:
rlwinm 4, 3, 8, 0, 31
rlwimi 4, 3, 24, 16, 23
rlwimi 4, 3, 24, 0, 7
and for the 'test6' example in the PowerPC/README.txt file:
unsigned test6(unsigned x) {
return ((x & 0x00FF0000) >> 16) | ((x & 0x000000FF) << 16);
}
we used to produce:
lis 4, 255
rlwinm 3, 3, 16, 0, 31
ori 4, 4, 255
and 3, 3, 4
and now we produce:
rlwinm 4, 3, 16, 24, 31
rlwimi 4, 3, 16, 8, 15
and, as a nice bonus, this fixes the FIXME in
test/CodeGen/PowerPC/rlwimi-and.ll.
This commit does not include instruction-selection for i64 operations, those
will come later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224318 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-16 05:51:41 +00:00
..
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2012-07-02 12:47:22 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2012-07-02 19:09:46 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2012-07-02 12:47:22 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-24 20:20:08 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 06:36:20 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-12-12 11:59:10 +00:00
2009-09-09 00:09:15 +00:00
2014-02-13 14:44:26 +00:00
2012-06-08 23:15:12 +00:00
2014-02-13 14:44:26 +00:00
2009-09-09 00:09:15 +00:00
2012-06-09 03:14:50 +00:00
2012-07-02 12:47:22 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-03-15 13:21:21 +00:00
2013-04-30 20:04:37 +00:00
2014-10-19 21:29:21 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2012-06-08 23:15:12 +00:00
2012-06-08 23:15:12 +00:00
2009-09-09 00:09:15 +00:00
2014-04-12 00:59:48 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2012-06-08 23:15:12 +00:00
2011-12-05 17:55:17 +00:00
2011-12-05 17:55:17 +00:00
2011-12-05 17:55:17 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 03:14:27 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-11-27 06:54:59 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-05-27 15:57:51 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 03:14:27 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-10-28 23:11:03 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2010-03-14 21:08:40 +00:00
2009-09-09 00:09:15 +00:00
2011-09-14 00:29:50 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-03-12 15:18:14 +00:00
2013-07-14 06:24:09 +00:00
2009-11-16 05:52:06 +00:00
2009-11-25 21:13:39 +00:00
2010-04-20 06:20:21 +00:00
2013-09-12 05:24:49 +00:00
2012-09-06 18:15:23 +00:00
2010-04-02 02:21:24 +00:00
2013-03-12 15:18:14 +00:00
2010-10-11 20:43:09 +00:00
2013-07-14 06:24:09 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2013-07-13 20:38:47 +00:00
2012-11-14 23:23:27 +00:00
2012-11-13 18:40:58 +00:00
2014-10-19 21:29:21 +00:00
2012-11-18 06:21:03 +00:00
2013-05-16 17:58:02 +00:00
2013-08-22 21:28:54 +00:00
2012-06-22 22:31:00 +00:00
2013-01-30 23:43:27 +00:00
2013-01-30 21:17:42 +00:00
2014-12-15 19:07:53 +00:00
2014-12-11 22:51:06 +00:00
2013-07-14 06:24:09 +00:00
2009-09-09 00:09:15 +00:00
2013-08-22 21:28:54 +00:00
2014-05-29 15:41:38 +00:00
2010-09-27 06:44:54 +00:00
2013-03-27 06:52:27 +00:00
2013-07-08 20:00:03 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 03:14:27 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 03:14:27 +00:00
2012-07-02 12:47:22 +00:00
2014-07-20 22:26:40 +00:00
2013-07-09 18:16:16 +00:00
2014-12-15 19:07:53 +00:00
2013-07-08 20:20:51 +00:00
2014-12-15 19:07:53 +00:00
2013-08-22 21:28:54 +00:00
2014-06-13 14:24:07 +00:00
2014-10-02 22:27:07 +00:00
2014-03-11 10:48:52 +00:00
2014-10-03 18:04:36 +00:00
2014-10-02 22:27:07 +00:00
2014-10-02 22:27:07 +00:00
2014-07-18 23:29:49 +00:00
2014-02-28 00:27:01 +00:00
2012-07-02 12:47:22 +00:00
2012-07-02 12:47:22 +00:00
2012-08-28 02:10:33 +00:00
2014-10-31 10:33:14 +00:00
2014-12-16 05:51:41 +00:00
2012-07-02 12:47:22 +00:00
2013-03-28 20:35:18 +00:00
2014-10-19 21:29:21 +00:00
2013-07-08 06:16:58 +00:00
2013-07-09 18:55:10 +00:00
2014-01-21 20:15:58 +00:00
2014-08-16 00:17:05 +00:00
2012-07-02 12:47:22 +00:00
2011-10-17 04:03:59 +00:00
2014-12-04 00:46:20 +00:00
2009-09-09 00:09:15 +00:00
2013-11-30 19:39:27 +00:00
2009-09-09 00:09:15 +00:00
2012-07-02 12:47:22 +00:00
2014-07-23 07:08:53 +00:00
2012-07-02 12:47:22 +00:00
2014-10-17 01:41:22 +00:00
2012-08-28 02:10:27 +00:00
2011-08-30 17:04:16 +00:00
2010-06-15 21:58:33 +00:00
2013-08-22 21:28:54 +00:00
2013-12-16 21:24:00 +00:00
2014-03-02 18:23:39 +00:00
2014-03-01 21:36:57 +00:00
2013-07-03 17:59:07 +00:00
2013-08-22 21:28:54 +00:00
2013-05-18 09:20:39 +00:00
2013-08-19 23:35:24 +00:00
2013-05-16 20:28:05 +00:00
2013-06-07 22:16:19 +00:00
2014-02-16 13:27:39 +00:00
2014-04-12 21:52:38 +00:00
2014-04-12 21:52:38 +00:00
2013-05-15 21:37:41 +00:00
2012-06-08 19:19:53 +00:00
2013-04-30 17:52:57 +00:00
2014-05-11 16:23:29 +00:00
2013-04-30 17:52:57 +00:00
2014-02-25 20:51:50 +00:00
2013-05-15 21:37:41 +00:00
2013-04-01 16:31:56 +00:00
2012-07-02 12:47:22 +00:00
2014-12-15 19:07:53 +00:00
2013-03-18 22:08:16 +00:00
2012-12-25 18:51:18 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-09-30 18:17:35 +00:00
2014-12-15 19:07:53 +00:00
2013-04-30 17:52:57 +00:00
2014-09-15 22:11:07 +00:00
2013-07-14 06:24:09 +00:00
2010-03-28 07:58:37 +00:00
2009-09-09 00:09:15 +00:00
2014-10-19 21:29:21 +00:00
2013-08-30 02:29:45 +00:00
2013-08-25 22:33:42 +00:00
2014-10-19 20:48:47 +00:00
2014-10-19 20:48:47 +00:00
2014-06-24 20:05:18 +00:00
2014-10-19 20:48:47 +00:00
2013-08-30 02:43:08 +00:00
2013-08-26 19:42:51 +00:00
2013-08-30 22:18:55 +00:00
2013-08-30 02:43:08 +00:00
2013-08-25 22:33:42 +00:00
2014-10-19 20:48:47 +00:00
2013-08-30 02:43:08 +00:00
2014-10-19 20:48:47 +00:00
2013-08-30 02:43:08 +00:00
2013-11-15 19:09:27 +00:00
2014-10-17 01:41:22 +00:00
2014-11-24 23:45:21 +00:00
2013-01-11 10:36:13 +00:00
2014-03-23 05:35:00 +00:00
2013-06-13 20:23:34 +00:00
2014-10-21 13:02:37 +00:00
2014-10-19 20:27:56 +00:00
2014-10-21 23:01:01 +00:00
2014-10-21 23:01:01 +00:00
2014-10-19 21:29:21 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-02-28 00:27:01 +00:00
2014-10-19 21:29:21 +00:00
2014-10-19 21:29:21 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-03-15 05:06:04 +00:00
2013-08-22 21:28:54 +00:00
2014-06-23 13:47:52 +00:00
2014-06-23 13:47:52 +00:00
2012-07-02 12:47:22 +00:00
2014-06-23 13:47:52 +00:00
2009-09-09 00:09:15 +00:00
2014-10-17 01:41:22 +00:00
2012-08-28 16:12:39 +00:00
2012-08-28 16:12:39 +00:00
2014-10-17 01:41:22 +00:00
2014-06-16 21:36:02 +00:00
2014-12-15 19:07:53 +00:00
2014-07-04 10:57:56 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-03-05 22:14:00 +00:00
2014-03-23 05:35:00 +00:00
2013-08-12 12:43:26 +00:00
2014-10-19 21:29:21 +00:00
2014-03-23 05:35:00 +00:00
2009-09-09 00:09:15 +00:00
2014-12-03 23:40:13 +00:00
2014-12-03 09:37:50 +00:00
2013-03-12 16:27:52 +00:00
2013-04-05 23:29:01 +00:00
2009-09-09 00:09:15 +00:00
2012-12-20 17:47:27 +00:00
2014-05-20 17:20:34 +00:00
2013-07-14 06:24:09 +00:00
2014-02-13 15:33:35 +00:00
2014-12-15 19:07:53 +00:00
2009-09-09 00:09:15 +00:00
2012-10-29 18:35:49 +00:00
2009-09-09 00:09:15 +00:00
2013-09-30 18:17:35 +00:00
2012-06-22 23:10:08 +00:00
2012-07-02 12:47:22 +00:00
2009-09-09 00:09:15 +00:00
2013-11-30 19:39:27 +00:00
2013-03-12 15:18:14 +00:00
2013-04-30 17:52:57 +00:00
2009-09-09 00:09:15 +00:00
2014-06-09 22:42:55 +00:00
2009-09-09 00:09:15 +00:00
2013-01-14 22:04:38 +00:00
2012-07-02 19:09:46 +00:00
2009-09-09 00:09:15 +00:00
2013-11-30 19:39:27 +00:00
2012-07-02 18:37:59 +00:00
2009-09-09 00:09:15 +00:00
2014-02-13 14:44:26 +00:00
2013-07-13 20:38:47 +00:00
2014-08-04 21:06:00 +00:00
2013-09-17 20:03:25 +00:00
2014-10-17 01:41:22 +00:00
2013-07-13 20:38:47 +00:00
2013-07-13 20:38:47 +00:00
2013-07-13 20:38:47 +00:00
2013-07-13 20:38:47 +00:00
2013-11-14 13:58:06 +00:00
2014-08-04 21:06:00 +00:00
2014-04-12 21:52:38 +00:00
2014-10-17 01:41:22 +00:00
2013-07-13 20:38:47 +00:00
2014-04-12 21:52:38 +00:00
2013-06-13 20:23:34 +00:00
2012-11-14 23:23:27 +00:00
2009-09-09 00:09:15 +00:00
2013-07-13 20:38:47 +00:00
2012-11-09 19:18:49 +00:00
2009-09-09 00:09:15 +00:00
2011-06-17 03:14:27 +00:00
2011-05-01 15:44:13 +00:00
2013-08-06 17:03:03 +00:00
2010-11-02 23:01:44 +00:00
2010-11-02 23:01:44 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2009-09-09 00:09:15 +00:00
2013-08-22 21:28:54 +00:00
2012-07-02 12:47:22 +00:00
2012-10-10 20:54:15 +00:00
2014-02-28 00:27:01 +00:00
2009-09-09 00:09:15 +00:00
2013-04-01 15:58:15 +00:00
2014-12-09 01:00:59 +00:00
2014-12-03 00:19:17 +00:00
2014-03-06 00:45:19 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2014-12-15 19:07:53 +00:00
2013-11-30 19:39:27 +00:00
2011-06-20 15:28:39 +00:00
2012-11-05 19:39:45 +00:00
2014-10-17 01:41:22 +00:00
2014-06-23 12:36:34 +00:00
2014-07-07 19:41:54 +00:00
2014-06-18 17:52:49 +00:00
2011-06-17 15:21:10 +00:00
2012-08-06 21:21:44 +00:00
2014-07-29 12:48:14 +00:00
2014-11-21 04:35:51 +00:00
2012-09-18 16:55:29 +00:00
2014-08-23 23:21:04 +00:00
2014-06-20 16:34:05 +00:00
2013-07-14 06:24:09 +00:00
2014-12-11 22:51:06 +00:00
2012-08-28 02:10:15 +00:00
2014-12-09 16:35:51 +00:00
2014-07-20 23:43:15 +00:00
2014-07-21 00:03:18 +00:00
2014-07-20 23:31:44 +00:00
2014-07-20 23:43:15 +00:00
2012-06-22 22:31:00 +00:00
2014-10-02 22:34:22 +00:00
2011-05-02 15:58:16 +00:00
2012-04-16 03:33:22 +00:00
2009-09-09 00:09:15 +00:00
2014-10-16 20:00:02 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-12-09 16:35:51 +00:00
2009-09-09 00:09:15 +00:00
2012-10-29 17:49:34 +00:00
2012-08-29 20:22:24 +00:00
2013-07-14 06:24:09 +00:00
2013-08-21 22:20:53 +00:00
2013-04-12 04:06:46 +00:00
2014-10-02 22:27:07 +00:00
2013-04-03 13:05:44 +00:00
2013-07-13 22:08:55 +00:00
2013-07-08 14:22:45 +00:00
2013-07-16 13:03:25 +00:00
2014-12-15 19:07:53 +00:00
2013-09-26 17:09:28 +00:00
2014-07-31 19:50:53 +00:00
2014-07-31 19:50:53 +00:00
2014-07-31 19:13:38 +00:00
2014-02-19 17:23:20 +00:00
2013-02-01 22:59:51 +00:00
2013-12-12 00:19:11 +00:00
2013-01-17 19:46:51 +00:00
2013-03-19 08:09:38 +00:00
2014-10-21 13:02:37 +00:00
2009-09-09 00:09:15 +00:00
2013-11-11 14:58:40 +00:00
2013-08-22 21:28:54 +00:00
2013-07-15 18:57:05 +00:00
2012-08-28 02:10:33 +00:00
2014-06-27 13:04:12 +00:00
2014-07-11 17:19:31 +00:00
2012-07-02 12:47:22 +00:00
2009-09-09 00:09:15 +00:00
2014-12-16 05:51:41 +00:00
2013-03-12 16:27:52 +00:00
2014-12-16 05:51:41 +00:00
2012-07-02 19:09:46 +00:00
2014-04-13 17:10:58 +00:00
2010-04-07 22:53:17 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-12-14 05:53:19 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-10-17 01:41:22 +00:00
2013-07-11 05:55:57 +00:00
2013-04-30 17:52:57 +00:00
2014-02-28 00:27:01 +00:00
2014-12-11 18:37:52 +00:00
2014-11-12 15:16:30 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-07-11 17:43:32 +00:00
2014-02-28 00:27:01 +00:00
2014-02-28 00:27:01 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2013-07-17 05:35:44 +00:00
2013-11-30 19:52:28 +00:00
2012-07-02 12:47:22 +00:00
2014-01-28 05:32:58 +00:00
2014-05-27 15:57:51 +00:00
2014-09-02 16:05:23 +00:00
2013-11-20 01:10:15 +00:00
2013-06-28 20:18:14 +00:00
2014-12-01 09:42:32 +00:00
2013-07-09 06:34:51 +00:00
2013-02-08 21:35:47 +00:00
2013-04-01 18:18:44 +00:00
2013-11-30 20:04:33 +00:00
2009-09-09 00:09:15 +00:00
2013-07-18 22:29:15 +00:00
2013-11-30 19:39:27 +00:00
2013-11-30 19:39:27 +00:00
2013-04-27 00:43:16 +00:00
2013-04-30 17:52:57 +00:00
2013-04-30 17:52:57 +00:00
2012-06-19 02:34:32 +00:00
2013-07-09 17:02:45 +00:00
2009-09-09 00:09:15 +00:00
2014-12-08 22:54:22 +00:00
2014-12-08 22:54:22 +00:00
2014-07-23 07:08:53 +00:00
2014-06-23 13:47:52 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-11-12 16:50:15 +00:00
2014-11-11 20:44:09 +00:00
2013-12-20 18:08:54 +00:00
2014-12-15 19:07:53 +00:00
2012-07-02 12:47:22 +00:00
2014-10-17 15:13:38 +00:00
2013-09-15 22:09:58 +00:00
2014-08-13 01:15:40 +00:00
2013-05-26 18:08:30 +00:00
2014-10-17 15:13:38 +00:00
2014-10-19 21:29:21 +00:00
2014-12-15 19:07:53 +00:00
2013-06-28 22:29:56 +00:00
2013-07-13 20:38:47 +00:00
2014-07-21 00:13:26 +00:00
2013-07-13 20:38:47 +00:00
2009-09-09 00:09:15 +00:00
2009-11-10 23:16:41 +00:00
2009-09-09 00:09:15 +00:00
2012-06-10 19:32:29 +00:00
2009-09-09 00:09:15 +00:00
2014-08-04 13:13:57 +00:00
2013-07-13 20:38:47 +00:00
2013-07-14 06:24:09 +00:00
2013-09-28 11:46:15 +00:00
2013-07-12 14:54:12 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-12-09 16:35:51 +00:00
2014-10-19 21:29:21 +00:00
2009-09-09 00:09:15 +00:00
2013-07-14 06:24:09 +00:00
2012-12-19 15:49:14 +00:00
2009-09-09 00:09:15 +00:00
2014-12-09 16:35:51 +00:00
2009-09-11 18:01:28 +00:00
2009-11-13 01:45:18 +00:00
2009-09-09 00:09:15 +00:00
2013-07-14 06:24:09 +00:00
2014-08-04 14:55:26 +00:00
2009-09-09 00:09:15 +00:00
2009-09-09 00:09:15 +00:00
2014-10-17 15:13:38 +00:00
2009-09-09 00:09:15 +00:00
2013-07-08 17:30:25 +00:00
2014-06-05 22:57:38 +00:00
2014-06-06 14:06:26 +00:00
2013-03-27 00:02:20 +00:00
2014-10-19 21:29:21 +00:00
2014-12-09 16:59:57 +00:00
2014-12-09 16:59:57 +00:00
2014-12-05 20:32:05 +00:00
2014-11-14 12:10:40 +00:00
2014-12-05 20:32:05 +00:00
2014-12-09 16:59:57 +00:00
2014-12-09 16:59:57 +00:00
2014-10-31 19:19:07 +00:00
2014-12-05 20:32:05 +00:00
2014-12-05 20:32:05 +00:00
2014-12-05 20:32:05 +00:00
2014-12-05 20:32:05 +00:00
2014-03-14 12:45:22 +00:00
2014-02-07 16:21:30 +00:00
2013-08-22 21:28:54 +00:00