849 850 // LIR operation codes 851 enum LIR_Code { 852 lir_none 853 , begin_op0 854 , lir_word_align 855 , lir_label 856 , lir_nop 857 , lir_backwardbranch_target 858 , lir_std_entry 859 , lir_osr_entry 860 , lir_build_frame 861 , lir_fpop_raw 862 , lir_24bit_FPU 863 , lir_reset_FPU 864 , lir_breakpoint 865 , lir_rtcall 866 , lir_membar 867 , lir_membar_acquire 868 , lir_membar_release 869 , lir_get_thread 870 , end_op0 871 , begin_op1 872 , lir_fxch 873 , lir_fld 874 , lir_ffree 875 , lir_push 876 , lir_pop 877 , lir_null_check 878 , lir_return 879 , lir_leal 880 , lir_neg 881 , lir_branch 882 , lir_cond_float_branch 883 , lir_move 884 , lir_prefetchr 885 , lir_prefetchw 886 , lir_convert 887 , lir_alloc_object 888 , lir_monaddr 1901 append(new LIR_OpJavaCall(lir_static_call, method, LIR_OprFact::illegalOpr, result, dest, arguments, info)); 1902 } 1903 void call_icvirtual(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1904 address dest, LIR_OprList* arguments, CodeEmitInfo* info) { 1905 append(new LIR_OpJavaCall(lir_icvirtual_call, method, receiver, result, dest, arguments, info)); 1906 } 1907 void call_virtual(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1908 intptr_t vtable_offset, LIR_OprList* arguments, CodeEmitInfo* info) { 1909 append(new LIR_OpJavaCall(lir_virtual_call, method, receiver, result, vtable_offset, arguments, info)); 1910 } 1911 void call_dynamic(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1912 address dest, LIR_OprList* arguments, CodeEmitInfo* info) { 1913 append(new LIR_OpJavaCall(lir_dynamic_call, method, receiver, result, dest, arguments, info)); 1914 } 1915 1916 void get_thread(LIR_Opr result) { append(new LIR_Op0(lir_get_thread, result)); } 1917 void word_align() { append(new LIR_Op0(lir_word_align)); } 1918 void membar() { append(new LIR_Op0(lir_membar)); } 1919 void membar_acquire() { append(new LIR_Op0(lir_membar_acquire)); } 1920 void membar_release() { append(new LIR_Op0(lir_membar_release)); } 1921 1922 void nop() { append(new LIR_Op0(lir_nop)); } 1923 void build_frame() { append(new LIR_Op0(lir_build_frame)); } 1924 1925 void std_entry(LIR_Opr receiver) { append(new LIR_Op0(lir_std_entry, receiver)); } 1926 void osr_entry(LIR_Opr osrPointer) { append(new LIR_Op0(lir_osr_entry, osrPointer)); } 1927 1928 void branch_destination(Label* lbl) { append(new LIR_OpLabel(lbl)); } 1929 1930 void negate(LIR_Opr from, LIR_Opr to) { append(new LIR_Op1(lir_neg, from, to)); } 1931 void leal(LIR_Opr from, LIR_Opr result_reg) { append(new LIR_Op1(lir_leal, from, result_reg)); } 1932 1933 // result is a stack location for old backend and vreg for UseLinearScan 1934 // stack_loc_temp is an illegal register for old backend 1935 void roundfp(LIR_Opr reg, LIR_Opr stack_loc_temp, LIR_Opr result) { append(new LIR_OpRoundFP(reg, stack_loc_temp, result)); } 1936 void unaligned_move(LIR_Address* src, LIR_Opr dst) { append(new LIR_Op1(lir_move, LIR_OprFact::address(src), dst, dst->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1937 void unaligned_move(LIR_Opr src, LIR_Address* dst) { append(new LIR_Op1(lir_move, src, LIR_OprFact::address(dst), src->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1938 void unaligned_move(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_move, src, dst, dst->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1939 void move(LIR_Opr src, LIR_Opr dst, CodeEmitInfo* info = NULL) { append(new LIR_Op1(lir_move, src, dst, dst->type(), lir_patch_none, info)); } 1940 void move(LIR_Address* src, LIR_Opr dst, CodeEmitInfo* info = NULL) { append(new LIR_Op1(lir_move, LIR_OprFact::address(src), dst, src->type(), lir_patch_none, info)); } | 849 850 // LIR operation codes 851 enum LIR_Code { 852 lir_none 853 , begin_op0 854 , lir_word_align 855 , lir_label 856 , lir_nop 857 , lir_backwardbranch_target 858 , lir_std_entry 859 , lir_osr_entry 860 , lir_build_frame 861 , lir_fpop_raw 862 , lir_24bit_FPU 863 , lir_reset_FPU 864 , lir_breakpoint 865 , lir_rtcall 866 , lir_membar 867 , lir_membar_acquire 868 , lir_membar_release 869 , lir_membar_loadload 870 , lir_membar_storestore 871 , lir_membar_loadstore 872 , lir_membar_storeload 873 , lir_get_thread 874 , end_op0 875 , begin_op1 876 , lir_fxch 877 , lir_fld 878 , lir_ffree 879 , lir_push 880 , lir_pop 881 , lir_null_check 882 , lir_return 883 , lir_leal 884 , lir_neg 885 , lir_branch 886 , lir_cond_float_branch 887 , lir_move 888 , lir_prefetchr 889 , lir_prefetchw 890 , lir_convert 891 , lir_alloc_object 892 , lir_monaddr 1905 append(new LIR_OpJavaCall(lir_static_call, method, LIR_OprFact::illegalOpr, result, dest, arguments, info)); 1906 } 1907 void call_icvirtual(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1908 address dest, LIR_OprList* arguments, CodeEmitInfo* info) { 1909 append(new LIR_OpJavaCall(lir_icvirtual_call, method, receiver, result, dest, arguments, info)); 1910 } 1911 void call_virtual(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1912 intptr_t vtable_offset, LIR_OprList* arguments, CodeEmitInfo* info) { 1913 append(new LIR_OpJavaCall(lir_virtual_call, method, receiver, result, vtable_offset, arguments, info)); 1914 } 1915 void call_dynamic(ciMethod* method, LIR_Opr receiver, LIR_Opr result, 1916 address dest, LIR_OprList* arguments, CodeEmitInfo* info) { 1917 append(new LIR_OpJavaCall(lir_dynamic_call, method, receiver, result, dest, arguments, info)); 1918 } 1919 1920 void get_thread(LIR_Opr result) { append(new LIR_Op0(lir_get_thread, result)); } 1921 void word_align() { append(new LIR_Op0(lir_word_align)); } 1922 void membar() { append(new LIR_Op0(lir_membar)); } 1923 void membar_acquire() { append(new LIR_Op0(lir_membar_acquire)); } 1924 void membar_release() { append(new LIR_Op0(lir_membar_release)); } 1925 void membar_loadload() { append(new LIR_Op0(lir_membar_loadload)); } 1926 void membar_storestore() { append(new LIR_Op0(lir_membar_storestore)); } 1927 void membar_loadstore() { append(new LIR_Op0(lir_membar_loadstore)); } 1928 void membar_storeload() { append(new LIR_Op0(lir_membar_storeload)); } 1929 1930 void nop() { append(new LIR_Op0(lir_nop)); } 1931 void build_frame() { append(new LIR_Op0(lir_build_frame)); } 1932 1933 void std_entry(LIR_Opr receiver) { append(new LIR_Op0(lir_std_entry, receiver)); } 1934 void osr_entry(LIR_Opr osrPointer) { append(new LIR_Op0(lir_osr_entry, osrPointer)); } 1935 1936 void branch_destination(Label* lbl) { append(new LIR_OpLabel(lbl)); } 1937 1938 void negate(LIR_Opr from, LIR_Opr to) { append(new LIR_Op1(lir_neg, from, to)); } 1939 void leal(LIR_Opr from, LIR_Opr result_reg) { append(new LIR_Op1(lir_leal, from, result_reg)); } 1940 1941 // result is a stack location for old backend and vreg for UseLinearScan 1942 // stack_loc_temp is an illegal register for old backend 1943 void roundfp(LIR_Opr reg, LIR_Opr stack_loc_temp, LIR_Opr result) { append(new LIR_OpRoundFP(reg, stack_loc_temp, result)); } 1944 void unaligned_move(LIR_Address* src, LIR_Opr dst) { append(new LIR_Op1(lir_move, LIR_OprFact::address(src), dst, dst->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1945 void unaligned_move(LIR_Opr src, LIR_Address* dst) { append(new LIR_Op1(lir_move, src, LIR_OprFact::address(dst), src->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1946 void unaligned_move(LIR_Opr src, LIR_Opr dst) { append(new LIR_Op1(lir_move, src, dst, dst->type(), lir_patch_none, NULL, lir_move_unaligned)); } 1947 void move(LIR_Opr src, LIR_Opr dst, CodeEmitInfo* info = NULL) { append(new LIR_Op1(lir_move, src, dst, dst->type(), lir_patch_none, info)); } 1948 void move(LIR_Address* src, LIR_Opr dst, CodeEmitInfo* info = NULL) { append(new LIR_Op1(lir_move, LIR_OprFact::address(src), dst, src->type(), lir_patch_none, info)); } |