7303 %}
7304
7305 // Load Klass Pointer
7306 instruct loadKlass(iRegPNoSp dst, memory8 mem)
7307 %{
7308 match(Set dst (LoadKlass mem));
7309 predicate(!needs_acquiring_load(n));
7310
7311 ins_cost(4 * INSN_COST);
7312 format %{ "ldr $dst, $mem\t# class" %}
7313
7314 ins_encode(aarch64_enc_ldr(dst, mem));
7315
7316 ins_pipe(iload_reg_mem);
7317 %}
7318
7319 // Load Narrow Klass Pointer
7320 instruct loadNKlass(iRegNNoSp dst, memory4 mem)
7321 %{
7322 match(Set dst (LoadNKlass mem));
7323 predicate(!needs_acquiring_load(n));
7324
7325 ins_cost(4 * INSN_COST);
7326 format %{ "ldrw $dst, $mem\t# compressed class ptr" %}
7327
7328 ins_encode(aarch64_enc_ldrw(dst, mem));
7329
7330 ins_pipe(iload_reg_mem);
7331 %}
7332
7333 // Load Float
7334 instruct loadF(vRegF dst, memory4 mem)
7335 %{
7336 match(Set dst (LoadF mem));
7337 predicate(!needs_acquiring_load(n));
7338
7339 ins_cost(4 * INSN_COST);
7340 format %{ "ldrs $dst, $mem\t# float" %}
7341
7342 ins_encode( aarch64_enc_ldrs(dst, mem) );
7343
7344 ins_pipe(pipe_class_memory);
7345 %}
7346
7347 // Load Double
7348 instruct loadD(vRegD dst, memory8 mem)
7349 %{
7350 match(Set dst (LoadD mem));
7351 predicate(!needs_acquiring_load(n));
7352
|
7303 %}
7304
7305 // Load Klass Pointer
7306 instruct loadKlass(iRegPNoSp dst, memory8 mem)
7307 %{
7308 match(Set dst (LoadKlass mem));
7309 predicate(!needs_acquiring_load(n));
7310
7311 ins_cost(4 * INSN_COST);
7312 format %{ "ldr $dst, $mem\t# class" %}
7313
7314 ins_encode(aarch64_enc_ldr(dst, mem));
7315
7316 ins_pipe(iload_reg_mem);
7317 %}
7318
7319 // Load Narrow Klass Pointer
7320 instruct loadNKlass(iRegNNoSp dst, memory4 mem)
7321 %{
7322 match(Set dst (LoadNKlass mem));
7323 predicate(!needs_acquiring_load(n) && !UseCompactObjectHeaders);
7324
7325 ins_cost(4 * INSN_COST);
7326 format %{ "ldrw $dst, $mem\t# compressed class ptr" %}
7327
7328 ins_encode(aarch64_enc_ldrw(dst, mem));
7329
7330 ins_pipe(iload_reg_mem);
7331 %}
7332
7333 instruct loadNKlassCompactHeaders(iRegNNoSp dst, memory4 mem, rFlagsReg cr)
7334 %{
7335 match(Set dst (LoadNKlass mem));
7336 effect(KILL cr);
7337 predicate(!needs_acquiring_load(n) && UseCompactObjectHeaders);
7338
7339 ins_cost(4 * INSN_COST);
7340 format %{ "ldrw $dst, $mem\t# compressed class ptr" %}
7341 ins_encode %{
7342 assert($mem$$disp == oopDesc::klass_offset_in_bytes(), "expect correct offset");
7343 assert($mem$$index$$Register == noreg, "expect no index");
7344 __ load_nklass_compact($dst$$Register, $mem$$base$$Register);
7345 %}
7346 ins_pipe(pipe_slow);
7347 %}
7348
7349 // Load Float
7350 instruct loadF(vRegF dst, memory4 mem)
7351 %{
7352 match(Set dst (LoadF mem));
7353 predicate(!needs_acquiring_load(n));
7354
7355 ins_cost(4 * INSN_COST);
7356 format %{ "ldrs $dst, $mem\t# float" %}
7357
7358 ins_encode( aarch64_enc_ldrs(dst, mem) );
7359
7360 ins_pipe(pipe_class_memory);
7361 %}
7362
7363 // Load Double
7364 instruct loadD(vRegD dst, memory8 mem)
7365 %{
7366 match(Set dst (LoadD mem));
7367 predicate(!needs_acquiring_load(n));
7368
|