1332 __ mov(src.first()->as_Register(), dst.first()->as_Register());
1333 }
1334 }
1335
1336 // On 64 bit we will store integer like items to the stack as
1337 // 64 bits items (sparc abi) even though java would only store
1338 // 32bits for a parameter. On 32bit it will simply be 32 bits
1339 // So this routine will do 32->32 on 32bit and 32->64 on 64bit
1340 static void move32_64(MacroAssembler* masm, VMRegPair src, VMRegPair dst) {
1341 if (src.first()->is_stack()) {
1342 if (dst.first()->is_stack()) {
1343 // stack to stack
1344 __ ld(FP, reg2offset(src.first()) + STACK_BIAS, L5);
1345 __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS);
1346 } else {
1347 // stack to reg
1348 __ ld(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register());
1349 }
1350 } else if (dst.first()->is_stack()) {
1351 // reg to stack
1352 __ st_ptr(src.first()->as_Register(), SP, reg2offset(dst.first()) + STACK_BIAS);
1353 } else {
1354 __ mov(src.first()->as_Register(), dst.first()->as_Register());
1355 }
1356 }
1357
1358
1359 static void move_ptr(MacroAssembler* masm, VMRegPair src, VMRegPair dst) {
1360 if (src.first()->is_stack()) {
1361 if (dst.first()->is_stack()) {
1362 // stack to stack
1363 __ ld_ptr(FP, reg2offset(src.first()) + STACK_BIAS, L5);
1364 __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS);
1365 } else {
1366 // stack to reg
1367 __ ld_ptr(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register());
1368 }
1369 } else if (dst.first()->is_stack()) {
1370 // reg to stack
1371 __ st_ptr(src.first()->as_Register(), SP, reg2offset(dst.first()) + STACK_BIAS);
1372 } else {
1373 __ mov(src.first()->as_Register(), dst.first()->as_Register());
1374 }
|
1332 __ mov(src.first()->as_Register(), dst.first()->as_Register());
1333 }
1334 }
1335
1336 // On 64 bit we will store integer like items to the stack as
1337 // 64 bits items (sparc abi) even though java would only store
1338 // 32bits for a parameter. On 32bit it will simply be 32 bits
1339 // So this routine will do 32->32 on 32bit and 32->64 on 64bit
1340 static void move32_64(MacroAssembler* masm, VMRegPair src, VMRegPair dst) {
1341 if (src.first()->is_stack()) {
1342 if (dst.first()->is_stack()) {
1343 // stack to stack
1344 __ ld(FP, reg2offset(src.first()) + STACK_BIAS, L5);
1345 __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS);
1346 } else {
1347 // stack to reg
1348 __ ld(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register());
1349 }
1350 } else if (dst.first()->is_stack()) {
1351 // reg to stack
1352 Register src_reg = src.first()->as_Register();
1353 // Some compiler (gcc) expects a clean 32 bit value on function entry
1354 __ sra(src_reg, 0, L5);
1355 __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS);
1356 } else {
1357 Register src_reg = src.first()->as_Register();
1358 // Some compiler (gcc) expects a clean 32 bit value on function entry
1359 __ sra(src_reg, 0, L5);
1360 __ mov(L5, dst.first()->as_Register());
1361 }
1362 }
1363
1364
1365 static void move_ptr(MacroAssembler* masm, VMRegPair src, VMRegPair dst) {
1366 if (src.first()->is_stack()) {
1367 if (dst.first()->is_stack()) {
1368 // stack to stack
1369 __ ld_ptr(FP, reg2offset(src.first()) + STACK_BIAS, L5);
1370 __ st_ptr(L5, SP, reg2offset(dst.first()) + STACK_BIAS);
1371 } else {
1372 // stack to reg
1373 __ ld_ptr(FP, reg2offset(src.first()) + STACK_BIAS, dst.first()->as_Register());
1374 }
1375 } else if (dst.first()->is_stack()) {
1376 // reg to stack
1377 __ st_ptr(src.first()->as_Register(), SP, reg2offset(dst.first()) + STACK_BIAS);
1378 } else {
1379 __ mov(src.first()->as_Register(), dst.first()->as_Register());
1380 }
|