Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
474d9983
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
474d9983
编写于
5月 20, 2013
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustllvm: Use target alignment for atomic load/store
上级
26babaaf
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
11 deletion
+17
-11
src/librustc/lib/llvm.rs
src/librustc/lib/llvm.rs
+4
-2
src/librustc/middle/trans/build.rs
src/librustc/middle/trans/build.rs
+5
-3
src/rustllvm/RustWrapper.cpp
src/rustllvm/RustWrapper.cpp
+8
-6
未找到文件。
src/librustc/lib/llvm.rs
浏览文件 @
474d9983
...
...
@@ -1571,13 +1571,15 @@ pub unsafe fn LLVMBuildPtrDiff(B: BuilderRef,
pub
unsafe
fn
LLVMBuildAtomicLoad
(
B
:
BuilderRef
,
PointerVal
:
ValueRef
,
Name
:
*
c_char
,
Order
:
AtomicOrdering
)
Order
:
AtomicOrdering
,
Alignment
:
c_uint
)
->
ValueRef
;
pub
unsafe
fn
LLVMBuildAtomicStore
(
B
:
BuilderRef
,
Val
:
ValueRef
,
Ptr
:
ValueRef
,
Order
:
AtomicOrdering
)
Order
:
AtomicOrdering
,
Alignment
:
c_uint
)
->
ValueRef
;
pub
unsafe
fn
LLVMBuildAtomicCmpXchg
(
B
:
BuilderRef
,
...
...
src/librustc/middle/trans/build.rs
浏览文件 @
474d9983
...
...
@@ -14,6 +14,7 @@
use
lib
::
llvm
::{
ValueRef
,
TypeRef
,
BasicBlockRef
,
BuilderRef
,
ModuleRef
};
use
lib
;
use
middle
::
trans
::
common
::
*
;
use
middle
::
trans
::
machine
::
llalign_of_min
;
use
syntax
::
codemap
::
span
;
use
core
::
hashmap
::
HashMap
;
...
...
@@ -544,7 +545,8 @@ pub fn AtomicLoad(cx: block, PointerVal: ValueRef, order: AtomicOrdering) -> Val
return
llvm
::
LLVMGetUndef
(
ccx
.int_type
);
}
count_insn
(
cx
,
"load.atomic"
);
return
llvm
::
LLVMBuildAtomicLoad
(
B
(
cx
),
PointerVal
,
noname
(),
order
);
let
align
=
llalign_of_min
(
*
ccx
,
ccx
.int_type
);
return
llvm
::
LLVMBuildAtomicLoad
(
B
(
cx
),
PointerVal
,
noname
(),
order
,
align
as
c_uint
);
}
}
...
...
@@ -558,7 +560,6 @@ pub fn LoadRangeAssert(cx: block, PointerVal: ValueRef, lo: c_ulonglong,
let
min
=
llvm
::
LLVMConstInt
(
t
,
lo
,
signed
);
let
max
=
llvm
::
LLVMConstInt
(
t
,
hi
,
signed
);
do
vec
::
as_imm_buf
([
min
,
max
])
|
ptr
,
len
|
{
llvm
::
LLVMSetMetadata
(
value
,
lib
::
llvm
::
MD_range
as
c_uint
,
llvm
::
LLVMMDNode
(
ptr
,
len
as
c_uint
));
...
...
@@ -586,7 +587,8 @@ pub fn AtomicStore(cx: block, Val: ValueRef, Ptr: ValueRef, order: AtomicOrderin
val_str
(
cx
.ccx
()
.tn
,
Val
),
val_str
(
cx
.ccx
()
.tn
,
Ptr
));
count_insn
(
cx
,
"store.atomic"
);
llvm
::
LLVMBuildAtomicStore
(
B
(
cx
),
Val
,
Ptr
,
order
);
let
align
=
llalign_of_min
(
cx
.ccx
(),
cx
.ccx
()
.int_type
);
llvm
::
LLVMBuildAtomicStore
(
B
(
cx
),
Val
,
Ptr
,
order
,
align
as
c_uint
);
}
}
...
...
src/rustllvm/RustWrapper.cpp
浏览文件 @
474d9983
...
...
@@ -548,22 +548,24 @@ extern "C" LLVMTypeRef LLVMMetadataType(void) {
extern
"C"
LLVMValueRef
LLVMBuildAtomicLoad
(
LLVMBuilderRef
B
,
LLVMValueRef
source
,
const
char
*
Name
,
AtomicOrdering
order
)
{
AtomicOrdering
order
,
unsigned
alignment
)
{
LoadInst
*
li
=
new
LoadInst
(
unwrap
(
source
),
0
);
li
->
setVolatile
(
true
);
li
->
setAtomic
(
order
);
li
->
setAlignment
(
sizeof
(
intptr_t
)
);
li
->
setAlignment
(
alignment
);
return
wrap
(
unwrap
(
B
)
->
Insert
(
li
,
Name
));
}
extern
"C"
LLVMValueRef
LLVMBuildAtomicStore
(
LLVMBuilderRef
B
,
LLVMValueRef
val
,
LLVMValueRef
target
,
AtomicOrdering
order
)
{
LLVMValueRef
val
,
LLVMValueRef
target
,
AtomicOrdering
order
,
unsigned
alignment
)
{
StoreInst
*
si
=
new
StoreInst
(
unwrap
(
val
),
unwrap
(
target
));
si
->
setVolatile
(
true
);
si
->
setAtomic
(
order
);
si
->
setAlignment
(
sizeof
(
intptr_t
)
);
si
->
setAlignment
(
alignment
);
return
wrap
(
unwrap
(
B
)
->
Insert
(
si
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录