diff -r eaa43f765cbd -r 06a0015b6a5c jitcraft/BytecodeEmitter.h --- a/jitcraft/BytecodeEmitter.h Fri Jul 20 00:03:10 2012 -0700 +++ b/jitcraft/BytecodeEmitter.h Mon Jul 23 01:19:44 2012 -0700 @@ -364,6 +364,7 @@ writeUint32(index); writeUint32(argc); } + void getarray(PrimitiveType type) { switch (type) { case PrimitiveType_Float: @@ -392,6 +393,43 @@ break; } } + + void getglobal(Variable *var) { + ensure(OP_GETGLOBAL_F_LENGTH); + if (var->type()->isPrimitive()) { + switch (var->type()->primitive()) { + case PrimitiveType_Float: + writeOp(OP_GETGLOBAL_F); + break; + default: + assert(var->type()->primitive() == PrimitiveType_Int32); + writeOp(OP_GETGLOBAL_I); + break; + } + } else { + writeOp(OP_GETGLOBAL_O); + markOop(1); + } + writeUint32(var->slot()); + } + void setglobal(Variable *var) { + ensure(OP_SETGLOBAL_F_LENGTH); + if (var->type()->isPrimitive()) { + switch (var->type()->primitive()) { + case PrimitiveType_Float: + writeOp(OP_SETGLOBAL_F); + break; + default: + assert(var->type()->primitive() == PrimitiveType_Int32); + writeOp(OP_SETGLOBAL_I); + break; + } + } else { + writeOp(OP_SETGLOBAL_O); + } + writeUint32(var->slot()); + } + void getarray_o() { singleByteOp(OP_GETARRAY_O); markOop(1); @@ -408,10 +446,11 @@ void cvt_i2f() { singleByteOp(OP_CVT_I2F); } - void newarray_lifo(Handle map) { + void newarray(Handle map, Heap::Tenure tenure) { recordOops(); - ensure(OP_NEWARRAY_LIFO_LENGTH); - writeOp(OP_NEWARRAY_LIFO); + ensure(OP_NEWARRAY_LENGTH); + writeOp(OP_NEWARRAY); + writeUint8(tenure); writeObject(map); markOop(1); }