src/cpu/mips/vm/assembler_mips.cpp

changeset 3
ef5b28e8d433
parent 1
2d8a650513c2
child 9
81c75db49881
equal deleted inserted replaced
2:26621fe12c48 3:ef5b28e8d433
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){

mercurial