src/cpu/x86/vm/x86_32.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6910664 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/x86_32.ad

Print this page




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() {


src/cpu/x86/vm/x86_32.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File