src/cpu/x86/vm/stubGenerator_x86_64.cpp

changeset 684
910a4cb98e9e
parent 631
d1605aabd0a1
child 739
dc7f315e41f7
child 791
1ee8caae33af
equal deleted inserted replaced
683:18aab3cdd513 684:910a4cb98e9e
1220 1220
1221 __ shrq(start, CardTableModRefBS::card_shift); 1221 __ shrq(start, CardTableModRefBS::card_shift);
1222 __ shrq(end, CardTableModRefBS::card_shift); 1222 __ shrq(end, CardTableModRefBS::card_shift);
1223 __ subq(end, start); // number of bytes to copy 1223 __ subq(end, start); // number of bytes to copy
1224 1224
1225 intptr_t disp = (intptr_t) ct->byte_map_base;
1226 if (__ is_simm32(disp)) {
1227 Address cardtable(noreg, noreg, Address::no_scale, disp);
1228 __ lea(scratch, cardtable);
1229 } else {
1230 ExternalAddress cardtable((address)disp);
1231 __ lea(scratch, cardtable);
1232 }
1233
1225 const Register count = end; // 'end' register contains bytes count now 1234 const Register count = end; // 'end' register contains bytes count now
1226 __ lea(scratch, ExternalAddress((address)ct->byte_map_base));
1227 __ addq(start, scratch); 1235 __ addq(start, scratch);
1228 __ BIND(L_loop); 1236 __ BIND(L_loop);
1229 __ movb(Address(start, count, Address::times_1), 0); 1237 __ movb(Address(start, count, Address::times_1), 0);
1230 __ decrementq(count); 1238 __ decrementq(count);
1231 __ jcc(Assembler::greaterEqual, L_loop); 1239 __ jcc(Assembler::greaterEqual, L_loop);

mercurial