Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
accessibility
base
numerics
safe_conversions_arm_impl.h
Go to the documentation of this file.
1
// Copyright 2017 The Chromium Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file.
4
5
#ifndef BASE_NUMERICS_SAFE_CONVERSIONS_ARM_IMPL_H_
6
#define BASE_NUMERICS_SAFE_CONVERSIONS_ARM_IMPL_H_
7
8
#include <cassert>
9
#include <limits>
10
#include <type_traits>
11
12
#include "
base/numerics/safe_conversions_impl.h
"
13
14
namespace
base
{
15
namespace
internal {
16
17
// Fast saturation to a destination type.
18
template
<
typename
Dst,
typename
Src>
19
struct
SaturateFastAsmOp {
20
static
constexpr
bool
is_supported
=
21
std::is_signed<Src>::value && std::is_integral<Dst>::value &&
22
std::is_integral<Src>::value &&
23
IntegerBitsPlusSign<Src>::value
<=
IntegerBitsPlusSign<int32_t>::value
&&
24
IntegerBitsPlusSign<Dst>::value
<=
IntegerBitsPlusSign<int32_t>::value
&&
25
!
IsTypeInRangeForNumericType<Dst, Src>::value
;
26
27
__attribute__
((always_inline))
static
Dst
Do
(Src value) {
28
int32_t src =
value
;
29
typename
std::conditional<std::is_signed<Dst>::value, int32_t,
30
uint32_t>
::type
result
;
31
if
(std::is_signed<Dst>::value) {
32
asm
(
"ssat %[dst], %[shift], %[src]"
33
: [dst]
"=r"
(
result
)
34
: [src]
"r"
(src), [shift]
"n"
(
IntegerBitsPlusSign<Dst>::value
<= 32
35
?
IntegerBitsPlusSign<Dst>::value
36
: 32));
37
}
else
{
38
asm
(
"usat %[dst], %[shift], %[src]"
39
: [dst]
"=r"
(
result
)
40
: [src]
"r"
(src), [shift]
"n"
(
IntegerBitsPlusSign<Dst>::value
< 32
41
?
IntegerBitsPlusSign<Dst>::value
42
: 31));
43
}
44
return
static_cast<
Dst
>
(
result
);
45
}
46
};
47
48
}
// namespace internal
49
}
// namespace base
50
51
#endif
// BASE_NUMERICS_SAFE_CONVERSIONS_ARM_IMPL_H_
value
uint8_t value
Definition
fl_standard_message_codec.cc:36
type
uint8_t type
Definition
fl_standard_message_codec_test.cc:1115
result
GAsyncResult * result
Definition
fl_text_input_plugin.cc:106
base
Definition
ax_tree_id_registry.h:17
safe_conversions_impl.h
base::internal::IntegerBitsPlusSign
Definition
safe_conversions_impl.h:35
base::internal::IntegerBitsPlusSign::value
static const int value
Definition
safe_conversions_impl.h:36
base::internal::IsTypeInRangeForNumericType::value
static const bool value
Definition
safe_conversions_impl.h:395
base::internal::SaturateFastAsmOp::Do
static constexpr Dst Do(Src)
Definition
safe_conversions.h:33
base::internal::SaturateFastAsmOp::__attribute__
__attribute__((always_inline)) static Dst Do(Src value)
Definition
safe_conversions_arm_impl.h:27
base::internal::SaturateFastAsmOp::is_supported
static constexpr bool is_supported
Definition
safe_conversions.h:32
Generated on Fri Apr 26 2024 06:14:38 for Flutter Engine by
1.9.8