Mercurial > hg > graal-jvmci-8
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 |