1427 new_memory = new (C) indIndexScale_win95_safeOper(memory->scale()); 1428 break; 1429 case INDINDEXSCALEOFFSET: 1430 new_memory = new (C) indIndexScaleOffset_win95_safeOper(memory->scale(), memory->disp(NULL, NULL, 0)); 1431 break; 1432 case LOAD_LONG_INDIRECT: 1433 case LOAD_LONG_INDOFFSET32: 1434 // Does not use EBP as address register, use { EDX, EBX, EDI, ESI} 1435 return; 1436 default: 1437 assert(false, "unexpected memory operand in pd_implicit_null_fixup()"); 1438 return; 1439 } 1440 node->_opnds[opcnt] = new_memory; 1441 } 1442 1443 // Advertise here if the CPU requires explicit rounding operations 1444 // to implement the UseStrictFP mode. 1445 const bool Matcher::strict_fp_requires_explicit_rounding = true; 1446 1447 // Do floats take an entire double register or just half? 1448 const bool Matcher::float_in_double = true; 1449 // Do ints take an entire long register or just half? 1450 const bool Matcher::int_in_long = false; 1451 1452 // Return whether or not this register is ever used as an argument. This 1453 // function is used on startup to build the trampoline stubs in generateOptoStub. 1454 // Registers not mentioned will be killed by the VM call in the trampoline, and 1455 // arguments in those registers not be available to the callee. 1456 bool Matcher::can_be_java_arg( int reg ) { 1457 if( reg == ECX_num || reg == EDX_num ) return true; 1458 if( (reg == XMM0a_num || reg == XMM1a_num) && UseSSE>=1 ) return true; 1459 if( (reg == XMM0b_num || reg == XMM1b_num) && UseSSE>=2 ) return true; 1460 return false; 1461 } 1462 1463 bool Matcher::is_spillable_arg( int reg ) { 1464 return can_be_java_arg(reg); 1465 } 1466 1467 // Register for DIVI projection of divmodI 1468 RegMask Matcher::divI_proj_mask() { | 1427 new_memory = new (C) indIndexScale_win95_safeOper(memory->scale()); 1428 break; 1429 case INDINDEXSCALEOFFSET: 1430 new_memory = new (C) indIndexScaleOffset_win95_safeOper(memory->scale(), memory->disp(NULL, NULL, 0)); 1431 break; 1432 case LOAD_LONG_INDIRECT: 1433 case LOAD_LONG_INDOFFSET32: 1434 // Does not use EBP as address register, use { EDX, EBX, EDI, ESI} 1435 return; 1436 default: 1437 assert(false, "unexpected memory operand in pd_implicit_null_fixup()"); 1438 return; 1439 } 1440 node->_opnds[opcnt] = new_memory; 1441 } 1442 1443 // Advertise here if the CPU requires explicit rounding operations 1444 // to implement the UseStrictFP mode. 1445 const bool Matcher::strict_fp_requires_explicit_rounding = true; 1446 1447 // Do floats are conerted to double when stored to stack during deoptimization. 1448 // On x32 it is stored with convertion only when FPU is used (UseSSE == 0). 1449 bool Matcher::float_in_double() { return (UseSSE == 0); } 1450 1451 // Do ints take an entire long register or just half? 1452 const bool Matcher::int_in_long = false; 1453 1454 // Return whether or not this register is ever used as an argument. This 1455 // function is used on startup to build the trampoline stubs in generateOptoStub. 1456 // Registers not mentioned will be killed by the VM call in the trampoline, and 1457 // arguments in those registers not be available to the callee. 1458 bool Matcher::can_be_java_arg( int reg ) { 1459 if( reg == ECX_num || reg == EDX_num ) return true; 1460 if( (reg == XMM0a_num || reg == XMM1a_num) && UseSSE>=1 ) return true; 1461 if( (reg == XMM0b_num || reg == XMM1b_num) && UseSSE>=2 ) return true; 1462 return false; 1463 } 1464 1465 bool Matcher::is_spillable_arg( int reg ) { 1466 return can_be_java_arg(reg); 1467 } 1468 1469 // Register for DIVI projection of divmodI 1470 RegMask Matcher::divI_proj_mask() { |