Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
OpenCorePKG_MOD
提交
0d0279cc
O
OpenCorePKG_MOD
项目概览
btwise
/
OpenCorePKG_MOD
通知
26
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
OpenCorePKG_MOD
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0d0279cc
编写于
1月 31, 2021
作者:
V
vit9696
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OcGuardLib: Add U16 arithmetics
上级
990ad449
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
88 addition
and
0 deletion
+88
-0
Include/Acidanthera/Library/OcGuardLib.h
Include/Acidanthera/Library/OcGuardLib.h
+21
-0
Library/OcGuardLib/BitOverflow.c
Library/OcGuardLib/BitOverflow.c
+67
-0
未找到文件。
Include/Acidanthera/Library/OcGuardLib.h
浏览文件 @
0d0279cc
...
...
@@ -56,6 +56,27 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
// and multiplication with addition (A*B+C) support.
//
BOOLEAN
OcOverflowAddU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
);
BOOLEAN
OcOverflowSubU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
);
BOOLEAN
OcOverflowMulU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
);
BOOLEAN
OcOverflowAddU32
(
UINT32
A
,
...
...
Library/OcGuardLib/BitOverflow.c
浏览文件 @
0d0279cc
...
...
@@ -26,6 +26,73 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
// target C99 compliance rather than performance.
//
BOOLEAN
OcOverflowAddU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
)
{
#if defined(OC_HAS_TYPE_GENERIC_BUILTINS)
return
__builtin_add_overflow
(
A
,
B
,
Result
);
#else
UINT32
Temp
;
//
// I believe casting will be faster on X86 at least.
//
Temp
=
A
+
B
;
*
Result
=
(
UINT16
)
Temp
;
if
(
Temp
<=
MAX_UINT16
)
{
return
FALSE
;
}
return
TRUE
;
#endif
}
BOOLEAN
OcOverflowSubU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
)
{
#if defined(OC_HAS_TYPE_GENERIC_BUILTINS)
return
__builtin_sub_overflow
(
A
,
B
,
Result
);
#else
*
Result
=
(
UINT16
)
(
A
-
B
);
if
(
A
>=
B
)
{
return
FALSE
;
}
return
TRUE
;
#endif
}
BOOLEAN
OcOverflowMulU16
(
UINT16
A
,
UINT16
B
,
UINT16
*
Result
)
{
#if defined(OC_HAS_TYPE_GENERIC_BUILTINS)
return
__builtin_mul_overflow
(
A
,
B
,
Result
);
#else
UINT32
Temp
;
Temp
=
(
UINT32
)
A
*
B
;
*
Result
=
(
UINT16
)
Temp
;
if
(
Temp
<=
MAX_UINT32
)
{
return
FALSE
;
}
return
TRUE
;
#endif
}
BOOLEAN
OcOverflowAddU32
(
UINT32
A
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录