3275 #endif |
3275 #endif |
3276 } |
3276 } |
3277 |
3277 |
3278 void MacroAssembler::load_two_bytes_from_at_bcp(Register reg, Register tmp, int offset) |
3278 void MacroAssembler::load_two_bytes_from_at_bcp(Register reg, Register tmp, int offset) |
3279 { |
3279 { |
3280 |
3280 /* 2016/5/6 Jin: the runtime address of BCP may be unaligned. |
3281 if(offset & 1){ |
3281 * Refer to the SPARC implementation. */ |
3282 lbu(reg, BCP, offset+1); |
3282 lbu(reg, BCP, offset+1); |
3283 lbu(tmp, BCP, offset); |
3283 lbu(tmp, BCP, offset); |
3284 #ifdef _LP64 |
3284 #ifdef _LP64 |
3285 //FIXME aoqi. indexbyte1 << 8 | indexbyte2? |
3285 dsll(reg, reg, 8); |
3286 //dsll(tmp, tmp, 8); |
3286 daddu(reg, tmp, reg); |
3287 dsll(reg, reg, 8); |
3287 #else |
3288 daddu(reg, tmp, reg); |
3288 sll(reg, reg, 8); |
3289 #else |
3289 addu(reg, tmp, reg); |
3290 sll(reg, reg, 8); |
3290 #endif |
3291 addu(reg, tmp, reg); |
|
3292 #endif |
|
3293 } |
|
3294 else |
|
3295 lhu(reg, BCP, offset); |
|
3296 } |
3291 } |
3297 |
3292 |
3298 void MacroAssembler::store_two_byts_to_at_bcp(Register reg, Register tmp, int offset) |
3293 void MacroAssembler::store_two_byts_to_at_bcp(Register reg, Register tmp, int offset) |
3299 { |
3294 { |
3300 if(offset & 1){ |
3295 if(offset & 1){ |