/* src/vm/jit/i386/icm_uses_reg_res.inc - Table for reserved register usage
- Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
- R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
- C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
- Institut f. Computersprachen - TU Wien
+ Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+ E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+ J. Wenninger, Institut f. Computersprachen - TU Wien
This file is part of CACAO.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- 02111-1307, USA.
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
- Contact: cacao@complang.tuwien.ac.at
+ Contact: cacao@cacaojvm.org
Authors: Christian Ullrich
*/
#define NO 0 /* Register survives this ICMD */
-#define S 1 /* Register can not be an source operand */
-#define D 2 /* Register can not be an destination operand */
+#define S 1 /* Register can not be a source operand */
+#define D 2 /* Register can not be a destination operand */
#define YES 4 /* Register does not survive this ICMD */
int lsra_reg_res[REG_RES_CNT]={EAX, ECX, EDX};
{ S|YES, S|YES, S|YES, REG_NULL}, /* ICMD_SASTORE */
{ NO, NO, NO, REG_NULL}, /* ICMD_POP */
{ NO, NO, NO, REG_NULL}, /* ICMD_POP2 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP_X1 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP_X2 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP2 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP2_X1 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_DUP2_X2 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_SWAP */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP_X1 */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP_X2 */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP2 */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP2_X1 */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_DUP2_X2 */
+{YES|S|D,NO, NO, REG_NULL}, /* ICMD_SWAP */
{ S|YES, NO, NO, REG_NULL}, /* ICMD_IADD */
{ S|YES, NO, NO, REG_NULL}, /* ICMD_LADD */
{ NO, NO, NO, REG_NULL}, /* ICMD_FADD */
{ YES, YES, YES, REG_NULL}, /* ICMD_RETURN */
{ S|YES, S|YES, S|YES, EAX}, /* ICMD_GETSTATIC*/
{ S|YES, S|YES, S|YES, REG_NULL}, /* ICMD_PUTSTATIC*/
-{ YES, S|YES, NO, REG_NULL}, /* ICMD_GETFIELD */
-{ S|YES, S|YES, NO, REG_NULL}, /* ICMD_PUTFIELD */
+{ S|YES, S|YES, S|YES, EAX}, /* ICMD_GETFIELD */
+{ S|YES, S|YES, S|YES, REG_NULL}, /* ICMD_PUTFIELD */
{ S|YES, YES, YES, EAX}, /* ICMD_INVOKEVIRTUAL */
{ S|YES, YES, YES, EAX}, /* ICMD_INVOKESPECIAL */
{ S|YES, YES, YES, EAX}, /* ICMD_INVOKESTATIC */
{ S|YES, YES, YES, EAX}, /* ICMD_INVOKEINTERFACE*/
-{ NO, NO, NO, REG_NULL}, /* ICMD_CHECKASIZE */
+{ NO, NO, NO, REG_NULL}, /* UNDEF186 */
{ YES, YES, YES, REG_NULL}, /* ICMD_NEW */
{ YES, YES, YES, REG_NULL}, /* ICMD_NEWARRAY */
{ YES, YES, YES, REG_NULL}, /* ICMD_ANEWARRAY */
{ YES, YES, YES, REG_NULL}, /* ICMD_ATHROW */
{ YES, S|YES, S|YES, REG_NULL}, /* ICMD_CHECKCAST */
/* { S|D|YES, S|D|YES, S|D|YES, REG_NULL}, */ /* ICMD_CHECKCAST */
-{ D|YES, D|YES, YES, REG_NULL}, /* ICMD_INSTANCEOF */
+{ S|D|YES, S|D|YES, S|D|YES, REG_NULL}, /* ICMD_INSTANCEOF */
/*{ S|D|YES, S|D|YES, S|D|YES, REG_NULL}, */ /* ICMD_INSTANCEOF */
{ YES, YES, YES, REG_NULL}, /* ICMD_MONITORENTER */
{ YES, YES, YES, REG_NULL}, /* ICMD_MONITOREXIT */
{ YES, YES, YES, REG_NULL}, /* ICMD_UNDEF200 */
{ YES, YES, YES, REG_NULL}, /* ICMD_UNDEF201 */
{ YES, YES, YES, REG_NULL}, /* ICMD_UNDEF202 */
-{ YES, NO, NO, REG_NULL}, /* ICMD_CHECKEXCEPTION */
+{ NO, NO, NO, REG_NULL}, /* UNDEF203 */
{ S|YES, S|YES, NO, REG_NULL}, /* ICMD_IASTORECONST */
{ S|YES, S|YES, NO, REG_NULL}, /* ICMD_LASTORECONST */
{ S|YES, S|YES, YES, REG_NULL}, /* ICMD_FASTORECONST */
{ S|YES, S|YES, NO, REG_NULL}, /* ICMD_CASTORECONST */
{ S|YES, S|YES, NO, REG_NULL}, /* ICMD_SASTORECONST */
{ S|YES, S|YES, S|YES, REG_NULL}, /* ICMD_PUTSTATICCONST */
-{ YES, NO, NO, REG_NULL}, /* ICMD_PUTFIELDCONST */
+{ S|YES, S|YES, S|YES, REG_NULL}, /* ICMD_PUTFIELDCONST */
{ YES, YES, YES, REG_NULL}, /* ICMD_IMULPOW2 */
{ YES, YES, YES, REG_NULL}, /* ICMD_LMULPOW2 */
{ NO, NO, NO, REG_NULL}, /* "UNDEF216" */