4381 %}
4382
4383 enc_class aarch64_enc_mov_p(iRegP dst, immP src) %{
4384 MacroAssembler _masm(&cbuf);
4385 Register dst_reg = as_Register($dst$$reg);
4386 address con = (address)$src$$constant;
4387 if (con == NULL || con == (address)1) {
4388 ShouldNotReachHere();
4389 } else {
4390 relocInfo::relocType rtype = $src->constant_reloc();
4391 if (rtype == relocInfo::oop_type) {
4392 __ movoop(dst_reg, (jobject)con, /*immediate*/true);
4393 } else if (rtype == relocInfo::metadata_type) {
4394 __ mov_metadata(dst_reg, (Metadata*)con);
4395 } else {
4396 assert(rtype == relocInfo::none, "unexpected reloc type");
4397 if (con < (address)(uintptr_t)os::vm_page_size()) {
4398 __ mov(dst_reg, con);
4399 } else {
4400 unsigned long offset;
4401 __ adrp(dst_reg, con, offset);
4402 __ add(dst_reg, dst_reg, offset);
4403 }
4404 }
4405 }
4406 %}
4407
4408 enc_class aarch64_enc_mov_p0(iRegP dst, immP0 src) %{
4409 MacroAssembler _masm(&cbuf);
4410 Register dst_reg = as_Register($dst$$reg);
4411 __ mov(dst_reg, zr);
4412 %}
4413
4414 enc_class aarch64_enc_mov_p1(iRegP dst, immP_1 src) %{
4415 MacroAssembler _masm(&cbuf);
4416 Register dst_reg = as_Register($dst$$reg);
4417 __ mov(dst_reg, (u_int64_t)1);
4418 %}
4419
4420 enc_class aarch64_enc_mov_poll_page(iRegP dst, immPollPage src) %{
4421 MacroAssembler _masm(&cbuf);
4422 address page = (address)$src$$constant;
4423 Register dst_reg = as_Register($dst$$reg);
4424 unsigned long off;
4425 __ adrp(dst_reg, Address(page, relocInfo::poll_type), off);
4426 assert(off == 0, "assumed offset == 0");
4427 %}
4428
4429 enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
4430 MacroAssembler _masm(&cbuf);
4431 address page = (address)$src$$constant;
4432 Register dst_reg = as_Register($dst$$reg);
4433 unsigned long off;
4434 __ adrp(dst_reg, ExternalAddress(page), off);
4435 assert(off == 0, "assumed offset == 0");
4436 %}
4437
4438 enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
4439 MacroAssembler _masm(&cbuf);
4440 Register dst_reg = as_Register($dst$$reg);
4441 address con = (address)$src$$constant;
4442 if (con == NULL) {
4443 ShouldNotReachHere();
4444 } else {
4445 relocInfo::relocType rtype = $src->constant_reloc();
4446 assert(rtype == relocInfo::oop_type, "unexpected reloc type");
4447 __ set_narrow_oop(dst_reg, (jobject)con);
4448 }
4449 %}
4450
4451 enc_class aarch64_enc_mov_n0(iRegN dst, immN0 src) %{
4452 MacroAssembler _masm(&cbuf);
4453 Register dst_reg = as_Register($dst$$reg);
4454 __ mov(dst_reg, zr);
|
4381 %}
4382
4383 enc_class aarch64_enc_mov_p(iRegP dst, immP src) %{
4384 MacroAssembler _masm(&cbuf);
4385 Register dst_reg = as_Register($dst$$reg);
4386 address con = (address)$src$$constant;
4387 if (con == NULL || con == (address)1) {
4388 ShouldNotReachHere();
4389 } else {
4390 relocInfo::relocType rtype = $src->constant_reloc();
4391 if (rtype == relocInfo::oop_type) {
4392 __ movoop(dst_reg, (jobject)con, /*immediate*/true);
4393 } else if (rtype == relocInfo::metadata_type) {
4394 __ mov_metadata(dst_reg, (Metadata*)con);
4395 } else {
4396 assert(rtype == relocInfo::none, "unexpected reloc type");
4397 if (con < (address)(uintptr_t)os::vm_page_size()) {
4398 __ mov(dst_reg, con);
4399 } else {
4400 unsigned long offset;
4401 __ far_adrp(dst_reg, con, offset);
4402 __ add(dst_reg, dst_reg, offset);
4403 }
4404 }
4405 }
4406 %}
4407
4408 enc_class aarch64_enc_mov_p0(iRegP dst, immP0 src) %{
4409 MacroAssembler _masm(&cbuf);
4410 Register dst_reg = as_Register($dst$$reg);
4411 __ mov(dst_reg, zr);
4412 %}
4413
4414 enc_class aarch64_enc_mov_p1(iRegP dst, immP_1 src) %{
4415 MacroAssembler _masm(&cbuf);
4416 Register dst_reg = as_Register($dst$$reg);
4417 __ mov(dst_reg, (u_int64_t)1);
4418 %}
4419
4420 enc_class aarch64_enc_mov_poll_page(iRegP dst, immPollPage src) %{
4421 MacroAssembler _masm(&cbuf);
4422 address page = (address)$src$$constant;
4423 Register dst_reg = as_Register($dst$$reg);
4424 unsigned long off;
4425 __ far_adrp(dst_reg, Address(page, relocInfo::poll_type), off);
4426 assert(off == 0, "assumed offset == 0");
4427 %}
4428
4429 enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
4430 MacroAssembler _masm(&cbuf);
4431 address page = (address)$src$$constant;
4432 Register dst_reg = as_Register($dst$$reg);
4433 unsigned long off;
4434 __ far_adrp(dst_reg, ExternalAddress(page), off);
4435 assert(off == 0, "assumed offset == 0");
4436 %}
4437
4438 enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
4439 MacroAssembler _masm(&cbuf);
4440 Register dst_reg = as_Register($dst$$reg);
4441 address con = (address)$src$$constant;
4442 if (con == NULL) {
4443 ShouldNotReachHere();
4444 } else {
4445 relocInfo::relocType rtype = $src->constant_reloc();
4446 assert(rtype == relocInfo::oop_type, "unexpected reloc type");
4447 __ set_narrow_oop(dst_reg, (jobject)con);
4448 }
4449 %}
4450
4451 enc_class aarch64_enc_mov_n0(iRegN dst, immN0 src) %{
4452 MacroAssembler _masm(&cbuf);
4453 Register dst_reg = as_Register($dst$$reg);
4454 __ mov(dst_reg, zr);
|