2871 2872 void MacroAssembler::divsd(XMMRegister dst, AddressLiteral src) { 2873 if (reachable(src)) { 2874 Assembler::divsd(dst, as_Address(src)); 2875 } else { 2876 lea(rscratch1, src); 2877 Assembler::divsd(dst, Address(rscratch1, 0)); 2878 } 2879 } 2880 2881 void MacroAssembler::divss(XMMRegister dst, AddressLiteral src) { 2882 if (reachable(src)) { 2883 Assembler::divss(dst, as_Address(src)); 2884 } else { 2885 lea(rscratch1, src); 2886 Assembler::divss(dst, Address(rscratch1, 0)); 2887 } 2888 } 2889 2890 // !defined(COMPILER2) is because of stupid core builds 2891 #if !defined(_LP64) || defined(COMPILER1) || !defined(COMPILER2) 2892 void MacroAssembler::empty_FPU_stack() { 2893 if (VM_Version::supports_mmx()) { 2894 emms(); 2895 } else { 2896 for (int i = 8; i-- > 0; ) ffree(i); 2897 } 2898 } 2899 #endif // !LP64 || C1 || !C2 2900 2901 2902 // Defines obj, preserves var_size_in_bytes 2903 void MacroAssembler::eden_allocate(Register obj, 2904 Register var_size_in_bytes, 2905 int con_size_in_bytes, 2906 Register t1, 2907 Label& slow_case) { 2908 assert(obj == rax, "obj must be in rax, for cmpxchg"); 2909 assert_different_registers(obj, var_size_in_bytes, t1); 2910 if (!Universe::heap()->supports_inline_contig_alloc()) { 2911 jmp(slow_case); 2912 } else { 2913 Register end = t1; 2914 Label retry; 2915 bind(retry); 2916 ExternalAddress heap_top((address) Universe::heap()->top_addr()); 2917 movptr(obj, heap_top); 2918 if (var_size_in_bytes == noreg) { 2919 lea(end, Address(obj, con_size_in_bytes)); | 2871 2872 void MacroAssembler::divsd(XMMRegister dst, AddressLiteral src) { 2873 if (reachable(src)) { 2874 Assembler::divsd(dst, as_Address(src)); 2875 } else { 2876 lea(rscratch1, src); 2877 Assembler::divsd(dst, Address(rscratch1, 0)); 2878 } 2879 } 2880 2881 void MacroAssembler::divss(XMMRegister dst, AddressLiteral src) { 2882 if (reachable(src)) { 2883 Assembler::divss(dst, as_Address(src)); 2884 } else { 2885 lea(rscratch1, src); 2886 Assembler::divss(dst, Address(rscratch1, 0)); 2887 } 2888 } 2889 2890 // !defined(COMPILER2) is because of stupid core builds 2891 #if !defined(_LP64) || defined(COMPILER1) || !defined(COMPILER2) || INCLUDE_JVMCI 2892 void MacroAssembler::empty_FPU_stack() { 2893 if (VM_Version::supports_mmx()) { 2894 emms(); 2895 } else { 2896 for (int i = 8; i-- > 0; ) ffree(i); 2897 } 2898 } 2899 #endif // !LP64 || C1 || !C2 || JVMCI 2900 2901 2902 // Defines obj, preserves var_size_in_bytes 2903 void MacroAssembler::eden_allocate(Register obj, 2904 Register var_size_in_bytes, 2905 int con_size_in_bytes, 2906 Register t1, 2907 Label& slow_case) { 2908 assert(obj == rax, "obj must be in rax, for cmpxchg"); 2909 assert_different_registers(obj, var_size_in_bytes, t1); 2910 if (!Universe::heap()->supports_inline_contig_alloc()) { 2911 jmp(slow_case); 2912 } else { 2913 Register end = t1; 2914 Label retry; 2915 bind(retry); 2916 ExternalAddress heap_top((address) Universe::heap()->top_addr()); 2917 movptr(obj, heap_top); 2918 if (var_size_in_bytes == noreg) { 2919 lea(end, Address(obj, con_size_in_bytes)); |