Home
last modified time | relevance | path

Searched refs:v5 (Results 1 – 25 of 563) sorted by relevance

12345678910>>...23

/external/llvm/test/MC/AMDGPU/
Dflat.s100 flat_atomic_add v1 v[3:4], v5 glc slc
105 flat_atomic_add v1 v[3:4], v5 glc tfe
110 flat_atomic_add v1 v[3:4], v5 glc slc tfe
115 flat_atomic_add v[3:4], v5 slc
120 flat_atomic_add v[3:4], v5 slc tfe
125 flat_atomic_add v[3:4], v5 tfe
200 flat_atomic_swap v[3:4], v5
205 flat_atomic_swap v1, v[3:4], v5 glc
220 flat_atomic_add v[3:4], v5
225 flat_atomic_add v1, v[3:4], v5 glc
[all …]
/external/llvm/test/MC/AArch64/
Darm64-simd-ldst.s11 ld1.8b {v4, v5, v6}, [x3]
89 st1.2d {v5}, [x1]
102 ; CHECK: ld1.8b { v4, v5, v6 }, [x3] ; encoding: [0x64,0x60,0x40,0x0c]
181 ; CHECK: st1.2d { v5 }, [x1] ; encoding: [0x25,0x7c,0x00,0x4c]
187 ld2.8b {v4, v5}, [x19]
188 ld2.16b {v4, v5}, [x19]
189 ld2.4h {v4, v5}, [x19]
190 ld2.8h {v4, v5}, [x19]
191 ld2.2s {v4, v5}, [x19]
192 ld2.4s {v4, v5}, [x19]
[all …]
Dneon-compare-instructions.s12 cmeq v5.8h, v6.8h, v7.8h
34 cmhs v5.8h, v6.8h, v7.8h
42 cmls v5.8h, v7.8h, v6.8h
71 cmge v5.8h, v6.8h, v7.8h
79 cmle v5.8h, v7.8h, v6.8h
108 cmhi v5.8h, v6.8h, v7.8h
116 cmlo v5.8h, v7.8h, v6.8h
145 cmgt v5.8h, v6.8h, v7.8h
153 cmlt v5.8h, v7.8h, v6.8h
180 cmtst v5.8h, v6.8h, v7.8h
[all …]
/external/libhevc/common/arm64/
Dihevc_intra_pred_luma_planar.s146 dup v5.8b,w8 //row + 1
148 …mov v7.8b, v5.8b //mov #1 to d7 to used for inc for row+1 and dec for nt-1-…
184 umlal v27.8h, v5.8b, v0.8b //(1)(row+1) * src[nt-1]
196 add v5.8b, v5.8b , v7.8b //(1)
201 umlal v30.8h, v5.8b, v0.8b //(2)
211 add v5.8b, v5.8b , v7.8b //(2)
215 umlal v28.8h, v5.8b, v0.8b //(3)
228 add v5.8b, v5.8b , v7.8b //(3)
232 umlal v25.8h, v5.8b, v0.8b //(4)
245 add v5.8b, v5.8b , v7.8b //(4)
[all …]
Dihevc_sao_edge_offset_class1_chroma.s159 cmhi v5.16b, v3.16b , v28.16b //vcgtq_u8(pu1_cur_row, pu1_top_row)
164 … SUB v16.16b, v19.16b , v5.16b //sign_up = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
175 cmhi v5.16b, v3.16b , v18.16b //vcgtq_u8(pu1_cur_row, pu1_top_row)
183 …SUB v20.16b, v19.16b , v5.16b //sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
186 ADD v5.16b, v0.16b , v16.16b //edge_idx = vaddq_s8(const_2, sign_up)
189 ADD v5.16b, v5.16b , v20.16b //edge_idx = vaddq_s8(edge_idx, sign_down)
194 TBL v5.16b, {v6.16b},v5.16b //vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
201 mov v17.d[0], v5.d[1]
202 UZP1 v27.8b, v5.8b, v17.8b
203 UZP2 v17.8b, v5.8b, v17.8b
[all …]
Dihevc_sao_edge_offset_class1.s135 cmhi v5.16b, v3.16b , v1.16b //vcgtq_u8(pu1_cur_row, pu1_top_row)
140 … SUB v16.16b, v17.16b , v5.16b //sign_up = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
148 cmhi v5.16b, v3.16b , v18.16b //vcgtq_u8(pu1_cur_row, pu1_top_row)
154 …SUB v20.16b, v17.16b , v5.16b //sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
157 ADD v5.16b, v0.16b , v16.16b //edge_idx = vaddq_s8(const_2, sign_up)
160 ADD v5.16b, v5.16b , v20.16b //edge_idx = vaddq_s8(edge_idx, sign_down)
164 TBL v5.16b, {v6.16b},v5.16b //vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
173 TBL v5.16b, {v7.16b},v5.16b //offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
179 …SADDW v20.8h, v20.8h , v5.8b //pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0]…
190 …SADDW2 v1.8h, v1.8h , v5.16b //pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1]…
[all …]
Dihevc_sao_edge_offset_class2.s268 LD1 {v5.16b},[x0] //pu1_cur_row = vld1q_u8(pu1_src)
272 cmhi v17.16b, v5.16b , v3.16b //vcgtq_u8(pu1_cur_row, pu1_top_row)
276 cmhi v16.16b, v3.16b , v5.16b //vcltq_u8(pu1_cur_row, pu1_top_row)
319 cmhi v3.16b, v5.16b , v18.16b //I vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
322 cmhi v18.16b, v18.16b , v5.16b //I vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
335 …Uxtl v20.8h, v5.8b //I pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u…
340 …Uxtl2 v22.8h, v5.16b //I pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u…
343 mov v5.16b, v16.16b //I pu1_cur_row = pu1_next_row
383 cmhi v24.16b, v5.16b , v22.16b //II vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
388 cmhi v22.16b, v22.16b , v5.16b //II vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
[all …]
Dihevc_inter_pred_filters_luma_vert_w16out.s126 ld1 {v5.8b},[x3],x2 //src_tmp2 = vld1_u8(pu1_src_tmp)//
131 umlsl v19.8h, v5.8b, v27.8b //mul_res1 = vmlsl_u8(mul_res1, src_tmp2, coeffabs_5)//
154 umlal v20.8h, v5.8b, v26.8b //mul_res2 = vmlal_u8(mul_res2, src_tmp2, coeffabs_4)//
171 umlal v21.8h, v5.8b, v25.8b
185 umlsl v30.8h, v5.8b, v24.8b
191 ld1 {v5.8b},[x3],x2 //src_tmp2 = vld1_u8(pu1_src_tmp)//
224 umlsl v19.8h, v5.8b, v27.8b //mul_res1 = vmlsl_u8(mul_res1, src_tmp2, coeffabs_5)//
246 umlal v20.8h, v5.8b, v26.8b //mul_res2 = vmlal_u8(mul_res2, src_tmp2, coeffabs_4)//
270 umlal v21.8h, v5.8b, v25.8b
293 umlsl v30.8h, v5.8b, v24.8b
[all …]
/external/libavc/common/armv8/
Dih264_inter_pred_filters_luma_horz_av8.s133 ld1 {v5.8b, v6.8b, v7.8b}, [x0], x2 //// Load row1
136 ext v28.8b, v5.8b , v6.8b, #5 ////extract a[5] (column1,row1)
139 uaddl v14.8h, v28.8b, v5.8b //// a0 + a5 (column1,row1)
144 ext v28.8b, v5.8b , v6.8b, #2 ////extract a[2] (column1,row1)
152 ext v28.8b, v5.8b , v6.8b, #3 ////extract a[3] (column1,row1)
160 ext v28.8b, v5.8b , v6.8b, #1 ////extract a[1] (column1,row1)
168 ext v28.8b, v5.8b , v6.8b, #4 ////extract a[4] (column1,row1)
176 ld1 {v5.8b, v6.8b, v7.8b}, [x0], x2 //// Load row3
187 ext v28.8b, v5.8b , v6.8b, #5 ////extract a[5] (column1,row3)
192 uaddl v14.8h, v28.8b, v5.8b //// a0 + a5 (column1,row3)
[all …]
Dih264_inter_pred_luma_horz_qpel_av8.s141 ld1 {v5.8b, v6.8b, v7.8b}, [x0], x2 //// Load row1
144 ext v28.8b, v5.8b , v6.8b , #5
147 uaddl v14.8h, v28.8b, v5.8b //// a0 + a5 (column1,row1)
152 ext v28.8b, v5.8b , v6.8b , #2
160 ext v28.8b, v5.8b , v6.8b , #3
168 ext v28.8b, v5.8b , v6.8b , #1
176 ext v28.8b, v5.8b , v6.8b , #4
185 ld1 {v5.8b, v6.8b, v7.8b}, [x0], x2 //// Load row3
200 ext v28.8b, v5.8b , v6.8b , #5
208 uaddl v14.8h, v28.8b, v5.8b //// a0 + a5 (column1,row3)
[all …]
Dih264_intra_pred_luma_4x4_av8.s591 ext v5.8b, v3.8b , v3.8b , #3
593 st1 {v5.s}[0], [x1], x3
599 st1 {v5.h}[0], [x1], #2
600 st1 {v5.b}[2], [x1]
674 sqrshrun v5.8b, v24.8h, #2
676 mov v6.8b, v5.8b
677 trn1 v10.8b, v4.8b, v5.8b
678 trn2 v5.8b, v4.8b, v5.8b //
680 st1 {v5.h}[1], [x1], #2
683 st1 {v5.h}[1], [x1], x5
[all …]
Dih264_deblk_chroma_av8.s96 ld2 {v4.8b, v5.8b}, [x0], x1 //D4 = p0u , D5 = p0v
107 mov v4.d[1], v5.d[0]
115 uaddl v28.8h, v5.8b, v3.8b //Q14,Q7 = P0 + Q1
203 ld4 {v4.h, v5.h, v6.h, v7.h}[0], [x0], x1
204 ld4 {v4.h, v5.h, v6.h, v7.h}[1], [x0], x1
205 ld4 {v4.h, v5.h, v6.h, v7.h}[2], [x0], x1
206 ld4 {v4.h, v5.h, v6.h, v7.h}[3], [x0], x1
214 mov v3.16b, v5.16b
215 mov v5.16b, v10.16b
223 mov v4.d[1], v5.d[0]
[all …]
Dih264_resi_trans_quant_av8.s106 trn1 v5.4h, v4.4h, v6.4h
109 trn1 v0.2s, v1.2s, v5.2s
110 trn2 v4.2s, v1.2s, v5.2s //t13
167 cmgt v5.4h, v25.4h, #0
205 bsl v5.8b, v21.8b, v25.8b //restore sign of row 3 and 4
308 trn1 v5.4h, v4.4h, v6.4h
311 trn1 v0.2s, v1.2s, v5.2s
312 trn2 v4.2s, v1.2s, v5.2s //t13
369 cmgt v5.4h, v25.4h, #0
407 bsl v5.8b, v21.8b, v25.8b //restore sign of row 3 and 4
[all …]
/external/clang/test/Sema/
Dvector-assign.c13 v4ss v5; in test1() local
18 …v1 = v5; // expected-warning {{incompatible vector types assigning to 'v2s' (vector of 2 'int' val… in test1()
23 …v2 = v5; // expected-warning {{incompatible vector types assigning to 'v2u' (vector of 2 'unsigned… in test1()
28 …v3 = v5; // expected-error {{assigning to 'v1s' (vector of 1 'int' value) from incompatible type '… in test1()
33 …v4 = v5; // expected-warning {{incompatible vector types assigning to 'v2f' (vector of 2 'float' v… in test1()
35v5 = v1; // expected-warning {{incompatible vector types assigning to 'v4ss' (vector of 4 'short' … in test1()
36v5 = v2; // expected-warning {{incompatible vector types assigning to 'v4ss' (vector of 4 'short' … in test1()
37v5 = v3; // expected-error {{assigning to 'v4ss' (vector of 4 'short' values) from incompatible ty… in test1()
38v5 = v4; // expected-warning {{incompatible vector types assigning to 'v4ss' (vector of 4 'short' … in test1()
/external/boringssl/linux-aarch64/crypto/aes/
Daesv8-armx64.S51 ext v5.16b,v0.16b,v3.16b,#12
56 eor v3.16b,v3.16b,v5.16b
57 ext v5.16b,v0.16b,v5.16b,#12
58 eor v3.16b,v3.16b,v5.16b
59 ext v5.16b,v0.16b,v5.16b,#12
61 eor v3.16b,v3.16b,v5.16b
69 ext v5.16b,v0.16b,v3.16b,#12
73 eor v3.16b,v3.16b,v5.16b
74 ext v5.16b,v0.16b,v5.16b,#12
75 eor v3.16b,v3.16b,v5.16b
[all …]
/external/llvm/utils/unittest/googletest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/swiftshader/third_party/LLVM/utils/unittest/googletest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/protobuf/gtest/include/gtest/
Dgtest_pred_impl.h316 const T5& v5) { in AssertPred5Helper() argument
317 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
330 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
336 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
337 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
342 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
348 #v5, \
354 v5), on_failure)
357 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
358 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/google-breakpad/src/testing/gtest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/mesa3d/src/gtest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/libvpx/libvpx/third_party/googletest/src/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/v8/testing/gtest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/googletest/googletest/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/vulkan-validation-layers/tests/gtest-1.7.0/include/gtest/
Dgtest_pred_impl.h308 const T5& v5) { in AssertPred5Helper() argument
309 if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess(); in AssertPred5Helper()
321 << "\n" << e5 << " evaluates to " << v5; in AssertPred5Helper()
326 #define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\ argument
327 GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5), \
332 #define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\ argument
338 #v5, \
344 v5), on_failure)
347 #define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \ argument
348 GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
[all …]
/external/llvm/test/MC/Disassembler/AMDGPU/
Dflat_vi.txt27 # VI: flat_atomic_add v1, v[3:4], v5 glc slc ; encoding: [0x00,0x00,0x0b,0xdd,0x03,0x05,0x00,0x01]
30 # VI: flat_atomic_add v1, v[3:4], v5 glc tfe ; encoding: [0x00,0x00,0x09,0xdd,0x03,0x05,0x80,0x01]
33 # VI: flat_atomic_add v1, v[3:4], v5 glc slc tfe ; encoding: [0x00,0x00,0x0b,0xdd,0x03,0x05,0x80,0x…
36 # VI: flat_atomic_add v[3:4], v5 slc ; encoding: [0x00,0x00,0x0a,0xdd,0x03,0x05,0x00,0x00]
39 # VI: flat_atomic_add v[3:4], v5 slc tfe ; encoding: [0x00,0x00,0x0a,0xdd,0x03,0x05,0x80,0x00]
42 # VI: flat_atomic_add v[3:4], v5 tfe ; encoding: [0x00,0x00,0x08,0xdd,0x03,0x05,0x80,0x00]
75 # VI: flat_atomic_swap v[3:4], v5 ; encoding: [0x00,0x00,0x00,0xdd,0x03,0x05,0x00,0x00]
78 # VI: flat_atomic_swap v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x01,0xdd,0x03,0x05,0x00,0x01]
87 # VI: flat_atomic_add v[3:4], v5 ; encoding: [0x00,0x00,0x08,0xdd,0x03,0x05,0x00,0x00]
90 # VI: flat_atomic_add v1, v[3:4], v5 glc ; encoding: [0x00,0x00,0x09,0xdd,0x03,0x05,0x00,0x01]
[all …]

12345678910>>...23