< prev index next >

src/hotspot/cpu/x86/x86.ad

Print this page

 7267 %{
 7268   predicate(!UseCompactObjectHeaders);
 7269   match(Set dst (LoadNKlass mem));
 7270 
 7271   ins_cost(125); // XXX
 7272   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7273   ins_encode %{
 7274     __ movl($dst$$Register, $mem$$Address);
 7275   %}
 7276   ins_pipe(ialu_reg_mem); // XXX
 7277 %}
 7278 
 7279 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7280 %{
 7281   predicate(UseCompactObjectHeaders);
 7282   match(Set dst (LoadNKlass mem));
 7283   effect(KILL cr);
 7284   ins_cost(125);
 7285   format %{
 7286     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7287     "shrl    $dst, markWord::klass_shift_at_offset"
 7288   %}
 7289   ins_encode %{
 7290     __ movl($dst$$Register, $mem$$Address);
 7291     __ shrl($dst$$Register, markWord::klass_shift_at_offset);








 7292   %}
 7293   ins_pipe(ialu_reg_mem);
 7294 %}
 7295 
 7296 // Load Float
 7297 instruct loadF(regF dst, memory mem)
 7298 %{
 7299   match(Set dst (LoadF mem));
 7300 
 7301   ins_cost(145); // XXX
 7302   format %{ "movss   $dst, $mem\t# float" %}
 7303   ins_encode %{
 7304     __ movflt($dst$$XMMRegister, $mem$$Address);
 7305   %}
 7306   ins_pipe(pipe_slow); // XXX
 7307 %}
 7308 
 7309 // Load Double
 7310 instruct loadD_partial(regD dst, memory mem)
 7311 %{

 7267 %{
 7268   predicate(!UseCompactObjectHeaders);
 7269   match(Set dst (LoadNKlass mem));
 7270 
 7271   ins_cost(125); // XXX
 7272   format %{ "movl    $dst, $mem\t# compressed klass ptr" %}
 7273   ins_encode %{
 7274     __ movl($dst$$Register, $mem$$Address);
 7275   %}
 7276   ins_pipe(ialu_reg_mem); // XXX
 7277 %}
 7278 
 7279 instruct loadNKlassCompactHeaders(rRegN dst, memory mem, rFlagsReg cr)
 7280 %{
 7281   predicate(UseCompactObjectHeaders);
 7282   match(Set dst (LoadNKlass mem));
 7283   effect(KILL cr);
 7284   ins_cost(125);
 7285   format %{
 7286     "movl    $dst, $mem\t# compressed klass ptr, shifted\n\t"
 7287     "shrl    $dst, markWord::klass_shift"
 7288   %}
 7289   ins_encode %{
 7290     // The incoming address is pointing into obj-start + Type::klass_offset(). We need to extract
 7291     // obj-start, so that we can load from the object's mark-word instead.
 7292     Register d = $dst$$Register;
 7293     Address  s = ($mem$$Address).plus_disp(-Type::klass_offset());
 7294     if (UseAPX) {
 7295       __ eshrl(d, s, markWord::klass_shift, false);
 7296     } else {
 7297       __ movl(d, s);
 7298       __ shrl(d, markWord::klass_shift);
 7299     }
 7300   %}
 7301   ins_pipe(ialu_reg_mem);
 7302 %}
 7303 
 7304 // Load Float
 7305 instruct loadF(regF dst, memory mem)
 7306 %{
 7307   match(Set dst (LoadF mem));
 7308 
 7309   ins_cost(145); // XXX
 7310   format %{ "movss   $dst, $mem\t# float" %}
 7311   ins_encode %{
 7312     __ movflt($dst$$XMMRegister, $mem$$Address);
 7313   %}
 7314   ins_pipe(pipe_slow); // XXX
 7315 %}
 7316 
 7317 // Load Double
 7318 instruct loadD_partial(regD dst, memory mem)
 7319 %{
< prev index next >