962 // may bite us again at some other point and a cleaner/generic
963 // solution using relocations would be needed.
964 MacroAssembler _masm(&cbuf);
965 __ set_inst_mark();
966
967 // We flush the current window just so that there is a valid stack copy
968 // the fact that the current window becomes active again instantly is
969 // not a problem there is nothing live in it.
970
971 #ifdef ASSERT
972 int startpos = __ offset();
973 #endif /* ASSERT */
974
975 __ call((address)entry_point, rspec);
976
977 if (preserve_g2) __ delayed()->mov(G2, L7);
978 else __ delayed()->nop();
979
980 if (preserve_g2) __ mov(L7, G2);
981
982 if (preserve_g2 && UseLoadBarrier) {
983 AddressLiteral bad_base((intptr_t)&ZAddressBadMask);
984 __ load_ptr_contents(bad_base, G6);
985 }
986
987 #ifdef ASSERT
988 if (preserve_g2 && (VerifyCompiledCode || VerifyOops)) {
989 // Trash argument dump slots.
990 __ set(0xb0b8ac0db0b8ac0d, G1);
991 __ mov(G1, G5);
992 __ stx(G1, SP, STACK_BIAS + 0x80);
993 __ stx(G1, SP, STACK_BIAS + 0x88);
994 __ stx(G1, SP, STACK_BIAS + 0x90);
995 __ stx(G1, SP, STACK_BIAS + 0x98);
996 __ stx(G1, SP, STACK_BIAS + 0xA0);
997 __ stx(G1, SP, STACK_BIAS + 0xA8);
998 }
999 #endif /*ASSERT*/
1000 }
1001
1002 //=============================================================================
|
962 // may bite us again at some other point and a cleaner/generic
963 // solution using relocations would be needed.
964 MacroAssembler _masm(&cbuf);
965 __ set_inst_mark();
966
967 // We flush the current window just so that there is a valid stack copy
968 // the fact that the current window becomes active again instantly is
969 // not a problem there is nothing live in it.
970
971 #ifdef ASSERT
972 int startpos = __ offset();
973 #endif /* ASSERT */
974
975 __ call((address)entry_point, rspec);
976
977 if (preserve_g2) __ delayed()->mov(G2, L7);
978 else __ delayed()->nop();
979
980 if (preserve_g2) __ mov(L7, G2);
981
982 if (preserve_g2 && UseZGC) {
983 AddressLiteral bad_base((intptr_t)&ZAddressBadMask);
984 __ load_ptr_contents(bad_base, G6);
985 }
986
987 #ifdef ASSERT
988 if (preserve_g2 && (VerifyCompiledCode || VerifyOops)) {
989 // Trash argument dump slots.
990 __ set(0xb0b8ac0db0b8ac0d, G1);
991 __ mov(G1, G5);
992 __ stx(G1, SP, STACK_BIAS + 0x80);
993 __ stx(G1, SP, STACK_BIAS + 0x88);
994 __ stx(G1, SP, STACK_BIAS + 0x90);
995 __ stx(G1, SP, STACK_BIAS + 0x98);
996 __ stx(G1, SP, STACK_BIAS + 0xA0);
997 __ stx(G1, SP, STACK_BIAS + 0xA8);
998 }
999 #endif /*ASSERT*/
1000 }
1001
1002 //=============================================================================
|