comparison src/cpu/x86/vm/assembler_x86.hpp @ 6266:1d7922586cf6

7023639: JSR 292 method handle invocation needs a fast path for compiled code 6984705: JSR 292 method handle creation should not go through JNI Summary: remove assembly code for JDK 7 chained method handles Reviewed-by: jrose, twisti, kvn, mhaupt Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author twisti
date Tue, 24 Jul 2012 10:51:00 -0700
parents 2c368ea3e844
children 006050192a5a
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
1938 void store_klass(Register dst, Register src); 1938 void store_klass(Register dst, Register src);
1939 1939
1940 void load_heap_oop(Register dst, Address src); 1940 void load_heap_oop(Register dst, Address src);
1941 void load_heap_oop_not_null(Register dst, Address src); 1941 void load_heap_oop_not_null(Register dst, Address src);
1942 void store_heap_oop(Address dst, Register src); 1942 void store_heap_oop(Address dst, Register src);
1943 void cmp_heap_oop(Register src1, Address src2, Register tmp = noreg);
1943 1944
1944 // Used for storing NULL. All other oop constants should be 1945 // Used for storing NULL. All other oop constants should be
1945 // stored using routines that take a jobject. 1946 // stored using routines that take a jobject.
1946 void store_heap_oop_null(Address dst); 1947 void store_heap_oop_null(Address dst);
1947 1948
2115 RegisterOrConstant itable_index, 2116 RegisterOrConstant itable_index,
2116 Register method_result, 2117 Register method_result,
2117 Register scan_temp, 2118 Register scan_temp,
2118 Label& no_such_interface); 2119 Label& no_such_interface);
2119 2120
2121 // virtual method calling
2122 void lookup_virtual_method(Register recv_klass,
2123 RegisterOrConstant vtable_index,
2124 Register method_result);
2125
2120 // Test sub_klass against super_klass, with fast and slow paths. 2126 // Test sub_klass against super_klass, with fast and slow paths.
2121 2127
2122 // The fast path produces a tri-state answer: yes / no / maybe-slow. 2128 // The fast path produces a tri-state answer: yes / no / maybe-slow.
2123 // One of the three labels can be NULL, meaning take the fall-through. 2129 // One of the three labels can be NULL, meaning take the fall-through.
2124 // If super_check_offset is -1, the value is loaded up from super_klass. 2130 // If super_check_offset is -1, the value is loaded up from super_klass.
2150 Register super_klass, 2156 Register super_klass,
2151 Register temp_reg, 2157 Register temp_reg,
2152 Label& L_success); 2158 Label& L_success);
2153 2159
2154 // method handles (JSR 292) 2160 // method handles (JSR 292)
2155 void check_method_handle_type(Register mtype_reg, Register mh_reg,
2156 Register temp_reg,
2157 Label& wrong_method_type);
2158 void load_method_handle_vmslots(Register vmslots_reg, Register mh_reg,
2159 Register temp_reg);
2160 void jump_to_method_handle_entry(Register mh_reg, Register temp_reg);
2161 Address argument_address(RegisterOrConstant arg_slot, int extra_slot_offset = 0); 2161 Address argument_address(RegisterOrConstant arg_slot, int extra_slot_offset = 0);
2162
2163 2162
2164 //---- 2163 //----
2165 void set_word_if_not_zero(Register reg); // sets reg to 1 if not zero, otherwise 0 2164 void set_word_if_not_zero(Register reg); // sets reg to 1 if not zero, otherwise 0
2166 2165
2167 // Debugging 2166 // Debugging
2177 void stop(const char* msg); 2176 void stop(const char* msg);
2178 2177
2179 // prints msg and continues 2178 // prints msg and continues
2180 void warn(const char* msg); 2179 void warn(const char* msg);
2181 2180
2181 // dumps registers and other state
2182 void print_state();
2183
2182 static void debug32(int rdi, int rsi, int rbp, int rsp, int rbx, int rdx, int rcx, int rax, int eip, char* msg); 2184 static void debug32(int rdi, int rsi, int rbp, int rsp, int rbx, int rdx, int rcx, int rax, int eip, char* msg);
2183 static void debug64(char* msg, int64_t pc, int64_t regs[]); 2185 static void debug64(char* msg, int64_t pc, int64_t regs[]);
2186 static void print_state32(int rdi, int rsi, int rbp, int rsp, int rbx, int rdx, int rcx, int rax, int eip);
2187 static void print_state64(int64_t pc, int64_t regs[]);
2184 2188
2185 void os_breakpoint(); 2189 void os_breakpoint();
2186 2190
2187 void untested() { stop("untested"); } 2191 void untested() { stop("untested"); }
2188 2192