Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
369b22f9
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
接近 2 年 前同步成功
通知
37
Star
125
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Musl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
369b22f9
编写于
1月 22, 2016
作者:
R
Rich Felker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
overhaul mips atomics for new atomics framework
上级
e617b9ee
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
53 deletion
+31
-53
arch/mips/atomic_arch.h
arch/mips/atomic_arch.h
+31
-53
未找到文件。
arch/mips/atomic_arch.h
浏览文件 @
369b22f9
#define a_
cas a_cas
static
inline
int
a_
cas
(
volatile
int
*
p
,
int
t
,
int
s
)
#define a_
ll a_ll
static
inline
int
a_
ll
(
volatile
int
*
p
)
{
int
dummy
;
__asm__
__volatile__
(
".set push
\n
"
".set mips2
\n
"
".set noreorder
\n
"
" sync
\n
"
"1: ll %0, %2
\n
"
" bne %0, %3, 1f
\n
"
" addu %1, %4, $0
\n
"
" sc %1, %2
\n
"
" beq %1, $0, 1b
\n
"
" nop
\n
"
" sync
\n
"
"1:
\n
"
".set pop
\n
"
:
"=&r"
(
t
),
"=&r"
(
dummy
),
"+m"
(
*
p
)
:
"r"
(
t
),
"r"
(
s
)
:
"memory"
);
return
t
;
int
v
;
__asm__
__volatile__
(
".set push ; .set mips2
\n\t
"
"ll %0, %1"
"
\n\t
.set pop"
:
"=r"
(
v
)
:
"m"
(
*
p
));
return
v
;
}
#define a_s
wap a_swap
static
inline
int
a_s
wap
(
volatile
int
*
x
,
int
v
)
#define a_s
c a_sc
static
inline
int
a_s
c
(
volatile
int
*
p
,
int
v
)
{
int
old
,
dummy
;
__asm__
__volatile__
(
".set push
\n
"
".set mips2
\n
"
".set noreorder
\n
"
" sync
\n
"
"1: ll %0, %2
\n
"
" addu %1, %3, $0
\n
"
" sc %1, %2
\n
"
" beq %1, $0, 1b
\n
"
" nop
\n
"
" sync
\n
"
".set pop
\n
"
:
"=&r"
(
old
),
"=&r"
(
dummy
),
"+m"
(
*
x
)
:
"r"
(
v
)
:
"memory"
);
return
old
;
int
r
;
__asm__
__volatile__
(
".set push ; .set mips2
\n\t
"
"sc %0, %1"
"
\n\t
.set pop"
:
"=r"
(
r
),
"=m"
(
*
p
)
:
"0"
(
v
)
:
"memory"
);
return
r
;
}
#define a_
fetch_add a_fetch_add
static
inline
int
a_fetch_add
(
volatile
int
*
x
,
int
v
)
#define a_
barrier a_barrier
static
inline
void
a_barrier
(
)
{
int
old
,
dummy
;
__asm__
__volatile__
(
".set push
\n
"
".set mips2
\n
"
".set noreorder
\n
"
" sync
\n
"
"1: ll %0, %2
\n
"
" addu %1, %0, %3
\n
"
" sc %1, %2
\n
"
" beq %1, $0, 1b
\n
"
" nop
\n
"
" sync
\n
"
".set pop
\n
"
:
"=&r"
(
old
),
"=&r"
(
dummy
),
"+m"
(
*
x
)
:
"r"
(
v
)
:
"memory"
);
return
old
;
/* mips2 sync, but using too many directives causes
* gcc not to inline it, so encode with .long instead. */
__asm__
__volatile__
(
".long 0xf"
:
:
:
"memory"
);
#if 0
__asm__ __volatile__ (
".set push ; .set mips2 ; sync ; .set pop"
: : : "memory");
#endif
}
#define a_pre_llsc a_barrier
#define a_post_llsc a_barrier
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录