/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#ifndef CPU_X86_VM_C1_LINEARSCAN_X86_HPP
#define CPU_X86_VM_C1_LINEARSCAN_X86_HPP
#ifndef _LP64
// rsp and rbp (numbers 6 ancd 7) are ignored
#else
// rsp and rbp, r10, r15 (numbers [12,15]) are ignored
// r12 (number 11) is conditional on compressed oops.
#endif // _LP64
}
// Intel requires two cpu registers for long,
// but requires only one fpu register for double
return 2;
}
return 1;
}
return false;
}
return true; // no callee-saved registers on Intel
}
case lir_tan:
case lir_sin:
case lir_cos: {
// The slow path for these functions may need to save and
// restore all live registers but we don't want to save and
// restore everything all the time, so mark the xmms as being
// killed. If the slow path were explicit or we could propagate
// live register masks down to the assembly we could do better
// but we don't have any easy way to do that right now. We
// could also consider not killing all xmm registers if we
// assume that slow paths are uncommon but it's not clear that
// would be a good idea.
if (UseSSE > 0) {
#ifndef PRODUCT
if (TraceLinearScanLevel >= 2) {
}
#endif
}
}
break;
}
}
}
// Implementation of LinearScanWalker
return true;
return true;
}
return false;
}
private:
int _pos;
// unified bailout support
// Helper functions for handling operations
void insert_exchange(int offset);
void insert_free(int offset);
#ifndef PRODUCT
#endif
// Helper functions for merging of fpu stacks
public:
void allocate();
};
#endif // CPU_X86_VM_C1_LINEARSCAN_X86_HPP