Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
aabc997b
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
aabc997b
编写于
1月 13, 2009
作者:
X
xlu
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
233561db
9b208dd6
变更
8
显示空白变更内容
内联
并排
Showing
8 changed file
with
45 addition
and
37 deletion
+45
-37
src/cpu/x86/vm/assembler_x86.cpp
src/cpu/x86/vm/assembler_x86.cpp
+24
-21
src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp
src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp
+2
-2
src/cpu/x86/vm/cppInterpreter_x86.cpp
src/cpu/x86/vm/cppInterpreter_x86.cpp
+7
-7
src/cpu/x86/vm/frame_x86.inline.hpp
src/cpu/x86/vm/frame_x86.inline.hpp
+1
-1
src/cpu/x86/vm/interp_masm_x86_64.cpp
src/cpu/x86/vm/interp_masm_x86_64.cpp
+1
-1
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
+6
-0
src/share/vm/interpreter/bytecodeInterpreter.cpp
src/share/vm/interpreter/bytecodeInterpreter.cpp
+4
-4
src/share/vm/interpreter/bytecodeInterpreter.hpp
src/share/vm/interpreter/bytecodeInterpreter.hpp
+0
-1
未找到文件。
src/cpu/x86/vm/assembler_x86.cpp
浏览文件 @
aabc997b
...
...
@@ -6943,8 +6943,10 @@ void MacroAssembler::trigfunc(char trig, int num_fpu_regs_in_use) {
Label
slow_case
,
done
;
ExternalAddress
pi4_adr
=
(
address
)
&
pi_4
;
if
(
reachable
(
pi4_adr
))
{
// x ?<= pi/4
fld_d
(
ExternalAddress
((
address
)
&
pi_4
)
);
fld_d
(
pi4_adr
);
fld_s
(
1
);
// Stack: X PI/4 X
fabs
();
// Stack: |X| PI/4 X
fcmp
(
tmp
);
...
...
@@ -6966,6 +6968,7 @@ void MacroAssembler::trigfunc(char trig, int num_fpu_regs_in_use) {
break
;
}
jmp
(
done
);
}
// slow case: runtime call
bind
(
slow_case
);
...
...
src/cpu/x86/vm/bytecodeInterpreter_x86.inline.hpp
浏览文件 @
aabc997b
...
...
@@ -213,7 +213,7 @@ inline jint BytecodeInterpreter::VMintAnd(jint op1, jint op2) {
inline
jint
BytecodeInterpreter
::
VMintDiv
(
jint
op1
,
jint
op2
)
{
/* it's possible we could catch this special case implicitly */
if
(
op1
==
0x80000000
&&
op2
==
-
1
)
return
op1
;
if
(
(
juint
)
op1
==
0x80000000
&&
op2
==
-
1
)
return
op1
;
else
return
op1
/
op2
;
}
...
...
@@ -231,7 +231,7 @@ inline jint BytecodeInterpreter::VMintOr(jint op1, jint op2) {
inline
jint
BytecodeInterpreter
::
VMintRem
(
jint
op1
,
jint
op2
)
{
/* it's possible we could catch this special case implicitly */
if
(
op1
==
0x80000000
&&
op2
==
-
1
)
return
0
;
if
(
(
juint
)
op1
==
0x80000000
&&
op2
==
-
1
)
return
0
;
else
return
op1
%
op2
;
}
...
...
src/cpu/x86/vm/cppInterpreter_x86.cpp
浏览文件 @
aabc997b
...
...
@@ -594,7 +594,7 @@ void InterpreterGenerator::generate_counter_overflow(Label* do_continue) {
__
call_VM
(
noreg
,
CAST_FROM_FN_PTR
(
address
,
InterpreterRuntime
::
frequency_counter_overflow
),
rax
);
// for c++ interpreter can rsi really be munged?
__
lea
(
state
,
Address
(
rbp
,
-
sizeof
(
BytecodeInterpreter
)));
// restore state
__
lea
(
state
,
Address
(
rbp
,
-
(
int
)
sizeof
(
BytecodeInterpreter
)));
// restore state
__
movptr
(
rbx
,
Address
(
state
,
byte_offset_of
(
BytecodeInterpreter
,
_method
)));
// restore method
__
movptr
(
rdi
,
Address
(
state
,
byte_offset_of
(
BytecodeInterpreter
,
_locals
)));
// get locals pointer
...
...
@@ -658,7 +658,7 @@ void InterpreterGenerator::generate_stack_overflow_check(void) {
const
Address
size_of_stack
(
rbx
,
methodOopDesc
::
max_stack_offset
());
// Always give one monitor to allow us to start interp if sync method.
// Any additional monitors need a check when moving the expression stack
const
one_monitor
=
frame
::
interpreter_frame_monitor_size
()
*
wordSize
;
const
int
one_monitor
=
frame
::
interpreter_frame_monitor_size
()
*
wordSize
;
__
load_unsigned_word
(
rax
,
size_of_stack
);
// get size of expression stack in words
__
lea
(
rax
,
Address
(
noreg
,
rax
,
Interpreter
::
stackElementScale
(),
one_monitor
));
__
lea
(
rax
,
Address
(
rax
,
rdx
,
Interpreter
::
stackElementScale
(),
overhead_size
));
...
...
@@ -1829,7 +1829,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
Label
unwind_and_forward
;
// restore state pointer.
__
lea
(
state
,
Address
(
rbp
,
-
sizeof
(
BytecodeInterpreter
)));
__
lea
(
state
,
Address
(
rbp
,
-
(
int
)
sizeof
(
BytecodeInterpreter
)));
__
movptr
(
rbx
,
STATE
(
_method
));
// get method
#ifdef _LP64
...
...
@@ -1877,14 +1877,14 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
// The FPU stack is clean if UseSSE >= 2 but must be cleaned in other cases
if
(
UseSSE
<
2
)
{
__
lea
(
state
,
Address
(
rbp
,
-
sizeof
(
BytecodeInterpreter
)));
__
lea
(
state
,
Address
(
rbp
,
-
(
int
)
sizeof
(
BytecodeInterpreter
)));
__
movptr
(
rbx
,
STATE
(
_result
.
_to_call
.
_callee
));
// get method just executed
__
movl
(
rcx
,
Address
(
rbx
,
methodOopDesc
::
result_index_offset
()));
__
cmpl
(
rcx
,
AbstractInterpreter
::
BasicType_as_index
(
T_FLOAT
));
// Result stub address array index
__
jcc
(
Assembler
::
equal
,
do_float
);
__
cmpl
(
rcx
,
AbstractInterpreter
::
BasicType_as_index
(
T_DOUBLE
));
// Result stub address array index
__
jcc
(
Assembler
::
equal
,
do_double
);
#if
def COMPILER2
#if
!defined(_LP64) || defined(COMPILER1) || !defined(COMPILER2)
__
empty_FPU_stack
();
#endif // COMPILER2
__
jmp
(
done_conv
);
...
...
@@ -1928,7 +1928,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
// Restore rsi/r13 as compiled code may not preserve it
__
lea
(
state
,
Address
(
rbp
,
-
sizeof
(
BytecodeInterpreter
)));
__
lea
(
state
,
Address
(
rbp
,
-
(
int
)
sizeof
(
BytecodeInterpreter
)));
// restore stack to what we had when we left (in case i2c extended it)
...
...
@@ -1942,7 +1942,7 @@ address InterpreterGenerator::generate_normal_entry(bool synchronized) {
#else
__
movptr
(
rcx
,
STATE
(
_thread
));
// get thread
__
cmpptr
(
Address
(
rcx
,
Thread
::
pending_exception_offset
()),
(
int32_t
)
NULL_WORD
);
#endif /
_
_LP64
#endif /
/
_LP64
__
jcc
(
Assembler
::
notZero
,
return_with_exception
);
// get method just executed
...
...
src/cpu/x86/vm/frame_x86.inline.hpp
浏览文件 @
aabc997b
...
...
@@ -139,7 +139,7 @@ inline address* frame::native_param_addr(int idx) const { return (address*) addr
#ifdef CC_INTERP
inline
interpreterState
frame
::
get_interpreterState
()
const
{
return
((
interpreterState
)
addr_at
(
-
sizeof
(
BytecodeInterpreter
)
/
wordSize
));
return
((
interpreterState
)
addr_at
(
-
((
int
)
sizeof
(
BytecodeInterpreter
)
)
/
wordSize
));
}
inline
intptr_t
*
frame
::
sender_sp
()
const
{
...
...
src/cpu/x86/vm/interp_masm_x86_64.cpp
浏览文件 @
aabc997b
...
...
@@ -30,7 +30,7 @@
#ifdef CC_INTERP
void
InterpreterMacroAssembler
::
get_method
(
Register
reg
)
{
movptr
(
reg
,
Address
(
rbp
,
-
(
sizeof
(
BytecodeInterpreter
)
+
2
*
wordSize
)));
movptr
(
reg
,
Address
(
rbp
,
-
(
(
int
)
sizeof
(
BytecodeInterpreter
)
+
2
*
wordSize
)));
movptr
(
reg
,
Address
(
reg
,
byte_offset_of
(
BytecodeInterpreter
,
_method
)));
}
#endif // CC_INTERP
...
...
src/cpu/x86/vm/sharedRuntime_x86_64.cpp
浏览文件 @
aabc997b
...
...
@@ -2954,10 +2954,16 @@ void SharedRuntime::generate_uncommon_trap_blob() {
__
pushptr
(
Address
(
rcx
,
0
));
// Save return address
__
enter
();
// Save old & set new rbp
__
subptr
(
rsp
,
rbx
);
// Prolog
#ifdef CC_INTERP
__
movptr
(
Address
(
rbp
,
-
(
sizeof
(
BytecodeInterpreter
))
+
in_bytes
(
byte_offset_of
(
BytecodeInterpreter
,
_sender_sp
))),
sender_sp
);
// Make it walkable
#else // CC_INTERP
__
movptr
(
Address
(
rbp
,
frame
::
interpreter_frame_sender_sp_offset
*
wordSize
),
sender_sp
);
// Make it walkable
// This value is corrected by layout_activation_impl
__
movptr
(
Address
(
rbp
,
frame
::
interpreter_frame_last_sp_offset
*
wordSize
),
(
int32_t
)
NULL_WORD
);
#endif // CC_INTERP
__
mov
(
sender_sp
,
rsp
);
// Pass sender_sp to next frame
__
addptr
(
rsi
,
wordSize
);
// Bump array pointer (sizes)
__
addptr
(
rcx
,
wordSize
);
// Bump array pointer (pcs)
...
...
src/share/vm/interpreter/bytecodeInterpreter.cpp
浏览文件 @
aabc997b
...
...
@@ -163,7 +163,7 @@
#ifdef USELABELS
// Have to do this dispatch this way in C++ because otherwise gcc complains about crossing an
// initialization (which is is the initialization of the table pointer...)
#define DISPATCH(opcode) goto *dispatch_table[opcode]
#define DISPATCH(opcode) goto *
(void*)
dispatch_table[opcode]
#define CONTINUE { \
opcode = *pc; \
DO_UPDATE_INSTRUCTION_COUNT(opcode); \
...
...
@@ -341,7 +341,7 @@
*/
#undef CHECK_NULL
#define CHECK_NULL(obj_) \
if ((obj_) ==
0) {
\
if ((obj_) ==
NULL) {
\
VM_JAVA_ERROR(vmSymbols::java_lang_NullPointerException(), ""); \
}
...
...
@@ -1362,7 +1362,7 @@ run:
#define NULL_COMPARISON_NOT_OP(name) \
CASE(_if##name): { \
int skip = (!(STACK_OBJECT(-1) ==
0))
\
int skip = (!(STACK_OBJECT(-1) ==
NULL))
\
? (int16_t)Bytes::get_Java_u2(pc + 1) : 3; \
address branch_pc = pc; \
UPDATE_PC_AND_TOS(skip, -1); \
...
...
@@ -1372,7 +1372,7 @@ run:
#define NULL_COMPARISON_OP(name) \
CASE(_if##name): { \
int skip = ((STACK_OBJECT(-1) ==
0))
\
int skip = ((STACK_OBJECT(-1) ==
NULL))
\
? (int16_t)Bytes::get_Java_u2(pc + 1) : 3; \
address branch_pc = pc; \
UPDATE_PC_AND_TOS(skip, -1); \
...
...
src/share/vm/interpreter/bytecodeInterpreter.hpp
浏览文件 @
aabc997b
...
...
@@ -66,7 +66,6 @@ friend class CppInterpreterGenerator;
friend
class
InterpreterGenerator
;
friend
class
InterpreterMacroAssembler
;
friend
class
frame
;
friend
class
SharedRuntime
;
friend
class
VMStructs
;
public:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录