comparison src/cpu/x86/vm/c1_Runtime1_x86.cpp @ 2607:008adfd6d850

Fixed the stateBefore of invokes and monitorenter instructions to include the arguments of the instruction. This is necessary to ensure correct continuation in the interpreter when the stateBefore is used as a deoptimization point.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Fri, 06 May 2011 17:47:17 +0200
parents 0654ee04b214
children b1b58f908044
comparison
equal deleted inserted replaced
2606:f21f430a6ef2 2607:008adfd6d850
1922 OopMap* oop_map = save_live_registers(sasm, 1, false); 1922 OopMap* oop_map = save_live_registers(sasm, 1, false);
1923 c1x_generate_handle_exception(sasm, oop_maps, oop_map); 1923 c1x_generate_handle_exception(sasm, oop_maps, oop_map);
1924 break; 1924 break;
1925 } 1925 }
1926 1926
1927 case c1x_global_implicit_null_id: {
1928 __ push(rax);
1929 __ push(rax);
1930 // move saved fp to make space for the inserted return address
1931 __ get_thread(rax);
1932 __ movptr(rax, Address(rax, JavaThread::saved_exception_pc_offset()));
1933 __ movptr(Address(rsp, HeapWordSize), rax);
1934 __ pop(rax);
1935
1936 { StubFrame f(sasm, "c1x_global_implicit_null_id", dont_gc_arguments);
1937 oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_null_pointer_exception), false);
1938 }
1939 break;
1940 }
1941
1942 case c1x_throw_div0_exception_id: { 1927 case c1x_throw_div0_exception_id: {
1943 __ push(rax); 1928 __ push(rax);
1944 __ push(rax); 1929 __ push(rax);
1945 // move saved fp to make space for the inserted return address 1930 // move saved fp to make space for the inserted return address
1946 __ get_thread(rax); 1931 __ get_thread(rax);