163 if (atomic) { 164 __ push(rdx); 165 __ push(rax); // Must update atomically with FIST 166 __ fild_d(Address(rsp,0)); // So load into FPU register 167 __ fistp_d(dst); // and put into memory atomically 168 __ addptr(rsp, 2*wordSize); 169 } else { 170 __ movptr(dst, rax); 171 __ movptr(dst.plus_disp(wordSize), rdx); 172 } 173 #endif 174 break; 175 case T_FLOAT: 176 assert(val == noreg, "only tos"); 177 __ store_float(dst); 178 break; 179 case T_DOUBLE: 180 assert(val == noreg, "only tos"); 181 __ store_double(dst); 182 break; 183 default: Unimplemented(); 184 } 185 } 186 187 void BarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env, 188 Register obj, Register tmp, Label& slowpath) { 189 __ clear_jweak_tag(obj); 190 __ movptr(obj, Address(obj, 0)); 191 } | 163 if (atomic) { 164 __ push(rdx); 165 __ push(rax); // Must update atomically with FIST 166 __ fild_d(Address(rsp,0)); // So load into FPU register 167 __ fistp_d(dst); // and put into memory atomically 168 __ addptr(rsp, 2*wordSize); 169 } else { 170 __ movptr(dst, rax); 171 __ movptr(dst.plus_disp(wordSize), rdx); 172 } 173 #endif 174 break; 175 case T_FLOAT: 176 assert(val == noreg, "only tos"); 177 __ store_float(dst); 178 break; 179 case T_DOUBLE: 180 assert(val == noreg, "only tos"); 181 __ store_double(dst); 182 break; 183 case T_ADDRESS: 184 __ movptr(dst, val); 185 break; 186 default: Unimplemented(); 187 } 188 } 189 190 void BarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm, Register jni_env, 191 Register obj, Register tmp, Label& slowpath) { 192 __ clear_jweak_tag(obj); 193 __ movptr(obj, Address(obj, 0)); 194 } |