src/cpu/mips/vm/nativeInst_mips.cpp

changeset 8865
ffcdff41a92f
parent 8863
5376ce0dc552
child 9128
1d748903b598
equal deleted inserted replaced
8864:e4aeef458496 8865:ffcdff41a92f
201 nativeInstruction_at(addr_at(12))->is_nop() && 201 nativeInstruction_at(addr_at(12))->is_nop() &&
202 is_special_op(int_at(16), Assembler::jalr_op) ) { 202 is_special_op(int_at(16), Assembler::jalr_op) ) {
203 return; 203 return;
204 } 204 }
205 205
206 //daddiu dst, R0, imm16
207 //nop
208 //nop
209 //nop
210 if ( is_op(Assembler::daddiu_op) &&
211 nativeInstruction_at(addr_at(4))->is_nop() &&
212 nativeInstruction_at(addr_at(8))->is_nop() &&
213 nativeInstruction_at(addr_at(12))->is_nop() &&
214 is_special_op(int_at(16), Assembler::jr_op) ) {
215 return;
216 }
217
206 //lui dst, imm16 218 //lui dst, imm16
207 //ori dst, dst, imm16 219 //ori dst, dst, imm16
208 //nop 220 //nop
209 //nop 221 //nop
210 if ( is_op(Assembler::lui_op) && 222 if ( is_op(Assembler::lui_op) &&
726 #define __ masm. 738 #define __ masm.
727 #ifndef _LP64 739 #ifndef _LP64
728 __ lui(T9, Assembler::split_high((int)entry)); 740 __ lui(T9, Assembler::split_high((int)entry));
729 __ addiu(T9, T9, Assembler::split_low((int)entry)); 741 __ addiu(T9, T9, Assembler::split_low((int)entry));
730 #else 742 #else
731 __ patchable_set48(T9, (long)entry); 743 __ li48(T9, (long)entry);
732 #endif 744 #endif
733 __ jalr (); 745 __ jalr ();
734 __ delayed()->nop(); 746 __ delayed()->nop();
735 #undef __ 747 #undef __
736 748
1097 case Assembler::lb_op: 1109 case Assembler::lb_op:
1098 case Assembler::lbu_op: 1110 case Assembler::lbu_op:
1099 case Assembler::lh_op: 1111 case Assembler::lh_op:
1100 case Assembler::lhu_op: 1112 case Assembler::lhu_op:
1101 case Assembler::lw_op: 1113 case Assembler::lw_op:
1114 case Assembler::lwu_op:
1102 LP64_ONLY(case Assembler::ld_op:) 1115 LP64_ONLY(case Assembler::ld_op:)
1103 case Assembler::lwc1_op: 1116 case Assembler::lwc1_op:
1104 LP64_ONLY(case Assembler::ldc1_op:) 1117 LP64_ONLY(case Assembler::ldc1_op:)
1105 case Assembler::sb_op: 1118 case Assembler::sb_op:
1106 case Assembler::sh_op: 1119 case Assembler::sh_op:
1577 NativeGeneralJump* h_jump = nativeGeneralJump_at (instr_addr); 1590 NativeGeneralJump* h_jump = nativeGeneralJump_at (instr_addr);
1578 assert(NativeGeneralJump::instruction_size == NativeCall::instruction_size, 1591 assert(NativeGeneralJump::instruction_size == NativeCall::instruction_size,
1579 "note::Runtime1::patch_code uses NativeCall::instruction_size"); 1592 "note::Runtime1::patch_code uses NativeCall::instruction_size");
1580 1593
1581 /* 2013/6/13 Jin: ensure 100% atomicity */ 1594 /* 2013/6/13 Jin: ensure 100% atomicity */
1582 guarantee(!os::is_MP() || (((long)instr_addr % BytesPerWord) == 0), "destination must be aligned for SD"); 1595 //guarantee(!os::is_MP() || (((long)instr_addr % BytesPerWord) == 0), "destination must be aligned for SD");
1583 1596
1584 int *p = (int *)instr_addr; 1597 int *p = (int *)instr_addr;
1585 int jr_word = p[4]; 1598 int jr_word = p[4];
1586 1599
1587 p[4] = 0x1000fffb; /* .1: --; --; --; --; b .1; nop */ 1600 p[4] = 0x1000fffb; /* .1: --; --; --; --; b .1; nop */
1592 /* Must ensure atomicity */ 1605 /* Must ensure atomicity */
1593 void NativeGeneralJump::patch_verified_entry(address entry, address verified_entry, address dest) { 1606 void NativeGeneralJump::patch_verified_entry(address entry, address verified_entry, address dest) {
1594 /* 2013/11/5 Jin: ensure 100% atomicity. 1607 /* 2013/11/5 Jin: ensure 100% atomicity.
1595 * The destination is fixed and can be cached in JavaThread. 1608 * The destination is fixed and can be cached in JavaThread.
1596 */ 1609 */
1597 guarantee(!os::is_MP() || (((long)verified_entry % BytesPerWord) == 0), "destination must be aligned for SD"); 1610 //guarantee(!os::is_MP() || (((long)verified_entry % BytesPerWord) == 0), "destination must be aligned for SD");
1598 1611
1599 int code_buffer[4]; 1612 int code_buffer[4];
1600 1613
1601 CodeBuffer cb((address)code_buffer, instruction_size); 1614 CodeBuffer cb((address)code_buffer, instruction_size);
1602 MacroAssembler masm(&cb); 1615 MacroAssembler masm(&cb);

mercurial