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) && |
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); |