Skip to content

Commit c516cbe

Browse files
authored
Update (2022.09.30)
28135: Add linux-loongarch64 to CheckedFeatures.notImplemented 28039: Fix typo for generate_method_entry_barrier and BarrierSetAssembler::nmethod_entry_barrier 28128: using Address reference as argument 28133: 8293657: sun/management/jmxremote/bootstrap/RmiBootstrapTest.java#id1 failed with "SSLHandshakeException: Remote host terminated the handshake" 27811: [LA][C2] xml.validation fatal error SIGSEGV with +UseFPUForSpilling 28051: LA port of 8293660: Fix frame::sender_for_compiled_frame frame size assert 27891: Deprecated assembler removal 27957: Mark stub code without alignment padding 27965: Remove unused CORE macro definition 28048: Enable hsdis for loongarch64
1 parent 90ce205 commit c516cbe

File tree

19 files changed

+198
-302
lines changed

19 files changed

+198
-302
lines changed

src/hotspot/cpu/loongarch/assembler_loongarch.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ int AbstractAssembler::code_fill_byte() {
105105
}
106106

107107
// Now the Assembler instruction (identical for 32/64 bits)
108-
void Assembler::ld_b(Register rd, Address src) {
108+
void Assembler::ld_b(Register rd, const Address &src) {
109109
Register dst = rd;
110110
Register base = src.base();
111111
Register index = src.index();
@@ -150,7 +150,7 @@ void Assembler::ld_b(Register rd, Address src) {
150150
}
151151
}
152152

153-
void Assembler::ld_bu(Register rd, Address src) {
153+
void Assembler::ld_bu(Register rd, const Address &src) {
154154
Register dst = rd;
155155
Register base = src.base();
156156
Register index = src.index();
@@ -195,7 +195,7 @@ void Assembler::ld_bu(Register rd, Address src) {
195195
}
196196
}
197197

198-
void Assembler::ld_d(Register rd, Address src){
198+
void Assembler::ld_d(Register rd, const Address &src) {
199199
Register dst = rd;
200200
Register base = src.base();
201201
Register index = src.index();
@@ -249,7 +249,7 @@ void Assembler::ld_d(Register rd, Address src){
249249
}
250250
}
251251

252-
void Assembler::ld_h(Register rd, Address src){
252+
void Assembler::ld_h(Register rd, const Address &src) {
253253
Register dst = rd;
254254
Register base = src.base();
255255
Register index = src.index();
@@ -294,7 +294,7 @@ void Assembler::ld_h(Register rd, Address src){
294294
}
295295
}
296296

297-
void Assembler::ld_hu(Register rd, Address src){
297+
void Assembler::ld_hu(Register rd, const Address &src) {
298298
Register dst = rd;
299299
Register base = src.base();
300300
Register index = src.index();
@@ -339,17 +339,17 @@ void Assembler::ld_hu(Register rd, Address src){
339339
}
340340
}
341341

342-
void Assembler::ll_w(Register rd, Address src){
342+
void Assembler::ll_w(Register rd, const Address &src) {
343343
assert(src.index() == NOREG, "index is unimplemented");
344344
ll_w(rd, src.base(), src.disp());
345345
}
346346

347-
void Assembler::ll_d(Register rd, Address src){
347+
void Assembler::ll_d(Register rd, const Address &src) {
348348
assert(src.index() == NOREG, "index is unimplemented");
349349
ll_d(rd, src.base(), src.disp());
350350
}
351351

352-
void Assembler::ld_w(Register rd, Address src){
352+
void Assembler::ld_w(Register rd, const Address &src) {
353353
Register dst = rd;
354354
Register base = src.base();
355355
Register index = src.index();
@@ -403,7 +403,7 @@ void Assembler::ld_w(Register rd, Address src){
403403
}
404404
}
405405

406-
void Assembler::ld_wu(Register rd, Address src){
406+
void Assembler::ld_wu(Register rd, const Address &src) {
407407
Register dst = rd;
408408
Register base = src.base();
409409
Register index = src.index();
@@ -448,7 +448,7 @@ void Assembler::ld_wu(Register rd, Address src){
448448
}
449449
}
450450

451-
void Assembler::st_b(Register rd, Address dst) {
451+
void Assembler::st_b(Register rd, const Address &dst) {
452452
Register src = rd;
453453
Register base = dst.base();
454454
Register index = dst.index();
@@ -495,17 +495,17 @@ void Assembler::st_b(Register rd, Address dst) {
495495
}
496496
}
497497

498-
void Assembler::sc_w(Register rd, Address dst) {
498+
void Assembler::sc_w(Register rd, const Address &dst) {
499499
assert(dst.index() == NOREG, "index is unimplemented");
500500
sc_w(rd, dst.base(), dst.disp());
501501
}
502502

503-
void Assembler::sc_d(Register rd, Address dst) {
503+
void Assembler::sc_d(Register rd, const Address &dst) {
504504
assert(dst.index() == NOREG, "index is unimplemented");
505505
sc_d(rd, dst.base(), dst.disp());
506506
}
507507

508-
void Assembler::st_d(Register rd, Address dst) {
508+
void Assembler::st_d(Register rd, const Address &dst) {
509509
Register src = rd;
510510
Register base = dst.base();
511511
Register index = dst.index();
@@ -561,7 +561,7 @@ void Assembler::st_d(Register rd, Address dst) {
561561
}
562562
}
563563

564-
void Assembler::st_h(Register rd, Address dst) {
564+
void Assembler::st_h(Register rd, const Address &dst) {
565565
Register src = rd;
566566
Register base = dst.base();
567567
Register index = dst.index();
@@ -608,7 +608,7 @@ void Assembler::st_h(Register rd, Address dst) {
608608
}
609609
}
610610

611-
void Assembler::st_w(Register rd, Address dst) {
611+
void Assembler::st_w(Register rd, const Address &dst) {
612612
Register src = rd;
613613
Register base = dst.base();
614614
Register index = dst.index();
@@ -664,7 +664,7 @@ void Assembler::st_w(Register rd, Address dst) {
664664
}
665665
}
666666

667-
void Assembler::fld_s(FloatRegister fd, Address src) {
667+
void Assembler::fld_s(FloatRegister fd, const Address &src) {
668668
Register base = src.base();
669669
Register index = src.index();
670670

@@ -708,7 +708,7 @@ void Assembler::fld_s(FloatRegister fd, Address src) {
708708
}
709709
}
710710

711-
void Assembler::fld_d(FloatRegister fd, Address src) {
711+
void Assembler::fld_d(FloatRegister fd, const Address &src) {
712712
Register base = src.base();
713713
Register index = src.index();
714714

@@ -752,7 +752,7 @@ void Assembler::fld_d(FloatRegister fd, Address src) {
752752
}
753753
}
754754

755-
void Assembler::fst_s(FloatRegister fd, Address dst) {
755+
void Assembler::fst_s(FloatRegister fd, const Address &dst) {
756756
Register base = dst.base();
757757
Register index = dst.index();
758758

@@ -796,7 +796,7 @@ void Assembler::fst_s(FloatRegister fd, Address dst) {
796796
}
797797
}
798798

799-
void Assembler::fst_d(FloatRegister fd, Address dst) {
799+
void Assembler::fst_d(FloatRegister fd, const Address &dst) {
800800
Register base = dst.base();
801801
Register index = dst.index();
802802

src/hotspot/cpu/loongarch/assembler_loongarch.hpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2074,25 +2074,25 @@ class Assembler : public AbstractAssembler {
20742074
void fstx_s (FloatRegister fd, Register rj, Register rk) { emit_int32(insn_RRR(fstx_s_op, (int)rk->encoding(), (int)rj->encoding(), (int)fd->encoding())); }
20752075
void fstx_d (FloatRegister fd, Register rj, Register rk) { emit_int32(insn_RRR(fstx_d_op, (int)rk->encoding(), (int)rj->encoding(), (int)fd->encoding())); }
20762076

2077-
void ld_b (Register rd, Address src);
2078-
void ld_bu (Register rd, Address src);
2079-
void ld_d (Register rd, Address src);
2080-
void ld_h (Register rd, Address src);
2081-
void ld_hu (Register rd, Address src);
2082-
void ll_w (Register rd, Address src);
2083-
void ll_d (Register rd, Address src);
2084-
void ld_wu (Register rd, Address src);
2085-
void ld_w (Register rd, Address src);
2086-
void st_b (Register rd, Address dst);
2087-
void st_d (Register rd, Address dst);
2088-
void st_w (Register rd, Address dst);
2089-
void sc_w (Register rd, Address dst);
2090-
void sc_d (Register rd, Address dst);
2091-
void st_h (Register rd, Address dst);
2092-
void fld_s (FloatRegister fd, Address src);
2093-
void fld_d (FloatRegister fd, Address src);
2094-
void fst_s (FloatRegister fd, Address dst);
2095-
void fst_d (FloatRegister fd, Address dst);
2077+
void ld_b (Register rd, const Address &src);
2078+
void ld_bu (Register rd, const Address &src);
2079+
void ld_d (Register rd, const Address &src);
2080+
void ld_h (Register rd, const Address &src);
2081+
void ld_hu (Register rd, const Address &src);
2082+
void ll_w (Register rd, const Address &src);
2083+
void ll_d (Register rd, const Address &src);
2084+
void ld_wu (Register rd, const Address &src);
2085+
void ld_w (Register rd, const Address &src);
2086+
void st_b (Register rd, const Address &dst);
2087+
void st_d (Register rd, const Address &dst);
2088+
void st_w (Register rd, const Address &dst);
2089+
void sc_w (Register rd, const Address &dst);
2090+
void sc_d (Register rd, const Address &dst);
2091+
void st_h (Register rd, const Address &dst);
2092+
void fld_s (FloatRegister fd, const Address &src);
2093+
void fld_d (FloatRegister fd, const Address &src);
2094+
void fst_s (FloatRegister fd, const Address &dst);
2095+
void fst_d (FloatRegister fd, const Address &dst);
20962096

20972097
void amswap_w (Register rd, Register rk, Register rj) { assert_different_registers(rd, rj); assert_different_registers(rd, rk); emit_int32(insn_RRR(amswap_w_op, (int)rk->encoding(), (int)rj->encoding(), (int)rd->encoding())); }
20982098
void amswap_d (Register rd, Register rk, Register rj) { assert_different_registers(rd, rj); assert_different_registers(rd, rk); emit_int32(insn_RRR(amswap_d_op, (int)rk->encoding(), (int)rj->encoding(), (int)rd->encoding())); }

src/hotspot/cpu/loongarch/c1_LIRAssembler_loongarch_64.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ void LIR_Assembler::const2mem(LIR_Opr src, LIR_Opr dest, BasicType type,
588588
LIR_Const* c = src->as_constant_ptr();
589589
LIR_Address* to_addr = dest->as_address_ptr();
590590

591-
void (Assembler::* insn)(Register Rt, Address adr);
591+
void (Assembler::* insn)(Register Rt, const Address &adr);
592592

593593
switch (type) {
594594
case T_ADDRESS:

src/hotspot/cpu/loongarch/c2_MacroAssembler_loongarch.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ void C2_MacroAssembler::bc1f_long(Label& L) {
265265
bind(not_taken);
266266
}
267267

268-
typedef void (MacroAssembler::* load_chr_insn)(Register rd, Address adr);
268+
typedef void (MacroAssembler::* load_chr_insn)(Register rd, const Address &adr);
269269

270270
void C2_MacroAssembler::string_indexof(Register haystack, Register needle,
271271
Register haystack_len, Register needle_len,

src/hotspot/cpu/loongarch/frame_loongarch.inline.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ frame frame::sender_for_compiled_frame(RegisterMap* map) const {
368368
// in C2 code but it will have been pushed onto the stack. so we
369369
// have to find it relative to the unextended sp
370370

371-
assert(_cb->frame_size() >= 0, "must have non-zero frame size");
371+
assert(_cb->frame_size() > 0, "must have non-zero frame size");
372372
intptr_t* l_sender_sp = unextended_sp() + _cb->frame_size();
373373
intptr_t* unextended_sp = l_sender_sp;
374374

src/hotspot/cpu/loongarch/gc/shared/barrierSetAssembler_loongarch.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo
281281
__ srli_d(RA, SCR1, 32);
282282
__ orr(SCR2, SCR2, RA);
283283
// Read the global epoch value.
284-
__ ld_wu(SCR2, SCR2);
284+
__ ld_wu(SCR2, SCR2, 0);
285285
// Combine the guard value (low order) with the epoch value (high order).
286286
__ slli_d(SCR2, SCR2, 32);
287287
__ orr(SCR1, SCR1, SCR2);
@@ -305,7 +305,8 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo
305305
__ emit_int32(0); // nmethod guard value. Skipped over in common case.
306306
__ bind(skip_barrier);
307307
} else {
308-
__ bne(SCR1, SCR2, *slow_path);
308+
__ xorr(SCR1, SCR1, SCR2);
309+
__ bnez(SCR1, *slow_path);
309310
__ bind(*continuation);
310311
}
311312
}

src/hotspot/cpu/loongarch/gc/shared/barrierSetNMethod_loongarch.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
static int slow_path_size(nmethod* nm) {
4141
// The slow path code is out of line with C2.
4242
// Leave a b to the stub in the fast path.
43-
return nm->is_compiled_by_c2() ? 1 : 6;
43+
return nm->is_compiled_by_c2() ? 2 : 6;
4444
}
4545

4646
static int entry_barrier_offset(nmethod* nm) {

src/hotspot/cpu/loongarch/macroAssembler_loongarch.cpp

Lines changed: 5 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -79,50 +79,6 @@
7979

8080
// Implementation of MacroAssembler
8181

82-
intptr_t MacroAssembler::i[32] = {0};
83-
float MacroAssembler::f[32] = {0.0};
84-
85-
void MacroAssembler::print(outputStream *s) {
86-
unsigned int k;
87-
for(k=0; k<sizeof(i)/sizeof(i[0]); k++) {
88-
s->print_cr("i%d = 0x%.16lx", k, i[k]);
89-
}
90-
s->cr();
91-
92-
for(k=0; k<sizeof(f)/sizeof(f[0]); k++) {
93-
s->print_cr("f%d = %f", k, f[k]);
94-
}
95-
s->cr();
96-
}
97-
98-
int MacroAssembler::i_offset(unsigned int k) { return (intptr_t)&((MacroAssembler*)0)->i[k]; }
99-
int MacroAssembler::f_offset(unsigned int k) { return (intptr_t)&((MacroAssembler*)0)->f[k]; }
100-
101-
void MacroAssembler::save_registers(MacroAssembler *masm) {
102-
#define __ masm->
103-
for(int k=0; k<32; k++) {
104-
__ st_w (as_Register(k), A0, i_offset(k));
105-
}
106-
107-
for(int k=0; k<32; k++) {
108-
__ fst_s (as_FloatRegister(k), A0, f_offset(k));
109-
}
110-
#undef __
111-
}
112-
113-
void MacroAssembler::restore_registers(MacroAssembler *masm) {
114-
#define __ masm->
115-
for(int k=0; k<32; k++) {
116-
__ ld_w (as_Register(k), A0, i_offset(k));
117-
}
118-
119-
for(int k=0; k<32; k++) {
120-
__ fld_s (as_FloatRegister(k), A0, f_offset(k));
121-
}
122-
#undef __
123-
}
124-
125-
12682
void MacroAssembler::pd_patch_instruction(address branch, address target, const char* file, int line) {
12783
jint& stub_inst = *(jint*)branch;
12884
jint *pc = (jint *)branch;
@@ -960,11 +916,10 @@ void MacroAssembler::super_call_VM_leaf(address entry_point,
960916
MacroAssembler::call_VM_leaf_base(entry_point, 3);
961917
}
962918

963-
void MacroAssembler::check_and_handle_earlyret(Register java_thread) {
964-
}
919+
// these are no-ops overridden by InterpreterMacroAssembler
920+
void MacroAssembler::check_and_handle_earlyret(Register java_thread) {}
965921

966-
void MacroAssembler::check_and_handle_popframe(Register java_thread) {
967-
}
922+
void MacroAssembler::check_and_handle_popframe(Register java_thread) {}
968923

969924
void MacroAssembler::null_check(Register reg, int offset) {
970925
if (needs_explicit_null_check(offset)) {
@@ -1470,14 +1425,6 @@ void MacroAssembler::verify_tlab(Register t1, Register t2) {
14701425
#endif
14711426
}
14721427

1473-
RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr,
1474-
Register tmp,
1475-
int offset) {
1476-
//TODO: LA
1477-
guarantee(0, "LA not implemented yet");
1478-
return RegisterOrConstant(tmp);
1479-
}
1480-
14811428
void MacroAssembler::bswap_h(Register dst, Register src) {
14821429
revb_2h(dst, src);
14831430
ext_w_h(dst, dst); // sign extension of the lower 16 bits
@@ -1611,27 +1558,10 @@ void MacroAssembler::cmpxchg32(Address addr, Register oldval, Register newval, R
16111558
b(*fail);
16121559
}
16131560

1614-
// be sure the three register is different
1615-
void MacroAssembler::rem_s(FloatRegister fd, FloatRegister fs, FloatRegister ft, FloatRegister tmp) {
1616-
//TODO: LA
1617-
guarantee(0, "LA not implemented yet");
1618-
}
1619-
1620-
// be sure the three register is different
1621-
void MacroAssembler::rem_d(FloatRegister fd, FloatRegister fs, FloatRegister ft, FloatRegister tmp) {
1622-
//TODO: LA
1623-
guarantee(0, "LA not implemented yet");
1624-
}
1625-
16261561
void MacroAssembler::align(int modulus) {
16271562
while (offset() % modulus != 0) nop();
16281563
}
16291564

1630-
1631-
void MacroAssembler::verify_FPU(int stack_depth, const char* s) {
1632-
//Unimplemented();
1633-
}
1634-
16351565
static RegSet caller_saved_regset = RegSet::range(A0, A7) + RegSet::range(T0, T8) + RegSet::of(FP, RA) - RegSet::of(SCR1, SCR2);
16361566
static FloatRegSet caller_saved_fpu_regset = FloatRegSet::range(F0, F23);
16371567

@@ -2663,14 +2593,15 @@ int MacroAssembler::patched_branch(int dest_pos, int inst, int inst_pos) {
26632593
case bge_op:
26642594
case bltu_op:
26652595
case bgeu_op:
2666-
assert(is_simm16(v), "must be simm16");
26672596
#ifndef PRODUCT
26682597
if(!is_simm16(v))
26692598
{
26702599
tty->print_cr("must be simm16");
26712600
tty->print_cr("Inst: %x", inst);
2601+
tty->print_cr("Op: %x", high(inst, 6));
26722602
}
26732603
#endif
2604+
assert(is_simm16(v), "must be simm16");
26742605

26752606
inst &= 0xfc0003ff;
26762607
inst |= ((v & 0xffff) << 10);

0 commit comments

Comments
 (0)