5297 ins_pipe(ialu_reg_mem); // XXX
5298 %}
5299
5300
5301 // Load Klass Pointer
5302 instruct loadKlass(rRegP dst, memory mem)
5303 %{
5304 match(Set dst (LoadKlass mem));
5305
5306 ins_cost(125); // XXX
5307 format %{ "movq $dst, $mem\t# class" %}
5308 ins_encode %{
5309 __ movq($dst$$Register, $mem$$Address);
5310 %}
5311 ins_pipe(ialu_reg_mem); // XXX
5312 %}
5313
5314 // Load narrow Klass Pointer
5315 instruct loadNKlass(rRegN dst, memory mem)
5316 %{
5317 match(Set dst (LoadNKlass mem));
5318
5319 ins_cost(125); // XXX
5320 format %{ "movl $dst, $mem\t# compressed klass ptr" %}
5321 ins_encode %{
5322 __ movl($dst$$Register, $mem$$Address);
5323 %}
5324 ins_pipe(ialu_reg_mem); // XXX
5325 %}
5326
5327 // Load Float
5328 instruct loadF(regF dst, memory mem)
5329 %{
5330 match(Set dst (LoadF mem));
5331
5332 ins_cost(145); // XXX
5333 format %{ "movss $dst, $mem\t# float" %}
5334 ins_encode %{
5335 __ movflt($dst$$XMMRegister, $mem$$Address);
5336 %}
5337 ins_pipe(pipe_slow); // XXX
5338 %}
5339
5340 // Load Double
5341 instruct loadD_partial(regD dst, memory mem)
5342 %{
5343 predicate(!UseXmmLoadAndClearUpper);
5344 match(Set dst (LoadD mem));
5345
5346 ins_cost(145); // XXX
12625
12626 format %{ "cmpl $mem, $src\t# compressed ptr" %}
12627 ins_encode %{
12628 __ cmp_narrow_oop($mem$$Address, (jobject)$src$$constant);
12629 %}
12630 ins_pipe(ialu_cr_reg_mem);
12631 %}
12632
12633 instruct compN_rReg_imm_klass(rFlagsRegU cr, rRegN op1, immNKlass op2) %{
12634 match(Set cr (CmpN op1 op2));
12635
12636 format %{ "cmpl $op1, $op2\t# compressed klass ptr" %}
12637 ins_encode %{
12638 __ cmp_narrow_klass($op1$$Register, (Klass*)$op2$$constant);
12639 %}
12640 ins_pipe(ialu_cr_reg_imm);
12641 %}
12642
12643 instruct compN_mem_imm_klass(rFlagsRegU cr, memory mem, immNKlass src)
12644 %{
12645 match(Set cr (CmpN src (LoadNKlass mem)));
12646
12647 format %{ "cmpl $mem, $src\t# compressed klass ptr" %}
12648 ins_encode %{
12649 __ cmp_narrow_klass($mem$$Address, (Klass*)$src$$constant);
12650 %}
12651 ins_pipe(ialu_cr_reg_mem);
12652 %}
12653
12654 instruct testN_reg(rFlagsReg cr, rRegN src, immN0 zero) %{
12655 match(Set cr (CmpN src zero));
12656
12657 format %{ "testl $src, $src\t# compressed ptr" %}
12658 ins_encode %{ __ testl($src$$Register, $src$$Register); %}
12659 ins_pipe(ialu_cr_reg_imm);
12660 %}
12661
12662 instruct testN_mem(rFlagsReg cr, memory mem, immN0 zero)
12663 %{
12664 predicate(CompressedOops::base() != NULL);
|
5297 ins_pipe(ialu_reg_mem); // XXX
5298 %}
5299
5300
5301 // Load Klass Pointer
5302 instruct loadKlass(rRegP dst, memory mem)
5303 %{
5304 match(Set dst (LoadKlass mem));
5305
5306 ins_cost(125); // XXX
5307 format %{ "movq $dst, $mem\t# class" %}
5308 ins_encode %{
5309 __ movq($dst$$Register, $mem$$Address);
5310 %}
5311 ins_pipe(ialu_reg_mem); // XXX
5312 %}
5313
5314 // Load narrow Klass Pointer
5315 instruct loadNKlass(rRegN dst, memory mem)
5316 %{
5317 predicate(!UseCompactObjectHeaders);
5318 match(Set dst (LoadNKlass mem));
5319
5320 ins_cost(125); // XXX
5321 format %{ "movl $dst, $mem\t# compressed klass ptr" %}
5322 ins_encode %{
5323 __ movl($dst$$Register, $mem$$Address);
5324 %}
5325 ins_pipe(ialu_reg_mem); // XXX
5326 %}
5327
5328 instruct loadNKlassCompactHeaders(rRegN dst, indOffset8 mem, rFlagsReg cr)
5329 %{
5330 predicate(UseCompactObjectHeaders);
5331 match(Set dst (LoadNKlass mem));
5332 effect(KILL cr);
5333 ins_cost(125); // XXX
5334 format %{ "movl $dst, $mem\t# compressed klass ptr" %}
5335 ins_encode %{
5336 assert($mem$$disp == oopDesc::klass_offset_in_bytes(), "expect correct offset 4, but got: %d", $mem$$disp);
5337 assert($mem$$index == 4, "expect no index register: %d", $mem$$index);
5338 __ load_nklass_compact_c2($dst$$Register, $mem$$base$$Register);
5339 %}
5340 ins_pipe(pipe_slow); // XXX
5341 %}
5342
5343 // Load Float
5344 instruct loadF(regF dst, memory mem)
5345 %{
5346 match(Set dst (LoadF mem));
5347
5348 ins_cost(145); // XXX
5349 format %{ "movss $dst, $mem\t# float" %}
5350 ins_encode %{
5351 __ movflt($dst$$XMMRegister, $mem$$Address);
5352 %}
5353 ins_pipe(pipe_slow); // XXX
5354 %}
5355
5356 // Load Double
5357 instruct loadD_partial(regD dst, memory mem)
5358 %{
5359 predicate(!UseXmmLoadAndClearUpper);
5360 match(Set dst (LoadD mem));
5361
5362 ins_cost(145); // XXX
12641
12642 format %{ "cmpl $mem, $src\t# compressed ptr" %}
12643 ins_encode %{
12644 __ cmp_narrow_oop($mem$$Address, (jobject)$src$$constant);
12645 %}
12646 ins_pipe(ialu_cr_reg_mem);
12647 %}
12648
12649 instruct compN_rReg_imm_klass(rFlagsRegU cr, rRegN op1, immNKlass op2) %{
12650 match(Set cr (CmpN op1 op2));
12651
12652 format %{ "cmpl $op1, $op2\t# compressed klass ptr" %}
12653 ins_encode %{
12654 __ cmp_narrow_klass($op1$$Register, (Klass*)$op2$$constant);
12655 %}
12656 ins_pipe(ialu_cr_reg_imm);
12657 %}
12658
12659 instruct compN_mem_imm_klass(rFlagsRegU cr, memory mem, immNKlass src)
12660 %{
12661 predicate(!UseCompactObjectHeaders);
12662 match(Set cr (CmpN src (LoadNKlass mem)));
12663
12664 format %{ "cmpl $mem, $src\t# compressed klass ptr" %}
12665 ins_encode %{
12666 __ cmp_narrow_klass($mem$$Address, (Klass*)$src$$constant);
12667 %}
12668 ins_pipe(ialu_cr_reg_mem);
12669 %}
12670
12671 instruct testN_reg(rFlagsReg cr, rRegN src, immN0 zero) %{
12672 match(Set cr (CmpN src zero));
12673
12674 format %{ "testl $src, $src\t# compressed ptr" %}
12675 ins_encode %{ __ testl($src$$Register, $src$$Register); %}
12676 ins_pipe(ialu_cr_reg_imm);
12677 %}
12678
12679 instruct testN_mem(rFlagsReg cr, memory mem, immN0 zero)
12680 %{
12681 predicate(CompressedOops::base() != NULL);
|