Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
a95c6790
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
a95c6790
编写于
6月 09, 2003
作者:
B
bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
arm support
git-svn-id:
svn://svn.savannah.nongnu.org/qemu/trunk@221
c046a42c-6fe2-441c-8c8c-71466251a162
上级
0f533160
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
61 addition
and
8 deletion
+61
-8
cpu-i386.h
cpu-i386.h
+38
-8
exec.h
exec.h
+12
-0
translate-i386.c
translate-i386.c
+11
-0
未找到文件。
cpu-i386.h
浏览文件 @
a95c6790
...
...
@@ -238,7 +238,10 @@ static inline void stb(void *ptr, int v)
*
(
uint8_t
*
)
ptr
=
v
;
}
#ifdef WORDS_BIGENDIAN
/* NOTE: on arm, putting 2 in /proc/sys/debug/alignment so that the
kernel handles unaligned load/stores may give better results, but
it is a system wide setting : bad */
#if defined(WORDS_BIGENDIAN) || defined(__arm__)
/* conservative code for little endian unaligned accesses */
static
inline
int
lduw
(
void
*
ptr
)
...
...
@@ -329,24 +332,50 @@ static inline float ldfl(void *ptr)
return
u
.
f
;
}
static
inline
void
stfl
(
void
*
ptr
,
float
v
)
{
union
{
float
f
;
uint32_t
i
;
}
u
;
u
.
f
=
v
;
stl
(
ptr
,
u
.
i
);
}
#if defined(__arm__) && !defined(WORDS_BIGENDIAN)
/* NOTE: arm is horrible as double 32 bit words are stored in big endian ! */
static
inline
double
ldfq
(
void
*
ptr
)
{
union
{
double
d
;
uint
64_t
i
;
uint
32_t
tab
[
2
]
;
}
u
;
u
.
i
=
ldq
(
ptr
);
u
.
tab
[
1
]
=
ldl
(
ptr
);
u
.
tab
[
0
]
=
ldl
(
ptr
+
4
);
return
u
.
d
;
}
static
inline
void
stf
l
(
void
*
ptr
,
float
v
)
static
inline
void
stf
q
(
void
*
ptr
,
double
v
)
{
union
{
float
f
;
uint32_t
i
;
double
d
;
uint32_t
tab
[
2
]
;
}
u
;
u
.
f
=
v
;
stl
(
ptr
,
u
.
i
);
u
.
d
=
v
;
stl
(
ptr
,
u
.
tab
[
1
]);
stl
(
ptr
+
4
,
u
.
tab
[
0
]);
}
#else
static
inline
double
ldfq
(
void
*
ptr
)
{
union
{
double
d
;
uint64_t
i
;
}
u
;
u
.
i
=
ldq
(
ptr
);
return
u
.
d
;
}
static
inline
void
stfq
(
void
*
ptr
,
double
v
)
...
...
@@ -358,6 +387,7 @@ static inline void stfq(void *ptr, double v)
u
.
d
=
v
;
stq
(
ptr
,
u
.
i
);
}
#endif
#else
...
...
exec.h
浏览文件 @
a95c6790
...
...
@@ -246,6 +246,18 @@ static inline int testandset (int *p)
}
#endif
#ifdef __arm__
static
inline
int
testandset
(
int
*
spinlock
)
{
register
unsigned
int
ret
;
__asm__
__volatile__
(
"swp %0, %1, [%2]"
:
"=r"
(
ret
)
:
"0"
(
1
),
"r"
(
spinlock
));
return
ret
;
}
#endif
typedef
int
spinlock_t
;
#define SPIN_LOCK_UNLOCKED 0
...
...
translate-i386.c
浏览文件 @
a95c6790
...
...
@@ -104,6 +104,16 @@ static void inline flush_icache_range(unsigned long start, unsigned long stop)
#endif
#ifdef __arm__
static
inline
void
flush_icache_range
(
unsigned
long
start
,
unsigned
long
stop
)
{
register
unsigned
long
_beg
__asm
(
"a1"
)
=
start
;
register
unsigned
long
_end
__asm
(
"a2"
)
=
stop
;
register
unsigned
long
_flg
__asm
(
"a3"
)
=
0
;
__asm
__volatile__
(
"swi 0x9f0002"
:
:
"r"
(
_beg
),
"r"
(
_end
),
"r"
(
_flg
));
}
#endif
extern
FILE
*
logfile
;
extern
int
loglevel
;
...
...
@@ -166,6 +176,7 @@ enum {
NB_OPS
,
};
#include "dyngen.h"
#include "op-i386.h"
/* operand size */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录