5213 __ movl($dst$$Register, $mem$$Address);
5214 %}
5215 ins_pipe(ialu_reg_mem); // XXX
5216 %}
5217
5218
5219 // Load Klass Pointer
5220 instruct loadKlass(rRegP dst, memory mem)
5221 %{
5222 match(Set dst (LoadKlass mem));
5223
5224 ins_cost(125); // XXX
5225 format %{ "movq $dst, $mem\t# class" %}
5226 ins_encode %{
5227 __ movq($dst$$Register, $mem$$Address);
5228 %}
5229 ins_pipe(ialu_reg_mem); // XXX
5230 %}
5231
5232 // Load narrow Klass Pointer
5233 instruct loadNKlass(rRegN dst, memory mem)
5234 %{
5235 match(Set dst (LoadNKlass mem));
5236
5237 ins_cost(125); // XXX
5238 format %{ "movl $dst, $mem\t# compressed klass ptr" %}
5239 ins_encode %{
5240 __ movl($dst$$Register, $mem$$Address);
5241 %}
5242 ins_pipe(ialu_reg_mem); // XXX
5243 %}
5244
5245 // Load Float
5246 instruct loadF(regF dst, memory mem)
5247 %{
5248 match(Set dst (LoadF mem));
5249
5250 ins_cost(145); // XXX
5251 format %{ "movss $dst, $mem\t# float" %}
5252 ins_encode %{
5253 __ movflt($dst$$XMMRegister, $mem$$Address);
5254 %}
5255 ins_pipe(pipe_slow); // XXX
5256 %}
5257
5258 // Load Double
5259 instruct loadD_partial(regD dst, memory mem)
5260 %{
5261 predicate(!UseXmmLoadAndClearUpper);
5262 match(Set dst (LoadD mem));
12335 %{
12336 match(Set cr (CmpN src (LoadN mem)));
12337
12338 format %{ "cmpl $mem, $src\t# compressed ptr" %}
12339 ins_encode %{
12340 __ cmp_narrow_oop($mem$$Address, (jobject)$src$$constant);
12341 %}
12342 ins_pipe(ialu_cr_reg_mem);
12343 %}
12344
12345 instruct compN_rReg_imm_klass(rFlagsRegU cr, rRegN op1, immNKlass op2) %{
12346 match(Set cr (CmpN op1 op2));
12347
12348 format %{ "cmpl $op1, $op2\t# compressed klass ptr" %}
12349 ins_encode %{
12350 __ cmp_narrow_klass($op1$$Register, (Klass*)$op2$$constant);
12351 %}
12352 ins_pipe(ialu_cr_reg_imm);
12353 %}
12354
12355 instruct compN_mem_imm_klass(rFlagsRegU cr, memory mem, immNKlass src)
12356 %{
12357 match(Set cr (CmpN src (LoadNKlass mem)));
12358
12359 format %{ "cmpl $mem, $src\t# compressed klass ptr" %}
12360 ins_encode %{
12361 __ cmp_narrow_klass($mem$$Address, (Klass*)$src$$constant);
12362 %}
12363 ins_pipe(ialu_cr_reg_mem);
12364 %}
12365
12366 instruct testN_reg(rFlagsReg cr, rRegN src, immN0 zero) %{
12367 match(Set cr (CmpN src zero));
12368
12369 format %{ "testl $src, $src\t# compressed ptr" %}
12370 ins_encode %{ __ testl($src$$Register, $src$$Register); %}
12371 ins_pipe(ialu_cr_reg_imm);
12372 %}
12373
12374 instruct testN_mem(rFlagsReg cr, memory mem, immN0 zero)
12375 %{
12376 predicate(CompressedOops::base() != NULL);
|
5213 __ movl($dst$$Register, $mem$$Address);
5214 %}
5215 ins_pipe(ialu_reg_mem); // XXX
5216 %}
5217
5218
5219 // Load Klass Pointer
5220 instruct loadKlass(rRegP dst, memory mem)
5221 %{
5222 match(Set dst (LoadKlass mem));
5223
5224 ins_cost(125); // XXX
5225 format %{ "movq $dst, $mem\t# class" %}
5226 ins_encode %{
5227 __ movq($dst$$Register, $mem$$Address);
5228 %}
5229 ins_pipe(ialu_reg_mem); // XXX
5230 %}
5231
5232 // Load narrow Klass Pointer
5233 instruct loadNKlass(rRegN dst, indOffset8 mem, rFlagsReg cr)
5234 %{
5235 match(Set dst (LoadNKlass mem));
5236 effect(TEMP_DEF dst, KILL cr);
5237 ins_cost(125); // XXX
5238 format %{ "movl $dst, $mem\t# compressed klass ptr" %}
5239 ins_encode %{
5240 assert($mem$$disp == oopDesc::klass_offset_in_bytes(), "expect correct offset 4, but got: %d", $mem$$disp);
5241 assert($mem$$index == 4, "expect no index register: %d", $mem$$index);
5242 __ load_nklass($dst$$Register, $mem$$base$$Register);
5243 %}
5244 ins_pipe(pipe_slow); // XXX
5245 %}
5246
5247 // Load Float
5248 instruct loadF(regF dst, memory mem)
5249 %{
5250 match(Set dst (LoadF mem));
5251
5252 ins_cost(145); // XXX
5253 format %{ "movss $dst, $mem\t# float" %}
5254 ins_encode %{
5255 __ movflt($dst$$XMMRegister, $mem$$Address);
5256 %}
5257 ins_pipe(pipe_slow); // XXX
5258 %}
5259
5260 // Load Double
5261 instruct loadD_partial(regD dst, memory mem)
5262 %{
5263 predicate(!UseXmmLoadAndClearUpper);
5264 match(Set dst (LoadD mem));
12337 %{
12338 match(Set cr (CmpN src (LoadN mem)));
12339
12340 format %{ "cmpl $mem, $src\t# compressed ptr" %}
12341 ins_encode %{
12342 __ cmp_narrow_oop($mem$$Address, (jobject)$src$$constant);
12343 %}
12344 ins_pipe(ialu_cr_reg_mem);
12345 %}
12346
12347 instruct compN_rReg_imm_klass(rFlagsRegU cr, rRegN op1, immNKlass op2) %{
12348 match(Set cr (CmpN op1 op2));
12349
12350 format %{ "cmpl $op1, $op2\t# compressed klass ptr" %}
12351 ins_encode %{
12352 __ cmp_narrow_klass($op1$$Register, (Klass*)$op2$$constant);
12353 %}
12354 ins_pipe(ialu_cr_reg_imm);
12355 %}
12356
12357 // Disabled because the compressed Klass* in header cannot be safely
12358 // accessed. TODO: Re-enable it as soon as synchronization does not
12359 // overload the upper header bits anymore.
12360 instruct compN_mem_imm_klass(rFlagsRegU cr, memory mem, immNKlass src)
12361 %{
12362 predicate(false);
12363 match(Set cr (CmpN src (LoadNKlass mem)));
12364
12365 format %{ "cmpl $mem, $src\t# compressed klass ptr" %}
12366 ins_encode %{
12367 __ cmp_narrow_klass($mem$$Address, (Klass*)$src$$constant);
12368 %}
12369 ins_pipe(ialu_cr_reg_mem);
12370 %}
12371
12372 instruct testN_reg(rFlagsReg cr, rRegN src, immN0 zero) %{
12373 match(Set cr (CmpN src zero));
12374
12375 format %{ "testl $src, $src\t# compressed ptr" %}
12376 ins_encode %{ __ testl($src$$Register, $src$$Register); %}
12377 ins_pipe(ialu_cr_reg_imm);
12378 %}
12379
12380 instruct testN_mem(rFlagsReg cr, memory mem, immN0 zero)
12381 %{
12382 predicate(CompressedOops::base() != NULL);
|