1 /* |
1 /* |
2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 1997-2010 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
83 // Expression stack |
83 // Expression stack |
84 void f2ieee(); // truncate ftos to 32bits |
84 void f2ieee(); // truncate ftos to 32bits |
85 void d2ieee(); // truncate dtos to 64bits |
85 void d2ieee(); // truncate dtos to 64bits |
86 |
86 |
87 void pop_ptr(Register r = rax); |
87 void pop_ptr(Register r = rax); |
88 void pop_ptr(Register r, Register tag); |
|
89 void pop_i(Register r = rax); |
88 void pop_i(Register r = rax); |
90 void pop_l(Register lo = rax, Register hi = rdx); |
89 void pop_l(Register lo = rax, Register hi = rdx); |
91 void pop_f(); |
90 void pop_f(); |
92 void pop_d(); |
91 void pop_d(); |
93 void pop_ftos_to_rsp(); |
|
94 void pop_dtos_to_rsp(); |
|
95 |
92 |
96 void push_ptr(Register r = rax); |
93 void push_ptr(Register r = rax); |
97 void push_ptr(Register r, Register tag); |
|
98 void push_i(Register r = rax); |
94 void push_i(Register r = rax); |
99 void push_l(Register lo = rax, Register hi = rdx); |
95 void push_l(Register lo = rax, Register hi = rdx); |
100 void push_d(Register r = rax); |
96 void push_d(Register r = rax); |
101 void push_f(); |
97 void push_f(); |
102 |
98 |
110 |
106 |
111 // These are dummies to prevent surprise implicit conversions to Register |
107 // These are dummies to prevent surprise implicit conversions to Register |
112 void pop(void* v ); // Add unimplemented ambiguous method |
108 void pop(void* v ); // Add unimplemented ambiguous method |
113 void push(void* v ); // Add unimplemented ambiguous method |
109 void push(void* v ); // Add unimplemented ambiguous method |
114 |
110 |
115 DEBUG_ONLY(void verify_stack_tag(frame::Tag t);) |
111 void empty_expression_stack() { |
116 |
112 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize)); |
117 #endif // CC_INTERP |
113 // NULL last_sp until next java call |
118 |
114 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD); |
119 #ifndef CC_INTERP |
|
120 |
|
121 void empty_expression_stack() { |
|
122 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize)); |
|
123 // NULL last_sp until next java call |
|
124 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD); |
|
125 } |
115 } |
126 |
116 |
127 // Tagged stack helpers for swap and dup |
117 // Helpers for swap and dup |
128 void load_ptr_and_tag(int n, Register val, Register tag); |
118 void load_ptr(int n, Register val); |
129 void store_ptr_and_tag(int n, Register val, Register tag); |
119 void store_ptr(int n, Register val); |
130 |
|
131 // Tagged Local support |
|
132 |
|
133 void tag_local(frame::Tag tag, int n); |
|
134 void tag_local(Register tag, int n); |
|
135 void tag_local(frame::Tag tag, Register idx); |
|
136 void tag_local(Register tag, Register idx); |
|
137 |
|
138 #ifdef ASSERT |
|
139 void verify_local_tag(frame::Tag tag, int n); |
|
140 void verify_local_tag(frame::Tag tag, Register idx); |
|
141 #endif // ASSERT |
|
142 |
120 |
143 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls |
121 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls |
144 void super_call_VM_leaf(address entry_point); |
122 void super_call_VM_leaf(address entry_point); |
145 void super_call_VM_leaf(address entry_point, Register arg_1); |
123 void super_call_VM_leaf(address entry_point, Register arg_1); |
146 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2); |
124 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2); |