comparison src/cpu/x86/vm/interp_masm_x86_32.hpp @ 1506:2338d41fbd81

6943304: remove tagged stack interpreter Reviewed-by: coleenp, never, gbenson
author twisti
date Fri, 30 Apr 2010 08:37:24 -0700
parents 87684f1a88b5
children c18cbe5936b8 ab102d5d923e
comparison
equal deleted inserted replaced
1505:0c5b3cf3c1f5 1506:2338d41fbd81
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);